Index: uspace/srv/volsrv/part.c
===================================================================
--- uspace/srv/volsrv/part.c	(revision 6404acaa1e897da50572bbec1797ff03ffdc782d)
+++ uspace/srv/volsrv/part.c	(revision f0f87879a2e9616ccbf28e95d70d5e6ec25cf738)
@@ -602,4 +602,38 @@
 }
 
+/** Insert volume.
+ *
+ * Re-mount the volume in the partition, if applicable.
+ *
+ * @param part Partition
+ */
+errno_t vol_part_insert_part(vol_part_t *part)
+{
+	int rc;
+
+	log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_part_insert_part()");
+
+	fibril_mutex_lock(&part->parts->lock);
+
+	if (part->cur_mp != NULL) {
+		fibril_mutex_unlock(&part->parts->lock);
+		return EOK;
+	}
+
+	rc = vol_part_probe(part);
+	if (rc != EOK)
+		goto error;
+
+	rc = vol_part_mount(part);
+	if (rc != EOK)
+		goto error;
+
+	fibril_mutex_unlock(&part->parts->lock);
+
+	return EOK;
+error:
+	return rc;
+}
+
 /** Set mount point.
  *
Index: uspace/srv/volsrv/part.h
===================================================================
--- uspace/srv/volsrv/part.h	(revision 6404acaa1e897da50572bbec1797ff03ffdc782d)
+++ uspace/srv/volsrv/part.h	(revision f0f87879a2e9616ccbf28e95d70d5e6ec25cf738)
@@ -55,4 +55,5 @@
 extern errno_t vol_part_eject_part(vol_part_t *);
 extern errno_t vol_part_empty_part(vol_part_t *);
+extern errno_t vol_part_insert_part(vol_part_t *);
 extern errno_t vol_part_mkfs_part(vol_part_t *, vol_fstype_t, const char *,
     const char *);
Index: uspace/srv/volsrv/volsrv.c
===================================================================
--- uspace/srv/volsrv/volsrv.c	(revision 6404acaa1e897da50572bbec1797ff03ffdc782d)
+++ uspace/srv/volsrv/volsrv.c	(revision f0f87879a2e9616ccbf28e95d70d5e6ec25cf738)
@@ -210,8 +210,34 @@
 	if (rc != EOK) {
 		async_answer_0(icall, ENOENT);
-		goto error;
+		return;
 	}
 
 	rc = vol_part_eject_part(part);
+	if (rc != EOK) {
+		async_answer_0(icall, EIO);
+		goto error;
+	}
+
+	async_answer_0(icall, EOK);
+error:
+	vol_part_del_ref(part);
+}
+
+static void vol_part_insert_srv(vol_parts_t *parts, ipc_call_t *icall)
+{
+	service_id_t sid;
+	vol_part_t *part;
+	errno_t rc;
+
+	sid = IPC_GET_ARG1(*icall);
+	log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_part_insert_srv(%zu)", sid);
+
+	rc = vol_part_find_by_id_ref(parts, sid, &part);
+	if (rc != EOK) {
+		async_answer_0(icall, ENOENT);
+		return;
+	}
+
+	rc = vol_part_insert_part(part);
 	if (rc != EOK) {
 		async_answer_0(icall, EIO);
@@ -429,4 +455,7 @@
 			vol_part_empty_srv(parts, &call);
 			break;
+		case VOL_PART_INSERT:
+			vol_part_insert_srv(parts, &call);
+			break;
 		case VOL_PART_LSUPP:
 			vol_part_get_lsupp_srv(parts, &call);
