Index: uspace/lib/c/generic/vfs/vfs.c
===================================================================
--- uspace/lib/c/generic/vfs/vfs.c	(revision 45bf63c30ca6558e41fac58d97479f70b9b4928d)
+++ uspace/lib/c/generic/vfs/vfs.c	(revision 10e4cd70353b84f2b635166e4fb6190278a8c488)
@@ -35,4 +35,5 @@
 #include <vfs/canonify.h>
 #include <vfs/vfs.h>
+#include <vfs/vfs_mtab.h>
 #include <vfs/vfs_sess.h>
 #include <macros.h>
@@ -831,4 +832,70 @@
 }
 
+int get_mtab_list(list_t *mtab_list)
+{
+	sysarg_t rc;
+	size_t i;
+	size_t num_mounted_fs;
+	
+	async_exch_t *exch = vfs_exchange_begin();
+
+	rc = async_req_0_0(exch, VFS_IN_GET_MTAB);
+	if (rc != EOK)
+		goto exit;
+
+	/* Ask VFS how many filesystems are mounted */
+	rc = async_req_0_1(exch, VFS_IN_PING, &num_mounted_fs);
+	if (rc != EOK)
+		goto exit;
+
+	for (i = 0; i < num_mounted_fs; ++i) {
+		mtab_list_ent_t *mtab_list_ent;
+		mtab_ent_t *mtab_ent;
+
+		mtab_list_ent = malloc(sizeof(mtab_list_ent_t));
+		if (!mtab_list_ent) {
+			rc = ENOMEM;
+			goto exit;
+		}
+
+		mtab_ent = &mtab_list_ent->mtab_ent;
+
+		rc = async_data_read_start(exch, (void *) &mtab_ent->mp,
+		    MAX_PATH_LEN);
+		if (rc != EOK)
+			goto exit;
+
+		rc = async_data_read_start(exch, (void *) &mtab_ent->opts,
+			MAX_MNTOPTS_LEN);
+		if (rc != EOK)
+			goto exit;
+
+		rc = async_data_read_start(exch, (void *) &mtab_ent->fs_name,
+			FS_NAME_MAXLEN);
+		if (rc != EOK)
+			goto exit;
+
+		sysarg_t p[3];
+		int j;
+
+		for (j = 0; j < 3; ++j) {
+			rc = async_req_0_1(exch, VFS_IN_PING, &p[j]);
+			if (rc != EOK)
+				goto exit;
+		}
+
+		mtab_ent->flags = p[0];
+		mtab_ent->instance = p[1];
+		mtab_ent->fs_handle = p[2];
+
+		link_initialize(&mtab_list_ent->link);
+		list_append(&mtab_list_ent->link, mtab_list);
+	}
+
+exit:
+	vfs_exchange_end(exch);
+	return rc;
+}
+
 /** @}
  */
Index: uspace/lib/c/include/ipc/vfs.h
===================================================================
--- uspace/lib/c/include/ipc/vfs.h	(revision 45bf63c30ca6558e41fac58d97479f70b9b4928d)
+++ uspace/lib/c/include/ipc/vfs.h	(revision 10e4cd70353b84f2b635166e4fb6190278a8c488)
@@ -42,4 +42,5 @@
 #define FS_NAME_MAXLEN  20
 #define MAX_PATH_LEN    (64 * 1024)
+#define MAX_MNTOPTS_LEN 256
 #define PLB_SIZE        (2 * MAX_PATH_LEN)
 
@@ -80,4 +81,5 @@
 	VFS_IN_DUP,
 	VFS_IN_WAIT_HANDLE,
+	VFS_IN_GET_MTAB,
 } vfs_in_request_t;
 
Index: uspace/lib/c/include/vfs/vfs.h
===================================================================
--- uspace/lib/c/include/vfs/vfs.h	(revision 45bf63c30ca6558e41fac58d97479f70b9b4928d)
+++ uspace/lib/c/include/vfs/vfs.h	(revision 10e4cd70353b84f2b635166e4fb6190278a8c488)
@@ -39,4 +39,5 @@
 #include <ipc/vfs.h>
 #include <ipc/loc.h>
+#include <adt/list.h>
 #include <stdio.h>
 #include <async.h>
@@ -55,4 +56,5 @@
 
 extern int fd_wait(void);
+extern int get_mtab_list(list_t *mtab_list);
 
 extern async_exch_t *vfs_exchange_begin(void);
