diff --git a/e2fsprogs/fsck.c b/e2fsprogs/fsck.c
index 86c78d8..3c4dabc 100644
--- a/e2fsprogs/fsck.c
+++ b/e2fsprogs/fsck.c
@@ -280,9 +280,11 @@
 	fs = xzalloc(sizeof(*fs));
 	fs->device = xstrdup(device);
 	fs->mountpt = xstrdup(mntpnt);
+	if (strchr(type, ','))
+		type = (char *)"auto";
 	fs->type = xstrdup(type);
 	fs->opts = xstrdup(opts ? opts : "");
-	fs->passno = passno;
+	fs->passno = passno < 0 ? 1 : passno;
 	/*fs->flags = 0; */
 	/*fs->next = NULL; */
 
@@ -295,130 +297,29 @@
 	return fs;
 }
 
-static void strip_line(char *line)
-{
-	char *p = line + strlen(line) - 1;
-
-	while (*line) {
-		if (*p != '\n' && *p != '\r')
-			break;
-		*p-- = '\0';
-	}
-}
-
-static char *parse_word(char **buf)
-{
-	char *word, *next;
-
-	word = *buf;
-	if (*word == '\0')
-		return NULL;
-
-	word = skip_whitespace(word);
-	next = skip_non_whitespace(word);
-	if (*next)
-		*next++ = '\0';
-	*buf = next;
-	return word;
-}
-
-static void parse_escape(char *word)
-{
-	char *q, c;
-	const char *p;
-
-	if (!word)
-		return;
-
-	for (p = q = word; *p; q++) {
-		c = *p++;
-		if (c != '\\') {
-			*q = c;
-		} else {
-			*q = bb_process_escape_sequence(&p);
-		}
-	}
-	*q = '\0';
-}
-
-static int parse_fstab_line(char *line, struct fs_info **ret_fs)
-{
-	char *device, *mntpnt, *type, *opts, *passno, *cp;
-	struct fs_info *fs;
-
-	*ret_fs = NULL;
-	strip_line(line);
-	*strchrnul(line, '#') = '\0'; /* Ignore everything after comment */
-	cp = line;
-
-	device = parse_word(&cp);
-	if (!device) return 0; /* Allow blank lines */
-	mntpnt = parse_word(&cp);
-	type = parse_word(&cp);
-	opts = parse_word(&cp);
-	/*freq =*/ parse_word(&cp);
-	passno = parse_word(&cp);
-
-	if (!mntpnt || !type)
-		return -1;
-
-	parse_escape(device);
-	parse_escape(mntpnt);
-	parse_escape(type);
-	parse_escape(opts);
-	parse_escape(passno);
-
-	if (strchr(type, ','))
-		type = NULL;
-
-	fs = create_fs_device(device, mntpnt, type ? type : "auto", opts,
-			(passno ? atoi(passno) : -1));
-	*ret_fs = fs;
-	return 0;
-}
-
 /* Load the filesystem database from /etc/fstab */
 static void load_fs_info(const char *filename)
 {
-	FILE *f;
-	int lineno = 0;
-	int old_fstab = 1;
+	FILE *fstab;
+	struct mntent mte;
 	struct fs_info *fs;
 
-	f = fopen_or_warn(filename, "r");
-	if (f == NULL) {
+	fstab = setmntent(filename, "r");
+	if (!fstab) {
+		bb_perror_msg("cannot read %s", filename);
 		return;
 	}
-	while (1) {
-		int r;
-		char *buf = xmalloc_fgetline(f);
-		if (!buf) break;
-		r = parse_fstab_line(buf, &fs);
-		free(buf);
-		lineno++;
-		if (r < 0) {
-			bb_error_msg("WARNING: bad format "
-				"on line %d of %s", lineno, filename);
-			continue;
-		}
-		if (!fs)
-			continue;
-		if (fs->passno < 0)
-			fs->passno = 0;
-		else
-			old_fstab = 0;
-	}
-	fclose(f);
 
-	if (old_fstab) {
-		fputs("\007"
-"WARNING: Your /etc/fstab does not contain the fsck passno field.\n"
-"I will kludge around things for you, but you should fix\n"
-"your /etc/fstab file as soon as you can.\n\n", stderr);
-		for (fs = filesys_info; fs; fs = fs->next) {
-			fs->passno = 1;
-		}
+	// Loop through entries
+	while (getmntent_r(fstab, &mte, bb_common_bufsiz1, COMMON_BUFSIZE)) {
+		//bb_info_msg("CREATE[%s][%s][%s][%s][%d]", mte.mnt_fsname, mte.mnt_dir,
+		//	mte.mnt_type, mte.mnt_opts, 
+		//	mte.mnt_passno);
+		fs = create_fs_device(mte.mnt_fsname, mte.mnt_dir,
+			mte.mnt_type, mte.mnt_opts, 
+			mte.mnt_passno);
 	}
+	endmntent(fstab);
 }
 
 /* Lookup filesys in /etc/fstab and return the corresponding entry. */
