diff --git a/reclass/datatypes/parameters.py b/reclass/datatypes/parameters.py
index 3af80ff..baa92c3 100644
--- a/reclass/datatypes/parameters.py
+++ b/reclass/datatypes/parameters.py
@@ -222,7 +222,7 @@
 
     def _render_simple_container(self, container, key, value, path, options):
             if isinstance(value, ValueList):
-                if value.has_references() or value.has_exports():
+                if value.is_complex():
                     self._unrendered[path.new_subpath(key)] = True
                     return
                 else:
@@ -236,7 +236,7 @@
                 self._render_simple_list(value, path.new_subpath(key), options)
                 container[key] = value
             elif isinstance(value, Value):
-                if value.has_references() or value.has_exports():
+                if value.is_complex():
                     self._unrendered[path.new_subpath(key)] = True
                 else:
                     container[key] = value.render(None, None, options)
diff --git a/reclass/utils/compitem.py b/reclass/utils/compitem.py
index 12845f7..a49dfea 100644
--- a/reclass/utils/compitem.py
+++ b/reclass/utils/compitem.py
@@ -4,8 +4,9 @@
 # This file is part of reclass
 #
 
+from reclass.utils.item import Item
 
-class CompItem(object):
+class CompItem(Item):
 
     def __init__(self, items):
         self._items = items
@@ -35,9 +36,6 @@
     def get_references(self):
         return self._refs
 
-    def has_exports(self):
-        return False
-
     def render(self, context, exports):
         # Preserve type if only one item
         if len(self._items) == 1:
diff --git a/reclass/utils/dictitem.py b/reclass/utils/dictitem.py
index 1782e70..f652059 100644
--- a/reclass/utils/dictitem.py
+++ b/reclass/utils/dictitem.py
@@ -4,48 +4,16 @@
 # This file is part of reclass
 #
 
-class DictItem(object):
+from reclass.utils.item import Item
+
+class DictItem(Item):
 
     def __init__(self, item):
         self._dict = item
-        self._refs = []
-        self._allRefs = False
-        self.assembleRefs()
-
-    def assembleRefs(self, context={}):
-        self._refs = []
-        self._allRefs = True
-        self._assembleRefs_recurse_dict(self._dict)
-
-    def _assembleRefs_recurse_dict(self, items):
-        from reclass.utils.value import Value
-        from reclass.utils.valuelist import ValueList
-
-        for key, item in items.iteritems():
-            if isinstance(item, dict):
-                self._assembleRefs_recurse_dict(item)
-                continue
-            if isinstance(item, (Value, ValueList)) and item.has_references():
-                for ref in item.get_references():
-                    self._refs.append(ref)
-                if not item.allRefs():
-                    self._allRefs = False
 
     def contents(self):
         return self._dict
 
-    def allRefs(self):
-        return self._allRefs
-
-    def has_references(self):
-        return len(self._refs) > 0
-
-    def has_exports(self):
-        return False
-
-    def get_references(self):
-        return self._refs
-
     def merge_over(self, item, options):
         from reclass.utils.scaitem import ScaItem
 
diff --git a/reclass/utils/expitem.py b/reclass/utils/expitem.py
index fe2bf31..3798165 100644
--- a/reclass/utils/expitem.py
+++ b/reclass/utils/expitem.py
@@ -5,9 +5,10 @@
 #
 
 from reclass.utils.dictpath import DictPath
+from reclass.utils.item import Item
 from reclass.errors import UndefinedVariableError
 
-class ExpItem(object):
+class ExpItem(Item):
 
     def __init__(self, items, delimiter):
         self._delimiter = delimiter
@@ -16,9 +17,6 @@
     def contents(self):
         return self._items
 
-    def has_references(self):
-        return False
-
     def has_exports(self):
         return True
 
