Index: uspace/app/init/init.c
===================================================================
--- uspace/app/init/init.c	(revision 2e07f62c6429ec9b1e2c4452756f0e12e17283a8)
+++ uspace/app/init/init.c	(revision 210e50a2e64696e25acdb6745a857a8b4862ecdd)
@@ -94,14 +94,5 @@
 static bool mount_devfs(void)
 {
-	char null[MAX_DEVICE_NAME];
-	int null_id = devmap_null_create();
-	
-	if (null_id == -1) {
-		printf(NAME ": Unable to create null device\n");
-		return false;
-	}
-	
-	snprintf(null, MAX_DEVICE_NAME, "null/%d", null_id);
-	int rc = mount("devfs", DEVFS_MOUNT_POINT, null, "", IPC_FLAG_BLOCKING);
+	int rc = mount("devfs", DEVFS_MOUNT_POINT, "", "", IPC_FLAG_BLOCKING);
 	
 	switch (rc) {
@@ -111,17 +102,13 @@
 	case EBUSY:
 		printf(NAME ": Device filesystem already mounted\n");
-		devmap_null_destroy(null_id);
 		return false;
 	case ELIMIT:
 		printf(NAME ": Unable to mount device filesystem\n");
-		devmap_null_destroy(null_id);
 		return false;
 	case ENOENT:
 		printf(NAME ": Unknown filesystem type (devfs)\n");
-		devmap_null_destroy(null_id);
 		return false;
 	default:
 		printf(NAME ": Error mounting device filesystem (%d)\n", rc);
-		devmap_null_destroy(null_id);
 		return false;
 	}
Index: uspace/app/tester/vfs/vfs1.c
===================================================================
--- uspace/app/tester/vfs/vfs1.c	(revision 2e07f62c6429ec9b1e2c4452756f0e12e17283a8)
+++ uspace/app/tester/vfs/vfs1.c	(revision 210e50a2e64696e25acdb6745a857a8b4862ecdd)
@@ -79,15 +79,8 @@
 	TPRINTF("Created directory %s\n", MOUNT_POINT);
 	
-	char null[MAX_DEVICE_NAME];
-	int null_id = devmap_null_create();
-	
-	if (null_id == -1)
-		return "Unable to create null device";
-	
-	snprintf(null, MAX_DEVICE_NAME, "null/%d", null_id);
-	int rc = mount(FS_TYPE, MOUNT_POINT, null, OPTIONS, FLAGS);
+	int rc = mount(FS_TYPE, MOUNT_POINT, "", OPTIONS, FLAGS);
 	switch (rc) {
 	case EOK:
-		TPRINTF("Mounted /dev/%s as %s on %s\n", null, FS_TYPE, MOUNT_POINT);
+		TPRINTF("Mounted %s on %s\n", FS_TYPE, MOUNT_POINT);
 		break;
 	case EBUSY:
Index: uspace/lib/libc/generic/vfs/vfs.c
===================================================================
--- uspace/lib/libc/generic/vfs/vfs.c	(revision 2e07f62c6429ec9b1e2c4452756f0e12e17283a8)
+++ uspace/lib/libc/generic/vfs/vfs.c	(revision 210e50a2e64696e25acdb6745a857a8b4862ecdd)
@@ -125,13 +125,35 @@
 	aid_t req;
 	dev_handle_t dev_handle;
+	int null_id = -1;
+	char null[DEVMAP_NAME_MAXLEN];
+	
+	if (str_cmp(fqdn, "") == 0) {
+		/* No device specified, create a fresh
+		   null/%d device instead */
+		null_id = devmap_null_create();
+		
+		if (null_id == -1)
+			return ENOMEM;
+		
+		snprintf(null, DEVMAP_NAME_MAXLEN, "null/%d", null_id);
+		fqdn = null;
+	}
 	
 	res = devmap_device_get_handle(fqdn, &dev_handle, flags);
-	if (res != EOK)
+	if (res != EOK) {
+		if (null_id != -1)
+			devmap_null_destroy(null_id);
+		
 		return res;
+	}
 	
 	size_t mpa_size;
 	char *mpa = absolutize(mp, &mpa_size);
-	if (!mpa)
-		return ENOMEM;
+	if (!mpa) {
+		if (null_id != -1)
+			devmap_null_destroy(null_id);
+		
+		return ENOMEM;
+	}
 	
 	futex_down(&vfs_phone_futex);
@@ -146,4 +168,8 @@
 		futex_up(&vfs_phone_futex);
 		free(mpa);
+		
+		if (null_id != -1)
+			devmap_null_destroy(null_id);
+		
 		if (rc_orig == EOK)
 			return (int) rc;
@@ -158,10 +184,14 @@
 		futex_up(&vfs_phone_futex);
 		free(mpa);
-		if (rc_orig == EOK)
-			return (int) rc;
-		else
-			return (int) rc_orig;
-	}
-
+		
+		if (null_id != -1)
+			devmap_null_destroy(null_id);
+		
+		if (rc_orig == EOK)
+			return (int) rc;
+		else
+			return (int) rc_orig;
+	}
+	
 	rc = async_data_write_start(vfs_phone, (void *) fs_name, str_size(fs_name));
 	if (rc != EOK) {
@@ -170,10 +200,14 @@
 		futex_up(&vfs_phone_futex);
 		free(mpa);
-		if (rc_orig == EOK)
-			return (int) rc;
-		else
-			return (int) rc_orig;
-	}
-
+		
+		if (null_id != -1)
+			devmap_null_destroy(null_id);
+		
+		if (rc_orig == EOK)
+			return (int) rc;
+		else
+			return (int) rc_orig;
+	}
+	
 	/* Ask VFS whether it likes fs_name. */
 	rc = async_req_0_0(vfs_phone, IPC_M_PING);
@@ -183,4 +217,8 @@
 		futex_up(&vfs_phone_futex);
 		free(mpa);
+		
+		if (null_id != -1)
+			devmap_null_destroy(null_id);
+		
 		if (rc_orig == EOK)
 			return (int) rc;
@@ -193,4 +231,7 @@
 	futex_up(&vfs_phone_futex);
 	free(mpa);
+	
+	if ((rc != EOK) && (null_id != -1))
+		devmap_null_destroy(null_id);
 	
 	return (int) rc;
