diff --git a/reclass/datatypes/tests/test_parameters.py b/reclass/datatypes/tests/test_parameters.py
index c1ef640..e33f3b8 100644
--- a/reclass/datatypes/tests/test_parameters.py
+++ b/reclass/datatypes/tests/test_parameters.py
@@ -346,6 +346,14 @@
         p.interpolate()
         self.assertEqual(p.as_dict(), r)
 
+    def test_overwrite_none(self):
+        p1 = Parameters({'A': None, 'B': None, 'C': None, 'D': None, 'E': None, 'F': None})
+        p2 = Parameters({'A': 'abc', 'B': [1, 2, 3], 'C': {'a': 'aaa', 'b': 'bbb'}, 'D': '${A}', 'E': '${B}', 'F': '${C}'})
+        r = {'A': 'abc', 'B': [1, 2, 3], 'C': {'a': 'aaa', 'b': 'bbb'}, 'D': 'abc', 'E': [1, 2, 3], 'F': {'a': 'aaa', 'b': 'bbb'}}
+        p1.merge(p2)
+        p1.interpolate()
+        self.assertEqual(p1.as_dict(), r)
+
     def test_interpolate_escaping(self):
         v = 'bar'.join(PARAMETER_INTERPOLATION_SENTINELS)
         d = {'foo': ESCAPE_CHARACTER + 'bar'.join(PARAMETER_INTERPOLATION_SENTINELS),
diff --git a/reclass/utils/dictitem.py b/reclass/utils/dictitem.py
index fca9982..9492f49 100644
--- a/reclass/utils/dictitem.py
+++ b/reclass/utils/dictitem.py
@@ -44,7 +44,7 @@
         from reclass.utils.scaitem import ScaItem
 
         if isinstance(item, ScaItem):
-            if options.allow_dict_over_scalar:
+            if item.contents() is None or options.allow_dict_over_scalar:
                 return self
             else:
                 raise TypeError('allow dict over scalar = False: cannot merge %s onto %s' % (repr(self), repr(item)))
diff --git a/reclass/utils/listitem.py b/reclass/utils/listitem.py
index ed13257..4abf9a6 100644
--- a/reclass/utils/listitem.py
+++ b/reclass/utils/listitem.py
@@ -45,7 +45,9 @@
                 item._list.append(i)
             return item
         elif isinstance(item, ScaItem):
-            if options.allow_list_over_scalar:
+            if item.contents() is None:
+                return self
+            elif options.allow_list_over_scalar:
                 self._list.insert(0, item.contents())
                 return self
             else:
diff --git a/reclass/utils/valuelist.py b/reclass/utils/valuelist.py
index 5e57f6f..0fa7d0a 100644
--- a/reclass/utils/valuelist.py
+++ b/reclass/utils/valuelist.py
@@ -64,11 +64,11 @@
         if options is None:
             options = MergeOptions()
         output = None
+        deepCopied = False
         for n, value in enumerate(self._values):
-            if n is 0:
-                output = self._values[0].render(context, options)
-                if isinstance(output, list):
-                    output = copy.deepcopy(output)
+            if output is None:
+                output = self._values[n].render(context, options)
+                deepCopied = False
             else:
                 new = value.render(context, options)
                 if isinstance(output, dict) and isinstance(new, dict):
@@ -78,6 +78,8 @@
                     output = p1.as_dict()
                     continue
                 elif isinstance(output, list) and isinstance(new, list):
+                    if not deepCopied:
+                        output = copy.deepcopy(output)
                     output.extend(new)
                     continue
                 elif isinstance(output, (dict, list)) or isinstance(new, (dict, list)):
