diff --git a/NEWS b/NEWS
index e7c38ca974ed6e53d58596476c67674f0ddf2bc7..7cd878032be830a5b097fd4d80f5ea1a6d708cec 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,6 @@
 ver 0.21.19 (not yet released)
+* configuration
+  - allow overriding top-level settings in includes
 * output
   - pulse: obey Pulse's maximum sample rate (fixes DSD128 playback)
 * fix build failure with clang 10
diff --git a/src/config/File.cxx b/src/config/File.cxx
index b0361bc6bc713cf12008355835b9e555e9281027..269ea8419b2311288401fda0fb677dcdde87b1bb 100644
--- a/src/config/File.cxx
+++ b/src/config/File.cxx
@@ -153,11 +153,9 @@ ReadConfigParam(ConfigData &config_data, BufferedReader &reader,
 			      name, reader.GetLineNumber());
 
 	if (!option.repeatable)
-		if (const auto *param = config_data.GetParam(o))
-			throw FormatRuntimeError("config parameter \"%s\" is first defined "
-						 "on line %d and redefined on line %u\n",
-						 name, param->line,
-						 reader.GetLineNumber());
+		/* if the option is not repeatable, override the old
+		   value by removing it first */
+		config_data.GetParamList(o).clear();
 
 	/* now parse the block or the value */