diff --git a/reclass/datatypes/parameters.py b/reclass/datatypes/parameters.py
index 6fcdd6e..711db88 100644
--- a/reclass/datatypes/parameters.py
+++ b/reclass/datatypes/parameters.py
@@ -227,14 +227,14 @@
         for n, value in enumerate(item_list):
             self._render_simple_container(item_list, n, value, path)
 
-    def interpolate(self, exports=None):
+    def interpolate(self, inventory=None):
         self._initialise_interpolate(self._options)
         while len(self._unrendered) > 0:
             # we could use a view here, but this is simple enough:
             # _interpolate_inner removes references from the refs hash after
             # processing them, so we cannot just iterate the dict
             path, v = self._unrendered.iteritems().next()
-            self._interpolate_inner(path, exports)
+            self._interpolate_inner(path, inventory)
 
     def initialise_interpolation(self, options=None):
         self._unrendered = None
@@ -251,7 +251,7 @@
             self._has_inv_query = False
             self._render_simple_dict(self._base, DictPath(self._delimiter))
 
-    def _interpolate_inner(self, path, exports):
+    def _interpolate_inner(self, path, inventory):
         value = path.get_value(self._base)
         if not isinstance(value, (Value, ValueList)):
             # references to lists and dicts are only deepcopied when merged
@@ -260,14 +260,14 @@
             del self._unrendered[path]
             return
         self._unrendered[path] = False
-        self._interpolate_references(path, value, exports)
-        new = self._interpolate_render_value(path, value, exports)
+        self._interpolate_references(path, value, inventory)
+        new = self._interpolate_render_value(path, value, inventory)
         path.set_value(self._base, new)
         del self._unrendered[path]
 
-    def _interpolate_render_value(self, path, value, exports):
+    def _interpolate_render_value(self, path, value, inventory):
         try:
-            new = value.render(self._base, exports, self._options)
+            new = value.render(self._base, inventory, self._options)
         except UndefinedVariableError as e:
             raise UndefinedVariableError(e.var, path)
 
@@ -277,7 +277,7 @@
             self._render_simple_list(new, path)
         return new
 
-    def _interpolate_references(self, path, value, exports):
+    def _interpolate_references(self, path, value, inventory):
         all_refs = False
         while not all_refs:
             for ref in value.get_references():
@@ -292,14 +292,14 @@
                         # faced with a cyclical reference.
                         raise InfiniteRecursionError(path, ref)
                     else:
-                        self._interpolate_inner(path_from_ref, exports)
+                        self._interpolate_inner(path_from_ref, inventory)
                 else:
                     # ensure ancestor keys are already dereferenced
                     ancestor = DictPath(self._delimiter)
                     for k in path_from_ref.key_parts():
                         ancestor = ancestor.new_subpath(k)
                         if ancestor in self._unrendered:
-                            self._interpolate_inner(ancestor, exports)
+                            self._interpolate_inner(ancestor, inventory)
             if value.allRefs():
                 all_refs = True
             else:
diff --git a/reclass/values/compitem.py b/reclass/values/compitem.py
index 8a22376..ea342a5 100644
--- a/reclass/values/compitem.py
+++ b/reclass/values/compitem.py
@@ -37,12 +37,12 @@
     def get_references(self):
         return self._refs
 
-    def render(self, context, exports):
+    def render(self, context, inventory):
         # Preserve type if only one item
         if len(self._items) == 1:
-            return self._items[0].render(context, exports)
+            return self._items[0].render(context, inventory)
         # Multiple items
-        strings = [ str(i.render(context, exports)) for i in self._items ]
+        strings = [ str(i.render(context, inventory)) for i in self._items ]
         return "".join(strings)
 
     def __repr__(self):
diff --git a/reclass/values/dictitem.py b/reclass/values/dictitem.py
index 1689aed..bc58f67 100644
--- a/reclass/values/dictitem.py
+++ b/reclass/values/dictitem.py
@@ -26,7 +26,7 @@
                 raise TypeError('allow dict over scalar = False: cannot merge %s onto %s' % (repr(self), repr(item)))
         raise TypeError('Cannot merge %s over %s' % (repr(self), repr(item)))
 
-    def render(self, context, exports):
+    def render(self, context, inventory):
         return self._dict
 
     def __repr__(self):
diff --git a/reclass/values/invitem.py b/reclass/values/invitem.py
index 36fa9a2..0841a44 100644
--- a/reclass/values/invitem.py
+++ b/reclass/values/invitem.py
@@ -122,15 +122,15 @@
         except KeyError as e:
             raise UndefinedVariableError(str(path))
 
