diff --git a/spice.cabal b/spice.cabal
--- a/spice.cabal
+++ b/spice.cabal
@@ -1,5 +1,5 @@
 name:                spice
-version:             0.1.1.0
+version:             0.1.2.1
 synopsis:            An FRP-based game engine written in Haskell.
 description:         An FRP-based game engine written in Haskell. - See the homepage for more information.
 homepage:            http://github.com/crockeo/spice
@@ -21,6 +21,10 @@
                        FRP.Spice.Engine.RenderWrapper
                        FRP.Spice.Engine.RunInput
                        FRP.Spice.Game
+                       FRP.Spice.Graphics
+                       FRP.Spice.Graphics.Color
+                       FRP.Spice.Graphics.Geometry
+                       FRP.Spice.Graphics.Utils
                        FRP.Spice.Input
                        FRP.Spice.Input.Keyboard
                        FRP.Spice.Input.Mouse
diff --git a/src/FRP/Spice/Graphics.hs b/src/FRP/Spice/Graphics.hs
new file mode 100644
--- /dev/null
+++ b/src/FRP/Spice/Graphics.hs
@@ -0,0 +1,13 @@
+{-|
+  This module re-exports a number of modules having to do with graphics.
+-}
+module FRP.Spice.Graphics ( module FRP.Spice.Graphics.Geometry
+                          , module FRP.Spice.Graphics.Color
+                          , module FRP.Spice.Graphics.Utils
+                          ) where
+
+-----------------------
+-- Rexported Imports --
+import FRP.Spice.Graphics.Geometry
+import FRP.Spice.Graphics.Color
+import FRP.Spice.Graphics.Utils
diff --git a/src/FRP/Spice/Graphics/Color.hs b/src/FRP/Spice/Graphics/Color.hs
new file mode 100644
--- /dev/null
+++ b/src/FRP/Spice/Graphics/Color.hs
@@ -0,0 +1,97 @@
+{-|
+  This module provides an abstraction over the default representations of color
+  in the Haskell OpenGL bindings.
+-}
+module FRP.Spice.Graphics.Color where
+
+--------------------
+-- Global Imports --
+import Graphics.Rendering.OpenGL (Color4 (..), GLfloat, color)
+
+-------------------
+-- Local Imports --
+import FRP.Spice.Graphics.Utils
+
+----------
+-- Code --
+
+{-|
+  Representing a Color using four @'Float'@ representing reg, green, blue, and
+  the alpha mask respectively. The @'Float'@s are in a range from 0-1,
+  representing @'Int'@s from 0-255.
+-}
+data Color = Color { getRed   :: Float
+                   , getGreen :: Float
+                   , getBlue  :: Float
+                   , getAlpha :: Float
+                   }
+  deriving (Eq, Show, Read)
+
+{-|
+  Changes the current OpenGL context's rendering color to the @'Color'@
+  specified.
+-}
+bindColor :: Color -> IO ()
+bindColor (Color r g b a) =
+  color $ Color4 (togl r) (togl g) (togl b) (togl a)
+
+{-|
+  A synonym for the @'Color'@ constructor.
+-}
+color4f :: Float -> Float -> Float -> Float -> Color
+color4f = Color
+
+{-|
+  Constructing a @'Color'@ from 3 @'Float'@s, defaulting the alpha mask to 1.0.
+-}
+color3f :: Float -> Float -> Float -> Color
+color3f r g b = color4f r g b 1.0
+
+{-|
+  Creating a @'Color'@ from 4 @'Int'@s. The ints, similarly to @'color4f'@
+  represent red, green, blue, and the alpha mask respectively. The ints should
+  be in the range of 0-255. (Note: @'color4i'@ is functionally equivalent (and
+  also equivalent in source code) to calling color4f with each of its arguments
+  divided by 255.)
+-}
+color4i :: Int -> Int -> Int -> Int -> Color
+color4i r g b a = color4f (fromIntegral r / 255)
+                          (fromIntegral g / 255)
+                          (fromIntegral b / 255)
+                          (fromIntegral a / 255)
+
+{-|
+  Constructing a @'Color'@ from 3 @'Int'@s, defaulting the alpha mask to 255.
+-}
+color3i :: Int -> Int -> Int -> Color
+color3i r g b = color4i r g b 255
+
+{-|
+  The color black.
+-}
+black :: Color
+black = color3i 0 0 0
+
+{-|
+  The color white.
+-}
+white :: Color
+white = color3i 255 255 255
+
+{-|
+  The color red.
+-}
+red :: Color
+red = color3i 255 0 0
+
+{-|
+  The color green.
+-}
+green :: Color
+green = color3i 0 255 0
+
+{-|
+  The color blue.
+-}
+blue :: Color
+blue = color3i 0 0 255
diff --git a/src/FRP/Spice/Graphics/Geometry.hs b/src/FRP/Spice/Graphics/Geometry.hs
new file mode 100644
--- /dev/null
+++ b/src/FRP/Spice/Graphics/Geometry.hs
@@ -0,0 +1,42 @@
+{-|
+  This module provides a cleaner API to render a number of shapes in the
+  current OpenGL context.
+-}
+module FRP.Spice.Graphics.Geometry where
+
+--------------------
+-- Global Imports --
+import Graphics.Rendering.OpenGL
+
+-------------------
+-- Local Imports --
+import FRP.Spice.Graphics.Utils
+import FRP.Spice.Math.Vector
+
+----------
+-- Code --
+
+{-|
+  Rendering a point.
+-}
+renderPoint :: Vector Float -> IO ()
+renderPoint (Vector x y) = do
+  renderPrimitive Points $
+    vertex $ Vertex2 (togl x) (togl y)
+
+{-|
+  Rendering a rectangle.
+-}
+renderRectangle :: Vector Float -> Vector Float -> IO ()
+renderRectangle (Vector x y) (Vector w h) = do
+  renderPrimitive Quads $ do
+    vertex $ Vertex2 (togl (x    )) (togl (y    ))
+    vertex $ Vertex2 (togl (x + w)) (togl (y    ))
+    vertex $ Vertex2 (togl (x + w)) (togl (y + h))
+    vertex $ Vertex2 (togl (x    )) (togl (y + h))
+
+{-|
+  Rendering a square.
+-}
+renderSquare :: Vector Float -> Float -> IO ()
+renderSquare pos size = renderRectangle pos $ Vector size size
diff --git a/src/FRP/Spice/Graphics/Utils.hs b/src/FRP/Spice/Graphics/Utils.hs
new file mode 100644
--- /dev/null
+++ b/src/FRP/Spice/Graphics/Utils.hs
@@ -0,0 +1,18 @@
+{-|
+  This module provides a set of utilities to ease the burden of writing OpenGL
+  rendering functions.
+-}
+module FRP.Spice.Graphics.Utils where
+
+--------------------
+-- Global Imports --
+import Graphics.Rendering.OpenGL
+
+----------
+-- Code --
+
+{-|
+  Converting a @'Float'@ to a @'GLfloat'@
+-}
+togl :: Float -> GLfloat
+togl = realToFrac
diff --git a/src/FRP/Spice/Input/Keyboard.hs b/src/FRP/Spice/Input/Keyboard.hs
--- a/src/FRP/Spice/Input/Keyboard.hs
+++ b/src/FRP/Spice/Input/Keyboard.hs
@@ -21,8 +21,7 @@
 keys = map toEnum [0 .. 318]
 
 {-|
-  A Map from @'Key'@ to the externals created for every single
-  key.
+  A Map from @'Key'@ to the externals created for every single key.
 -}
 externals :: IO (Map Key (Signal Bool, Bool -> IO ()))
 externals = liftM fromList $ mapM (\k -> liftM ((,) k) $ external False) keys
