diff --git a/reclass/defaults.py b/reclass/defaults.py
index 24801ef..d3ac29d 100644
--- a/reclass/defaults.py
+++ b/reclass/defaults.py
@@ -38,4 +38,3 @@
 MERGE_ALLOW_DICT_OVER_SCALAR = False
 
 AUTOMATIC_RECLASS_PARAMETERS = True
-AUTOMATIC_EXPORT_PARAMETERS = True
diff --git a/reclass/values/expitem.py b/reclass/values/expitem.py
index 22a473b..252ba38 100644
--- a/reclass/values/expitem.py
+++ b/reclass/values/expitem.py
@@ -9,44 +9,32 @@
 from item import Item
 from reclass.utils.dictpath import DictPath
 from reclass.errors import UndefinedVariableError
-from reclass.defaults import AUTOMATIC_EXPORT_PARAMETERS
 
 class ExpItem(Item):
 
-    def __init__(self, items, delimiter):
+    def __init__(self, item, delimiter):
         self._delimiter = delimiter
-        self._items = items
+        self._expr = item.render(None, None)
 
     def contents(self):
-        return self._items
+        return self._expr
 
     def has_exports(self):
         return True
 
-    def _resolve(self, path, key, dictionary):
+    def _resolve(self, path, dictionary):
         try:
             return path.get_value(dictionary)
         except KeyError as e:
-            raise UndefinedVariableError(key)
-
-    def _key(self):
-        if len(self._items) == 1:
-            return self._items[0].contents()
-        string = ''
-        for item in self._items:
-            string += item.contents()
-        return string
+            raise UndefinedVariableError(str(path))
 
     def render(self, context, exports):
         result = []
-        exp_key = self._key()
-        exp_path = DictPath(self._delimiter, exp_key)
+        exp_path = DictPath(self._delimiter, self._expr)
         exp_path.drop_first()
         for node, items in exports.iteritems():
             if exp_path.exists_in(items):
-                value = copy.deepcopy(self._resolve(exp_path, exp_key, items))
-                if isinstance(value, dict) and AUTOMATIC_EXPORT_PARAMETERS:
-                    value['_node_'] = node
+                value = { node: copy.deepcopy(self._resolve(exp_path, items)) }
                 result.append(value)
         return result
 
diff --git a/reclass/values/value.py b/reclass/values/value.py
index 275ab7f..39e55c1 100644
--- a/reclass/values/value.py
+++ b/reclass/values/value.py
@@ -138,7 +138,10 @@
         items = []
         for token in tokens:
             items.append(ScaItem(token[1]))
-        return ExpItem(items, self._delimiter)
+        if len(items) == 1:
+            return ExpItem(items[0], self._delimiter)
+        else:
+            return ExpItem(CompItem(items), self_delimiter)
 
     def _createItems(self, tokens):
         items = []
