diff --git a/scripts/kconfig.pl b/scripts/kconfig.pl
index 811327353867f8303f4c226f5c84b3f4c5bb47ec..b91cdf397aa828f28e6533b82fc5a54b0144ef4a 100755
--- a/scripts/kconfig.pl
+++ b/scripts/kconfig.pl
@@ -73,7 +73,10 @@ sub config_add($$$) {
 		my %cfg = %$_;
 		
 		foreach my $config (keys %cfg) {
-			next if $mod_plus and $config{$config} and $config{$config} eq "y";
+			if ($mod_plus and $config{$config}) {
+				next if $config{$config} eq "y";
+				next if $cfg{$config} eq '#undef';
+			}
 			$config{$config} = $cfg{$config};
 		}
 	}
diff --git a/scripts/metadata.pl b/scripts/metadata.pl
index d250a719788d95b5f0584fcdeb6875439296e886..bd6dbc54ac02b9ba1fb379c51deae64418228346 100755
--- a/scripts/metadata.pl
+++ b/scripts/metadata.pl
@@ -115,6 +115,7 @@ sub gen_kconfig_overrides() {
 					$val = $2;
 				}
 				if ($config{"CONFIG_PACKAGE_$package"} and ($config ne 'n')) {
+					next if $kconfig{$config} eq 'y';
 					$kconfig{$config} = $val;
 				} elsif (!$override) {
 					$kconfig{$config} or $kconfig{$config} = 'n';