Index: uspace/lib/c/generic/vfs/vfs.c
===================================================================
--- uspace/lib/c/generic/vfs/vfs.c	(revision 76a67cea651b8793fab2b3b648c22b0470f02ca3)
+++ uspace/lib/c/generic/vfs/vfs.c	(revision 4965357ff2b6d6e35e8abbabc7da06e5fa98f3e8)
@@ -835,12 +835,11 @@
 {
 	sysarg_t rc;
+	aid_t req;
 	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;
+	sysarg_t num_mounted_fs;
+	
+	async_exch_t *exch = vfs_exchange_begin();
+
+	req = async_send_0(exch, VFS_IN_GET_MTAB, NULL);
 
 	/* Ask VFS how many filesystems are mounted */
@@ -859,17 +858,19 @@
 		}
 
+		memset(mtab_list_ent, 0, sizeof(mtab_list_ent_t));
+
 		mtab_ent = &mtab_list_ent->mtab_ent;
 
-		rc = async_data_read_start(exch, (void *) &mtab_ent->mp,
+		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,
+		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,
+		rc = async_data_read_start(exch, (void *) mtab_ent->fs_name,
 			FS_NAME_MAXLEN);
 		if (rc != EOK)
@@ -877,6 +878,6 @@
 
 		sysarg_t p[3];
+
 		int j;
-
 		for (j = 0; j < 3; ++j) {
 			rc = async_req_0_1(exch, VFS_IN_PING, &p[j]);
@@ -894,4 +895,5 @@
 
 exit:
+	async_wait_for(req, &rc);
 	vfs_exchange_end(exch);
 	return rc;
Index: uspace/lib/c/include/vfs/vfs.h
===================================================================
--- uspace/lib/c/include/vfs/vfs.h	(revision 76a67cea651b8793fab2b3b648c22b0470f02ca3)
+++ uspace/lib/c/include/vfs/vfs.h	(revision 4965357ff2b6d6e35e8abbabc7da06e5fa98f3e8)
@@ -42,4 +42,5 @@
 #include <stdio.h>
 #include <async.h>
+#include "vfs_mtab.h"
 
 enum vfs_change_state_type {
