Index: uspace/app/mkfat/fat.h
===================================================================
--- uspace/app/mkfat/fat.h	(revision bfcde8d08830f25b13793d8932112e93ed8b129d)
+++ uspace/app/mkfat/fat.h	(revision ed9bf14ea271bb6fd2ede343dbda94e25b021c6e)
@@ -43,4 +43,5 @@
 #define FAT16_CLST_MAX    65525
 
+#define FATAUTO	0
 #define FAT12	12
 #define FAT16	16
Index: uspace/app/mkfat/mkfat.c
===================================================================
--- uspace/app/mkfat/mkfat.c	(revision bfcde8d08830f25b13793d8932112e93ed8b129d)
+++ uspace/app/mkfat/mkfat.c	(revision ed9bf14ea271bb6fd2ede343dbda94e25b021c6e)
@@ -102,5 +102,5 @@
 	cfg.addt_res_sectors = 0;
 	cfg.root_ent_max = 128;
-	cfg.fat_type = FAT16;
+	cfg.fat_type = FATAUTO;
 
 	if (argc < 2) {
@@ -189,5 +189,6 @@
 	}
 
-	if (cfg.fat_type != FAT12 && cfg.fat_type != FAT16 && cfg.fat_type != FAT32) {
+	if (cfg.fat_type != FATAUTO && cfg.fat_type != FAT12 && cfg.fat_type != FAT16 &&
+	    cfg.fat_type != FAT32) {
 		printf(NAME ": Error. Unknown FAT type.\n");
 		return 2;
@@ -247,9 +248,20 @@
 	    cfg->sectors_per_cluster);
 
-	if ((cfg->fat_type == FAT12 && cfg->total_clusters > FAT12_CLST_MAX) ||
-	    (cfg->fat_type == FAT16 && (cfg->total_clusters <= FAT12_CLST_MAX ||
-	    cfg->total_clusters > FAT16_CLST_MAX)) ||
-	    (cfg->fat_type == FAT32 && cfg->total_clusters <= FAT16_CLST_MAX))
-		return ENOSPC;
+	if (cfg->total_clusters <= FAT12_CLST_MAX) {
+		if (cfg->fat_type == FATAUTO)
+			cfg->fat_type = FAT12;
+		else if (cfg->fat_type != FAT12)
+			return EINVAL;
+	} else if (cfg->total_clusters <= FAT16_CLST_MAX) {
+		if (cfg->fat_type == FATAUTO)
+			cfg->fat_type = FAT16;
+		else if (cfg->fat_type != FAT16)
+			return EINVAL;
+	} else {
+		if (cfg->fat_type == FATAUTO)
+			cfg->fat_type = FAT32;
+		else if (cfg->fat_type != FAT32)
+			return EINVAL;
+	}
 
 	fat_bytes = div_round_up((cfg->total_clusters + 2) *
