diff --git a/gloss-examples.cabal b/gloss-examples.cabal
--- a/gloss-examples.cabal
+++ b/gloss-examples.cabal
@@ -1,5 +1,5 @@
 Name:                gloss-examples
-Version:             1.8.2.1
+Version:             1.9.1.1
 License:             MIT
 License-file:        LICENSE
 Author:              Ben Lippmeier
@@ -26,7 +26,7 @@
         base           == 4.7.*,
         bytestring     == 0.10.*,
         bmp            == 1.2.*,
-        gloss          == 1.8.2.*
+        gloss          == 1.9.1.*
   Main-is: Main.hs
   hs-source-dirs: picture/Bitmap
   ghc-options:    -threaded -O2
@@ -35,7 +35,7 @@
 Executable gloss-boids
   Build-depends:
         base           == 4.7.*,
-        gloss          == 1.8.2.*
+        gloss          == 1.9.1.*
   Main-is:        Main.hs
   other-modules:  KDTree2d Vec2
   hs-source-dirs: picture/Boids
@@ -45,7 +45,7 @@
 Executable gloss-clock
   Build-depends: 
         base            == 4.7.*,
-        gloss           == 1.8.2.*
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   hs-source-dirs: picture/Clock
   ghc-options:    -threaded -O2
@@ -55,7 +55,7 @@
   Build-depends: 
         base            == 4.7.*,
         vector          == 0.10.*,
-        gloss           == 1.8.2.*
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   other-modules:  Cell World
   hs-source-dirs: picture/Conway
@@ -64,8 +64,8 @@
 
 Executable gloss-draw
   Build-depends:
-        base           == 4.7.*,
-        gloss          == 1.8.2.*
+        base            == 4.7.*,
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   hs-source-dirs: picture/Draw
   ghc-options:    -threaded -O2
@@ -74,7 +74,7 @@
 Executable gloss-easy
   Build-depends:
         base            == 4.7.*,
-        gloss           == 1.8.2.*
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   hs-source-dirs: picture/Easy
   ghc-options:    -threaded -O2
@@ -83,8 +83,8 @@
 Executable gloss-eden
   Build-depends: 
         base            == 4.7.*,
-        random          == 1.0.*,
-        gloss           == 1.8.2.*
+        random          == 1.1.*,
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   other-modules:  Cell Community World
   hs-source-dirs: picture/Eden
@@ -94,7 +94,7 @@
 Executable gloss-flake
   Build-depends:
         base            == 4.7.*,
-        gloss           == 1.8.2.*
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   hs-source-dirs: picture/Flake
   ghc-options:    -threaded -O2
@@ -103,7 +103,7 @@
 Executable gloss-gameevent
   Build-depends: 
         base            == 4.7.*,
-        gloss           == 1.8.2.*
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   hs-source-dirs: picture/GameEvent
   ghc-options:    -threaded -O2
@@ -112,7 +112,7 @@
 Executable gloss-hello
   Build-depends: 
         base            == 4.7.*, 
-        gloss           == 1.8.2.*
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   hs-source-dirs: picture/Hello
   ghc-options:    -threaded -O2
@@ -121,8 +121,8 @@
 Executable gloss-lifespan
   Build-depends: 
         base            == 4.7.*, 
-        gloss           == 1.8.2.*, 
-        random          == 1.0.*
+        gloss           == 1.9.1.*,
+        random          == 1.1.*
   Main-is:        Main.hs
   other-modules:  Cell Community World
   hs-source-dirs: picture/Lifespan
@@ -132,7 +132,7 @@
 Executable gloss-machina
   Build-depends: 
         base            == 4.7.*, 
-        gloss           == 1.8.2.*
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   hs-source-dirs: picture/Machina
   ghc-options:    -threaded -O2
@@ -141,7 +141,8 @@
 Executable gloss-occlusion
   Build-depends: 
         base            == 4.7.*, 
-        gloss           == 1.8.2.*
+        gloss           == 1.9.1.*,
+        gloss-rendering == 1.9.1.*
   Main-is: Main.hs
   other-modules:  Cell World State Data
   hs-source-dirs: picture/Occlusion
@@ -153,7 +154,7 @@
         base            == 4.7.*,
         ghc-prim        == 0.3.*,
         containers      == 0.5.*,
-        gloss           == 1.8.2.*
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   other-modules:  Actor Advance Collide Config Contact QuadTree World
   hs-source-dirs: picture/Styrene
@@ -163,7 +164,7 @@
 Executable gloss-tree
   Build-depends: 
         base            == 4.7.*, 
-        gloss           == 1.8.2.*
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   hs-source-dirs: picture/Tree
   ghc-options:    -threaded -O2
@@ -173,7 +174,7 @@
   Build-depends: 
         base            == 4.7.*, 
         vector          == 0.10.*,
-        gloss           == 1.8.2.*
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   other-modules:  Draw Interface State World Geometry.Randomish Geometry.Segment
   hs-source-dirs: picture/Visibility 
@@ -183,7 +184,7 @@
 Executable gloss-zen
   Build-depends: 
         base            == 4.7.*, 
-        gloss           == 1.8.2.*
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   hs-source-dirs: picture/Zen
   ghc-options:    -threaded -O2
@@ -191,9 +192,9 @@
 
 Executable gloss-crystal
   Build-depends:
-        base           == 4.7.*,
-        gloss          == 1.8.2.*,
-        gloss-raster   == 1.8.2.*
+        base            == 4.7.*,
+        gloss           == 1.9.1.*,
+        gloss-raster    == 1.9.1.*
   Main-is:        Main.hs
   hs-source-dirs: raster/Crystal
   ghc-options:    
@@ -210,8 +211,8 @@
 Executable gloss-ray
   Build-depends:
         base           == 4.7.*,
-        gloss          == 1.8.2.*,
-        gloss-raster   == 1.8.2.*
+        gloss          == 1.9.1.*,
+        gloss-raster   == 1.9.1.*
   Main-is:        Main.hs
   other-modules:  Light Object Trace Vec3 World
   hs-source-dirs: raster/Ray
@@ -226,8 +227,8 @@
 Executable gloss-pulse
   Build-depends:
         base           == 4.7.*,
-        gloss          == 1.8.2.*,
-        gloss-raster   == 1.8.2.*
+        gloss          == 1.9.1.*,
+        gloss-raster   == 1.9.1.*
   Main-is:        Main.hs
   hs-source-dirs: raster/Pulse
   ghc-options:
@@ -243,8 +244,8 @@
         base           == 4.7.*,
         ghc-prim       == 0.3.*,
         vector         == 0.10.*,
-        gloss          == 1.8.2.*,
-        gloss-raster   == 1.8.2.*
+        gloss          == 1.9.1.*,
+        gloss-raster   == 1.9.1.*
   Main-is:        Main.hs
   hs-source-dirs: raster/Wave
   ghc-options:
@@ -259,10 +260,10 @@
         base            == 4.7.*,
         ghc-prim        == 0.3.*,
         vector          == 0.10.*,
-        repa            == 3.2.*,
-        repa-io         == 3.2.*,
-        repa-algorithms == 3.2.*,
-        gloss           == 1.8.2.*
+        repa            == 3.3.*,
+        repa-io         == 3.3.*,
+        repa-algorithms == 3.3.*,
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   other-modules:  
         Args Config FieldElt Model UserEvent
@@ -281,10 +282,10 @@
         
 
 Executable gloss-snow
-  Build-depends
+  Build-depends:
         base            == 4.7.*,
-        repa            == 3.2.*,
-        gloss           == 1.8.2.*
+        repa            == 3.3.*,
+        gloss           == 1.9.1.*
   Main-is:      Main.hs
   hs-source-dirs: raster/Snow
   ghc-options:
@@ -296,10 +297,10 @@
 
 
 Executable gloss-mandel
-  Build-depends
+  Build-depends:
         base            == 4.7.*,
-        repa            == 3.2.*,
-        gloss           == 1.8.2.*
+        repa            == 3.3.*,
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   other-modules:  Solver
   hs-source-dirs: raster/Mandel
@@ -314,11 +315,23 @@
 
 
 Executable gloss-graph
-  Build-depends
+  Build-depends:
         base            == 4.7.*,
         containers      == 0.5.*,
-        gloss           == 1.8.2.*
+        gloss           == 1.9.1.*
   Main-is:        Main.hs
   hs-source-dirs: picture/Graph
   ghc-options:
         -Wall -O2
