diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/RBuiltinPackage.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/RBuiltinPackage.java
index 554484bfbaf81cc00fadb4d45560c486dce529e6..bf5a5edc9eb0b96da3e592cfd45a4e5ef149cb9b 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/RBuiltinPackage.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/RBuiltinPackage.java
@@ -236,6 +236,10 @@ public abstract class RBuiltinPackage {
         return new RBuiltinBuilder(this, factory);
     }
 
+    /**
+     * A {@link NodeFactory} implementation used to create {@link RCustomBuiltinNode}s.
+     * {@link #createNode(Object...)} uses {@link RBuiltinCustomConstructors} is maintained by hand.
+     */
     private static class ReflectiveNodeFactory implements NodeFactory<RBuiltinNode> {
 
         private final Class<? extends RBuiltinNode> clazz;
@@ -268,9 +272,8 @@ public abstract class RBuiltinPackage {
         }
 
         public List<Class<? extends Node>> getExecutionSignature() {
-            return Arrays.<Class<? extends Node>> asList(RNode.class);
+            return Collections.emptyList();
         }
-
     }
 
 }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Apply.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Apply.java
index bdc74da217843a1a3398f82521b9f99723383faf..3eedf78efe64a65e8e1d6ebe0efb5fd5115a3d0e 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Apply.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Apply.java
@@ -31,6 +31,7 @@ import com.oracle.truffle.api.nodes.*;
 import com.oracle.truffle.r.nodes.*;
 import com.oracle.truffle.r.nodes.access.*;
 import com.oracle.truffle.r.nodes.builtin.*;
+import com.oracle.truffle.r.nodes.function.*;
 import com.oracle.truffle.r.runtime.*;
 import com.oracle.truffle.r.runtime.data.*;
 import com.oracle.truffle.r.runtime.data.model.*;
@@ -119,7 +120,25 @@ public abstract class Apply extends RBuiltinNode {
     }
 
     private Object callFunction(VirtualFrame frame, RFunction fun, Object input) {
-        Object[] args = RArguments.create(fun, funCall.getSourceSection(), new Object[]{input});
+        FormalArguments formals = ((RRootNode) fun.getTarget().getRootNode()).getFormalArguments();
+
+        // Create arguments: Set 1. to input and fill the rest with defaults
+        Object[] evaluatedArgs = new Object[formals.getArgsCount()];
+        if (evaluatedArgs.length > 0) {
+            evaluatedArgs[0] = input;
+        }
+        for (int i = 1; i < evaluatedArgs.length; i++) {
+            RNode node = formals.getDefaultArgs()[i];
+            if (node == null) {
+                evaluatedArgs[i] = RMissing.instance;
+            } else if (node instanceof ConstantNode) {
+                evaluatedArgs[i] = ((ConstantNode) node).getValue();
+            } else {
+                // TODO Set default values in AccessArgumentNode instead of this??
+                Utils.nyi();
+            }
+        }
+        Object[] args = RArguments.create(fun, funCall.getSourceSection(), evaluatedArgs);
         return funCall.call(frame, fun.getTarget(), args);
     }
 }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EvalFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EvalFunctions.java
