Index: uspace/srv/volsrv/part.c
===================================================================
--- uspace/srv/volsrv/part.c	(revision bec18a999fe8f0a0d11e4e8b663b60185763e1c7)
+++ uspace/srv/volsrv/part.c	(revision 2d78d88c1a4dd5482f60bb59e70d0111398cbbce)
@@ -679,4 +679,34 @@
 }
 
+/** Set partition mount point.
+ *
+ * Set the partition mount point, (un-, re-)mounting the partition as necessary.
+ *
+ * @param part Partition
+ * @param mountp
+ *
+ * @return EOK on success or error code
+ */
+errno_t vol_part_set_mountp_part(vol_part_t *part, const char *mountp)
+{
+	errno_t rc;
+
+	if (part->cur_mp != NULL) {
+		rc = vol_part_eject_part(part);
+		if (rc != EOK)
+			return rc;
+	}
+
+	rc = vol_part_mountp_set(part, mountp);
+	if (rc != EOK)
+		return rc;
+
+	rc = vol_part_mount(part);
+	if (rc != EOK)
+		return rc;
+
+	return EOK;
+}
+
 errno_t vol_part_get_info(vol_part_t *part, vol_part_info_t *pinfo)
 {
Index: uspace/srv/volsrv/part.h
===================================================================
--- uspace/srv/volsrv/part.h	(revision bec18a999fe8f0a0d11e4e8b663b60185763e1c7)
+++ uspace/srv/volsrv/part.h	(revision 2d78d88c1a4dd5482f60bb59e70d0111398cbbce)
@@ -57,4 +57,5 @@
 extern errno_t vol_part_mkfs_part(vol_part_t *, vol_fstype_t, const char *,
     const char *);
+extern errno_t vol_part_set_mountp_part(vol_part_t *, const char *);
 extern errno_t vol_part_get_info(vol_part_t *, vol_part_info_t *);
 
Index: uspace/srv/volsrv/volsrv.c
===================================================================
--- uspace/srv/volsrv/volsrv.c	(revision bec18a999fe8f0a0d11e4e8b663b60185763e1c7)
+++ uspace/srv/volsrv/volsrv.c	(revision 2d78d88c1a4dd5482f60bb59e70d0111398cbbce)
@@ -285,5 +285,4 @@
 }
 
-
 static void vol_part_mkfs_srv(vol_parts_t *parts, ipc_call_t *icall)
 {
@@ -291,6 +290,6 @@
 	vol_part_t *part;
 	vol_fstype_t fstype;
-	char *label;
-	char *mountp;
+	char *label = NULL;
+	char *mountp = NULL;
 	errno_t rc;
 
@@ -304,5 +303,5 @@
 	if (rc != EOK) {
 		async_answer_0(icall, rc);
-		return;
+		goto error;
 	}
 
@@ -315,7 +314,6 @@
 	    0, NULL);
 	if (rc != EOK) {
-		free(label);
-		async_answer_0(icall, rc);
-		return;
+		async_answer_0(icall, rc);
+		goto error;
 	}
 
@@ -327,12 +325,61 @@
 	rc = vol_part_find_by_id_ref(parts, sid, &part);
 	if (rc != EOK) {
+		async_answer_0(icall, ENOENT);
+		goto error;
+	}
+
+	rc = vol_part_mkfs_part(part, fstype, label, mountp);
+	if (rc != EOK) {
+		async_answer_0(icall, rc);
+		vol_part_del_ref(part);
+		goto error;
+	}
+
+	free(label);
+	free(mountp);
+	async_answer_0(icall, EOK);
+
+	return;
+error:
+	if (label != NULL)
 		free(label);
+	if (mountp != NULL)
+		free(mountp);
+}
+
+static void vol_part_set_mountp_srv(vol_parts_t *parts,
+    ipc_call_t *icall)
+{
+	service_id_t sid;
+	vol_part_t *part;
+	char *mountp;
+	errno_t rc;
+
+	log_msg(LOG_DEFAULT, LVL_NOTE, "vol_part_set_mountp_srv()");
+
+	sid = IPC_GET_ARG1(*icall);
+
+	rc = async_data_write_accept((void **)&mountp, true, 0,
+	    VOL_MOUNTP_MAXLEN, 0, NULL);
+	if (rc != EOK) {
+		async_answer_0(icall, rc);
+		return;
+	}
+
+	if (mountp != NULL) {
+		log_msg(LOG_DEFAULT, LVL_NOTE,
+		    "vol_part_set_mountp_srv: mountp='%s'", mountp);
+	}
+
+	rc = vol_part_find_by_id_ref(parts, sid, &part);
+	if (rc != EOK) {
+		free(mountp);
 		async_answer_0(icall, ENOENT);
 		return;
 	}
 
-	rc = vol_part_mkfs_part(part, fstype, label, mountp);
-	if (rc != EOK) {
-		free(label);
+	rc = vol_part_set_mountp_part(part, mountp);
+	if (rc != EOK) {
+		free(mountp);
 		async_answer_0(icall, rc);
 		vol_part_del_ref(part);
@@ -340,5 +387,5 @@
 	}
 
-	free(label);
+	free(mountp);
 	async_answer_0(icall, EOK);
 }
@@ -386,4 +433,7 @@
 			vol_part_mkfs_srv(parts, &call);
 			break;
+		case VOL_PART_SET_MOUNTP:
+			vol_part_set_mountp_srv(parts, &call);
+			break;
 		default:
 			async_answer_0(&call, EINVAL);