+
+Executable gloss-render
+  Build-depends:
+        base            == 4.7.*,
+        containers      == 0.5.*,
+        gloss           == 1.9.1.*,
+        GLFW-b
+  Main-is:        Main.hs
+  hs-source-dirs: picture/Render
+  ghc-options:
+        -Wall -O2
+
diff --git a/picture/Boids/Main.hs b/picture/Boids/Main.hs
--- a/picture/Boids/Main.hs
+++ b/picture/Boids/Main.hs
@@ -10,7 +10,6 @@
 import System.IO.Unsafe
 import Debug.Trace
 import Graphics.Gloss
-import Graphics.Gloss.Data.Picture
 import Graphics.Gloss.Interface.Pure.Simulate
 
 
diff --git a/picture/Eden/Main.hs b/picture/Eden/Main.hs
--- a/picture/Eden/Main.hs
+++ b/picture/Eden/Main.hs
@@ -1,7 +1,7 @@
 
 -- Adapted from ANUPlot version by Clem Baker-Finch
 module Main where
-import World
+import qualified World as W
 import Graphics.Gloss
 import Graphics.Gloss.Interface.Pure.Simulate
 import System.Random
@@ -12,8 +12,8 @@
 	simulate (InWindow "Eden" (800, 600) (10, 10))
  		 (greyN 0.1)	 -- background color
 		 2               -- number of steps per second
-		 (genesis' gen)  -- initial world
-		 render          -- function to convert world to a Picture
-		 evolve          -- function to step the world one iteration
+		 (W.genesis' gen)  -- initial world
+		 W.render          -- function to convert world to a Picture
+		 W.evolve          -- function to step the world one iteration
 
 
diff --git a/picture/Lifespan/Main.hs b/picture/Lifespan/Main.hs
--- a/picture/Lifespan/Main.hs
+++ b/picture/Lifespan/Main.hs
@@ -1,7 +1,7 @@
 
 -- Adapted from ANUPlot version by Clem Baker-Finch
 module Main where
-import World
+import qualified World as W
 import Graphics.Gloss
 import Graphics.Gloss.Interface.Pure.Simulate
 import System.Random
@@ -12,9 +12,9 @@
 	simulate (InWindow "Lifespan" (800, 600) (10, 10))
 		 (greyN 0.1) 	 -- background color
 		 2               -- number of steps per second
-		 (genesis' gen)  -- initial world
-		 render          -- function to convert world to a Picture
-		 evolve          -- function to step the world one iteration
+		 (W.genesis' gen)  -- initial world
+		 W.render          -- function to convert world to a Picture
+		 W.evolve          -- function to step the world one iteration
 
 
 
diff --git a/picture/Render/Main.hs b/picture/Render/Main.hs
new file mode 100644
--- /dev/null
+++ b/picture/Render/Main.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE PackageImports #-}
+import "GLFW-b" Graphics.UI.GLFW as GLFW
+import Control.Concurrent (threadDelay)
+import Control.Monad (when, unless)
+import Graphics.Gloss.Render
+import Graphics.Gloss
+
+
+main :: IO ()
+main = do
+    let width  = 200
+        height = 200
+
+    state  <- stateInit
+
+    withWindow width height "Render" $ \win -> do
+        loop state win (width, height)
+
+
+    where loop state window (w, h) = do
+            threadDelay 20000
+            pollEvents
+            render state (w, h) white (Circle 80)
+            swapBuffers window
+            k <- keyIsPressed window Key'Escape
+            unless k $ loop state window (w, h)
+
+
+withWindow :: Int -> Int -> String -> (GLFW.Window -> IO ()) -> IO ()
+withWindow width height title f = do
+    GLFW.setErrorCallback $ Just simpleErrorCallback
+    r <- GLFW.init
+    when r $ do
+        m <- GLFW.createWindow width height title Nothing Nothing
+        case m of
+          (Just win) -> do
+              GLFW.makeContextCurrent m
+              f win
+              GLFW.setErrorCallback $ Just simpleErrorCallback
+              GLFW.destroyWindow win
+          Nothing -> return ()
+        GLFW.terminate
+  where
+    simpleErrorCallback e s =
+        putStrLn $ unwords [show e, show s]
+
+
+keyIsPressed :: Window -> Key -> IO Bool
+keyIsPressed win key = isPress `fmap` GLFW.getKey win key
+
+
+isPress :: KeyState -> Bool
+isPress KeyState'Pressed   = True
+isPress KeyState'Repeating = True
+isPress _                  = False
