diff --git a/GLFW-b-demo.cabal b/GLFW-b-demo.cabal
--- a/GLFW-b-demo.cabal
+++ b/GLFW-b-demo.cabal
@@ -1,5 +1,5 @@
 name:         GLFW-b-demo
-version:      0.0.1
+version:      0.0.2
 
 category:     Graphics
 
@@ -22,6 +22,10 @@
 build-type:    Simple
 
 -- -- -- -- -- -- -- -- -- --
+
+extra-source-files:
+  src/Cube.hs
+  src/Display.hs
 
 executable GLFW-b-demo
   main-is: Main.hs
diff --git a/src/Cube.hs b/src/Cube.hs
new file mode 100644
--- /dev/null
+++ b/src/Cube.hs
@@ -0,0 +1,62 @@
+module Cube
+  ( draw
+  ) where
+
+import qualified Graphics.Rendering.OpenGL as GL
+
+draw :: GL.GLfloat -> IO ()
+draw s = do
+    GL.scale s s s
+    GL.renderPrimitive GL.Quads $ do
+        -- front
+        GL.color red
+        GL.normal (GL.Normal3 z  z  p1)
+        GL.vertex (GL.Vertex3 n1 n1 p1)
+        GL.vertex (GL.Vertex3 p1 n1 p1)
+        GL.vertex (GL.Vertex3 p1 p1 p1)
+        GL.vertex (GL.Vertex3 n1 p1 p1)
+        -- back
+        GL.color red
+        GL.normal (GL.Normal3  z  z n1)
+        GL.vertex (GL.Vertex3 n1 n1 n1)
+        GL.vertex (GL.Vertex3 n1 p1 n1)
+        GL.vertex (GL.Vertex3 p1 p1 n1)
+        GL.vertex (GL.Vertex3 p1 n1 n1)
+        -- top
+        GL.color green
+        GL.normal (GL.Normal3 z  p1  z)
+        GL.vertex (GL.Vertex3 n1 p1 n1)
+        GL.vertex (GL.Vertex3 n1 p1 p1)
+        GL.vertex (GL.Vertex3 p1 p1 p1)
+        GL.vertex (GL.Vertex3 p1 p1 n1)
+        -- bottom
+        GL.color green
+        GL.normal (GL.Normal3  z n1  z)
+        GL.vertex (GL.Vertex3 n1 n1 n1)
+        GL.vertex (GL.Vertex3 p1 n1 n1)
+        GL.vertex (GL.Vertex3 p1 n1 p1)
+        GL.vertex (GL.Vertex3 n1 n1 p1)
+        -- right
+        GL.color blue
+        GL.normal (GL.Normal3 p1  z  z)
+        GL.vertex (GL.Vertex3 p1 n1 n1)
+        GL.vertex (GL.Vertex3 p1 p1 n1)
+        GL.vertex (GL.Vertex3 p1 p1 p1)
+        GL.vertex (GL.Vertex3 p1 n1 p1)
+        -- left
+        GL.color blue
+        GL.normal (GL.Normal3 n1  z  z)
+        GL.vertex (GL.Vertex3 n1 n1 n1)
+        GL.vertex (GL.Vertex3 n1 n1 p1)
+        GL.vertex (GL.Vertex3 n1 p1 p1)
+        GL.vertex (GL.Vertex3 n1 p1 n1)
+
+red, green, blue :: GL.Color4 GL.GLfloat
+red   = GL.Color4 1 0 0 1
+green = GL.Color4 0 1 0 1
+blue  = GL.Color4 0 0 1 1
+
+z, n1, p1 :: GL.GLfloat
+z  =  0
+n1 = -1
+p1 =  1
diff --git a/src/Display.hs b/src/Display.hs
new file mode 100644
--- /dev/null
+++ b/src/Display.hs
@@ -0,0 +1,24 @@
+module Display
+  ( draw
+  ) where
+
+import qualified Cube as Cube
+
+import qualified Graphics.Rendering.OpenGL as GL
+import qualified Graphics.UI.GLFW          as GLFW
+
+draw :: Float -> Float -> IO ()
+draw xa ya = do
+    GL.clear [GL.ColorBuffer, GL.DepthBuffer]
+    GL.loadIdentity
+
+    GL.preservingMatrix $ do
+        GL.rotate (realToFrac xa) xVector3
+        GL.rotate (realToFrac ya) yVector3
+        Cube.draw w
+
+    GLFW.swapBuffers
+  where
+    xVector3 = GL.Vector3 1 0 0 :: GL.Vector3 GL.GLfloat
+    yVector3 = GL.Vector3 0 1 0 :: GL.Vector3 GL.GLfloat
+    w = 0.5