-    def _value_expression(self, exports):
+    def _value_expression(self, inventory):
         results = {}
         path = DictPath(self._delimiter, self._expr[0][1]).drop_first()
-        for node, items in exports.iteritems():
+        for node, items in inventory.iteritems():
             if path.exists_in(items):
                 results[node] = copy.deepcopy(self._resolve(path, items))
         return results
 
-    def _test_expression(self, context, exports):
+    def _test_expression(self, context, inventory):
         export_path = None
         parameter_path = None
         parameter_value = None
@@ -156,7 +156,7 @@
         value_path.drop_first()
 
         results = {}
-        for node, items in exports.iteritems():
+        for node, items in inventory.iteritems():
             if export_path.exists_in(items):
                 export_value = self._resolve(export_path, items)
                 test_passed = False
@@ -181,11 +181,11 @@
             value = var
         return export, parameter, value
 
-    def render(self, context, exports):
+    def render(self, context, inventory):
         if self._expr_type == _VALUE:
-            return self._value_expression(exports)
+            return self._value_expression(inventory)
         elif self._expr_type == _TEST:
-            return self._test_expression(context, exports)
+            return self._test_expression(context, inventory)
         raise ExpressionError('Failed to render %s' % str(self))
 
     def __str__(self):
diff --git a/reclass/values/listitem.py b/reclass/values/listitem.py
index 06f1e10..ede8251 100644
--- a/reclass/values/listitem.py
+++ b/reclass/values/listitem.py
@@ -18,7 +18,7 @@
     def is_container(self):
         return True
 
-    def render(self, context, exports):
+    def render(self, context, inventory):
         return self._list
 
     def merge_over(self, item, options):
diff --git a/reclass/values/refitem.py b/reclass/values/refitem.py
index c2a2618..b97780a 100644
--- a/reclass/values/refitem.py
+++ b/reclass/values/refitem.py
@@ -53,10 +53,10 @@
         except KeyError as e:
             raise UndefinedVariableError(ref)
 
-    def render(self, context, exports):
+    def render(self, context, inventory):
         if len(self._items) == 1:
-            return self._resolve(self._items[0].render(context, exports), context)
-        strings = [ str(i.render(context, exports)) for i in self._items ]
+            return self._resolve(self._items[0].render(context, inventory), context)
+        strings = [ str(i.render(context, inventory)) for i in self._items ]
         return self._resolve("".join(strings), context)
 
     def __repr__(self):
diff --git a/reclass/values/scaitem.py b/reclass/values/scaitem.py
index a1a5a21..151e123 100644
--- a/reclass/values/scaitem.py
+++ b/reclass/values/scaitem.py
@@ -30,7 +30,7 @@
                 raise TypeError('allow scalar over dict = False: cannot merge %s over %s' % (repr(self), repr(item)))
         raise TypeError('Cannot merge %s over %s' % (repr(self), repr(item)))
 
-    def render(self, context, exports):
+    def render(self, context, inventory):
         return self._value
 
     def __repr__(self):
diff --git a/reclass/values/value.py b/reclass/values/value.py
index e0cfa08..355aab2 100644
--- a/reclass/values/value.py
+++ b/reclass/values/value.py
@@ -47,8 +47,8 @@
         if self._item.has_references():
             self._item.assembleRefs(context)
 
-    def render(self, context, exports, options=None):
-        return self._item.render(context, exports)
+    def render(self, context, inventory, options=None):
+        return self._item.render(context, inventory)
 
     def contents(self):
         return self._item.contents()
diff --git a/reclass/values/valuelist.py b/reclass/values/valuelist.py
index 780eedd..38f782c 100644
--- a/reclass/values/valuelist.py
+++ b/reclass/values/valuelist.py
@@ -68,17 +68,17 @@
                 output = value.merge_over(output, options)
         return output
 
-    def render(self, context, exports, options):
+    def render(self, context, inventory, options):
         from reclass.datatypes.parameters import Parameters
 
         output = None
         deepCopied = False
         for n, value in enumerate(self._values):
             if output is None:
-                output = self._values[n].render(context, exports, options)
+                output = self._values[n].render(context, inventory)
                 deepCopied = False
             else:
-                new = value.render(context, exports, options)
+                new = value.render(context, inventory)
                 if isinstance(output, dict) and isinstance(new, dict):
                     p1 = Parameters(output, value._delimiter)
                     p2 = Parameters(new, value._delimiter)
