diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateSlot.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateSlot.java
index 42af29b00154e6f9d0d42356bbc46b7345efb9cf..9dcc170b841a3627d3d383a9122823f5e6dc15f8 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateSlot.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateSlot.java
@@ -89,14 +89,21 @@ public abstract class UpdateSlot extends RBuiltinNode {
         if (checkSlotAssignFunction == null) {
             CompilerDirectives.transferToInterpreterAndInvalidate();
             checkSlotAssignFunction = (RFunction) checkAtAssignmentFind.execute(frame);
+        }
+        if (checkAtAssignmentCall == null) {
+            CompilerDirectives.transferToInterpreterAndInvalidate();
             checkAtAssignmentCall = insert(CallRFunctionNode.create(checkSlotAssignFunction.getTarget()));
-            assert objClassHierarchy == null && valClassHierarchy == null;
+        }
+        if (objClassHierarchy == null) {
+            CompilerDirectives.transferToInterpreterAndInvalidate();
             objClassHierarchy = insert(ClassHierarchyNodeGen.create(true, false));
+        }
+        if (valClassHierarchy == null) {
+            CompilerDirectives.transferToInterpreterAndInvalidate();
             valClassHierarchy = insert(ClassHierarchyNodeGen.create(true, false));
-
         }
         RStringVector objClass = objClassHierarchy.execute(object);
-        RStringVector valClass = objClassHierarchy.execute(value);
+        RStringVector valClass = valClassHierarchy.execute(value);
         RFunction currentFunction = (RFunction) checkAtAssignmentFind.execute(frame);
         if (cached.profile(currentFunction == checkSlotAssignFunction)) {
             // TODO: technically, someone could override checkAtAssignment function and access the
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/LookupAdapter.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/LookupAdapter.java
index 4f119f7a18d955d6c68694a0825f55211779d4b1..e71e6060a33c7377ab27cadcb99ab23d95b9043a 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/LookupAdapter.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/LookupAdapter.java
@@ -155,15 +155,15 @@ abstract class LookupAdapter extends RBuiltinNode {
         protected Object extractNativeCallInfo(VirtualFrame frame, RList symbol) {
             if (nameExtract == null) {
                 CompilerDirectives.transferToInterpreterAndInvalidate();
-                nameExtract = ExtractVectorNode.create(ElementAccessMode.SUBSCRIPT, true);
+                nameExtract = insert(ExtractVectorNode.create(ElementAccessMode.SUBSCRIPT, true));
             }
             if (addressExtract == null) {
                 CompilerDirectives.transferToInterpreterAndInvalidate();
-                addressExtract = ExtractVectorNode.create(ElementAccessMode.SUBSCRIPT, true);
+                addressExtract = insert(ExtractVectorNode.create(ElementAccessMode.SUBSCRIPT, true));
             }
             if (packageExtract == null) {
                 CompilerDirectives.transferToInterpreterAndInvalidate();
-                packageExtract = ExtractVectorNode.create(ElementAccessMode.SUBSCRIPT, true);
+                packageExtract = insert(ExtractVectorNode.create(ElementAccessMode.SUBSCRIPT, true));
             }
             String name = RRuntime.asString(nameExtract.applyAccessField(frame, symbol, "name"));
             SymbolHandle address = ((RExternalPtr) addressExtract.applyAccessField(frame, symbol, "address")).getAddr();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java
index a1905a771a8c5eee723c38df14953c62796c8497..a1447c00d9c472a11467a1a0189abf7c88da08ba 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java
@@ -273,7 +273,7 @@ final class CachedExtractVectorNode extends CachedVectorNode {
     private Object extract(int dimensionIndex, RAbstractStringVector vector, Object pos, PositionProfile profile) {
         if (extractDimNames == null) {
             CompilerDirectives.transferToInterpreterAndInvalidate();
-            extractDimNames = new ExtractDimNamesNode(numberOfDimensions);
+            extractDimNames = insert(new ExtractDimNamesNode(numberOfDimensions));
         }
         return extractDimNames.extract(dimensionIndex, vector, pos, profile);
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/AsS4.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/AsS4.java
index 9daa82af3e5143b1da79fad18d38b3804ba3ccfc..dd6ba6f6a16f2c99731e4d0a9f662530dc94afbb 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/AsS4.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/AsS4.java
@@ -54,7 +54,7 @@ public abstract class AsS4 extends Node {
             if (complete != 0) {
                 if (getS4DataSlot == null) {
                     CompilerDirectives.transferToInterpreterAndInvalidate();
-                    getS4DataSlot = GetS4DataSlotNodeGen.create(RType.Any);
+                    getS4DataSlot = insert(GetS4DataSlotNodeGen.create(RType.Any));
 
                 }
                 RTypedValue value = getS4DataSlot.executeObject(obj);