diff --git a/ardor3d-jogl/src/main/java/com/ardor3d/framework/jogl/JoglAwtCanvas.java b/ardor3d-jogl/src/main/java/com/ardor3d/framework/jogl/JoglAwtCanvas.java
index df55d06..e36cd92 100644
--- a/ardor3d-jogl/src/main/java/com/ardor3d/framework/jogl/JoglAwtCanvas.java
+++ b/ardor3d-jogl/src/main/java/com/ardor3d/framework/jogl/JoglAwtCanvas.java
@@ -13,8 +13,6 @@
 import java.lang.reflect.InvocationTargetException;
 import java.util.concurrent.CountDownLatch;
 
-import javax.media.opengl.GLAutoDrawable;
-import javax.media.opengl.GLRunnable;
 import javax.media.opengl.awt.GLCanvas;
 import javax.swing.SwingUtilities;
 
@@ -38,9 +36,12 @@
 
     private final JoglDrawerRunnable _drawerGLRunnable;
 
+    private final JoglInitializerRunnable _initializerRunnable;
+
     public JoglAwtCanvas(final DisplaySettings settings, final JoglCanvasRenderer canvasRenderer) {
         super(CapsUtil.getCapsForSettings(settings));
         _drawerGLRunnable = new JoglDrawerRunnable(canvasRenderer);
+        _initializerRunnable = new JoglInitializerRunnable(this, settings);
         _settings = settings;
         _canvasRenderer = canvasRenderer;
 
@@ -60,35 +61,15 @@
         // Calling setVisible(true) on the GLCanvas not from the AWT-EDT can freeze the Intel GPU under Windows
         if (!SwingUtilities.isEventDispatchThread()) {
             try {
-                SwingUtilities.invokeAndWait(new Runnable() {
-                    @Override
-                    public void run() {
-                        // Make the window visible to realize the OpenGL surface.
-                        setVisible(true);
-                    }
-                });
+                SwingUtilities.invokeAndWait(_initializerRunnable);
             } catch (final InterruptedException ex) {
                 ex.printStackTrace();
             } catch (final InvocationTargetException ex) {
                 ex.printStackTrace();
             }
         } else {
-            // Make the window visible to realize the OpenGL surface.
-            setVisible(true);
+            _initializerRunnable.run();
         }
-
-        // Request the focus here as it cannot work when the window is not visible
-        requestFocus();
-
-        _canvasRenderer.setContext(getContext());
-
-        invoke(true, new GLRunnable() {
-            @Override
-            public boolean run(final GLAutoDrawable glAutoDrawable) {
-                _canvasRenderer.init(_settings, true);// true - do swap in renderer.
-                return true;
-            }
-        });
         _inited = true;
     }
 
diff --git a/ardor3d-jogl/src/main/java/com/ardor3d/framework/jogl/JoglInitializerRunnable.java b/ardor3d-jogl/src/main/java/com/ardor3d/framework/jogl/JoglInitializerRunnable.java
new file mode 100644
index 0000000..18ab9ab
--- /dev/null
+++ b/ardor3d-jogl/src/main/java/com/ardor3d/framework/jogl/JoglInitializerRunnable.java
@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) 2008-2010 Ardor Labs, Inc.
+ *
+ * This file is part of Ardor3D.
+ *
+ * Ardor3D is free software: you can redistribute it and/or modify it 
+ * under the terms of its license which may be found in the accompanying
+ * LICENSE file or at <http://www.ardor3d.com/LICENSE>.
+ */
+
+package com.ardor3d.framework.jogl;
+
+import com.ardor3d.framework.DisplaySettings;
+
+public class JoglInitializerRunnable implements Runnable {
+
+    private final JoglAwtCanvas _joglAwtCanvas;
+
+    private final DisplaySettings _settings;
+
+    public JoglInitializerRunnable(final JoglAwtCanvas joglAwtCanvas, final DisplaySettings settings) {
+        _joglAwtCanvas = joglAwtCanvas;
+        _settings = settings;
+    }
+
+    @Override
+    public void run() {
+        // Make the window visible to realize the OpenGL surface.
+        _joglAwtCanvas.setVisible(true);
+        // Request the focus here as it cannot work when the window is not visible
+        _joglAwtCanvas.requestFocus();
+        // The OpenGL context has been created after the realization of the surface
+        _joglAwtCanvas.getCanvasRenderer().setContext(_joglAwtCanvas.getContext());
+        // As the canvas renderer knows the OpenGL context, it can be initialized
+        _joglAwtCanvas.getCanvasRenderer().init(_settings, true);
+    }
+}