diff --git a/reclass/values/compitem.py b/reclass/values/compitem.py
index 50188ef..ddde683 100644
--- a/reclass/values/compitem.py
+++ b/reclass/values/compitem.py
@@ -41,10 +41,8 @@
         if len(self._items) == 1:
             return self._items[0].render(context, exports)
         # Multiple items
-        string = ''
-        for item in self._items:
-            string += str(item.render(context, exports))
-        return string
+        strings = [ str(i.render(context, exports)) for i in self._items ]
+        return "".join(strings)
 
     def __repr__(self):
         return 'CompItem(%r)' % self._items
diff --git a/reclass/values/refitem.py b/reclass/values/refitem.py
index a028908..d2a12b5 100644
--- a/reclass/values/refitem.py
+++ b/reclass/values/refitem.py
@@ -20,17 +20,16 @@
     def assembleRefs(self, context={}):
         self._refs = []
         self._allRefs = True
-        value = ''
         for item in self._items:
             if item.has_references():
                 item.assembleRefs(context)
                 self._refs.extend(item.get_references())
-            try:
-                value += str(item.render(context, None))
-            except UndefinedVariableError as e:
-                self._allRefs = False
-        if self._allRefs:
+        try:
+            strings = [ str(i.render(context, None)) for i in self._items ]
+            value = "".join(strings)
             self._refs.append(value)
+        except UndefinedVariableError as e:
+            self._allRefs = False
 
     def contents(self):
         return self._items
@@ -54,10 +53,8 @@
     def render(self, context, exports):
         if len(self._items) == 1:
             return self._resolve(self._items[0].render(context, exports), context)
-        string = ''
-        for item in self._items:
-            string += str(item.render(context, exports))
-        return self._resolve(string, context)
+        strings = [ str(i.render(context, exports)) for i in self._items ]
+        return self._resolve("".join(strings), context)
 
     def __repr__(self):
         return 'RefItem(%r)' % self._items
