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 6151ad2bbaccb09068f29d7f2ff6148e3d298a7d..170a295e8fe911bb56f3c76686181890e86546ad 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
@@ -146,8 +146,12 @@ class RRuntimeASTAccessImpl implements RRuntimeASTAccess {
         while (call.isPromise()) {
             call = call.getParent();
         }
-        RSyntaxElement syntaxNode = call.getSyntaxNode();
-        return RDataFactory.createLanguage(getOrCreateLanguageClosure(((RSyntaxNode) syntaxNode).asRNode()));
+        if (call.isValidCaller()) {
+            RSyntaxElement syntaxNode = call.getSyntaxNode();
+            return RDataFactory.createLanguage(getOrCreateLanguageClosure(((RSyntaxNode) syntaxNode).asRNode()));
+        } else {
+            return null;
+        }
     }
 
     private static RBaseNode checkBuiltin(RBaseNode bn) {
diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/common/JavaUpCallsRFFIImpl.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/common/JavaUpCallsRFFIImpl.java
index 560011c158ea0db24aa33c15d1d89c5896ee64a6..1f2e0458e85e733384e84da407c258a436dcdd47 100644
--- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/common/JavaUpCallsRFFIImpl.java
+++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/common/JavaUpCallsRFFIImpl.java
@@ -2385,8 +2385,8 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI {
 
     @Override
     public Object FASTR_DATAPTR(Object x) {
-        if (x instanceof RStringVector) {
-            return VectorRFFIWrapper.get((RStringVector) x);
+        if ((x instanceof RStringVector) || (x instanceof RList)) {
+            return VectorRFFIWrapper.get((TruffleObject) x);
         }
         CompilerDirectives.transferToInterpreter();
         throw RError.error(RError.NO_CALLER, Message.GENERIC, "DATAPTR not implemented for type " + Utils.getTypeName(x));
diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/CoerceNodes.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/CoerceNodes.java
index a033907b132636a70b2c198b0c4e58fd46cce6fb..75fa5ac45b3a68a4b91a364e28bbac2f1b6f6b01 100644
--- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/CoerceNodes.java
+++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/CoerceNodes.java
@@ -45,6 +45,7 @@ import com.oracle.truffle.r.runtime.RError;
 import com.oracle.truffle.r.runtime.RError.Message;
 import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.RRuntime;
+import com.oracle.truffle.r.runtime.Utils;
 import com.oracle.truffle.r.runtime.data.RDataFactory;
 import com.oracle.truffle.r.runtime.data.RList;
 import com.oracle.truffle.r.runtime.data.RNull;
@@ -93,7 +94,7 @@ public final class CoerceNodes {
             for (int i = v.getLength() - 1; i >= 0; i--) {
                 Object element = v.getDataAtAsObject(i);
                 adjustSharing(v, element);
-                current = RDataFactory.createPairList(element, current, names != null ? RDataFactory.createSymbol(names.getDataAt(i)) : RNull.instance, gnurType);
+                current = RDataFactory.createPairList(element, current, names != null ? RDataFactory.createSymbol(Utils.intern(names.getDataAt(i))) : RNull.instance, gnurType);
             }
             if (current != RNull.instance) {
                 // also copy regular attributes
diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/RfEvalNode.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/RfEvalNode.java
index 481fdadfeff83e376e5bf2d1c6cfd9686e32987a..86f1d018283918777bdbfd9172c0f913d6ed98ad 100644
--- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/RfEvalNode.java
+++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/RfEvalNode.java
@@ -50,6 +50,7 @@ import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.data.RPromise;
 import com.oracle.truffle.r.runtime.data.RSymbol;
 import com.oracle.truffle.r.runtime.env.REnvironment;
+import com.oracle.truffle.r.runtime.env.frame.ActiveBinding;
 
 public abstract class RfEvalNode extends FFIUpCallNode.Arg2 {
 
@@ -104,6 +105,9 @@ public abstract class RfEvalNode extends FFIUpCallNode.Arg2 {
         if (result == null) {
             throw RError.error(RError.NO_CALLER, UNKNOWN_OBJECT, expr.getName());
         }
+        if (result instanceof ActiveBinding) {
+            result = ((ActiveBinding) result).readValue();
+        }
         return result;
     }
 
diff --git a/com.oracle.truffle.r.native/fficall/src/common/Makefile b/com.oracle.truffle.r.native/fficall/src/common/Makefile
index ba07abcf7e62dd3cb1f5ad9ad183e14736e7a7a2..6de400872b56c57fa44b769a652664ef0b9fde28 100644
--- a/com.oracle.truffle.r.native/fficall/src/common/Makefile
+++ b/com.oracle.truffle.r.native/fficall/src/common/Makefile
@@ -37,7 +37,7 @@ GNUR_APPL_SRC = $(GNUR_HOME)/src/appl
 GNUR_APPL_F_FILES := $(notdir $(wildcard $(GNUR_APPL_SRC)/d*.f))
 GNUR_APPL_C_FILES := $(notdir $(wildcard $(GNUR_APPL_SRC)/*.c))
 
-GNUR_MAIN_C_FILES = errors.c colors.c devices.c engine.c format.c graphics.c plot.c plot3d.c plotmath.c rlocale.c sort.c
+GNUR_MAIN_C_FILES = errors.c colors.c devices.c engine.c format.c graphics.c plot.c plot3d.c plotmath.c rlocale.c sort.c duplicate.c
 GNUR_MAIN_SRC = $(GNUR_HOME)/src/main
 
 GNUR_UNIX_C_FILES = sys-std.c
diff --git a/com.oracle.truffle.r.native/fficall/src/truffle_common/Rinternals_truffle_common.h b/com.oracle.truffle.r.native/fficall/src/truffle_common/Rinternals_truffle_common.h
index 1b03bf85389f81dd0c37edc48b76b8d5222559b7..1f70dcd5aa6ab6eb88c2d34ba697bde3c82aa46b 100644
--- a/com.oracle.truffle.r.native/fficall/src/truffle_common/Rinternals_truffle_common.h
+++ b/com.oracle.truffle.r.native/fficall/src/truffle_common/Rinternals_truffle_common.h
@@ -668,7 +668,7 @@ SEXP Rf_lengthgets(SEXP x, R_len_t y) {
 
 SEXP Rf_xlengthgets(SEXP x, R_xlen_t y) {
     TRACE1(x);
-    return unimplemented("Rf_xlengthgets");
+    return Rf_lengthgets(x, y);
 }
 
 SEXP R_lsInternal(SEXP env, Rboolean all) {
@@ -1139,8 +1139,7 @@ SEXP SET_VECTOR_ELT(SEXP x, R_xlen_t i, SEXP v) {
 
 SEXP *STRING_PTR(SEXP x) {
     TRACE0();
-    unimplemented("STRING_PTR");
-    return NULL;
+    return FASTR_DATAPTR(x);
 }
 
 SEXP * NORET VECTOR_PTR(SEXP x) {
diff --git a/com.oracle.truffle.r.native/gnur/patch/src/main/duplicate.c b/com.oracle.truffle.r.native/gnur/patch/src/main/duplicate.c
new file mode 100644
index 0000000000000000000000000000000000000000..9b82333708d6e74581feaf07d2ea1a12c0bd4d7f
--- /dev/null
+++ b/com.oracle.truffle.r.native/gnur/patch/src/main/duplicate.c
@@ -0,0 +1,66 @@
+/*
+ *  R : A Computer Language for Statistical Data Analysis
+ *  Copyright (C) 1995, 1996  Robert Gentleman and Ross Ihaka
+ *            (C) 2004  The R Foundation
+ *  Copyright (C) 1998--2015 The R Core Team.
+ *  Copyright (c) 2013, 2018, Oracle and/or its affiliates
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, a copy is available at
+ *  https://www.R-project.org/Licenses/
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Defn.h"
+
+#include <R_ext/RS.h> /* S4 bit */
+
+#include "duplicate.h"
+
+SEXP lazy_duplicate(SEXP s) {
+    switch (TYPEOF(s)) {
+    case NILSXP:
+    case SYMSXP:
+    case ENVSXP:
+    case SPECIALSXP:
+    case BUILTINSXP:
+    case EXTPTRSXP:
+    case BCODESXP:
+    case WEAKREFSXP:
+    case CHARSXP:
+    case PROMSXP:
+	break;
+    case CLOSXP:
+    case LISTSXP:
+    case LANGSXP:
+    case DOTSXP:
+    case EXPRSXP:
+    case VECSXP:
+    case LGLSXP:
+    case INTSXP:
+    case REALSXP:
+    case CPLXSXP:
+    case RAWSXP:
+    case STRSXP:
+    case S4SXP:
+	SET_NAMED(s, 2);
+	break;
+    default:
+	UNIMPLEMENTED_TYPE("lazy_duplicate", s);
+    }
+    return s;
+}
diff --git a/com.oracle.truffle.r.native/gnur/patch/src/main/duplicate.h b/com.oracle.truffle.r.native/gnur/patch/src/main/duplicate.h
new file mode 100644
index 0000000000000000000000000000000000000000..b331474df26b23ed141537c5535cc8196bbce4ed
--- /dev/null
+++ b/com.oracle.truffle.r.native/gnur/patch/src/main/duplicate.h
@@ -0,0 +1,24 @@
+/*
+ *  R : A Computer Language for Statistical Data Analysis
+ *  Copyright (C) 1995--2017  The R Core Team.
+ *  Copyright (c) 2013, 2018, Oracle and/or its affiliates
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, a copy is available at
+ *  https://www.R-project.org/Licenses/
+ */
+
+#ifndef R_DUPLICATE_H
+#define R_DUPLICATE_H
+
+#endif /* R_DUPLICATE_H */
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java
index 9795ef2ae7f1678a9c19880b20c7efdb1a8c8ba2..e95336338fd909f2bba72b97d1121f8448ca1d6b 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java
@@ -494,6 +494,7 @@ public class GrepFunctions {
                     if (fixed) {
                         if (gsub) {
                             replacement = replacement.replace("$", "\\$");
+                            replacement = convertGroups(replacement, 0);
                             value = Pattern.compile(pattern, Pattern.LITERAL).matcher(input).replaceAll(replacement);
                         } else {
                             int ix = input.indexOf(pattern);
@@ -560,9 +561,9 @@ public class GrepFunctions {
                             value = sb.toString();
                         }
                     } else {
-                        replacement = convertGroups(replacement);
-
                         Matcher matcher = Pattern.compile(pattern, Pattern.DOTALL).matcher(input);
+                        replacement = convertGroups(replacement, matcher.groupCount());
+
                         if (gsub) {
                             value = matcher.replaceAll(replacement);
                         } else {
@@ -712,7 +713,7 @@ public class GrepFunctions {
         }
 
         @TruffleBoundary
-        private static String convertGroups(String value) {
+        private static String convertGroups(String value, int groupCount) {
             StringBuilder result = new StringBuilder();
             int i = 0;
             while (i < value.length()) {
@@ -723,12 +724,14 @@ public class GrepFunctions {
                         result.append('\\');
                     } else {
                         c = value.charAt(i);
-                        if (c >= '0' && c <= '9') {
-                            result.append('$');
+                        if (c >= '1' && c <= '9') {
+                            int gi = c - '0';
+                            if (gi <= groupCount) {
+                                result.append('$').append(c);
+                            }
                         } else {
-                            result.append('\\');
+                            result.append('\\').append(c);
                         }
-                        result.append(c);
                     }
                 } else {
                     result.append(c);
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntimeASTAccess.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntimeASTAccess.java
index 6e36754bf6cb9bced1502fb885eb9417e2e5ee1d..130195cdbd88cb7fdec121bf4b56d94280992c1e 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntimeASTAccess.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntimeASTAccess.java
@@ -46,7 +46,8 @@ public interface RRuntimeASTAccess {
 
     /**
      * Returns the real caller associated with {@code rl}, by locating the {@code RSyntaxNode}
-     * associated with the node stored with {@code rl}.
+     * associated with the node stored with {@code rl}. It may return {@code null} if there is no
+     * valid caller.
      */
     RPairList getSyntaxCaller(RCaller rl);
 
@@ -76,7 +77,8 @@ public interface RRuntimeASTAccess {
      * Convenience method for {@code getCallerSource(getSyntaxCaller(caller))}.
      */
     default String getCallerSource(RCaller caller) {
-        return getCallerSource(getSyntaxCaller(caller));
+        final RPairList syntaxCaller = getSyntaxCaller(caller);
+        return syntaxCaller == null ? "<invalid call>" : getCallerSource(syntaxCaller);
     }
 
     /**
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/NativeDataAccess.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/NativeDataAccess.java
index bde4fc9fc75a14d7497748642cf071429ccac7e3..05aa093963735b6c10da874432ea73ea7876bdd6 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/NativeDataAccess.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/NativeDataAccess.java
@@ -118,9 +118,9 @@ public final class NativeDataAccess {
         /**
          * The truly allocated length of the native data array. Expected to be either kept at zero
          * if not used, or to be a value &gt;= length.<br>
-         * 
+         *
          * Expected usage in native code:
-         * 
+         *
          * <pre>
          * SEXP vector = allocVector(STRSXP, 1024);
          * SETLENGTH(newnames, 10);
@@ -188,6 +188,18 @@ public final class NativeDataAccess {
             }
         }
 
+        @TruffleBoundary
+        void allocateNative(Object[] elements) {
+            long addr = dataAddress = allocateNativeMemory(elements.length * Long.BYTES);
+            for (int i = 0; i < elements.length; i++) {
+                Object element = elements[i];
+                if (element instanceof RSequence) {
+                    element = ((RSequence) element).createVector();
+                }
+                UnsafeAdapter.UNSAFE.putLong(addr + i * Long.BYTES, asPointer(element));
+            }
+        }
+
         // TODO: turn this into reference queues
         @Override
         protected void finalize() throws Throwable {
@@ -858,6 +870,17 @@ public final class NativeDataAccess {
         return mirror.dataAddress;
     }
 
+    static long allocateNativeContents(RList list, Object[] elements) {
+        NativeMirror mirror = (NativeMirror) list.getNativeMirror();
+        assert mirror != null;
+        if (mirror.dataAddress == 0) {
+            // Note: shall the list become writeable and not only read-only, we should
+            // crate assumption like for other vector types
+            mirror.allocateNative(elements);
+        }
+        return mirror.dataAddress;
+    }
+
     @TruffleBoundary
     public static long allocateNativeStringArray(String[] data) {
         // We allocate contiguous memory that we'll use to store both the array of pointers (char**)
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RComplexVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RComplexVector.java
index 510bf7d39c6864c9a9b404a51d3c7345efa28d51..6f57350cdf5e5a42b59f39e19251ede2519598be 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RComplexVector.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RComplexVector.java
@@ -241,12 +241,12 @@ public final class RComplexVector extends RVector<double[]> implements RAbstract
 
         @Override
         protected double getComplexRImpl(AccessIterator accessIter, int index) {
-            return hasStore ? ((double[]) accessIter.getStore())[index * 2] : NativeDataAccess.getDoubleNativeMirrorData(accessIter.getStore(), index * 2);
+            return hasStore ? ((double[]) accessIter.getStore())[index * 2] : NativeDataAccess.getComplexNativeMirrorDataR(accessIter.getStore(), index);
         }
 
         @Override
         protected double getComplexIImpl(AccessIterator accessIter, int index) {
-            return hasStore ? ((double[]) accessIter.getStore())[index * 2 + 1] : NativeDataAccess.getDoubleNativeMirrorData(accessIter.getStore(), index * 2 + 1);
+            return hasStore ? ((double[]) accessIter.getStore())[index * 2 + 1] : NativeDataAccess.getComplexNativeMirrorDataI(accessIter.getStore(), index);
         }
 
         @Override
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RList.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RList.java
index 25f8af5e9ddafe30173fbab2e2eb623d30d0b758..076c84132ecea6f79fd0e0e653588be534554173 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RList.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RList.java
@@ -93,6 +93,10 @@ public final class RList extends RListBase implements RAbstractListVector {
         return RDataFactory.createList(copyResizedData(size, fillNA), dimensions);
     }
 
+    public long allocateNativeContents() {
+        return NativeDataAccess.allocateNativeContents(this, data);
+    }
+
     private static final class FastPathAccess extends FastPathFromListAccess {
 
         FastPathAccess(RAbstractContainer value) {
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/VectorRFFIWrapper.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/VectorRFFIWrapper.java
index 2561d6b77ac747a31d762ff7e39723d9f74612b0..5d73e632f7bbd26c00b3c95a59e20bea011687a0 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/VectorRFFIWrapper.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/VectorRFFIWrapper.java
@@ -48,6 +48,7 @@ import com.oracle.truffle.r.runtime.data.NativeDataAccess;
 import com.oracle.truffle.r.runtime.data.RComplexVector;
 import com.oracle.truffle.r.runtime.data.RDoubleVector;
 import com.oracle.truffle.r.runtime.data.RIntVector;
+import com.oracle.truffle.r.runtime.data.RList;
 import com.oracle.truffle.r.runtime.data.RLogicalVector;
 import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.data.RObject;
@@ -122,6 +123,12 @@ public final class VectorRFFIWrapper implements TruffleObject {
 
             public abstract long execute(Object vector);
 
+            @Specialization
+            @TruffleBoundary
+            protected static long get(RList list) {
+                return list.allocateNativeContents();
+            }
+
             @Specialization
             @TruffleBoundary
             protected static long get(RIntVector vector) {
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gsub.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gsub.java
index 32b0d231961fd5cc4c966282bb90facbc991bbf7..e338ca3a84c9530c1f667470b5639062ba10dc11 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gsub.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gsub.java
@@ -231,5 +231,11 @@ public class TestBuiltin_gsub extends TestBase {
 
         // Test the dollar in the replacement is not treated as a group reference
         assertEval("{ gsub('x', '$', 'x') }");
+
+        // Test group reference handling
+        assertEval("gsub('_[bB]','\\\\0_m','b_b')");
+        assertEval("gsub('_[bB]','\\\\1_m','b_b')");
+        assertEval("gsub('(_[bB])','\\\\1_m','b_b')");
+        assertEval("gsub('b','\\\\1m','Abb')");
     }
 }
diff --git a/mx.fastr/copyrights/gnu_r.language.oracle.star.regex b/mx.fastr/copyrights/gnu_r.language.oracle.star.regex
index daa689665987cf2d159f3dacb232ac3dec730104..4cf4f9a67895de24117850288f25c39cbc1704e3 100644
--- a/mx.fastr/copyrights/gnu_r.language.oracle.star.regex
+++ b/mx.fastr/copyrights/gnu_r.language.oracle.star.regex
@@ -1 +1 @@
-\/\*\n \*  R : A Computer Language for Statistical Data Analysis\n (\*  Copyright \(C\) (?:[1-2][09][0-9][0-9], ?)?(:?[1-2][09])?[0-9]?[0-9] [ ]?Robert Gentleman and Ross Ihaka\n )?\*  Copyright \(C\) (?:[1-2][09][0-9][0-9]--?)?(:?[1-2][09])?[0-9]?[0-9] [ ]?The [ ]?R Core Team\.?\n \*  Copyright \(c\) (?:(20[0-9][0-9]), )?(20[0-9][0-9]), Oracle and/or its affiliates\n \*\n \*  This program is free software; you can redistribute it and\/or modify\n \*  it under the terms of the GNU General Public License as published by\n \*  the Free Software Foundation; either version 2 of the License, or\n \*  \(at your option\) any later version\.\n \*\n \*  This program is distributed in the hope that it will be useful,\n \*  but WITHOUT ANY WARRANTY; without even the implied warranty of\n \*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\.  See the\n \*  GNU General Public License for more details.\n \*\n \*  You should have received a copy of the GNU General Public License\n \*  along with this program; if not, a copy is available at\n \*  https:\/\/www\.R-project\.org\/Licenses.*
\ No newline at end of file
+\/\*\n \*  R : A Computer Language for Statistical Data Analysis\n (\*  Copyright \(C\) (?:[1-2][09][0-9][0-9], ?)?(:?[1-2][09])?[0-9]?[0-9] [ ]?Robert Gentleman and Ross Ihaka\n )?(\*            \(C\) [1-2][09][0-9][0-9]  The R Foundation\n )?\*  Copyright \(C\) (?:[1-2][09][0-9][0-9]--?)?(:?[1-2][09])?[0-9]?[0-9] [ ]?The [ ]?R Core Team\.?\n \*  Copyright \(c\) (?:(20[0-9][0-9]), )?(20[0-9][0-9]), Oracle and/or its affiliates\n \*\n \*  This program is free software; you can redistribute it and\/or modify\n \*  it under the terms of the GNU General Public License as published by\n \*  the Free Software Foundation; either version 2 of the License, or\n \*  \(at your option\) any later version\.\n \*\n \*  This program is distributed in the hope that it will be useful,\n \*  but WITHOUT ANY WARRANTY; without even the implied warranty of\n \*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\.  See the\n \*  GNU General Public License for more details.\n \*\n \*  You should have received a copy of the GNU General Public License\n \*  along with this program; if not, a copy is available at\n \*  https:\/\/www\.R-project\.org\/Licenses.*
\ No newline at end of file
diff --git a/mx.fastr/copyrights/overrides b/mx.fastr/copyrights/overrides
index d22c9a9bc083b253c569624770c164a77733ebde..9947b5764b362bbb61bec1a121ca0181647b70bf 100644
--- a/mx.fastr/copyrights/overrides
+++ b/mx.fastr/copyrights/overrides
@@ -976,3 +976,5 @@ com.oracle.truffle.r.pkgs/rJava/src/java/RectangularArraySummary.java,no.copyrig
 com.oracle.truffle.r.native/fficall/src/truffle_common/Applic.c,gnu_r.language.oracle
 com.oracle.truffle.r.native/gnur/patch/src/main/errors.c,gnu_r.language.oracle
 com.oracle.truffle.r.native/gnur/patch/src/unix/sys-std.c,gnu_r.language.oracle
+com.oracle.truffle.r.native/gnur/patch/src/main/duplicate.c,gnu_r.language.oracle
+com.oracle.truffle.r.native/gnur/patch/src/main/duplicate.h,gnu_r.language.oracle