diff --git a/src/FRP/Spice/Input/Mouse.hs b/src/FRP/Spice/Input/Mouse.hs
--- a/src/FRP/Spice/Input/Mouse.hs
+++ b/src/FRP/Spice/Input/Mouse.hs
@@ -24,7 +24,9 @@
 instance Ord MouseButton where
   mb1 <= mb2 = fromEnum mb1 < fromEnum mb2
 
--- A set of all mouse buttons available via GLFW
+{-|
+  A list of all mouse buttons available via the GLFW api.
+-}
 buttons :: [MouseButton]
 buttons = [ ButtonLeft
           , ButtonRight
@@ -33,14 +35,22 @@
           ++
           map ButtonNo [0 .. 7]
 
--- Getting externals for all of the buttons
+{-|
+  A map from @'MouseButton'@ to externals created for every button.
+-}
 externals :: IO (Map MouseButton (Signal Bool, Bool -> IO ()))
 externals = liftM fromList $ mapM (\b -> liftM ((,) b) $ external False) buttons
 
--- Getting the signals from the externals
+{-|
+  Creating the @'Signal'@ of a @'Map'@ from @'MouseButton'@ to @'Bool'@ from a
+  @'Map'@ of @'externals'@.
+-}
 signals :: Map MouseButton (Signal Bool, Bool -> IO ()) -> Signal (Map MouseButton Bool)
 signals = T.sequence . fmap fst
 
--- Getting the sinks from the externals
+{-|
+  Making a @'Map'@ from @'MouseButton'@ to sink from a @'Map'@ of
+  @'externals'@.
+-}
 sinks :: Map MouseButton (Signal Bool, Bool -> IO ()) -> Map MouseButton (Bool -> IO ())
 sinks = fmap snd
diff --git a/src/FRP/Spice/Input/MousePosition.hs b/src/FRP/Spice/Input/MousePosition.hs
--- a/src/FRP/Spice/Input/MousePosition.hs
+++ b/src/FRP/Spice/Input/MousePosition.hs
@@ -14,14 +14,20 @@
 -- Local Imports --
 import FRP.Spice.Math.Vector
 
--- Getting the external for the mouse position
+{-|
+  Creating the external for the mouse position.
+-}
 externals :: IO (Signal (Vector Float), Vector Float -> IO ())
 externals = external def
 
--- Getting the signal from the external
+{-|
+  Getting the signal from the mouse position external.
+-}
 signals :: (Signal (Vector Float), Vector Float -> IO ()) -> Signal (Vector Float)
 signals = fst
 
--- Getting the signal from the external
+{-|
+  Getting the sink from the mouse position external.
+-}
 sinks :: (Signal (Vector Float), Vector Float -> IO ()) -> Vector Float -> IO ()
 sinks = snd
