diff --git a/scripts/config.py b/scripts/config.py
index 89b05a6..77a09ad 100755
--- a/scripts/config.py
+++ b/scripts/config.py
@@ -26,9 +26,10 @@
     * active: True if name is defined, False if a #define for name is
       present in mbedtls_config.h but commented out.
     * section: the name of the section that contains this symbol.
+    * configfile: the file the settings is defined
     """
     # pylint: disable=too-few-public-methods, too-many-arguments
-    def __init__(self, active, name, value='', section=None, configfile=None):
+    def __init__(self, configfile, active, name, value='', section=None):
         self.active = active
         self.name = name
         self.value = value
@@ -54,6 +55,7 @@
 
     def __init__(self):
         self.settings = {}
+        self.configfiles = []
 
     def __contains__(self, name):
         """True if the given symbol is active (i.e. set).
@@ -101,12 +103,12 @@
         If name is not known, raise KeyError.
         """
         setting = self.settings[name]
-        if setting.configfile and setting != value:
+        if setting != value:
             setting.configfile.modified = True
 
         setting.value = value
 
-    def set(self, name, value=None, configfile=None):
+    def set(self, name, value=None):
         """Set name to the given value and make it active.
 
         If value is None and name is already known, don't change its value.
@@ -114,15 +116,15 @@
         """
         if name in self.settings:
             setting = self.settings[name]
-            if setting.configfile and (setting.value != value or not setting.active):
+            if setting.value != value or not setting.active:
                 setting.configfile.modified = True
             if value is not None:
                 setting.value = value
             setting.active = True
         else:
-            self.settings[name] = Setting(True, name, value=value, configfile=configfile)
-            if configfile:
-                self.settings[name].configfile.modified = True
+            configfile = self._get_configfile(name)
+            self.settings[name] = Setting(configfile, True, name, value=value)
+            configfile.modified = True
 
     def unset(self, name):
         """Make name unset (inactive).
@@ -134,7 +136,7 @@
 
         setting = self.settings[name]
         # Check if modifying the config file
-        if setting.configfile and setting.active:
+        if setting.active:
             setting.configfile.modified = True
 
         setting.active = False
@@ -154,7 +156,7 @@
             setting.active = adapter(setting.name, setting.active,
                                      setting.section)
             # Check if modifying the config file
-            if setting.configfile and setting.active != is_active:
+            if setting.active != is_active:
                 setting.configfile.modified = True
 
     def change_matching(self, regexs, enable):
@@ -165,10 +167,34 @@
         for setting in self.settings.values():
             if regex.search(setting.name):
                 # Check if modifying the config file
-                if setting.configfile and setting.active != enable:
+                if setting.active != enable:
                     setting.configfile.modified = True
                 setting.active = enable
 
+    def _get_configfile(self, name=None):
+        """Find a config for a setting name.
+
+        If more then one configfile is used this function must be overridden.
+        """
+
+        if name and name in self.settings:
+            return self.get(name).configfile
+        return self.configfiles[0]
+
+    def write(self, filename=None):
+        """Write the whole configuration to the file it was read from.
+
+        If filename is specified, write to this file instead.
+        """
+
+        for configfile in self.configfiles:
+            configfile.write(self.settings, filename)
+
+    def filename(self, name=None):
+        """Get the name of the config file."""
+
+        return self._get_configfile(name).filename
+
 def is_full_section(section):
     """Is this section affected by "config.py full" and friends?
 
@@ -591,33 +617,20 @@
         """Read the Mbed TLS configuration file."""
 
         super().__init__()
-        self.configfile = MbedTLSConfigFile(filename)
-        self.settings.update({name: Setting(active, name, value, section, self.configfile)
+        configfile = MbedTLSConfigFile(filename)
+        self.configfiles.append(configfile)
+        self.settings.update({name: Setting(configfile, active, name, value, section)
                               for (active, name, value, section)
-                              in self.configfile.parse_file()})
+                              in configfile.parse_file()})
 
-    #pylint: disable=arguments-differ
     def set(self, name, value=None):
         """Set name to the given value and make it active."""
 
         if name not in self.settings:
-            self.configfile.templates.append((name, '', '#define ' + name + ' '))
+            self._get_configfile().templates.append((name, '', '#define ' + name + ' '))
 
         super().set(name, value)
 
-    def write(self, filename=None):
-        """Write the whole configuration to the file it was read from.
-
-        If filename is specified, write to this file instead.
-        """
-
-        self.configfile.write(self.settings, filename)
-
-    def filename(self):
-        """Get the name of the config file."""
-
-        return self.configfile.filename
-
 class CryptoConfig(Config):
     """Representation of the PSA crypto configuration.
 
@@ -629,12 +642,12 @@
         """Read the PSA crypto configuration file."""
 
         super().__init__()
-        self.configfile = CryptoConfigFile(filename)
-        self.settings.update({name: Setting(active, name, value, section, self.configfile)
+        configfile = CryptoConfigFile(filename)
+        self.configfiles.append(configfile)
+        self.settings.update({name: Setting(configfile, active, name, value, section)
                               for (active, name, value, section)
-                              in self.configfile.parse_file()})
+                              in configfile.parse_file()})
 
-    #pylint: disable=arguments-differ
     def set(self, name, value='1'):
         """Set name to the given value and make it active."""
 
@@ -644,23 +657,10 @@
             raise ValueError(f'Feature is unstable: \'{name}\'')
 
         if name not in self.settings:
-            self.configfile.templates.append((name, '', '#define ' + name + ' '))
+            self._get_configfile().templates.append((name, '', '#define ' + name + ' '))
 
         super().set(name, value)
 
-    def write(self, filename=None):
-        """Write the whole configuration to the file it was read from.
-
-        If filename is specified, write to this file instead.
-        """
-
-        self.configfile.write(self.settings, filename)
-
-    def filename(self):
-        """Get the name of the config file."""
-
-        return self.configfile.filename
-
 class CombinedConfig(Config):
     """Representation of MbedTLS and PSA crypto configuration
 
@@ -677,13 +677,14 @@
                 self.crypto_configfile = config
             else:
                 raise ValueError(f'Invalid configfile: {config}')
+            self.configfiles.append(config)
 
-        self.settings.update({name: Setting(active, name, value, section, configfile)
+        self.settings.update({name: Setting(configfile, active, name, value, section)
                               for configfile in [self.mbedtls_configfile, self.crypto_configfile]
                               for (active, name, value, section) in configfile.parse_file()})
 
     _crypto_regexp = re.compile(r'$PSA_.*')
-    def _get_configfile(self, name):
+    def _get_configfile(self, name=None):
         """Find a config type for a setting name"""
 
         if name in self.settings:
@@ -693,7 +694,6 @@
         else:
             return self.mbedtls_configfile
 
-    #pylint: disable=arguments-differ
     def set(self, name, value=None):
         """Set name to the given value and make it active."""
 
@@ -712,7 +712,7 @@
         if name not in self.settings:
             configfile.templates.append((name, '', '#define ' + name + ' '))
 
-        super().set(name, value, configfile)
+        super().set(name, value)
 
     #pylint: disable=arguments-differ
     def write(self, mbedtls_file=None, crypto_file=None):
