Index: uspace/app/sysinst/sysinst.c
===================================================================
--- uspace/app/sysinst/sysinst.c	(revision e90019d6b06449172e2a06e89fdc87d4064ea3b7)
+++ uspace/app/sysinst/sysinst.c	(revision ca127f376913ff2f1ec26a21284d73a42ef51816)
@@ -279,5 +279,5 @@
 	}
 
-	rv = asprintf(&path, "%s%s", rdpath, "/cfg/volsrv.sif");
+	rv = asprintf(&path, "%s%s", rdpath, "/cfg/initvol.sif");
 	if (rv < 0) {
 		rc = ENOMEM;
Index: uspace/srv/volsrv/part.c
===================================================================
--- uspace/srv/volsrv/part.c	(revision e90019d6b06449172e2a06e89fdc87d4064ea3b7)
+++ uspace/srv/volsrv/part.c	(revision ca127f376913ff2f1ec26a21284d73a42ef51816)
@@ -52,4 +52,5 @@
 #include "types/part.h"
 #include "volume.h"
+#include "volsrv.h"
 
 static errno_t vol_part_add_locked(vol_parts_t *, service_id_t);
@@ -403,4 +404,16 @@
 	part->cur_mp_auto = mp_auto;
 
+	if (str_cmp(mp, "/w") == 0) {
+		log_msg(LOG_DEFAULT, LVL_NOTE, "Mounted system volume - "
+		    "loading additional configuration.");
+		rc = vol_volumes_merge_to(part->parts->volumes,
+		    vol_cfg_file);
+		if (rc != EOK) {
+			log_msg(LOG_DEFAULT, LVL_ERROR, "Error loading "
+			    "additional configuration.");
+			return rc;
+		}
+	}
+
 	return rc;
 }
Index: uspace/srv/volsrv/volsrv.c
===================================================================
--- uspace/srv/volsrv/volsrv.c	(revision e90019d6b06449172e2a06e89fdc87d4064ea3b7)
+++ uspace/srv/volsrv/volsrv.c	(revision ca127f376913ff2f1ec26a21284d73a42ef51816)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -53,5 +53,6 @@
 #define NAME  "volsrv"
 
-const char *vol_cfg_file = "/cfg/volsrv.sif";
+const char *vol_icfg_file = "/cfg/initvol.sif";
+const char *vol_cfg_file = "/w/cfg/volsrv.sif";
 
 static void vol_client_conn(ipc_call_t *, void *);
@@ -66,5 +67,5 @@
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_init()");
 
-	rc = vol_volumes_create(vol_cfg_file, &volumes);
+	rc = vol_volumes_create(vol_icfg_file, &volumes);
 	if (rc != EOK)
 		goto error;
Index: uspace/srv/volsrv/volsrv.h
===================================================================
--- uspace/srv/volsrv/volsrv.h	(revision ca127f376913ff2f1ec26a21284d73a42ef51816)
+++ uspace/srv/volsrv/volsrv.h	(revision ca127f376913ff2f1ec26a21284d73a42ef51816)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2024 Jiri Svoboda
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup volsrv
+ * @{
+ */
+/**
+ * @file Volume service
+ */
+
+#ifndef VOLSRV_H
+#define VOLSRV_H
+
+extern const char *vol_cfg_file;
+
+#endif
+
+/** @}
+ */
Index: uspace/srv/volsrv/volume.c
===================================================================
--- uspace/srv/volsrv/volume.c	(revision e90019d6b06449172e2a06e89fdc87d4064ea3b7)
+++ uspace/srv/volsrv/volume.c	(revision ca127f376913ff2f1ec26a21284d73a42ef51816)
@@ -185,4 +185,62 @@
 		free(volumes);
 
+	return rc;
+}
+
+/** Merge list of volumes into new file.
+ *
+ * @param volumes List of volumes
+ * @param cfg_path Path to file containing configuration repository in SIF
+ * @return EOK on success, ENOMEM if out of memory
+ */
+errno_t vol_volumes_merge_to(vol_volumes_t *volumes, const char *cfg_path)
+{
+	sif_doc_t *doc = NULL;
+	sif_node_t *node;
+	const char *ntype;
+	char *dcfg_path;
+	errno_t rc;
+
+	dcfg_path = str_dup(cfg_path);
+	if (dcfg_path == NULL) {
+		rc = ENOMEM;
+		goto error;
+	}
+
+	free(volumes->cfg_path);
+	volumes->cfg_path = dcfg_path;
+
+	/* Try opening existing repository */
+	rc = sif_load(cfg_path, &doc);
+	if (rc != EOK) {
+		/* Failed to open existing, create new repository */
+		rc = vol_volumes_sync(volumes);
+		if (rc != EOK)
+			goto error;
+	} else {
+		/*
+		 * Loaded existing configuration. Find 'volumes' node, should
+		 * be the first child of the root node.
+		 */
+		node = sif_node_first_child(sif_get_root(doc));
+
+		/* Verify it's the correct node type */
+		ntype = sif_node_get_type(node);
+		if (str_cmp(ntype, "volumes") != 0) {
+			rc = EIO;
+			goto error;
+		}
+
+		rc = vol_volumes_load(node, volumes);
+		if (rc != EOK)
+			goto error;
+
+		sif_delete(doc);
+	}
+
+	return EOK;
+error:
+	if (doc != NULL)
+		(void) sif_delete(doc);
 	return rc;
 }
Index: uspace/srv/volsrv/volume.h
===================================================================
--- uspace/srv/volsrv/volume.h	(revision e90019d6b06449172e2a06e89fdc87d4064ea3b7)
+++ uspace/srv/volsrv/volume.h	(revision ca127f376913ff2f1ec26a21284d73a42ef51816)
@@ -42,4 +42,5 @@
 
 extern errno_t vol_volumes_create(const char *, vol_volumes_t **);
+extern errno_t vol_volumes_merge_to(vol_volumes_t *, const char *);
 extern errno_t vol_volumes_sync(vol_volumes_t *);
 extern void vol_volumes_destroy(vol_volumes_t *);
