Index: uspace/srv/fs/fat/fat_fat.c
===================================================================
--- uspace/srv/fs/fat/fat_fat.c	(revision 7a23d608cbb99296cbb7a611ef7824d57ee7210a)
+++ uspace/srv/fs/fat/fat_fat.c	(revision 6da81e0c60d843f4695eea9a49c54c89e3d2535f)
@@ -160,5 +160,5 @@
 fall_through:
 	return _fat_block_get(block, bs, nodep->idx->dev_handle, nodep->firstc,
-	    bn, flags);
+	    NULL, bn, flags);
 }
 
@@ -168,6 +168,9 @@
  * @param bs		Buffer holding the boot sector of the file system.
  * @param dev_handle	Device handle of the file system.
- * @param firstc	First cluster used by the file. Can be zero if the file
+ * @param fcl		First cluster used by the file. Can be zero if the file
  *			is empty.
+ * @param clp		If not NULL, address where the cluster containing bn
+ *			will be stored.
+ *			stored 
  * @param bn		Block number.
  * @param flags		Flags passed to libblock.
@@ -177,9 +180,9 @@
 int
 _fat_block_get(block_t **block, fat_bs_t *bs, dev_handle_t dev_handle,
-    fat_cluster_t firstc, aoff64_t bn, int flags)
+    fat_cluster_t fcl, fat_cluster_t *clp, aoff64_t bn, int flags)
 {
 	uint16_t clusters;
 	unsigned max_clusters;
-	fat_cluster_t lastc;
+	fat_cluster_t c;
 	int rc;
 
@@ -187,8 +190,8 @@
 	 * This function can only operate on non-zero length files.
 	 */
-	if (firstc == FAT_CLST_RES0)
+	if (fcl == FAT_CLST_RES0)
 		return ELIMIT;
 
-	if (firstc == FAT_CLST_ROOT) {
+	if (fcl == FAT_CLST_ROOT) {
 		/* root directory special case */
 		assert(bn < RDS(bs));
@@ -199,11 +202,13 @@
 
 	max_clusters = bn / SPC(bs);
-	rc = fat_cluster_walk(bs, dev_handle, firstc, &lastc, &clusters,
-	    max_clusters);
+	rc = fat_cluster_walk(bs, dev_handle, fcl, &c, &clusters, max_clusters);
 	if (rc != EOK)
 		return rc;
 	assert(clusters == max_clusters);
 
-	rc = block_get(block, dev_handle, CLBN2PBN(bs, lastc, bn), flags);
+	rc = block_get(block, dev_handle, CLBN2PBN(bs, c, bn), flags);
+
+	if (clp)
+		*clp = c;
 
 	return rc;
@@ -251,5 +256,5 @@
 	for (o = boundary; o < pos; o += BPS(bs)) {
 		rc = _fat_block_get(&b, bs, nodep->idx->dev_handle, mcl,
-		    (o - boundary) / BPS(bs), BLOCK_FLAGS_NOREAD);
+		    NULL, (o - boundary) / BPS(bs), BLOCK_FLAGS_NOREAD);
 		if (rc != EOK)
 			return rc;
@@ -606,5 +611,5 @@
 
 	for (i = 0; i < SPC(bs); i++) {
-		rc = _fat_block_get(&b, bs, dev_handle, c, i,
+		rc = _fat_block_get(&b, bs, dev_handle, c, NULL, i,
 		    BLOCK_FLAGS_NOREAD);
 		if (rc != EOK)
Index: uspace/srv/fs/fat/fat_fat.h
===================================================================
--- uspace/srv/fs/fat/fat_fat.h	(revision 7a23d608cbb99296cbb7a611ef7824d57ee7210a)
+++ uspace/srv/fs/fat/fat_fat.h	(revision 6da81e0c60d843f4695eea9a49c54c89e3d2535f)
@@ -67,5 +67,5 @@
     aoff64_t, int);
 extern int _fat_block_get(block_t **, struct fat_bs *, dev_handle_t,
-    fat_cluster_t, aoff64_t, int);
+    fat_cluster_t, fat_cluster_t *, aoff64_t, int);
 
 extern int fat_append_clusters(struct fat_bs *, struct fat_node *,
Index: uspace/srv/fs/fat/fat_ops.c
===================================================================
--- uspace/srv/fs/fat/fat_ops.c	(revision 7a23d608cbb99296cbb7a611ef7824d57ee7210a)
+++ uspace/srv/fs/fat/fat_ops.c	(revision 6da81e0c60d843f4695eea9a49c54c89e3d2535f)
@@ -121,5 +121,5 @@
 	/* Read the block that contains the dentry of interest. */
 	rc = _fat_block_get(&b, bs, node->idx->dev_handle, node->idx->pfc,
-	    (node->idx->pdi * sizeof(fat_dentry_t)) / BPS(bs),
+	    NULL, (node->idx->pdi * sizeof(fat_dentry_t)) / BPS(bs),
 	    BLOCK_FLAGS_NONE);
 	if (rc != EOK)
@@ -299,5 +299,5 @@
 
 	/* Read the block that contains the dentry of interest. */
-	rc = _fat_block_get(&b, bs, idxp->dev_handle, idxp->pfc,
+	rc = _fat_block_get(&b, bs, idxp->dev_handle, idxp->pfc, NULL,
 	    (idxp->pdi * sizeof(fat_dentry_t)) / BPS(bs), BLOCK_FLAGS_NONE);
 	if (rc != EOK) {
@@ -799,5 +799,5 @@
 
 	rc = _fat_block_get(&b, bs, childp->idx->dev_handle, childp->idx->pfc,
-	    (childp->idx->pdi * sizeof(fat_dentry_t)) / BPS(bs),
+	    NULL, (childp->idx->pdi * sizeof(fat_dentry_t)) / BPS(bs),
 	    BLOCK_FLAGS_NONE);
 	if (rc != EOK) 
@@ -1381,5 +1381,5 @@
 			return;
 		}
-		rc = _fat_block_get(&b, bs, dev_handle, lcl,
+		rc = _fat_block_get(&b, bs, dev_handle, lcl, NULL,
 		    (pos / BPS(bs)) % SPC(bs), flags);
 		if (rc != EOK) {
