Index: uspace/srv/fs/fat/fat.c
===================================================================
--- uspace/srv/fs/fat/fat.c	(revision c0cdcaf5ec110177fdd3c543704c48a104f6cb3b)
+++ uspace/srv/fs/fat/fat.c	(revision 26f2af09087bccd53eb0c8a6bb24dfe65cc45156)
@@ -39,4 +39,5 @@
 #include <ipc/ipc.h>
 #include <ipc/services.h>
+#include <async.h>
 #include <errno.h>
 #include <unistd.h>
@@ -59,4 +60,18 @@
 };
 
+/*
+ * This fibril processes request from the VFS server.
+ */
+void fat_connection(ipc_callid_t iid, ipc_call_t *icall)
+{
+	while (1) {
+		ipc_callid_t callid;
+		ipc_call_t call;
+	
+		callid = async_get_call(&call);
+		ipc_answer_fast(callid, ENOTSUP, 0, 0);
+	}
+}
+
 int main(int argc, char **argv)
 {
@@ -69,6 +84,28 @@
 	}
 	
-	/* TODO: start making calls according to the VFS protocol */
+	/*
+	 * Tell VFS that we are here and want to get registered.
+	 * We use the async framework because VFS will answer the request
+	 * out-of-order, when it knows that the operation succeeded or failed.
+	 */
+	ipc_call_t answer;
+	aid_t req = async_send_2(vfs_phone, VFS_REGISTER, 0, 0, &answer);
 
+	/*
+	 * Send our VFS info structure to VFS.
+	 */
+	int rc = ipc_data_send(vfs_phone, &fat_vfs_info, sizeof(fat_vfs_info)); 
+	if (rc != EOK) {
+		async_wait_for(req, NULL);
+		return rc;
+	}
+
+	/*
+	 * Ask VFS for callback connection.
+	 */
+	ipcarg_t phonehash;
+	ipc_connect_to_me(vfs_phone, 0, 0, &phonehash);
+
+	async_new_connection(phonehash, 0, NULL, fat_connection);
 	return 0;
 }
