diff --git a/reclass/core.py b/reclass/core.py
index c962c74..1495a4c 100644
--- a/reclass/core.py
+++ b/reclass/core.py
@@ -166,9 +166,13 @@
         original_exports = Parameters(self._storage.get_exports())
         exports = copy.deepcopy(original_exports)
         original_exports.render_simple()
+        nodes = { key for key in exports.as_dict()}
         entities = {}
         for n in self._storage.enumerate_nodes():
             entities[n] = self._nodeinfo(n, exports)
+            nodes.discard(n)
+        for n in nodes:
+            exports.delete_key(n)
         changed = self._update_exports(original_exports, exports)
         if changed:
             # use brute force: if the exports have changed rerun
diff --git a/reclass/datatypes/parameters.py b/reclass/datatypes/parameters.py
index f830187..c887dbf 100644
--- a/reclass/datatypes/parameters.py
+++ b/reclass/datatypes/parameters.py
@@ -73,6 +73,10 @@
     def __ne__(self, other):
         return not self.__eq__(other)
 
+    def delete_key(self, key):
+        self._base.pop(key, None)
+        self._unrendered.pop(key, None)
+
     def as_dict(self):
         return self._base.copy()
 
diff --git a/reclass/utils/dictpath.py b/reclass/utils/dictpath.py
index c5df56c..8ff037f 100644
--- a/reclass/utils/dictpath.py
+++ b/reclass/utils/dictpath.py
@@ -137,16 +137,20 @@
         del self._parts[0]
         return self
 
-    def exists_in(self, base):
-        container = base
+    def exists_in(self, container):
+        item = container
         for i in self._parts:
-            if isinstance(container, (dict, list)) and i in container:
-                if isinstance(container, dict):
-                    container = container[i]
-                elif isinstance(container, list):
-                    container = container[int(i)]
-            elif i == self._parts[-1]:
-                return True
+            if isinstance(item, (dict, list)):
+                if i in item:
+                    if isinstance(item, dict):
+                        item = item[i]
+                    elif isinstance(container, list):
+                        item = item[int(i)]
+                else:
+                    return False
             else:
-                return False
+                if item == self._parts[-1]:
+                    return True
+                else:
+                    return False
         return True
