diff --git a/reclass/values/compitem.py b/reclass/values/compitem.py
index ddde683..8a22376 100644
--- a/reclass/values/compitem.py
+++ b/reclass/values/compitem.py
@@ -9,6 +9,7 @@
 class CompItem(Item):
 
     def __init__(self, items):
+        self.type = Item.COMPOSITE
         self._items = items
         self._refs = []
         self._allRefs = False
diff --git a/reclass/values/dictitem.py b/reclass/values/dictitem.py
index 7bd4da1..1689aed 100644
--- a/reclass/values/dictitem.py
+++ b/reclass/values/dictitem.py
@@ -9,6 +9,7 @@
 class DictItem(Item):
 
     def __init__(self, item):
+        self.type = Item.DICTIONARY
         self._dict = item
 
     def contents(self):
@@ -18,9 +19,7 @@
         return True
 
     def merge_over(self, item, options):
-        from scaitem import ScaItem
-
-        if isinstance(item, ScaItem):
+        if item.type == Item.SCALAR:
             if item.contents() is None or options.allow_dict_over_scalar:
                 return self
             else:
diff --git a/reclass/values/expitem.py b/reclass/values/expitem.py
index 7641441..85253c7 100644
--- a/reclass/values/expitem.py
+++ b/reclass/values/expitem.py
@@ -74,6 +74,7 @@
     _parser = _get_parser()
 
     def __init__(self, item, delimiter):
+        self.type = Item.EXPORT
         self._delimiter = delimiter
         self._type = None
         self._refs = []
diff --git a/reclass/values/item.py b/reclass/values/item.py
index 9c2fabf..19d1d34 100644
--- a/reclass/values/item.py
+++ b/reclass/values/item.py
@@ -9,8 +9,12 @@
 
 class Item(object):
 
-    def __init__(self):
-        return
+    COMPOSITE = 1
+    DICTIONARY = 2
+    EXPORT = 3
+    LIST = 4
+    REFERENCE = 5
+    SCALAR = 6
 
     def allRefs(self):
         return True
diff --git a/reclass/values/listitem.py b/reclass/values/listitem.py
index 57d5fdf..06f1e10 100644
--- a/reclass/values/listitem.py
+++ b/reclass/values/listitem.py
@@ -9,6 +9,7 @@
 class ListItem(Item):
 
     def __init__(self, item):
+        self.type = Item.LIST
         self._list = item
 
     def contents(self):
@@ -21,13 +22,10 @@
         return self._list
 
     def merge_over(self, item, options):
-        from scaitem import ScaItem
-
-        if isinstance(item, ListItem):
-            for i in self._list:
-                item._list.append(i)
+        if item.type == Item.LIST:
+            item._list.extend(self._list)
             return item
-        elif isinstance(item, ScaItem):
+        elif item.type == Item.SCALAR:
             if item.contents() is None:
                 return self
             elif options.allow_list_over_scalar:
diff --git a/reclass/values/refitem.py b/reclass/values/refitem.py
index d2a12b5..e841468 100644
--- a/reclass/values/refitem.py
+++ b/reclass/values/refitem.py
@@ -11,6 +11,7 @@
 class RefItem(Item):
 
     def __init__(self, items, delimiter):
+        self.type = Item.REFERENCE
         self._delimiter = delimiter
         self._items = items
         self._refs = []
diff --git a/reclass/values/scaitem.py b/reclass/values/scaitem.py
index 941e61b..a1a5a21 100644
--- a/reclass/values/scaitem.py
+++ b/reclass/values/scaitem.py
@@ -9,23 +9,21 @@
 class ScaItem(Item):
 
     def __init__(self, value):
+        self.type = Item.SCALAR
         self._value = value
 
     def contents(self):
         return self._value
 
     def merge_over(self, item, options):
-        from dictitem import DictItem
-        from listitem import ListItem
-
-        if isinstance(item, ScaItem):
+        if item.type == Item.SCALAR:
             return self
-        elif isinstance(item, ListItem):
+        elif item.type == Item.LIST:
             if options.allow_scalar_over_list:
                 return self
             else:
                 raise TypeError('allow scalar over list = False: cannot merge %s over %s' % (repr(self), repr(item)))
-        elif isinstance(item, DictItem):
+        elif item.type == Item.DICTIONARY:
             if options.allow_scalar_over_dict:
                 return self
             else:
