Index: uspace/srv/fs/fat/Makefile
===================================================================
--- uspace/srv/fs/fat/Makefile	(revision beb17734651364792b1eac56ccfeb343689a4205)
+++ uspace/srv/fs/fat/Makefile	(revision 95b730c2989ef950189f5439eebbd7fcc3dc2dc8)
@@ -32,10 +32,14 @@
 LIBC_PREFIX = ../../../lib/libc
 LIBFS_PREFIX = ../../../lib/libfs
+LIBBLOCK_PREFIX = ../../../lib/libblock
 SOFTINT_PREFIX = ../../../lib/softint
 include $(LIBC_PREFIX)/Makefile.toolchain
 
-CFLAGS += -I $(LIBFS_PREFIX)
+CFLAGS += -I $(LIBFS_PREFIX) -I $(LIBBLOCK_PREFIX)
 
-LIBS = $(LIBC_PREFIX)/libc.a $(LIBFS_PREFIX)/libfs.a
+LIBS = \
+	$(LIBC_PREFIX)/libc.a \
+	$(LIBFS_PREFIX)/libfs.a \
+	$(LIBBLOCK_PREFIX)/libblock.a
 
 ## Sources
Index: uspace/srv/fs/fat/fat.h
===================================================================
--- uspace/srv/fs/fat/fat.h	(revision beb17734651364792b1eac56ccfeb343689a4205)
+++ uspace/srv/fs/fat/fat.h	(revision 95b730c2989ef950189f5439eebbd7fcc3dc2dc8)
@@ -198,14 +198,4 @@
 } fat_node_t;
 
-/* TODO move somewhere else */
-typedef struct block {
-	void *data;
-	size_t size;
-	bool dirty;
-} block_t;
-
-extern block_t *block_get(dev_handle_t, off_t, size_t);
-extern void block_put(block_t *);
-
 extern fs_reg_t fat_reg;
 
Index: uspace/srv/fs/fat/fat_fat.c
===================================================================
--- uspace/srv/fs/fat/fat_fat.c	(revision beb17734651364792b1eac56ccfeb343689a4205)
+++ uspace/srv/fs/fat/fat_fat.c	(revision 95b730c2989ef950189f5439eebbd7fcc3dc2dc8)
@@ -41,4 +41,5 @@
 #include "../../vfs/vfs.h"
 #include <libfs.h>
+#include <libblock.h>
 #include <errno.h>
 #include <byteorder.h>
Index: uspace/srv/fs/fat/fat_ops.c
===================================================================
--- uspace/srv/fs/fat/fat_ops.c	(revision beb17734651364792b1eac56ccfeb343689a4205)
+++ uspace/srv/fs/fat/fat_ops.c	(revision 95b730c2989ef950189f5439eebbd7fcc3dc2dc8)
@@ -41,4 +41,5 @@
 #include "../../vfs/vfs.h"
 #include <libfs.h>
+#include <libblock.h>
 #include <ipc/ipc.h>
 #include <ipc/services.h>
@@ -60,46 +61,4 @@
 /** List of cached free FAT nodes. */
 static LIST_INITIALIZE(ffn_head);
-
-static int dev_phone = -1;		/* FIXME */
-static void *dev_buffer = NULL;		/* FIXME */
-
-block_t *block_get(dev_handle_t dev_handle, off_t offset, size_t bs)
-{
-	/* FIXME */
-	block_t *b;
-	off_t bufpos = 0;
-	size_t buflen = 0;
-	off_t pos = offset * bs;
-
-	assert(dev_phone != -1);
-	assert(dev_buffer);
-
-	b = malloc(sizeof(block_t));
-	if (!b)
-		return NULL;
-	
-	b->data = malloc(bs);
-	if (!b->data) {
-		free(b);
-		return NULL;
-	}
-	b->size = bs;
-
-	if (!libfs_blockread(dev_phone, dev_buffer, &bufpos, &buflen, &pos,
-	    b->data, bs, bs)) {
-		free(b->data);
-		free(b);
-		return NULL;
-	}
-
-	return b;
-}
-
-void block_put(block_t *block)
-{
-	/* FIXME */
-	free(block->data);
-	free(block);
-}
 
 static void fat_node_initialize(fat_node_t *node)