index e226d50d5e8a324777f80f621794c4c068ee19e2..161b1a6d802a37076b0f89db3a3fe38ef770990f 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EvalFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EvalFunctions.java
@@ -163,12 +163,6 @@ public class EvalFunctions {
 
     @RBuiltin(name = "local", nonEvalArgs = {0}, kind = SUBSTITUTE, parameterNames = {"expr", "envir"})
     public abstract static class Local extends EvalAdapter {
-        @SuppressWarnings("hiding") protected static final String[] PARAMETER_NAMES = new String[]{"expr", "envir"};
-
-        @Override
-        public String[] getParameterNames() {
-            return PARAMETER_NAMES;
-        }
 
         @Override
         public RNode[] getParameterValues() {
@@ -176,17 +170,17 @@ public class EvalFunctions {
         }
 
         @Specialization
-        protected Object doEval(VirtualFrame frame, RPromise expr, @SuppressWarnings("unused") RMissing envir, RMissing enclos) {
-            return doEval(expr, new REnvironment.NewEnv(REnvironment.frameToEnvironment(frame.materialize()), 0), enclos);
+        protected Object doEval(VirtualFrame frame, RPromise expr, @SuppressWarnings("unused") RMissing envir) {
+            return doEval(expr, new REnvironment.NewEnv(REnvironment.frameToEnvironment(frame.materialize()), 0));
         }
 
         @Specialization
-        protected Object doEval(RPromise expr, REnvironment envir, RMissing enclos) {
+        protected Object doEval(RPromise expr, REnvironment envir) {
             /*
              * local does not evaluate it's first argument
              */
             controlVisibility();
-            return doEvalBody(RDataFactory.createLanguage(expr.getRep()), envir, enclos);
+            return doEvalBody(RDataFactory.createLanguage(expr.getRep()), envir, null);
         }
 
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsMethodsDispatchOn.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsMethodsDispatchOn.java
index 441012acb364b6ea110641cf9afa9f670302cc56..10b22cee008517c6676252a7ddd6521e50af02d4 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsMethodsDispatchOn.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsMethodsDispatchOn.java
@@ -25,13 +25,12 @@ package com.oracle.truffle.r.nodes.builtin.base;
 import com.oracle.truffle.api.dsl.*;
 import com.oracle.truffle.r.nodes.builtin.*;
 import com.oracle.truffle.r.runtime.*;
-import com.oracle.truffle.r.runtime.data.*;
 
 @RBuiltin(name = ".isMethodsDispatchOn", kind = RBuiltinKind.PRIMITIVE, parameterNames = {})
 public abstract class IsMethodsDispatchOn extends RBuiltinNode {
 
     @Specialization
-    protected byte doIsMethodsDispatchOn(@SuppressWarnings("unused") RMissing x) {
+    protected byte doIsMethodsDispatchOn() {
         controlVisibility();
         return RRuntime.LOGICAL_TRUE;
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Max.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Max.java
index 0cb54f6bedd6cb58288fe1573def96186c837cfd..9db2aa2cb91afe5124d2966f718464e0ca25a178 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Max.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Max.java
@@ -42,16 +42,6 @@ public final class Max extends RWrapperBuiltinNode {
         return new RNode[]{ConstantNode.create(RMissing.instance), ConstantNode.create(RRuntime.LOGICAL_FALSE)};
     }
 
-    @Override
-    public boolean matchArguments() {
-        return true;
-    }
-
-    @Override
-    public int getExecutionSignatureSize() {
-        return 2;
-    }
-
     public Max(RBuiltinNode prev) {
         super(prev);
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Min.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Min.java
index 8a34cfd8d5df56433f50816213c81f65ab41e24c..f53a5f44465e017125ab001e5728523838b64e59 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Min.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Min.java
@@ -42,16 +42,6 @@ public final class Min extends RWrapperBuiltinNode {
         return new RNode[]{ConstantNode.create(RMissing.instance), ConstantNode.create(RRuntime.LOGICAL_FALSE)};
     }
 
-    @Override
-    public boolean matchArguments() {
-        return true;
-    }
-
-    @Override
-    public int getExecutionSignatureSize() {
-        return 2;
-    }
-
     public Min(RBuiltinNode prev) {
         super(prev);
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RVersion.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RVersion.java
index 3168ac7176581ccc9fe84fe427a86b3e92fdfee3..7bceeca3a06c0d645bdd088294c69d7ec06a5069 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RVersion.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RVersion.java
@@ -33,7 +33,7 @@ import com.oracle.truffle.r.runtime.data.*;
 public abstract class RVersion extends RBuiltinNode {
 
     @Specialization
-    protected Object doRVersion(@SuppressWarnings("unused") RMissing x) {
+    protected Object doRVersion() {
         controlVisibility();
         return RDataFactory.createList(RVersionInfo.listValues(), RDataFactory.createStringVector(RVersionInfo.listNames(), RDataFactory.COMPLETE_VECTOR));
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sum.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sum.java
index 50ce3e6096e23083cdd69c3a99384c063355f699..7ec74f008e2f1fdd14a8af3bad27512463991267 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sum.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sum.java
@@ -45,16 +45,6 @@ public final class Sum extends RWrapperBuiltinNode {
         return new RNode[]{ConstantNode.create(RMissing.instance), ConstantNode.create(RRuntime.LOGICAL_FALSE)};
     }
 
-    @Override
-    public boolean matchArguments() {
-        return true;
-    }
-
-    @Override
-    public int getExecutionSignatureSize() {
-        return 2;
-    }
-
     public Sum(RBuiltinNode prev) {
         super(prev);
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArgumentNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArgumentNode.java
index 0d9c8ce629fa6a330995a82a86f80b6a17844685..86abf3a2635c2d40742801560ff628be2d09c6ed 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArgumentNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArgumentNode.java
@@ -136,7 +136,7 @@ public abstract class AccessArgumentNode extends RNode {
         return promise;
     }
 
-    public static class ReadArgumentNode extends RNode {
+    public static final class ReadArgumentNode extends RNode {
         private final int index;
 
         private ReadArgumentNode(int index) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinNode.java
index bc6c7787e61d4e6a765986b00d2d433018739ff5..67715168921986298dc058797ac4450b546e7fde 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinNode.java
@@ -22,6 +22,7 @@
  */
 package com.oracle.truffle.r.nodes.builtin;
 
+import com.oracle.truffle.api.CompilerDirectives.SlowPath;
 import com.oracle.truffle.api.*;
 import com.oracle.truffle.api.dsl.*;
 import com.oracle.truffle.api.frame.*;
@@ -63,25 +64,6 @@ public abstract class RBuiltinNode extends RCallNode implements VisibilityContro
      */
     public abstract RNode[] getArguments();
 
-    /**
-     * In most cases, we do not match arguments for builtins, but in some cases (where this method
-     * needs to be overridden) we do.
-     *
-     * @return whether arguments should be matched
-     */
-    public boolean matchArguments() {
-        return false;
-    }
-
-    /**
-     * Meant to be overridded for special cases.
-     *
-     * @return size of the execution signature
-     */
-    public int getExecutionSignatureSize() {
-        return getBuiltin().getFactory().getExecutionSignature().size();
-    }
-
     /**
      * Return the names of the builtin's formal arguments. Historically this was always manually
      * overridden by the subclass. Now the information is acquired from the {@link RBuiltin}
@@ -118,7 +100,8 @@ public abstract class RBuiltinNode extends RCallNode implements VisibilityContro
     }
 
     private static RNode[] createAccessArgumentsNodes(RBuiltinFactory builtin) {
-        int total = builtin.getFactory().getExecutionSignature().size();
+        int total = builtin.getRBuiltin().parameterNames().length;
+        // int total = builtin.getFactory().getExecutionSignature().size();
         RNode[] args = new RNode[total];
         EnvProvider envProvider = new EnvProvider();
         for (int i = 0; i < total; i++) {
@@ -190,32 +173,26 @@ public abstract class RBuiltinNode extends RCallNode implements VisibilityContro
     }
 
     protected RNode[] inlineStaticArguments(InlinedArguments args) {
-        int signatureSize = getExecutionSignatureSize();
-        RNode[] children = new RNode[signatureSize];
-
-        // Fill with already determined arguments..
-        RNode[] pureArgs = args.getInlinedArgs();
-        int argsSize = pureArgs.length;
-        int di = Math.min(argsSize, signatureSize);
-        System.arraycopy(args.getInlinedArgs(), 0, children, 0, di);
-
-        // ...and the rest with RMissing
-        // TODO Or default values???
-        for (; di < signatureSize; di++) {
-            children[di] = ConstantNode.create(RMissing.instance);
+        int execSignatureSize = getBuiltin().getFactory().getExecutionSignature().size();
+        int parameterLength = getBuiltin().getRBuiltin().parameterNames().length;
+        if (execSignatureSize > parameterLength) {
+            throwMissingFormalParameterError(parameterLength, execSignatureSize);
         }
 
-        return children;
+        return args.getInlinedArgs();
+    }
+
+    @SlowPath
+    private void throwMissingFormalParameterError(int argsLength, int specializationExpectesArgs) {
+        String name = getBuiltin().getRBuiltin().name();
+        throw new IllegalStateException("Builtin '" + name + "': Length of 'parameterNames' (" + argsLength + ") and specialization signature (" + specializationExpectesArgs + ") must be consistent!");
     }
 
     /**
      * A wrapper builtin is a {@link RCustomBuiltinNode} that is able to create any arbitrary node
-     * as builtin. It can be used as normal builtin. Implement {@link #createDelegate()} to create
-     * that node. Warning: setting argument count is not yet implemented. set {@link RBuiltin} to
-     * varargs to get all arguments in a single node in the arguments array.
+     * as builtin (e.g., 'max', 'sum', etc.). It can be used as normal builtin. Implement
+     * {@link #createDelegate()} to create that node.
      */
-    // TODO support argument for number of arguments. Currently no arguments are passed
-    // or in case of var args exactly one.
     public abstract static class RWrapperBuiltinNode extends RCustomBuiltinNode {
 
         @Child private RNode delegate;
@@ -304,6 +281,11 @@ public abstract class RBuiltinNode extends RCallNode implements VisibilityContro
             return builtin;
         }
 
+        @Override
+        protected RBuiltin getRBuiltin() {
+            return builtin.getRBuiltin();
+        }
+
         @Override
         public String[] getSuppliedArgsNames() {
             return suppliedArgsNames;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java
index e0a4f484bbcc238b1657b256f34c84fba79c383a..3bc31043931dc3309df03642df0947867cf9859b 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java
@@ -80,9 +80,4 @@ public final class RBuiltinRootNode extends RRootNode {
     public RootNode split() {
         return new RBuiltinRootNode(NodeUtil.cloneNode(uninitializedBuiltin), getFormalArguments(), getFrameDescriptor().shallowCopy());
     }
-
-    public boolean matchArguments() {
-        return builtin.matchArguments();
-    }
-
 }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentMatcher.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentMatcher.java
index 7ec91964b728c05702bd0bc7dd87eed92ca5d704..bf31da09e450c064cc4de3f8382473763b3219db 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentMatcher.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentMatcher.java
@@ -48,7 +48,7 @@ import com.oracle.truffle.r.runtime.data.RPromise.RPromiseFactory;
  * re-match parameters, e.g.:
  * {@link #matchArgumentsEvaluated(VirtualFrame, RFunction, EvaluatedArguments, SourceSection)} for
  * 'UseMethod' and
- * {@link #matchArgumentsInlined(VirtualFrame, RFunction, UnmatchedArguments, SourceSection, SourceSection, boolean)}
+ * {@link #matchArgumentsInlined(VirtualFrame, RFunction, UnmatchedArguments, SourceSection, SourceSection)}
  * for builtins which are implemented in Java ( @see {@link RBuiltinNode#inline(InlinedArguments)}
  * </p>
  *
@@ -161,7 +161,6 @@ public class ArgumentMatcher {
      * @param function The function which is to be called
      * @param suppliedArgs The arguments supplied to the call
      * @param callSrc The source of the function call currently executed
-     * @param matchArgs Determines if arguments should be matched
      * @param argsSrc The source code encapsulating the arguments, for debugging purposes
      *
      * @return A fresh {@link InlinedArguments} containing the arguments in correct order and
@@ -169,8 +168,8 @@ public class ArgumentMatcher {
      * @see #matchNodes(VirtualFrame, RFunction, RNode[], String[], SourceSection, SourceSection,
      *      boolean, ClosureCache)
      */
-    public static InlinedArguments matchArgumentsInlined(VirtualFrame frame, RFunction function, UnmatchedArguments suppliedArgs, SourceSection callSrc, SourceSection argsSrc, boolean matchArgs) {
-        RNode[] wrappedArgs = matchNodes(frame, function, suppliedArgs.getArguments(), suppliedArgs.getNames(), callSrc, argsSrc, matchArgs, suppliedArgs);
+    public static InlinedArguments matchArgumentsInlined(VirtualFrame frame, RFunction function, UnmatchedArguments suppliedArgs, SourceSection callSrc, SourceSection argsSrc) {
+        RNode[] wrappedArgs = matchNodes(frame, function, suppliedArgs.getArguments(), suppliedArgs.getNames(), callSrc, argsSrc, true, suppliedArgs);
         return new InlinedArguments(wrappedArgs, suppliedArgs.getNames());
     }
 
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java
index aa4a95690c5b204998813a0b425cb4ccb87a9198..4b7541fc27c25c991b992bb6459c7bacc6f0ac75 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java
@@ -73,13 +73,13 @@ import com.oracle.truffle.r.runtime.data.*;
  *  U = {@link UninitializedCallNode}: Forms the uninitialized end of the function PIC
  *  D = {@link DispatchedCallNode}: Function fixed, no varargs
  *  G = {@link GenericCallNode}: Function fixed, no varargs (generic case)
- * 
+ *
  *  UV = {@link UninitializedCallNode} with varargs,
  *  UVC = {@link UninitializedVarArgsCacheCallNode} with varargs, for varargs cache
  *  DV = {@link DispatchedVarArgsCallNode}: Function fixed, with cached varargs
  *  DGV = {@link DispatchedGenericVarArgsCallNode}: Function fixed, with arbitrary varargs (generic case)
  *  GV = {@link GenericVarArgsCallNode}: Function arbitrary, with arbitrary varargs (generic case)
- * 
+ *
  * (RB = {@link RBuiltinNode}: individual functions that are builtins are represented by this node
  * which is not aware of caching)
  * </pre>
@@ -92,11 +92,11 @@ import com.oracle.truffle.r.runtime.data.*;
  * non varargs, max depth:
  * |
  * D-D-D-U
- * 
+ *
  * no varargs, generic (if max depth is exceeded):
  * |
  * G
- * 
+ *
  * varargs:
  * |
  * DV-DV-UV
@@ -104,11 +104,11 @@ import com.oracle.truffle.r.runtime.data.*;
  *    DV
  *    |
  *    UVC
- * 
+ *
  * varargs, max varargs depth exceeded:
  * |
  * DV-DGV-UV
- * 
+ *
  * varargs, max function depth exceeded:
  * |
  * GV
@@ -380,7 +380,7 @@ public abstract class RCallNode extends RNode {
                 if (root != null) {
                     // We inline the given arguments here, as builtins are executed inside the same
                     // frame as they are called.
-                    InlinedArguments inlinedArgs = ArgumentMatcher.matchArgumentsInlined(frame, function, clonedArgs, callSrc, argsSrc, !root.matchArguments());
+                    InlinedArguments inlinedArgs = ArgumentMatcher.matchArgumentsInlined(frame, function, clonedArgs, callSrc, argsSrc);
                     callNode = root.inline(inlinedArgs);
                 }
             } else {
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
index 6fbc5803ce8fb7ba89cd49ae5443880f43684baf..1bf624c7ee725fcb5256ae7bdeb98e7441eab6e2 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
@@ -8945,6 +8945,18 @@ In max() : no non-missing arguments to max; returning -Inf
 #{ max(0/0, 1.1, NA) }
 [1] NA
 
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testMaximum
+#{ max(123, NA, TRUE, 12, FALSE) }
+[1] NA
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testMaximum
+#{ max(123, NA, TRUE, 12, FALSE, na.rm=FALSE) }
+[1] NA
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testMaximum
+#{ max(123, NA, TRUE, 12, FALSE, na.rm=TRUE) }
+[1] 123
+
 ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testMaximum
 #{ max(1:10, 100:200, c(4.0, 5.0)) }
 [1] 200
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java
index e24018361ca2585b58adc178988e7632f30c00b3..38b5122ef447525271132496bcac40c1b928c6f6 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java
@@ -10108,6 +10108,21 @@ public class AllTests extends TestBase {
         assertEval("{ max(\"42\", as.character(NA), \"7\", na.rm=FALSE) }");
     }
 
+    @Test
+    public void TestSimpleBuiltins_testMaximum_f5adf3eb65411f16da79fcd519585f41() {
+        assertEval("{ max(123, NA, TRUE, 12, FALSE, na.rm=TRUE) }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testMaximum_e9c2a4fbc3eed59f75b571edfa22fd88() {
+        assertEval("{ max(123, NA, TRUE, 12, FALSE, na.rm=FALSE) }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testMaximum_e0b736d0d8c6f4e5b43783e862af2811() {
+        assertEval("{ max(123, NA, TRUE, 12, FALSE) }");
+    }
+
     @Test
     public void TestSimpleBuiltins_testMaximum_fb36815b5b8996417de7e952ad295967() {
         assertEvalError("{ max(as.raw(42), as.raw(7)) }");
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java
index 00ba2d923ea839cb055d8c65fcad30a0dd1f977a..c92e0ce5dea676ca32ab7adc8fd0f8f2d2fc3b14 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java
@@ -218,6 +218,10 @@ public class TestSimpleBuiltins extends TestBase {
         assertEval("{ max(42, as.double(NA), 7, na.rm=FALSE) }");
         assertEval("{ max(\"42\", as.character(NA), \"7\", na.rm=TRUE) }");
         assertEval("{ max(\"42\", as.character(NA), \"7\", na.rm=FALSE) }");
+
+        assertEval("{ max(123, NA, TRUE, 12, FALSE, na.rm=TRUE) }");
+        assertEval("{ max(123, NA, TRUE, 12, FALSE, na.rm=FALSE) }");
+        assertEval("{ max(123, NA, TRUE, 12, FALSE) }");
     }
 
     @Test