diff --git a/reclass/utils/item.py b/reclass/utils/item.py
new file mode 100644
index 0000000..035f3fb
--- /dev/null
+++ b/reclass/utils/item.py
@@ -0,0 +1,25 @@
+#
+# -*- coding: utf-8 -*-
+#
+# This file is part of reclass
+#
+
+from reclass.utils.dictpath import DictPath
+from reclass.errors import UndefinedVariableError
+
+class Item(object):
+
+    def __init__(self):
+        return
+
+    def allRefs(self):
+        return True
+
+    def has_references(self):
+        return False
+
+    def has_exports(self):
+        return False
+
+    def is_complex():
+        return (self.has_references | self.has_exports)
diff --git a/reclass/utils/listitem.py b/reclass/utils/listitem.py
index d80ebc9..a1c66bc 100644
--- a/reclass/utils/listitem.py
+++ b/reclass/utils/listitem.py
@@ -4,42 +4,16 @@
 # This file is part of reclass
 #
 
-class ListItem(object):
+from reclass.utils.item import Item
+
+class ListItem(Item):
 
     def __init__(self, item):
         self._list = item
-        self._refs = []
-        self._allRefs = False
-        self.assembleRefs()
-
-    def assembleRefs(self, context={}):
-        from reclass.utils.value import Value
-        from reclass.utils.valuelist import ValueList
-
-        self._refs = []
-        self._allRefs = True
-        for item in self._list:
-            if isinstance(item, (Value, ValueList)) and item.has_references():
-                for ref in item.get_references():
-                    self._refs.append(ref)
-                if not item.allRefs():
-                    self._allRefs = False
 
     def contents(self):
         return self._list
 
-    def allRefs(self):
-        return self._allRefs
-
-    def has_references(self):
-        return len(self._refs) > 0
-
-    def has_exports(self):
-        return False
-
-    def get_references(self):
-        return self._refs
-
     def render(self, context, exports):
         return self._list
 
diff --git a/reclass/utils/refitem.py b/reclass/utils/refitem.py
index 7f1f759..9e3b2d2 100644
--- a/reclass/utils/refitem.py
+++ b/reclass/utils/refitem.py
@@ -5,9 +5,10 @@
 #
 
 from reclass.utils.dictpath import DictPath
+from reclass.utils.item import Item
 from reclass.errors import UndefinedVariableError
 
-class RefItem(object):
+class RefItem(Item):
 
     def __init__(self, items, delimiter):
         self._delimiter = delimiter
@@ -40,9 +41,6 @@
     def has_references(self):
         return len(self._refs) > 0
 
-    def has_exports(self):
-        return False
-
     def get_references(self):
         return self._refs
 
diff --git a/reclass/utils/scaitem.py b/reclass/utils/scaitem.py
index 421afdc..6748945 100644
--- a/reclass/utils/scaitem.py
+++ b/reclass/utils/scaitem.py
@@ -6,30 +6,16 @@
 
 from reclass.utils.dictitem import DictItem
 from reclass.utils.listitem import ListItem
+from reclass.utils.item import Item
 
-class ScaItem(object):
+class ScaItem(Item):
 
     def __init__(self, value):
         self._value = value
 
-    def assembleRefs(self, context={}):
-        return
-
-    def allRefs(self):
-        return True
-
-    def has_references(self):
-        return False
-
-    def has_exports(self):
-        return False
-
     def contents(self):
         return self._value
 
-    def merge_over_with_context(self, item, context, options):
-        pass
-
     def merge_over(self, item, options):
         if isinstance(item, ScaItem):
             return self
diff --git a/reclass/utils/value.py b/reclass/utils/value.py
index 65dbe8d..d3ea13b 100644
--- a/reclass/utils/value.py
+++ b/reclass/utils/value.py
@@ -172,6 +172,9 @@
     def has_exports(self):
         return self._item.has_exports()
 
+    def is_complex(self):
+        return (self.has_references() | self.has_exports())
+
     def get_references(self):
         return self._refs
 
diff --git a/reclass/utils/valuelist.py b/reclass/utils/valuelist.py
index 29d6d68..b630a04 100644
--- a/reclass/utils/valuelist.py
+++ b/reclass/utils/valuelist.py
@@ -36,6 +36,9 @@
     def has_exports(self):
         return self._has_exports
 
+    def is_complex(self):
+        return (self.has_references() | self.has_exports())
+
     def get_references(self):
         return self._refs
 
