Index: contrib/arch/uspace/srv/vfs/vfs.adl
===================================================================
--- contrib/arch/uspace/srv/vfs/vfs.adl	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ contrib/arch/uspace/srv/vfs/vfs.adl	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -4,5 +4,5 @@
 		
 		/* Mount filesystem */
-		sysarg_t mount(in sysarg_t device, in sysarg_t flags, in_copy string point, in_copy string opts, in_copy string fs);
+		sysarg_t mount(in sysarg_t device, in sysarg_t flags, in sysarg_t instance, in_copy string point, in_copy string opts, in_copy string fs);
 		
 		/* Open file */
@@ -56,5 +56,5 @@
 		
 		/* Mount filesystem */
-		sysarg_t mount(in sysarg_t device, in sysarg_t flags, in_copy string point, in_copy string opts, ...);
+		sysarg_t mount(in sysarg_t device, in sysarg_t flags, in sysarg_t instance, in_copy string point, in_copy string opts, ...);
 		
 		/* Open file by node */
Index: uspace/app/bdsh/cmds/modules/mount/mount.c
===================================================================
--- uspace/app/bdsh/cmds/modules/mount/mount.c	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ uspace/app/bdsh/cmds/modules/mount/mount.c	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -43,4 +43,5 @@
 static struct option const long_options[] = {
 	{ "help", no_argument, 0, 'h' },
+	{ "instance", required_argument, 0, 'i' },
 	{ 0, 0, 0, 0 }
 };
@@ -68,15 +69,28 @@
 	const char *dev = "";
 	int rc, c, opt_ind;
+	unsigned int instance = 0;
+	bool instance_set = false;
+	char **t_argv;
 
 	argc = cli_count_args(argv);
 
 	for (c = 0, optind = 0, opt_ind = 0; c != -1;) {
-		c = getopt_long(argc, argv, "h", long_options, &opt_ind);
+		c = getopt_long(argc, argv, "i:h", long_options, &opt_ind);
 		switch (c) {
 		case 'h':
 			help_cmd_mount(HELP_LONG);
 			return CMD_SUCCESS;
+		case 'i':
+			instance = (unsigned int) strtol(optarg, NULL, 10);
+			instance_set = true;
+			break;
 		}
 	}
+
+	if (instance_set) {
+		argc -= 2;
+		t_argv = &argv[2];
+	} else
+		t_argv = &argv[0];
 
 	if ((argc < 3) || (argc > 5)) {
@@ -86,12 +100,12 @@
 	}
 	if (argc > 3)
-		dev = argv[3];
+		dev = t_argv[3];
 	if (argc == 5)
-		mopts = argv[4];
+		mopts = t_argv[4];
 
-	rc = mount(argv[1], argv[2], dev, mopts, 0);
+	rc = mount(t_argv[1], t_argv[2], dev, mopts, 0, instance);
 	if (rc != EOK) {
 		printf("Unable to mount %s filesystem to %s on %s (rc=%d)\n",
-		    argv[1], argv[2], argv[3], rc);
+			t_argv[1], t_argv[2], t_argv[3], rc);
 		return CMD_FAILURE;
 	}
Index: uspace/app/init/init.c
===================================================================
--- uspace/app/init/init.c	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ uspace/app/init/init.c	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -121,5 +121,5 @@
 	
 	int rc = mount(fstype, ROOT_MOUNT_POINT, ROOT_DEVICE, opts,
-	    IPC_FLAG_BLOCKING);
+	    IPC_FLAG_BLOCKING, 0);
 	return mount_report("Root filesystem", ROOT_MOUNT_POINT, fstype,
 	    ROOT_DEVICE, rc);
@@ -138,5 +138,5 @@
 {
 	int rc = mount(LOCFS_FS_TYPE, LOCFS_MOUNT_POINT, "", "",
-	    IPC_FLAG_BLOCKING);
+	    IPC_FLAG_BLOCKING, 0);
 	return mount_report("Location service filesystem", LOCFS_MOUNT_POINT,
 	    LOCFS_FS_TYPE, NULL, rc);
