Index: uspace/srv/fs/exfat/exfat_bitmap.c
===================================================================
--- uspace/srv/fs/exfat/exfat_bitmap.c	(revision 5d5863ccd79dd1ce2ef86c5426aadb1dd94a98ea)
+++ uspace/srv/fs/exfat/exfat_bitmap.c	(revision 25c60f4e31eed4c7355c6d2aa86ca7f9ca81851a)
@@ -52,11 +52,4 @@
     exfat_cluster_t clst)
 {
-	/* TODO */
-	return EOK;
-}
-
-int bitmap_set_cluster(exfat_bs_t *bs, devmap_handle_t devmap_handle, 
-    exfat_cluster_t firstc)
-{
 	fs_node_t *fn;
 	block_t *b=NULL;
@@ -64,8 +57,8 @@
 	uint8_t *bitmap;
 	int rc;
-
-	firstc -= EXFAT_CLST_FIRST;
-	
-	/* rc = exfat_node_get(&fn, devmap_handle, EXFAT_BITMAP_IDX); */
+	bool alloc;
+
+	clst -= EXFAT_CLST_FIRST;
+	
 	rc = exfat_bitmap_get(&fn, devmap_handle);
 	if (rc != EOK)
@@ -73,5 +66,5 @@
 	bitmapp = EXFAT_NODE(fn);
 	
-	aoff64_t offset = firstc / 8;
+	aoff64_t offset = clst / 8;
 	rc = exfat_block_get(&b, bs, bitmapp, offset / BPS(bs), BLOCK_FLAGS_NONE);
 	if (rc != EOK) {
@@ -80,5 +73,45 @@
 	}
 	bitmap = (uint8_t *)b->data;
-	bitmap[offset % BPS(bs)] |= (1 << (firstc % 8));
+	alloc = bitmap[offset % BPS(bs)] & (1 << (clst % 8));
+
+	rc = block_put(b);
+	if (rc != EOK) {
+		(void) exfat_node_put(fn);
+		return rc;
+	}
+	rc = exfat_node_put(fn);
+	if (rc != EOK)
+		return rc;
+
+	if (alloc)
+		return ENOENT;
+
+	return EOK;
+}
+
+int bitmap_set_cluster(exfat_bs_t *bs, devmap_handle_t devmap_handle, 
+    exfat_cluster_t clst)
+{
+	fs_node_t *fn;
+	block_t *b=NULL;
+	exfat_node_t *bitmapp;
+	uint8_t *bitmap;
+	int rc;
+
+	clst -= EXFAT_CLST_FIRST;
+	
+	rc = exfat_bitmap_get(&fn, devmap_handle);
+	if (rc != EOK)
+		return rc;
+	bitmapp = EXFAT_NODE(fn);
+	
+	aoff64_t offset = clst / 8;
+	rc = exfat_block_get(&b, bs, bitmapp, offset / BPS(bs), BLOCK_FLAGS_NONE);
+	if (rc != EOK) {
+		(void) exfat_node_put(fn);
+		return rc;
+	}
+	bitmap = (uint8_t *)b->data;
+	bitmap[offset % BPS(bs)] |= (1 << (clst % 8));
 
 	b->dirty = true;
@@ -93,8 +126,36 @@
 
 int bitmap_clear_cluster(exfat_bs_t *bs, devmap_handle_t devmap_handle, 
-    exfat_cluster_t firstc)
-{
-	/* TODO */
-	return EOK;
+    exfat_cluster_t clst)
+{
+	fs_node_t *fn;
+	block_t *b=NULL;
+	exfat_node_t *bitmapp;
+	uint8_t *bitmap;
+	int rc;
+
+	clst -= EXFAT_CLST_FIRST;
+	
+	rc = exfat_bitmap_get(&fn, devmap_handle);
+	if (rc != EOK)
+		return rc;
+	bitmapp = EXFAT_NODE(fn);
+	
+	aoff64_t offset = clst / 8;
+	rc = exfat_block_get(&b, bs, bitmapp, offset / BPS(bs), BLOCK_FLAGS_NONE);
+	if (rc != EOK) {
+		(void) exfat_node_put(fn);
+		return rc;
+	}
+	bitmap = (uint8_t *)b->data;
+	bitmap[offset % BPS(bs)] &= ~(1 << (clst % 8));
+
+	b->dirty = true;
+	rc = block_put(b);
+	if (rc != EOK) {
+		(void) exfat_node_put(fn);
+		return rc;
+	}
+	
+	return exfat_node_put(fn);
 }
 
Index: uspace/srv/fs/exfat/exfat_bitmap.h
===================================================================
--- uspace/srv/fs/exfat/exfat_bitmap.h	(revision 5d5863ccd79dd1ce2ef86c5426aadb1dd94a98ea)
+++ uspace/srv/fs/exfat/exfat_bitmap.h	(revision 25c60f4e31eed4c7355c6d2aa86ca7f9ca81851a)
@@ -53,7 +53,8 @@
     exfat_cluster_t clst);
 extern int bitmap_set_cluster(struct exfat_bs *bs, devmap_handle_t devmap_handle, 
-    exfat_cluster_t firstc);
+    exfat_cluster_t clst);
 extern int bitmap_clear_cluster(struct exfat_bs *bs, devmap_handle_t devmap_handle, 
-    exfat_cluster_t firstc);
+    exfat_cluster_t clst);
+
 extern int bitmap_set_clusters(struct exfat_bs *bs, devmap_handle_t devmap_handle, 
     exfat_cluster_t firstc, exfat_cluster_t count);
