diff --git a/reclass/datatypes/parameters.py b/reclass/datatypes/parameters.py
index 4b93b31..ece5b1c 100644
--- a/reclass/datatypes/parameters.py
+++ b/reclass/datatypes/parameters.py
@@ -263,6 +263,12 @@
             self._interpolate_inner(path, path.get_value(self._base), options)
 
     def _interpolate_inner(self, path, value, options):
+        if not isinstance(value, (Value, ValueList)):
+            # references to lists and dicts are only deepcopied when merged
+            # together so it's possible a value with references in a referenced
+            # list or dict has already been visited by _interpolate_inner
+            del self._unrendered[path]
+            return
         self._unrendered[path] = False  # mark as seen
         for ref in value.get_references():
             path_from_ref = DictPath(self.delimiter, ref)
@@ -285,12 +291,9 @@
                 new = value.render(self._base, options)
                 if isinstance(new, dict):
                     self._render_simple_dict(new, path, options)
-                    path.set_value(self._base, copy.deepcopy(new))
                 elif isinstance(new, list):
                     self._render_simple_list(new, path, options)
-                    path.set_value(self._base, copy.deepcopy(new))
-                else:
-                    path.set_value(self._base, new)
+                path.set_value(self._base, new)
 
                 # remove the reference from the unrendered list
                 del self._unrendered[path]
diff --git a/reclass/datatypes/tests/test_parameters.py b/reclass/datatypes/tests/test_parameters.py
index 3e2bd86..77c45e3 100644
--- a/reclass/datatypes/tests/test_parameters.py
+++ b/reclass/datatypes/tests/test_parameters.py
@@ -339,5 +339,6 @@
         p1.merge(p2)
         p1.interpolate()
         self.assertEqual(p1.as_dict(), r)
+
 if __name__ == '__main__':
     unittest.main()
diff --git a/reclass/utils/dictitem.py b/reclass/utils/dictitem.py
index 8185d23..fca9982 100644
--- a/reclass/utils/dictitem.py
+++ b/reclass/utils/dictitem.py
@@ -6,8 +6,8 @@
 
 class DictItem(object):
 
-    def __init__(self, items):
-        self._items = items
+    def __init__(self, item):
+        self._dict = item
         self._refs = []
         self._allRefs = False
         self.assembleRefs()
@@ -15,7 +15,7 @@
     def assembleRefs(self, context={}):
         self._refs = []
         self._allRefs = True
-        self._assembleRefs_recurse_dict(self._items)
+        self._assembleRefs_recurse_dict(self._dict)
 
     def _assembleRefs_recurse_dict(self, items):
         for key, item in items.iteritems():
@@ -29,7 +29,7 @@
                     self._allRefs = False
 
     def contents(self):
-        return self._items
+        return self._dict
 
     def allRefs(self):
         return self._allRefs
@@ -51,10 +51,7 @@
         raise TypeError('Cannot merge %s over %s' % (repr(self), repr(item)))
 
     def render(self, context):
-        value = {}
-        for key, item in self._items.iteritems():
-            value[key] = item
-        return value
+        return self._dict
 
     def __repr__(self):
-        return 'DictItem(%r)' % self._items
+        return 'DictItem(%r)' % self._dict
diff --git a/reclass/utils/listitem.py b/reclass/utils/listitem.py
index f79212e..291d16a 100644
--- a/reclass/utils/listitem.py
+++ b/reclass/utils/listitem.py
@@ -8,8 +8,8 @@
 
 class ListItem(object):
 
-    def __init__(self, items):
-        self._items = items
+    def __init__(self, item):
+        self._list = item
         self._refs = []
         self._allRefs = False
         self.assembleRefs()
@@ -17,7 +17,7 @@
     def assembleRefs(self, context={}):
         self._refs = []
         self._allRefs = True
-        for item in self._items:
+        for item in self._list:
             if item.has_references():
                 for ref in item.get_references():
                     self._refs.append(ref)
@@ -25,7 +25,7 @@
                     self._allRefs = False
 
     def contents(self):
-        return self._items
+        return self._list
 
     def allRefs(self):
         return self._allRefs
@@ -37,23 +37,20 @@
         return self._refs
 
     def render(self, context):
-        value = []
-        for item in self._items:
-            value.append(item)
-        return value
+        return self._list
 
     def merge_over(self, item, options):
         if isinstance(item, ListItem):
-            for i in self._items:
-                item._items.append(i)
+            for i in self._list:
+                item._list.append(i)
             return item
         elif isinstance(item, scaitem.ScaItem):
             if options.allow_list_over_scalar:
-                self._items.insert(0, item.contents())
+                self._list.insert(0, item.contents())
                 return self
             else:
                 raise TypeError('allow list over scalar = False: cannot merge %s onto %s' % (repr(self), repr(item)))
         raise TypeError('Cannot merge %s over %s' % (repr(self), repr(item)))
 
     def __repr__(self):
-        return 'ListItem(%r)' % (self._items)
+        return 'ListItem(%r)' % (self._list)
