diff --git a/classes/Settings.m b/classes/Settings.m
index b24a7e789d80223d54a4457362103f19eae14ef7..88b8a168a560923a835f4272743dce891c8ef2a3 100644
--- a/classes/Settings.m
+++ b/classes/Settings.m
@@ -37,28 +37,44 @@ classdef Settings < Config & dynamicprops
             varsIn = obj.getConfig(configNames);
             obj.loadConfig(varsIn);
         end
+    end
 
-        function merge(target, source)
+    methods(Static)
+        function target = read(target, source, targetFields)
             arguments
-                target
-                source
+                target      {mustBeA(target, {'struct', 'Settings'})}
+                source      struct
+            end
+
+            arguments (Repeating)
+                targetFields {mustBeA(targetFields, {'char', 'string'})}
             end
-            % MERGE - merges two settings classes
-            %   Priority is given to the source settings
-            %   empty fields are ignored
+            % MERGE - reads and applies data from a source struct
+            %   Usage: settings.read(<struct>, <name of settings field>)
+            %
+            %   Source fields have priority over settings fields, meaning
+            %   the source will overwrite existing settings with the same
+            %   name
+            %
+            %   Empty fields in the source struct are ignored
 
             fields = fieldnames(source)';
+            if isempty(fields), return; end
+
+            if length(targetFields) > 1
+                target.(targetFields{1}) = Settings.read( ...
+                    target.(targetFields{1}), ...
+                    source, ...
+                    targetFields{2:end});
+                return;
+            end
+
+            % WIP: fix wrong assignment
+            targetField = targetFields{1};
             for field = fields
                 fd = field{1};
                 if isempty(source.(fd)), continue; end
-                if isempty(findprop(target, fd))
-                    target.addprop(fd);
-                    target.(fd) = source.(fd);
-                elseif isa(source.(fd), 'Settings')
-                    target.(fd).merge(source.(fd))
-                else
-                    target.(fd) = source.(fd);
-                end
+                target.(targetField).(fd) = source.(fd);
             end
         end
     end