@@ -261,5 +261,5 @@
 static bool mount_tmpfs(void)
 {
-	int rc = mount(TMPFS_FS_TYPE, TMPFS_MOUNT_POINT, "", "", 0);
+	int rc = mount(TMPFS_FS_TYPE, TMPFS_MOUNT_POINT, "", "", 0, 0);
 	return mount_report("Temporary filesystem", TMPFS_MOUNT_POINT,
 	    TMPFS_FS_TYPE, NULL, rc);
@@ -268,5 +268,5 @@
 static bool mount_data(void)
 {
-	int rc = mount(DATA_FS_TYPE, DATA_MOUNT_POINT, DATA_DEVICE, "wtcache", 0);
+	int rc = mount(DATA_FS_TYPE, DATA_MOUNT_POINT, DATA_DEVICE, "wtcache", 0, 0);
 	return mount_report("Data filesystem", DATA_MOUNT_POINT, DATA_FS_TYPE,
 	    DATA_DEVICE, rc);
Index: uspace/lib/c/generic/vfs/vfs.c
===================================================================
--- uspace/lib/c/generic/vfs/vfs.c	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ uspace/lib/c/generic/vfs/vfs.c	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -143,5 +143,5 @@
 
 int mount(const char *fs_name, const char *mp, const char *fqsn,
-    const char *opts, unsigned int flags)
+    const char *opts, unsigned int flags, unsigned int instance)
 {
 	int null_id = -1;
@@ -181,5 +181,6 @@
 
 	sysarg_t rc_orig;
-	aid_t req = async_send_2(exch, VFS_IN_MOUNT, service_id, flags, NULL);
+	aid_t req = async_send_3(exch, VFS_IN_MOUNT, service_id, flags,
+			instance, NULL);
 	sysarg_t rc = async_data_write_start(exch, (void *) mpa, mpa_size);
 	if (rc != EOK) {
Index: uspace/lib/c/include/ipc/vfs.h
===================================================================
--- uspace/lib/c/include/ipc/vfs.h	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ uspace/lib/c/include/ipc/vfs.h	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -56,4 +56,5 @@
 	/** Unique identifier of the fs. */
 	char name[FS_NAME_MAXLEN + 1];
+	unsigned int instance;
 	bool concurrent_read_write;
 	bool write_retains_size;
Index: uspace/lib/c/include/vfs/vfs.h
===================================================================
--- uspace/lib/c/include/vfs/vfs.h	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ uspace/lib/c/include/vfs/vfs.h	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -49,5 +49,5 @@
 
 extern int mount(const char *, const char *, const char *, const char *,
-    unsigned int);
+    unsigned int, unsigned int);
 extern int unmount(const char *);
 
Index: uspace/srv/fs/cdfs/cdfs.c
===================================================================
--- uspace/srv/fs/cdfs/cdfs.c	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ uspace/srv/fs/cdfs/cdfs.c	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -52,4 +52,5 @@
 	.concurrent_read_write = false,
 	.write_retains_size = false,
+	.instance = 0,
 };
 
@@ -58,4 +59,13 @@
 	printf("%s: HelenOS cdfs file system server\n", NAME);
 	
+	if (argc == 3) {
+		if (!str_cmp(argv[1], "--instance"))
+			cdfs_vfs_info.instance = strtol(argv[2], NULL, 10);
+		else {
+			printf(NAME " Unrecognized parameters");
+			return -1;
+		}
+	}
+
 	if (!cdfs_init()) {
 		printf("%s: failed to initialize cdfs\n", NAME);
Index: uspace/srv/fs/exfat/exfat.c
===================================================================
--- uspace/srv/fs/exfat/exfat.c	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ uspace/srv/fs/exfat/exfat.c	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -54,5 +54,6 @@
 	.name = NAME,
 	.concurrent_read_write = false,
-	.write_retains_size = false,	
+	.write_retains_size = false,
+	.instance = 0,
 };
 
@@ -60,4 +61,13 @@
 {
 	printf(NAME ": HelenOS exFAT file system server\n");
+
+	if (argc == 3) {
+		if (!str_cmp(argv[1], "--instance"))
+			exfat_vfs_info.instance = strtol(argv[2], NULL, 10);
+		else {
+			printf(NAME " Unrecognized parameters");
+			return -1;
+		}
+	}
 
 	int rc = exfat_idx_init();
Index: uspace/srv/fs/ext2fs/ext2fs.c
===================================================================
--- uspace/srv/fs/ext2fs/ext2fs.c	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ uspace/srv/fs/ext2fs/ext2fs.c	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -52,4 +52,5 @@
 vfs_info_t ext2fs_vfs_info = {
 	.name = NAME,
+	.instance = 0,
 };
 
@@ -57,4 +58,13 @@
 {
 	printf(NAME ": HelenOS EXT2 file system server\n");
+
+	if (argc == 3) {
+		if (!str_cmp(argv[1], "--instance"))
+			ext2fs_vfs_info.instance = strtol(argv[2], NULL, 10);
+		else {
+			printf(NAME " Unrecognized parameters");
+			return -1;
+		}
+	}
 	
 	async_sess_t *vfs_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
Index: uspace/srv/fs/fat/fat.c
===================================================================
--- uspace/srv/fs/fat/fat.c	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ uspace/srv/fs/fat/fat.c	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -54,5 +54,6 @@
 	.name = NAME,
 	.concurrent_read_write = false,
-	.write_retains_size = false,	
+	.write_retains_size = false,
+	.instance = 0,
 };
 
@@ -61,4 +62,13 @@
 	printf(NAME ": HelenOS FAT file system server\n");
 	
+	if (argc == 3) {
+		if (!str_cmp(argv[1], "--instance"))
+			fat_vfs_info.instance = strtol(argv[2], NULL, 10);
+		else {
+			printf(NAME " Unrecognized parameters");
+			return -1;
+		}
+	}
+
 	int rc = fat_idx_init();
 	if (rc != EOK)
Index: uspace/srv/fs/locfs/locfs.c
===================================================================
--- uspace/srv/fs/locfs/locfs.c	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ uspace/srv/fs/locfs/locfs.c	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -55,4 +55,5 @@
 	.concurrent_read_write = false,
 	.write_retains_size = false,
+	.instance = 0,
 };
 
@@ -61,4 +62,14 @@
 	printf("%s: HelenOS Device Filesystem\n", NAME);
 	
+	if (argc == 3) {
+		if (!str_cmp(argv[1], "--instance"))
+			locfs_vfs_info.instance = strtol(argv[2], NULL, 10);
+		else {
+			printf(NAME " Unrecognized parameters");
+			return -1;
+		}
+	}
+
+
 	if (!locfs_init()) {
 		printf("%s: failed to initialize locfs\n", NAME);
Index: uspace/srv/fs/mfs/mfs.c
===================================================================
--- uspace/srv/fs/mfs/mfs.c	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ uspace/srv/fs/mfs/mfs.c	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -39,4 +39,6 @@
 
 #include <ipc/services.h>
+#include <stdlib.h>
+#include <str.h>
 #include <ns.h>
 #include <async.h>
@@ -52,4 +54,5 @@
 	.concurrent_read_write = false,
 	.write_retains_size = false,
+	.instance = 0,
 };
 
@@ -59,4 +62,14 @@
 
 	printf(NAME ": HelenOS Minix file system server\n");
+
+	if (argc == 3) {
+		if (!str_cmp(argv[1], "--instance"))
+			mfs_vfs_info.instance = strtol(argv[2], NULL, 10);
+		else {
+			printf(NAME " Unrecognized parameters");
+			rc = -1;
+			goto err;
+		}
+	}
 
 	async_sess_t *vfs_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
Index: uspace/srv/fs/tmpfs/tmpfs.c
===================================================================
--- uspace/srv/fs/tmpfs/tmpfs.c	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ uspace/srv/fs/tmpfs/tmpfs.c	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -59,4 +59,5 @@
 	.concurrent_read_write = false,
 	.write_retains_size = false,
+	.instance = 0,
 };
 
