Index: uspace/srv/fs/fat/fat_fat.c
===================================================================
--- uspace/srv/fs/fat/fat_fat.c	(revision b5db2ae00615259decec56fa6dc55a7b03233dff)
+++ uspace/srv/fs/fat/fat_fat.c	(revision 979c313a026cb49f954dcd0f5f87b8e1ab956bc2)
@@ -57,4 +57,6 @@
 	(SSA((bs)) + ((cl) - FAT_CLST_FIRST) * SPC((bs)) + (bn) % SPC((bs)))
 
+#define IS_ODD(number)	(number & 0x1)
+
 /**
  * The fat_alloc_lock mutex protects all copies of the File Allocation Table
@@ -302,6 +304,4 @@
 	assert(fatno < FATCNT(bs));
 	
-	*value = 0;
-
 	if (FAT_IS_FAT12(bs))
 		offset = (clst + clst/2);
@@ -314,6 +314,6 @@
 		return rc;
 
-	/* This cluster access spans a sector boundary. Check only for FAT12 */
 	if (FAT_IS_FAT12(bs)) {
+		/* This cluster access spans a sector boundary. Check only for FAT12 */
 		if ((offset % BPS(bs) + 1 == BPS(bs))) {
 			/* Is it last sector of FAT? */
@@ -331,5 +331,5 @@
 				*/
 				*value  = *(uint8_t *)(b->data + BPS(bs) - 1);
-				*value |= *(uint8_t *)(b1->data);
+				*value |= *(uint8_t *)(b1->data) << 8;
 
 				rc = block_put(b1);
@@ -345,6 +345,8 @@
 			}
 		}
-
-		if (clst & 0x0001)
+		else
+			*value = *(uint16_t *)(b->data + offset % BPS(bs));
+
+		if (IS_ODD(clst))
 			*value = (*value) >> 4;
 		else
@@ -358,5 +360,5 @@
 	}
 
-	*value = uint16_t_le2host(*value);
+	*value = uint32_t_le2host(*value);
 	rc = block_put(b);
 
