diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java
index 4fdacb4c39c6451897273f9e551a897343fcc8a7..429472214591b80b8cc19ba5bb3dd7fc886a749e 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java
@@ -42,8 +42,10 @@ public final class ArgumentsSignature implements Iterable<String> {
      * argument can be provided with a name or without a name, or it may have default value, but
      * without any actual value provided by the caller. This is the case for {@code UNMATCHED}. Use
      * {@link #isUnmatched(int)} for checking if argument is unmatched.
+     *
+     * Note we intentionally use invalid argument name.
      */
-    public static final String UNMATCHED = new String();
+    public static final String UNMATCHED = "^";
     public static final String VARARG_NAME = "...";
     public static final int[] EMPTY_VARARGS_INDEXES = new int[0];
     public static final int NO_VARARG = -1;
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java
index b681e69d54a7af40945aaa50974256249e95ef7e..6f8d2fad0edd23d27debb3ae8259021f7fe3cf02 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java
@@ -718,7 +718,11 @@ public final class RPairList extends RSharingAttributeStorage implements RAbstra
                         } else {
                             String[] signature = new String[length - 1];
                             for (int i = 0; i < names.getLength() && i < (length - 1); i++) {
-                                signature[i] = names.getDataAt(i + 1);
+                                String name = names.getDataAt(i + 1);
+                                if (name != null && !name.isEmpty()) {
+                                    // in signatures, null is designated for unnamed arguments
+                                    signature[i] = name;
+                                }
                             }
                             return ArgumentsSignature.get(signature);
                         }