@@ -64,4 +65,13 @@
 {
 	printf(NAME ": HelenOS TMPFS file system server\n");
+
+	if (argc == 3) {
+		if (!str_cmp(argv[1], "--instance"))
+			tmpfs_vfs_info.instance = strtol(argv[2], NULL, 10);
+		else {
+			printf(NAME " Unrecognized parameters");
+			return -1;
+		}
+	}
 	
 	if (!tmpfs_init()) {
Index: uspace/srv/vfs/vfs.h
===================================================================
--- uspace/srv/vfs/vfs.h	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ uspace/srv/vfs/vfs.h	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -171,5 +171,5 @@
 extern void vfs_exchange_release(async_exch_t *);
 
-extern fs_handle_t fs_name_to_handle(char *, bool);
+extern fs_handle_t fs_name_to_handle(unsigned int instance, char *, bool);
 extern vfs_info_t *fs_handle_to_info(fs_handle_t);
 
Index: uspace/srv/vfs/vfs_ops.c
===================================================================
--- uspace/srv/vfs/vfs_ops.c	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ uspace/srv/vfs/vfs_ops.c	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -276,4 +276,9 @@
 	
 	/*
+	 * Instance number is passed as ARG3.
+	 */
+	unsigned int instance = IPC_GET_ARG3(*request);
+
+	/*
 	 * For now, don't make use of ARG3, but it can be used to
 	 * carry mount options in the future.
@@ -335,5 +340,5 @@
 	fs_handle_t fs_handle;
 recheck:
-	fs_handle = fs_name_to_handle(fs_name, false);
+	fs_handle = fs_name_to_handle(instance, fs_name, false);
 	if (!fs_handle) {
 		if (flags & IPC_FLAG_BLOCKING) {
Index: uspace/srv/vfs/vfs_register.c
===================================================================
--- uspace/srv/vfs/vfs_register.c	(revision 8895d0520311a84de42a6f712a5815477a8a38d0)
+++ uspace/srv/vfs/vfs_register.c	(revision 4979403852d819a9253efa1bff79a2dc52611a3f)
@@ -154,5 +154,6 @@
 	 * Check for duplicit registrations.
 	 */
-	if (fs_name_to_handle(fs_info->vfs_info.name, false)) {
+	if (fs_name_to_handle(fs_info->vfs_info.instance,
+			fs_info->vfs_info.name, false)) {
 		/*
 		 * We already register a fs like this.
@@ -297,5 +298,5 @@
  *
  */
-fs_handle_t fs_name_to_handle(char *name, bool lock)
+fs_handle_t fs_name_to_handle(unsigned int instance, char *name, bool lock)
 {
 	int handle = 0;
@@ -306,5 +307,6 @@
 	list_foreach(fs_list, cur) {
 		fs_info_t *fs = list_get_instance(cur, fs_info_t, fs_link);
-		if (str_cmp(fs->vfs_info.name, name) == 0) {
+		if (str_cmp(fs->vfs_info.name, name) == 0 &&
+				instance == fs->vfs_info.instance) {
 			handle = fs->fs_handle;
 			break;
