diff --git a/exfat/libexfat/mount.c b/exfat/libexfat/mount.c
index 027f8b0..928c561 100644
--- a/exfat/libexfat/mount.c
+++ b/exfat/libexfat/mount.c
@@ -3,7 +3,7 @@
 	exFAT file system implementation library.
 
 	Free exFAT implementation.
-	Copyright (C) 2010-2014  Andrew Nayenko
+	Copyright (C) 2010-2013  Andrew Nayenko
 
 	This program is free software; you can redistribute it and/or modify
 	it under the terms of the GNU General Public License as published by
@@ -24,7 +24,6 @@
 #include <string.h>
 #include <stdlib.h>
 #include <errno.h>
-#include <inttypes.h>
 #include <unistd.h>
 #include <sys/types.h>
 
@@ -40,12 +39,6 @@
 		   to indicate this */
 		rootdir_cluster = exfat_next_cluster(ef, ef->root, rootdir_cluster);
 	}
-	if (rootdir_cluster != EXFAT_CLUSTER_END)
-	{
-		exfat_error("bad cluster %#x while reading root directory",
-				rootdir_cluster);
-		return 0;
-	}
 	return clusters * CLUSTER_SIZE(*ef->sb);
 }
 
@@ -98,7 +91,7 @@
 	ef->noatime = match_option(options, "noatime");
 }
 
-static bool verify_vbr_checksum(struct exfat_dev* dev, void* sector,
+static int verify_vbr_checksum(struct exfat_dev* dev, void* sector,
 		off64_t sector_size)
 {
 	uint32_t vbr_checksum;
@@ -107,7 +100,7 @@
 	if (exfat_pread(dev, sector, sector_size, 0) < 0)
 	{
 		exfat_error("failed to read boot sector");
-		return false;
+		return 1;
 	}
 	vbr_checksum = exfat_vbr_start_checksum(sector, sector_size);
 	for (i = 1; i < 11; i++)
@@ -115,7 +108,7 @@
 		if (exfat_pread(dev, sector, sector_size, i * sector_size) < 0)
 		{
 			exfat_error("failed to read VBR sector");
-			return false;
+			return 1;
 		}
 		vbr_checksum = exfat_vbr_add_checksum(sector, sector_size,
 				vbr_checksum);
@@ -123,16 +116,16 @@
 	if (exfat_pread(dev, sector, sector_size, i * sector_size) < 0)
 	{
 		exfat_error("failed to read VBR checksum sector");
-		return false;
+		return 1;
 	}
 	for (i = 0; i < sector_size / sizeof(vbr_checksum); i++)
 		if (le32_to_cpu(((const le32_t*) sector)[i]) != vbr_checksum)
 		{
 			exfat_error("invalid VBR checksum 0x%x (expected 0x%x)",
 					le32_to_cpu(((const le32_t*) sector)[i]), vbr_checksum);
-			return false;
+			return 1;
 		}
-	return true;
+	return 0;
 }
 
 static int commit_super_block(const struct exfat* ef)
@@ -208,6 +201,31 @@
 		exfat_error("exFAT file system is not found");
 		return -EIO;
 	}
+	if (ef->sb->version.major != 1 || ef->sb->version.minor != 0)
+	{
+		exfat_close(ef->dev);
+		exfat_error("unsupported exFAT version: %hhu.%hhu",
+				ef->sb->version.major, ef->sb->version.minor);
+		free(ef->sb);
+		return -EIO;
+	}
+	if (ef->sb->fat_count != 1)
+	{
+		exfat_close(ef->dev);
+		free(ef->sb);
+		exfat_error("unsupported FAT count: %hhu", ef->sb->fat_count);
+		return -EIO;
+	}
+	/* officially exFAT supports cluster size up to 32 MB */
+	if ((int) ef->sb->sector_bits + (int) ef->sb->spc_bits > 25)
+	{
+		exfat_close(ef->dev);
+		free(ef->sb);
+		exfat_error("too big cluster size: 2^%d",
+				(int) ef->sb->sector_bits + (int) ef->sb->spc_bits);
+		return -EIO;
+	}
+
 	ef->zero_cluster = malloc(CLUSTER_SIZE(*ef->sb));
 	if (ef->zero_cluster == NULL)
 	{
@@ -217,7 +235,8 @@
 		return -ENOMEM;
 	}
 	/* use zero_cluster as a temporary buffer for VBR checksum verification */
-	if (!verify_vbr_checksum(ef->dev, ef->zero_cluster, SECTOR_SIZE(*ef->sb)))
+	if (verify_vbr_checksum(ef->dev, ef->zero_cluster,
+			SECTOR_SIZE(*ef->sb)) != 0)
 	{
 		free(ef->zero_cluster);
 		exfat_close(ef->dev);
@@ -225,45 +244,6 @@
 		return -EIO;
 	}
 	memset(ef->zero_cluster, 0, CLUSTER_SIZE(*ef->sb));
-	if (ef->sb->version.major != 1 || ef->sb->version.minor != 0)
-	{
-		free(ef->zero_cluster);
-		exfat_close(ef->dev);
-		exfat_error("unsupported exFAT version: %hhu.%hhu",
-				ef->sb->version.major, ef->sb->version.minor);
-		free(ef->sb);
-		return -EIO;
-	}
-	if (ef->sb->fat_count != 1)
-	{
-		free(ef->zero_cluster);
-		exfat_close(ef->dev);
-		exfat_error("unsupported FAT count: %hhu", ef->sb->fat_count);
-		free(ef->sb);
-		return -EIO;
-	}
-	/* officially exFAT supports cluster size up to 32 MB */
-	if ((int) ef->sb->sector_bits + (int) ef->sb->spc_bits > 25)
-	{
-		free(ef->zero_cluster);
-		exfat_close(ef->dev);
-		exfat_error("too big cluster size: 2^%d",
-				(int) ef->sb->sector_bits + (int) ef->sb->spc_bits);
-		free(ef->sb);
-		return -EIO;
-	}
-	if (le64_to_cpu(ef->sb->sector_count) * SECTOR_SIZE(*ef->sb) >
-			exfat_get_size(ef->dev))
-	{
-		free(ef->zero_cluster);
-		exfat_error("file system is larger than underlying device: "
-				"%"PRIu64" > %"PRIu64,
-				le64_to_cpu(ef->sb->sector_count) * SECTOR_SIZE(*ef->sb),
-				exfat_get_size(ef->dev));
-		exfat_close(ef->dev);
-		free(ef->sb);
-		return -EIO;
-	}
 
 	ef->root = malloc(sizeof(struct exfat_node));
 	if (ef->root == NULL)
@@ -280,14 +260,6 @@
 	ef->root->fptr_cluster = ef->root->start_cluster;
 	ef->root->name[0] = cpu_to_le16('\0');
 	ef->root->size = rootdir_size(ef);
-	if (ef->root->size == 0)
-	{
-		free(ef->root);
-		free(ef->zero_cluster);
-		exfat_close(ef->dev);
-		free(ef->sb);
-		return -EIO;
-	}
 	/* exFAT does not have time attributes for the root directory */
 	ef->root->mtime = 0;
 	ef->root->atime = 0;
@@ -342,12 +314,11 @@
 		ef->sb->allocated_percent = ((total - free) * 100 + total / 2) / total;
 	}
 
-	commit_super_block(ef);	/* ignore return code */
+	commit_super_block(ef);
 }
 
 void exfat_unmount(struct exfat* ef)
 {
-	exfat_flush(ef);	/* ignore return code */
 	exfat_put_node(ef, ef->root);
 	exfat_reset_cache(ef);
 	free(ef->root);
