ensure value object contains only one item
diff --git a/reclass/utils/compitem.py b/reclass/utils/compitem.py
new file mode 100644
index 0000000..0e95d48
--- /dev/null
+++ b/reclass/utils/compitem.py
@@ -0,0 +1,53 @@
+#
+# -*- coding: utf-8 -*-
+#
+# This file is part of reclass
+#
+
+from reclass.utils.mergeoptions import MergeOptions
+from reclass.utils.dictpath import DictPath
+from reclass.errors import UndefinedVariableError
+
+class CompItem(object):
+
+    def __init__(self, items):
+        self._items = items
+        self._refs = []
+        self._allRefs = False
+        self.assembleRefs()
+
+    def assembleRefs(self, context={}):
+        self._refs = []
+        self._allRefs = True
+        options = MergeOptions()
+        for item in self._items:
+            if item.has_references():
+                item.assembleRefs(context)
+                self._refs.extend(item.get_references())
+                if item.allRefs() is False:
+                    self._allRefs = False
+
+    def contents(self):
+        return self._items
+
+    def allRefs(self):
+        return self._allRefs
+
+    def has_references(self):
+        return len(self._refs) > 0
+
+    def get_references(self):
+        return self._refs
+
+    def render(self, context):
+        # Preserve type if only one item
+        if len(self._items) == 1:
+            return self._items[0].render(context)
+        # Multiple items
+        string = ''
+        for item in self._items:
+            string += str(item.render(context))
+        return string
+
+    def __repr__(self):
+        return 'CompItem(%r)' % self._items
diff --git a/reclass/utils/value.py b/reclass/utils/value.py
index 0e11071..b934b1e 100644
--- a/reclass/utils/value.py
+++ b/reclass/utils/value.py
@@ -6,11 +6,12 @@
 
 import pyparsing as pp
 
-from reclass.utils.mergeoptions import *
-from reclass.utils.dictitem import *
-from reclass.utils.listitem import *
-from reclass.utils.refitem import *
-from reclass.utils.scaitem import *
+from reclass.utils.mergeoptions import MergeOptions
+from reclass.utils.compitem import CompItem
+from reclass.utils.dictitem import DictItem
+from reclass.utils.listitem import ListItem
+from reclass.utils.refitem import RefItem
+from reclass.utils.scaitem import ScaItem
 from reclass.defaults import PARAMETER_INTERPOLATION_DELIMITER, PARAMETER_INTERPOLATION_SENTINELS
 
 _STR = 'STR'
@@ -55,21 +56,24 @@
 
     def __init__(self, val, delimiter=PARAMETER_INTERPOLATION_DELIMITER):
         self._delimiter = delimiter
-        self._items = []
         self._refs = []
         self._allRefs = False
         self._container = False
         if isinstance(val, str):
             tokens = Value._parser.leaveWhitespace().parseString(val).asList()
-            self._items = self._createItems(tokens)
+            items = self._createItems(tokens)
+            if len(items) is 1:
+                self._item = items[0]
+            else:
+                self._item = CompItem(items)
         elif isinstance(val, list):
-            self._items.append(ListItem(val))
+            self._item = ListItem(val)
             self._container = True
         elif isinstance(val, dict):
-            self._items.append(DictItem(val))
+            self._item = DictItem(val)
             self._container = True
         else:
-            self._items.append(ScaItem(val))
+            self._item = ScaItem(val)
         self.assembleRefs()
 
     def _createRef(self, tokens):
@@ -91,14 +95,13 @@
         return items
 
     def assembleRefs(self, context={}):
-        self._refs = []
-        self._allRefs = True
-        for item in self._items:
-            if item.has_references():
-                item.assembleRefs(context)
-                self._refs.extend(item.get_references())
-            if item.allRefs() is False:
-                self._allRefs = False
+        if self._item.has_references():
+            self._item.assembleRefs(context)
+            self._refs = self._item.get_references()
+            self._allRefs = self._item.allRefs()
+        else:
+            self._refs = []
+            self._allRefs = True
 
     def is_container(self):
         return self._container
@@ -112,29 +115,15 @@
     def get_references(self):
         return self._refs
 
-    def render(self, context, options=None):
-        if options is None:
-            options = MergeOptions()
-        if len(self._items) == 1:
-            return self._items[0].render(context, options)
-        value = ''
-        for item in self._items:
-            value += str(item.render(context, options))
-        return value
+    def render(self, context, dummy=None):
+        return self._item.render(context)
 
     def contents(self):
-        if len(self._items) == 1:
-            return self._items[0].contents()
-        value = ''
-        for item in self._items:
-            value += str(item.contents())
-        return value
+        return self._item.contents()
 
     def merge_over(self, value, options):
-        if len(self._items) is 1 and len(value._items) is 1:
-            self._items[0] = self._items[0].merge_over(value._items[0], options)
-            return self
-        raise TypeError('Cannot merge %s onto %s' % (repr(self), repr(value)))
+        self._item = self._item.merge_over(value._item, options)
+        return self
 
     def __repr__(self):
-        return 'Value(%r)' % self._items
+        return 'Value(%r)' % self._item