Index: uspace/lib/libblock/libblock.c
===================================================================
--- uspace/lib/libblock/libblock.c	(revision 24d6efc8e72031267fcfce1174923ae8cd84c6ce)
+++ uspace/lib/libblock/libblock.c	(revision 6c8d267f6f936c9ea1e6b6c21a5dcb0e47cb7c6e)
@@ -300,5 +300,5 @@
  * @return			Block structure.
  */
-block_t *block_get(dev_handle_t dev_handle, off_t boff)
+block_t *block_get(dev_handle_t dev_handle, bn_t boff)
 {
 	devcon_t *devcon;
Index: uspace/lib/libblock/libblock.h
===================================================================
--- uspace/lib/libblock/libblock.h	(revision 24d6efc8e72031267fcfce1174923ae8cd84c6ce)
+++ uspace/lib/libblock/libblock.h	(revision 6c8d267f6f936c9ea1e6b6c21a5dcb0e47cb7c6e)
@@ -45,4 +45,6 @@
 #include <libadt/list.h>
 
+typedef unsigned bn_t;	/**< Block number type. */
+
 typedef struct block {
 	/** Futex protecting the reference count. */
@@ -57,5 +59,5 @@
 	dev_handle_t dev_handle;
 	/** Block offset on the block device. Counted in 'size'-byte blocks. */
-	off_t boff;
+	bn_t boff;
 	/** Size of the block. */
 	size_t size;
@@ -76,5 +78,5 @@
 extern int block_cache_init(dev_handle_t, size_t, unsigned);
 
-extern block_t *block_get(dev_handle_t, off_t);
+extern block_t *block_get(dev_handle_t, bn_t);
 extern void block_put(block_t *);
 
Index: uspace/srv/fs/fat/fat_fat.c
===================================================================
--- uspace/srv/fs/fat/fat_fat.c	(revision 24d6efc8e72031267fcfce1174923ae8cd84c6ce)
+++ uspace/srv/fs/fat/fat_fat.c	(revision 6c8d267f6f936c9ea1e6b6c21a5dcb0e47cb7c6e)
@@ -60,8 +60,5 @@
  * @param dev_handle	Device handle of the device with the file.
  * @param firstc	First cluster to start the walk with.
- * @param penult	If non-NULL, output argument hodling the
- * 			the penultimate cluster visited.
- * @param ult		If non-NULL, output argument holding the
- *			ultimate cluster visited.
+ * @param lastc		If non-NULL, output argument hodling the last cluster number visited.
  * @param max_clusters	Maximum number of clusters to visit.	
  *
@@ -70,5 +67,5 @@
 uint16_t 
 fat_cluster_walk(fat_bs_t *bs, dev_handle_t dev_handle, fat_cluster_t firstc,
-    fat_cluster_t *penult, fat_cluster_t *ult, uint16_t max_clusters)
+    fat_cluster_t *lastc, uint16_t max_clusters)
 {
 	block_t *b;
@@ -83,20 +80,16 @@
 	if (firstc == FAT_CLST_RES0) {
 		/* No space allocated to the file. */
-		if (ult)
-			*ult = firstc;
+		if (lastc)
+			*lastc = firstc;
 		return 0;
 	}
 
-	/* At this point, the meaning of penult is not well-defined. */
-	if (penult)
-		*penult = FAT_CLST_RES0;
-
 	while (clst < FAT_CLST_LAST1 && clusters < max_clusters) {
-		unsigned fsec;	/* sector offset relative to FAT1 */
+		bn_t fsec;	/* sector offset relative to FAT1 */
 		unsigned fidx;	/* FAT1 entry index */
 
 		assert(clst >= FAT_CLST_FIRST);
-		if (penult)
-			*penult = clst;	/* remember the penultimate cluster */
+		if (lastc)
+			*lastc = clst;	/* remember the last cluster number */
 		fsec = (clst * sizeof(fat_cluster_t)) / bps;
 		fidx = clst % (bps / sizeof(fat_cluster_t));
@@ -109,6 +102,6 @@
 	}
 
-	if (ult)
-		*ult = clst;
+	if (lastc && clst < FAT_CLST_LAST1)
+		*lastc = clst;
 
 	return clusters;
@@ -121,5 +114,5 @@
  * @param firstc	First cluster used by the file. Can be zero if the file
  *			is empty.
- * @param offset	Offset in blocks.
+ * @param bn		Block number.
  *
  * @return		Block structure holding the requested block.
@@ -127,5 +120,5 @@
 block_t *
 _fat_block_get(fat_bs_t *bs, dev_handle_t dev_handle, fat_cluster_t firstc,
-    off_t offset)
+    bn_t bn)
 {
 	block_t *b;
@@ -150,16 +143,16 @@
 	if (firstc == FAT_CLST_ROOT) {
 		/* root directory special case */
-		assert(offset < rds);
-		b = block_get(dev_handle, rscnt + bs->fatcnt * sf + offset);
+		assert(bn < rds);
+		b = block_get(dev_handle, rscnt + bs->fatcnt * sf + bn);
 		return b;
 	}
 
-	max_clusters = offset / bs->spc;
-	clusters = fat_cluster_walk(bs, dev_handle, firstc, NULL, &lastc,
+	max_clusters = bn / bs->spc;
+	clusters = fat_cluster_walk(bs, dev_handle, firstc, &lastc,
 	    max_clusters);
 	assert(clusters == max_clusters);
 
 	b = block_get(dev_handle, ssa + (lastc - FAT_CLST_FIRST) * bs->spc +
-	    offset % bs->spc);
+	    bn % bs->spc);
 
 	return b;
@@ -362,5 +355,5 @@
 
 	if (fat_cluster_walk(bs, nodep->idx->dev_handle, nodep->firstc, &lcl,
-	    NULL, (uint16_t) -1) == 0) {
+	    (uint16_t) -1) == 0) {
 		/* No clusters allocated to the node yet. */
 		nodep->firstc = host2uint16_t_le(mcl);
Index: uspace/srv/fs/fat/fat_fat.h
===================================================================
--- uspace/srv/fs/fat/fat_fat.h	(revision 24d6efc8e72031267fcfce1174923ae8cd84c6ce)
+++ uspace/srv/fs/fat/fat_fat.h	(revision 6c8d267f6f936c9ea1e6b6c21a5dcb0e47cb7c6e)
@@ -36,4 +36,5 @@
 #include "../../vfs/vfs.h"
 #include <stdint.h>
+#include <libblock.h>
 
 #define FAT1		0
@@ -59,12 +60,13 @@
 
 #define fat_clusters_get(bs, dh, fc) \
-    fat_cluster_walk((bs), (dh), (fc), NULL, NULL, (uint16_t) -1)
-#define fat_block_get(bs, np, off) \
-    _fat_block_get((bs), (np)->idx->dev_handle, (np)->firstc, (off))
+    fat_cluster_walk((bs), (dh), (fc), NULL, (uint16_t) -1)
+extern uint16_t fat_cluster_walk(struct fat_bs *, dev_handle_t, fat_cluster_t,
+    fat_cluster_t *, uint16_t);
+
+#define fat_block_get(bs, np, bn) \
+    _fat_block_get((bs), (np)->idx->dev_handle, (np)->firstc, (bn))
 
 extern struct block *_fat_block_get(struct fat_bs *, dev_handle_t,
-    fat_cluster_t, off_t);
-extern uint16_t fat_cluster_walk(struct fat_bs *, dev_handle_t, fat_cluster_t,
-    fat_cluster_t *, fat_cluster_t *, uint16_t);
+    fat_cluster_t, bn_t);
   
 extern void fat_append_clusters(struct fat_bs *, struct fat_node *,
