diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java
index f027b716164a47b23766b3abfbf56e57ade0c3cf..a45022312ca4653b6c161b8c0734e45354ef3108 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java
@@ -24,27 +24,24 @@ package com.oracle.truffle.r.nodes.function;
 
 import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
-import com.oracle.truffle.api.dsl.NodeChild;
 import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.profiles.ConditionProfile;
 import com.oracle.truffle.r.nodes.access.WriteLocalFrameVariableNode;
 import com.oracle.truffle.r.runtime.FastROptions;
 import com.oracle.truffle.r.runtime.RArguments;
 import com.oracle.truffle.r.runtime.data.RFunction;
 import com.oracle.truffle.r.runtime.data.RLanguage;
-import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.data.RShareable;
 import com.oracle.truffle.r.runtime.data.model.RAbstractContainer;
-import com.oracle.truffle.r.runtime.nodes.RNode;
 
 /**
  * A {@link ArgumentStatePush} is used to bump up state transition for function arguments.
  */
-@NodeChild(value = "op")
-public abstract class ArgumentStatePush extends RNode {
+public abstract class ArgumentStatePush extends Node {
 
-    public abstract Object executeObject(VirtualFrame frame, Object shareable);
+    public abstract void executeObject(VirtualFrame frame, Object shareable);
 
     private final ConditionProfile isRefCountUpdateable = ConditionProfile.createBinaryProfile();
 
@@ -64,7 +61,8 @@ public abstract class ArgumentStatePush extends RNode {
         return mask > 0;
     }
 
-    private void transitionStateExp(VirtualFrame frame, RShareable shareable) {
+    @Specialization
+    public void transitionState(VirtualFrame frame, RShareable shareable) {
         if (isRefCountUpdateable.profile(!shareable.isSharedPermanent())) {
             shareable.incRefCount();
         }
@@ -114,14 +112,8 @@ public abstract class ArgumentStatePush extends RNode {
         }
     }
 
-    @Specialization
-    public RNull transitionState(VirtualFrame frame, RShareable shareable) {
-        transitionStateExp(frame, shareable);
-        return RNull.instance;
-    }
-
     @Specialization(guards = "!isShareable(o)")
-    public RNull transitionStateNonShareable(VirtualFrame frame, @SuppressWarnings("unused") Object o) {
+    public void transitionStateNonShareable(VirtualFrame frame, @SuppressWarnings("unused") Object o) {
         if (mask > 0) {
             // this argument used to be reference counted but is no longer
             CompilerDirectives.transferToInterpreterAndInvalidate();
@@ -133,7 +125,6 @@ public abstract class ArgumentStatePush extends RNode {
             fdn.getArgPostProcess().transArgsBitSet = transArgsBitSet & (~mask);
             mask = -1;
         }
-        return RNull.instance;
     }
 
     protected boolean isShareable(Object o) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PreProcessArgumentsNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PreProcessArgumentsNode.java
index c5fc1a9e8e732796256db437b4a8d74aa3b32f65..309d854b53d85b61c9bbadbd3b89ddadd8b54c95 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PreProcessArgumentsNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PreProcessArgumentsNode.java
@@ -52,7 +52,7 @@ final class PreProcessArgumentsNode extends RNode {
     static PreProcessArgumentsNode create(int length) {
         ArgumentStatePush[] argStatePushNodes = new ArgumentStatePush[length];
         for (int i = 0; i < length; i++) {
-            argStatePushNodes[i] = ArgumentStatePushNodeGen.create(i, null);
+            argStatePushNodes[i] = ArgumentStatePushNodeGen.create(i);
         }
         return new PreProcessArgumentsNode(argStatePushNodes);
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentNode.java
index c6d3ff6620beb0ee4e1d2fe9ef1ef6e7a0d82448..7ed844a144758904c56d2f9e9463f19e2c1d3673 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentNode.java
@@ -50,7 +50,7 @@ public final class WrapArgumentNode extends WrapArgumentBaseNode {
         super(operand, modeChange);
         this.modeChange = modeChange;
         this.index = index;
-        this.argPushStateNode = modeChange ? ArgumentStatePushNodeGen.create(index, null) : null;
+        this.argPushStateNode = modeChange ? ArgumentStatePushNodeGen.create(index) : null;
     }
 
     public boolean modeChange() {