Index: uspace/srv/fs/tmpfs/Makefile
===================================================================
--- uspace/srv/fs/tmpfs/Makefile	(revision beb17734651364792b1eac56ccfeb343689a4205)
+++ uspace/srv/fs/tmpfs/Makefile	(revision 95b730c2989ef950189f5439eebbd7fcc3dc2dc8)
@@ -32,10 +32,14 @@
 LIBC_PREFIX = ../../../lib/libc
 LIBFS_PREFIX = ../../../lib/libfs
+LIBBLOCK_PREFIX = ../../../lib/libblock
 SOFTINT_PREFIX = ../../../lib/softint
 include $(LIBC_PREFIX)/Makefile.toolchain
 
-CFLAGS += -I $(LIBFS_PREFIX)
+CFLAGS += -I $(LIBFS_PREFIX) -I $(LIBBLOCK_PREFIX)
 
-LIBS = $(LIBC_PREFIX)/libc.a $(LIBFS_PREFIX)/libfs.a
+LIBS = \
+	$(LIBC_PREFIX)/libc.a \
+	$(LIBFS_PREFIX)/libfs.a \
+	$(LIBBLOCK_PREFIX)/libblock.a
 
 ## Sources
Index: uspace/srv/fs/tmpfs/tmpfs_dump.c
===================================================================
--- uspace/srv/fs/tmpfs/tmpfs_dump.c	(revision beb17734651364792b1eac56ccfeb343689a4205)
+++ uspace/srv/fs/tmpfs/tmpfs_dump.c	(revision 95b730c2989ef950189f5439eebbd7fcc3dc2dc8)
@@ -46,5 +46,5 @@
 #include <sys/types.h>
 #include <as.h>
-#include <libfs.h>
+#include <libblock.h>
 #include <ipc/services.h>
 #include <ipc/devmap.h>
@@ -71,5 +71,5 @@
 		uint32_t size;
 		
-		if (!libfs_blockread(phone, block, bufpos, buflen, pos, &entry,
+		if (!blockread(phone, block, bufpos, buflen, pos, &entry,
 		    sizeof(entry), TMPFS_BLOCK_SIZE))
 			return false;
@@ -91,6 +91,6 @@
 			}
 			
-			if (!libfs_blockread(phone, block, bufpos, buflen, pos,
-			    fname, entry.len, TMPFS_BLOCK_SIZE)) {
+			if (!blockread(phone, block, bufpos, buflen, pos, fname,
+			    entry.len, TMPFS_BLOCK_SIZE)) {
 				ops->destroy((void *) node);
 				free(fname);
@@ -106,6 +106,6 @@
 			free(fname);
 			
-			if (!libfs_blockread(phone, block, bufpos, buflen, pos,
-			    &size, sizeof(size), TMPFS_BLOCK_SIZE))
+			if (!blockread(phone, block, bufpos, buflen, pos, &size,
+			    sizeof(size), TMPFS_BLOCK_SIZE))
 				return false;
 			
@@ -117,5 +117,5 @@
 			
 			node->size = size;
-			if (!libfs_blockread(phone, block, bufpos, buflen, pos,
+			if (!blockread(phone, block, bufpos, buflen, pos,
 			    node->data, size, TMPFS_BLOCK_SIZE))
 				return false;
@@ -133,6 +133,6 @@
 			}
 			
-			if (!libfs_blockread(phone, block, bufpos, buflen, pos,
-			    fname, entry.len, TMPFS_BLOCK_SIZE)) {
+			if (!blockread(phone, block, bufpos, buflen, pos, fname,
+			    entry.len, TMPFS_BLOCK_SIZE)) {
 				ops->destroy((void *) node);
 				free(fname);
@@ -188,5 +188,5 @@
 	
 	char tag[6];
-	if (!libfs_blockread(phone, block, &bufpos, &buflen, &pos, tag, 5,
+	if (!blockread(phone, block, &bufpos, &buflen, &pos, tag, 5,
 	    TMPFS_BLOCK_SIZE))
 		goto error;
