diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java
index ce6a668a1d7d4a1758fe6505bcba8cf22fb26b69..3fc8de06e5e1cce992f18ed6accd317c9b31c30c 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java
@@ -168,7 +168,7 @@ final class REngine implements Engine, Engine.Timings {
         REnvironment.baseInitialize(baseFrame, globalFrame);
         context.getStateRFFI().initializeVariables(context);
         RBuiltinPackages.loadBase(context.getLanguage(), baseFrame);
-        RGraphics.initialize();
+        RGraphics.initialize(context);
         if (FastROptions.LoadProfiles.getBooleanValue()) {
             StartupTiming.timestamp("Before Profiles Loaded");
             /*
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/graphics/RGraphics.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/graphics/RGraphics.java
index 657822c2172dfb24bbcb85fb8878d78a248b957b..edb375298ac06fd2b120cafbf8b4057b3b8d4e76 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/graphics/RGraphics.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/graphics/RGraphics.java
@@ -18,6 +18,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 import com.oracle.truffle.r.library.fastrGrid.graphics.RGridGraphicsAdapter;
 import com.oracle.truffle.r.runtime.FastROptions;
+import com.oracle.truffle.r.runtime.context.RContext;
 import com.oracle.truffle.r.runtime.ffi.CallRFFI;
 import com.oracle.truffle.r.runtime.ffi.DLL;
 import com.oracle.truffle.r.runtime.ffi.NativeCallInfo;
@@ -30,16 +31,17 @@ import com.oracle.truffle.r.runtime.ffi.NativeCallInfo;
 public class RGraphics {
     private static final AtomicBoolean initialized = new AtomicBoolean();
 
-    public static void initialize() {
-        if (initialized.compareAndSet(false, true)) {
-            if (FastROptions.UseInternalGridGraphics.getBooleanValue()) {
+    public static void initialize(RContext context) {
+        if (FastROptions.UseInternalGridGraphics.getBooleanValue()) {
+            if (!context.internalGraphicsInitialized) {
                 RGridGraphicsAdapter.initialize();
-            } else if (FastROptions.LoadPackagesNativeCode.getBooleanValue()) {
-                DLL.DLLInfo dllInfo = DLL.findLibraryContainingSymbol("InitGraphics");
-                DLL.SymbolHandle symbolHandle = DLL.findSymbol("InitGraphics", dllInfo);
-                assert symbolHandle != DLL.SYMBOL_NOT_FOUND;
-                CallRFFI.InvokeVoidCallRootNode.create().getCallTarget().call(new NativeCallInfo("InitGraphics", symbolHandle, dllInfo), new Object[0]);
             }
+        } else if (initialized.compareAndSet(false, true) && FastROptions.LoadPackagesNativeCode.getBooleanValue()) {
+            DLL.DLLInfo dllInfo = DLL.findLibraryContainingSymbol("InitGraphics");
+            DLL.SymbolHandle symbolHandle = DLL.findSymbol("InitGraphics", dllInfo);
+            assert symbolHandle != DLL.SYMBOL_NOT_FOUND;
+            CallRFFI.InvokeVoidCallRootNode.create().getCallTarget().call(new NativeCallInfo("InitGraphics", symbolHandle, dllInfo), new Object[0]);
         }
+        context.internalGraphicsInitialized = true;
     }
 }
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/RContext.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/RContext.java
index 1f9abdcb988641968f28c180c739c19345d3d989..28c057b810c6e60e3f8d106ec8e2eaedf4b728f8 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/RContext.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/RContext.java
@@ -354,6 +354,7 @@ public final class RContext {
     // Context specific state required for libraries, the initialization is handled lazily by the
     // concrete library.
     public Object gridContext = null;
+    public boolean internalGraphicsInitialized = false;
 
     public final WeakHashMap<String, WeakReference<String>> stringMap = new WeakHashMap<>();
     public final WeakHashMap<Source, REnvironment> sourceRefEnvironments = new WeakHashMap<>();