diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Base.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Base.java
index 54a51206334bfd2c3bdc6f1b09d23c9dfd2bde15..eb2cb9fa8784114a4243351aaacc16d828c5cfcb 100644
--- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Base.java
+++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Base.java
@@ -26,6 +26,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
+import com.oracle.truffle.api.interop.java.JavaInterop;
 import com.oracle.truffle.r.ffi.impl.interop.base.GlobResult;
 import com.oracle.truffle.r.ffi.impl.interop.base.ReadlinkResult;
 import com.oracle.truffle.r.ffi.impl.interop.base.StrtolResult;
@@ -58,7 +59,7 @@ public class TruffleNFI_Base implements BaseRFFI {
         @Override
         public String execute() {
             byte[] buf = new byte[4096];
-            int result = (int) call(buf, buf.length);
+            int result = (int) call(JavaInterop.asTruffleObject(buf), buf.length);
             if (result == 0) {
                 return null;
             } else {
@@ -141,7 +142,7 @@ public class TruffleNFI_Base implements BaseRFFI {
             byte[] ztbytes = new byte[bytes.length + 1];
             System.arraycopy(bytes, 0, ztbytes, 0, bytes.length);
             ztbytes[bytes.length] = 0;
-            int result = (int) call(ztbytes);
+            int result = (int) call(JavaInterop.asTruffleObject(ztbytes));
             if (result == 0) {
                 return null;
             } else {
diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_PCRE.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_PCRE.java
index fd499407ef1e3a0f44bc0fce769f05ec1f1f24be..8a8326f9d4345d99e5111237c3dbc05eb12f75be 100644
--- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_PCRE.java
+++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_PCRE.java
@@ -25,6 +25,7 @@ package com.oracle.truffle.r.ffi.impl.nfi;
 import java.nio.charset.StandardCharsets;
 
 import com.oracle.truffle.api.CompilerDirectives;
+import com.oracle.truffle.api.interop.java.JavaInterop;
 import com.oracle.truffle.r.ffi.impl.interop.pcre.CaptureNamesResult;
 import com.oracle.truffle.r.ffi.impl.interop.pcre.CompileResult;
 import com.oracle.truffle.r.runtime.RError;
@@ -99,7 +100,7 @@ public class TruffleNFI_PCRE implements PCRERFFI {
         @Override
         public int execute(long code, long extra, String subject, int offset, int options, int[] ovector) {
             byte[] subjectBytes = subject.getBytes(StandardCharsets.UTF_8);
-            return (int) call(code, extra, subjectBytes, subjectBytes.length, offset, options, ovector, ovector.length);
+            return (int) call(code, extra, JavaInterop.asTruffleObject(subjectBytes), subjectBytes.length, offset, options, ovector, ovector.length);
         }
     }
 
diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Zip.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Zip.java
index 0063f550b42e8182c8ca3a8a5507ea690e747d5a..fe6ff0492cdd9fad6c5a9e3d5cc043105f91be79 100644
--- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Zip.java
+++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Zip.java
@@ -22,6 +22,7 @@
  */
 package com.oracle.truffle.r.ffi.impl.nfi;
 
+import com.oracle.truffle.api.interop.java.JavaInterop;
 import com.oracle.truffle.r.runtime.ffi.ZipRFFI;
 
 public class TruffleNFI_Zip implements ZipRFFI {
@@ -35,7 +36,8 @@ public class TruffleNFI_Zip implements ZipRFFI {
         @Override
         public int execute(byte[] dest, byte[] source) {
             long[] destlen = new long[]{dest.length};
-            return (int) call(dest, destlen, source, source.length);
+            int result = (int) call(JavaInterop.asTruffleObject(dest), JavaInterop.asTruffleObject(destlen), JavaInterop.asTruffleObject(source), source.length);
+            return result;
         }
     }
 
@@ -48,7 +50,8 @@ public class TruffleNFI_Zip implements ZipRFFI {
         @Override
         public int execute(byte[] dest, byte[] source) {
             long[] destlen = new long[]{dest.length};
-            return (int) call(dest, destlen, source, source.length);
+            int result = (int) call(JavaInterop.asTruffleObject(dest), JavaInterop.asTruffleObject(destlen), JavaInterop.asTruffleObject(source), source.length);
+            return result;
         }
     }