diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/RRuntimeASTAccessImpl.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/RRuntimeASTAccessImpl.java
index 3f97549c14f5d59582fc78a8928222bc4c656671..385068b962e9778e2a57a8c6c5b3b901ec02782b 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/RRuntimeASTAccessImpl.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/RRuntimeASTAccessImpl.java
@@ -53,7 +53,7 @@ import com.oracle.truffle.r.nodes.builtin.helpers.TraceHandling;
 import com.oracle.truffle.r.nodes.control.AbstractLoopNode;
 import com.oracle.truffle.r.nodes.control.BlockNode;
 import com.oracle.truffle.r.nodes.control.IfNode;
-import com.oracle.truffle.r.nodes.control.ReplacementBlockNode;
+import com.oracle.truffle.r.nodes.control.ReplacementDispatchNode;
 import com.oracle.truffle.r.nodes.function.FunctionDefinitionNode;
 import com.oracle.truffle.r.nodes.function.FunctionExpressionNode;
 import com.oracle.truffle.r.nodes.function.RCallNode;
@@ -442,7 +442,7 @@ class RRuntimeASTAccessImpl implements RRuntimeASTAccess {
     @Override
     public String getCallerSource(RLanguage rl) {
         // This checks for the specific structure of replacements
-        RLanguage replacement = ReplacementBlockNode.getRLanguage(rl);
+        RLanguage replacement = ReplacementDispatchNode.getRLanguage(rl);
         RLanguage elem = replacement == null ? rl : replacement;
         String string = RDeparse.deparse(elem, RDeparse.DEFAULT_Cutoff, true, 0, -1);
         return string.split("\n")[0];
@@ -503,8 +503,8 @@ class RRuntimeASTAccessImpl implements RRuntimeASTAccess {
 
     @Override
     public RSyntaxNode[] isReplacementNode(Node node) {
-        if (node instanceof ReplacementBlockNode) {
-            ReplacementBlockNode rn = (ReplacementBlockNode) node;
+        if (node instanceof ReplacementDispatchNode) {
+            ReplacementDispatchNode rn = (ReplacementDispatchNode) node;
             return new RSyntaxNode[]{rn.getLhs(), rn.getRhs()};
         } else {
             return null;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTBuilder.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTBuilder.java
index 5d8b1d293a727c5c497857727f22882277c72e2b..630d3da88adc1d0578fdf2807ca06fcc3ac7a772 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTBuilder.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTBuilder.java
@@ -40,8 +40,8 @@ import com.oracle.truffle.r.nodes.control.ForNode;
 import com.oracle.truffle.r.nodes.control.IfNode;
 import com.oracle.truffle.r.nodes.control.NextNode;
 import com.oracle.truffle.r.nodes.control.RepeatNode;
-import com.oracle.truffle.r.nodes.control.ReplacementBlockNode;
-import com.oracle.truffle.r.nodes.control.ReplacementBlockNode.LHSError;
+import com.oracle.truffle.r.nodes.control.ReplacementDispatchNode;
+import com.oracle.truffle.r.nodes.control.ReplacementDispatchNode.LHSError;
 import com.oracle.truffle.r.nodes.control.WhileNode;
 import com.oracle.truffle.r.nodes.function.FormalArguments;
 import com.oracle.truffle.r.nodes.function.FunctionDefinitionNode;
@@ -195,7 +195,7 @@ public final class RASTBuilder implements RCodeBuilder<RSyntaxNode> {
     }
 
     private RSyntaxNode createReplacement(SourceSection source, RSyntaxNode lhs, RSyntaxNode rhs, String operator, boolean isSuper) {
-        return new ReplacementBlockNode(source, operator, lhs, rhs, isSuper, this.context.getReplacementVarsStartIndex());
+        return new ReplacementDispatchNode(source, operator, lhs, rhs, isSuper, this.context.getReplacementVarsStartIndex());
     }
 
     public static FastPathFactory createFunctionFastPath(RSyntaxElement body, ArgumentsSignature signature) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ReplacementBlockNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ReplacementDispatchNode.java
similarity index 94%
rename from com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ReplacementBlockNode.java
rename to com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ReplacementDispatchNode.java
index 7513d507201bdbc7cda32813c3baddda73ff7ad4..24a8116b92f459a8bbdb39b0b06d458b28795f4e 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ReplacementBlockNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ReplacementDispatchNode.java
@@ -48,12 +48,12 @@ import com.oracle.truffle.r.runtime.nodes.RSyntaxLookup;
 import com.oracle.truffle.r.runtime.nodes.RSyntaxNode;
 
 /**
- * Represents a replacement block consisting of execution of the RHS, call to the actual replacement
+ * Represents a replacement consisting of execution of the RHS, call to the actual replacement
  * sequence and removal of RHS returning the RHS value to the caller. The actual replacement is
  * created lazily. Moreover, we use 'special' fast-path version of replacement where possible with
  * fallback to generic implementation.
  */
-public final class ReplacementBlockNode extends RSourceSectionNode implements RSyntaxNode, RSyntaxCall {
+public final class ReplacementDispatchNode extends RSourceSectionNode implements RSyntaxNode, RSyntaxCall {
 
     @Child private ReplacementNode replacementNode;
 
@@ -67,7 +67,7 @@ public final class ReplacementBlockNode extends RSourceSectionNode implements RS
     private final String rhsName;
     private final int tempNamesStartIndex;
 
-    public ReplacementBlockNode(SourceSection src, String operator, RSyntaxNode lhs, RSyntaxNode rhs, boolean isSuper, int tempNamesStartIndex) {
+    public ReplacementDispatchNode(SourceSection src, String operator, RSyntaxNode lhs, RSyntaxNode rhs, boolean isSuper, int tempNamesStartIndex) {
         super(src);
         assert "<-".equals(operator) || "<<-".equals(operator) || "=".equals(operator);
         assert lhs != null && rhs != null;
@@ -84,12 +84,9 @@ public final class ReplacementBlockNode extends RSourceSectionNode implements RS
     public Object execute(VirtualFrame frame) {
         storeRhs.execute(frame);
         getReplacementNode().execute(frame);
-        try {
-            Object result = removeRhs.execute(frame);
-            return result;
-        } finally {
-            visibility.execute(frame, false);
-        }
+        Object result = removeRhs.execute(frame);
+        visibility.execute(frame, false);
+        return result;
     }
 
     /**
@@ -193,7 +190,6 @@ public final class ReplacementBlockNode extends RSourceSectionNode implements RS
      * instead of the "internal" form (with *tmp*, etc.) of the update call.
      */
     public static RLanguage getRLanguage(RLanguage language) {
-        // TODO: fix me!
         RSyntaxNode sn = (RSyntaxNode) language.getRep();
         Node parent = RASTUtils.unwrapParent(sn.asNode());
         if (parent instanceof WriteVariableNode) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ReplacementNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ReplacementNode.java
index f5adf5dcefc5774c8a602484a2418563fe368f8a..d4c2e4381e467e8aa18fb638aa443c1a178f957d 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ReplacementNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ReplacementNode.java
@@ -247,7 +247,7 @@ abstract class ReplacementNode extends RNode {
         Node parent = wvn.getParent();
         if (parent instanceof ReplacementBase) {
             Node replacementBlock = ((ReplacementBase) parent).getReplacementNodeParent().getParent();
-            assert replacementBlock instanceof ReplacementBlockNode;
+            assert replacementBlock instanceof ReplacementDispatchNode;
             return RDataFactory.createLanguage((RNode) replacementBlock);
         }
         return null;