Index: uspace/srv/fs/minixfs/mfs.c
===================================================================
--- uspace/srv/fs/minixfs/mfs.c	(revision 953a823908dc5b5b2bd1b965af4c88c22897c626)
+++ uspace/srv/fs/minixfs/mfs.c	(revision 3b081786759db0ea0247dc07e59bb20eda2b8e3d)
@@ -38,4 +38,6 @@
  */
 
+#define _MAIN
+
 #include <ipc/services.h>
 #include <ipc/ns.h>
@@ -45,5 +47,4 @@
 #include <task.h>
 #include <stdio.h>
-#include <libfs.h>
 #include "mfs.h"
 
@@ -55,7 +56,4 @@
 	.write_retains_size = false,	
 };
-
-fs_reg_t mfs_reg;
-
 
 
@@ -104,5 +102,5 @@
 			break;
 		case VFS_OUT_MOUNT:
-			mfsdebug("Mounting...\n");
+			mfs_mount(callid, &call);
 			break;
 		default:
Index: uspace/srv/fs/minixfs/mfs.h
===================================================================
--- uspace/srv/fs/minixfs/mfs.h	(revision 953a823908dc5b5b2bd1b965af4c88c22897c626)
+++ uspace/srv/fs/minixfs/mfs.h	(revision 3b081786759db0ea0247dc07e59bb20eda2b8e3d)
@@ -36,4 +36,5 @@
 #include <minix.h>
 #include <libblock.h>
+#include <libfs.h>
 #include <adt/list.h>
 #include "../../vfs/vfs.h"
@@ -46,4 +47,12 @@
 #define mfsdebug(...)
 #endif
+
+#ifdef _MAIN
+#define GLOBAL
+#else
+#define GLOBAL extern
+#endif
+
+GLOBAL fs_reg_t mfs_reg;
 
 typedef enum {
@@ -80,4 +89,7 @@
 
 extern void mfs_mounted(ipc_callid_t rid, ipc_call_t *request);
+extern void mfs_mount(ipc_callid_t rid, ipc_call_t *request);
+extern int  mfs_get_instance(devmap_handle_t handle,
+				struct mfs_instance **instance);
 
 #endif
Index: uspace/srv/fs/minixfs/mfs_ops.c
===================================================================
--- uspace/srv/fs/minixfs/mfs_ops.c	(revision 953a823908dc5b5b2bd1b965af4c88c22897c626)
+++ uspace/srv/fs/minixfs/mfs_ops.c	(revision 3b081786759db0ea0247dc07e59bb20eda2b8e3d)
@@ -31,11 +31,8 @@
  */
 
-#include <libfs.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <libblock.h>
 #include <fibril_synch.h>
 #include <errno.h>
-#include <adt/list.h>
 #include "mfs.h"
 #include "mfs_utils.h"
@@ -47,4 +44,6 @@
 static LIST_INITIALIZE(inst_list);
 static FIBRIL_MUTEX_INITIALIZE(inst_list_mutex);
+
+libfs_ops_t mfs_libfs_ops;
 
 void mfs_mounted(ipc_callid_t rid, ipc_call_t *request)
@@ -161,4 +160,5 @@
 		sbi->max_file_size = conv32(native, sb->s_max_file_size);
 		sbi->nzones = conv16(native, sb->s_nzones);
+		sbi->block_size = MFS_BLOCKSIZE;
 		if (version == MFS_VERSION_V2)
 			sbi->nzones = conv32(native, sb->s_nzones2);
@@ -166,4 +166,13 @@
  
 	free(sb);
+
+	rc = block_cache_init(devmap_handle, sbi->block_size, 0, CACHE_MODE_WT);
+
+	if (rc != EOK) {
+		block_fini(devmap_handle);
+		async_answer_0(rid, EINVAL);
+		mfsdebug("block cache initialization failed\n");
+		return;
+	}
 
 	/*Initialize the instance structure and add it to the list*/
@@ -181,4 +190,35 @@
 }
 
+void mfs_mount(ipc_callid_t rid, ipc_call_t *request)
+{
+	libfs_mount(&mfs_libfs_ops, mfs_reg.fs_handle, rid, request);
+}
+
+/*
+ * Find a filesystem instance given the devmap handle
+ */
+int mfs_get_instance(devmap_handle_t handle, struct mfs_instance **instance)
+{
+	link_t *link;
+	struct mfs_instance *instance_ptr;
+
+	fibril_mutex_lock(&inst_list_mutex);
+
+	for (link = inst_list.next; link != &inst_list; link = link->next) {
+		instance_ptr = list_get_instance(link, struct mfs_instance, link);
+		
+		if (instance_ptr->handle == handle) {
+			*instance = instance_ptr;
+			fibril_mutex_unlock(&inst_list_mutex);
+			return EOK;
+		}
+	}
+
+	mfsdebug("Instance not found\n");
+
+	fibril_mutex_unlock(&inst_list_mutex);
+	return EINVAL;
+}
+
 static bool check_magic_number(uint16_t magic, bool *native,
 				mfs_version_t *version, bool *longfilenames)
@@ -213,5 +253,4 @@
 }
 
-
 /**
  * @}
