Index: tools/mkfat.py
===================================================================
--- tools/mkfat.py	(revision 0be3e8beefa6bc22baebe98fe92dd97f1c2df2b7)
+++ tools/mkfat.py	(revision a248234a30adc5681ab45d6e06d45288a41a042c)
@@ -139,5 +139,5 @@
 	char ext[3]                /* file extension */
 	uint8_t attr               /* file attributes */
-	padding[1]                 /* reserved for NT */
+	uint8_t lcase              /* file name case (NT extension) */
 	uint8_t ctime_fine         /* create time (fine resolution) */
 	uint16_t ctime             /* create time */
@@ -218,4 +218,5 @@
 		dir_entry.attr = 0x20
 	
+	dir_entry.lcase = 0x18
 	dir_entry.ctime_fine = 0 # FIXME
 	dir_entry.ctime = 0 # FIXME
Index: uspace/srv/fs/fat/fat_dentry.c
===================================================================
--- uspace/srv/fs/fat/fat_dentry.c	(revision 0be3e8beefa6bc22baebe98fe92dd97f1c2df2b7)
+++ uspace/srv/fs/fat/fat_dentry.c	(revision a248234a30adc5681ab45d6e06d45288a41a042c)
@@ -115,16 +115,23 @@
 void fat_dentry_name_get(const fat_dentry_t *d, char *buf)
 {
-	int i;
-
+	unsigned int i;
+	
 	for (i = 0; i < FAT_NAME_LEN; i++) {
 		if (d->name[i] == FAT_PAD)
 			break;
+		
 		if (d->name[i] == FAT_DENTRY_E5_ESC)
 			*buf++ = 0xe5;
-		else
-			*buf++ = d->name[i];
-	}
+		else {
+			if (d->lcase & FAT_LCASE_LOWER_NAME)
+				*buf++ = tolower(d->name[i]);
+			else
+				*buf++ = d->name[i];
+		}
+	}
+	
 	if (d->ext[0] != FAT_PAD)
 		*buf++ = '.';
+	
 	for (i = 0; i < FAT_EXT_LEN; i++) {
 		if (d->ext[i] == FAT_PAD) {
@@ -132,9 +139,15 @@
 			return;
 		}
+		
 		if (d->ext[i] == FAT_DENTRY_E5_ESC)
 			*buf++ = 0xe5;
-		else
-			*buf++ = d->ext[i];
-	}
+		else {
+			if (d->lcase & FAT_LCASE_LOWER_EXT)
+				*buf++ = tolower(d->ext[i]);
+			else
+				*buf++ = d->ext[i];
+		}
+	}
+	
 	*buf = '\0';
 }
@@ -142,8 +155,9 @@
 void fat_dentry_name_set(fat_dentry_t *d, const char *name)
 {
-	int i;
+	unsigned int i;
 	const char fake_ext[] = "   ";
-
-
+	bool lower_name = true;
+	bool lower_ext = true;
+	
 	for (i = 0; i < FAT_NAME_LEN; i++) {
 		switch ((uint8_t) *name) {
@@ -157,10 +171,17 @@
 			break;
 		default:
+			if (isalpha(*name)) {
+				if (!islower(*name))
+					lower_name = false;
+			}
+			
 			d->name[i] = toupper(*name++);
 			break;
 		}
 	}
+	
 	if (*name++ != '.')
 		name = fake_ext;
+	
 	for (i = 0; i < FAT_EXT_LEN; i++) {
 		switch ((uint8_t) *name) {
@@ -173,8 +194,23 @@
 			break;
 		default:
+			if (isalpha(*name)) {
+				if (!islower(*name))
+					lower_ext = false;
+			}
+			
 			d->ext[i] = toupper(*name++);
 			break;
 		}
 	}
+	
+	if (lower_name)
+		d->lcase |= FAT_LCASE_LOWER_NAME;
+	else
+		d->lcase &= ~FAT_LCASE_LOWER_NAME;
+	
+	if (lower_ext)
+		d->lcase |= FAT_LCASE_LOWER_EXT;
+	else
+		d->lcase &= ~FAT_LCASE_LOWER_EXT;
 }
 
Index: uspace/srv/fs/fat/fat_dentry.h
===================================================================
--- uspace/srv/fs/fat/fat_dentry.h	(revision 0be3e8beefa6bc22baebe98fe92dd97f1c2df2b7)
+++ uspace/srv/fs/fat/fat_dentry.h	(revision a248234a30adc5681ab45d6e06d45288a41a042c)
@@ -48,4 +48,7 @@
 #define FAT_ATTR_SUBDIR		(1 << 4)
 
+#define FAT_LCASE_LOWER_NAME	0x08
+#define FAT_LCASE_LOWER_EXT	0x10
+
 #define FAT_PAD			' ' 
 
@@ -66,5 +69,5 @@
 	uint8_t		ext[3];
 	uint8_t		attr;
-	uint8_t		reserved;
+	uint8_t		lcase;
 	uint8_t		ctime_fine;
 	uint16_t	ctime;
