diff --git a/src/conf.c b/src/conf.c
index 49499ecd..b1ec9b38 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -4119,14 +4119,21 @@ static int config_filename_filter(const struct dirent64 *dirent)
 static int config_file_open(snd_config_t *root, const char *filename, int merge)
 {
 	snd_input_t *in;
+	snd_config_t *top;
 	int err;
 
 	err = snd_input_stdio_open(&in, filename, "r");
 	if (err >= 0) {
-		if (merge)
+		if (merge) {
 			err = snd_config_load(root, in);
-		else
-			err = snd_config_load_override(root, in);
+		} else {
+			err = snd_config_top(&top);
+			if (err >= 0) {
+				err = snd_config_load(top, in);
+				if (err >= 0)
+					err = snd_config_merge(root, top, 1);
+			}
+		}
 		snd_input_close(in);
 		if (err < 0)
 			snd_error(CORE, "%s may be old or corrupted: consider to remove or fix it", filename);
