diff --git a/HGamer3D-Data.cabal b/HGamer3D-Data.cabal
--- a/HGamer3D-Data.cabal
+++ b/HGamer3D-Data.cabal
@@ -1,5 +1,5 @@
 Name:                HGamer3D-Data
-Version:             0.3.2
+Version:             0.4.0
 Synopsis:            Game Engine for the Haskell Programmer - Data Definitions and Utilities
 Description:         
 	HGamer3D is a game engine for developing 3D games in the programming 
@@ -17,9 +17,9 @@
 Extra-source-files:  Setup.hs 
 
 Library
-  Build-Depends:     base >= 3 && < 5, FindBin, directory, filepath, vect
+  Build-Depends:     base >= 3 && < 5, FindBin, directory, filepath, vect, clock
 
-  Exposed-modules:   HGamer3D.Data.Vector,HGamer3D.Data.Vector.Instances,HGamer3D.Data.Colour,HGamer3D.Data.HG3DClass,HGamer3D.Data.Angle,HGamer3D.Data.TimeMS,HGamer3D.Data.Operation3D,HGamer3D.Data.ScreenGeometry,HGamer3D.Util.FileLocation, HGamer3D.Util.UniqueName, HGamer3D.Data, HGamer3D.Util
+  Exposed-modules:   HGamer3D.Data.TypeSynonyms, HGamer3D.Data.Vector,HGamer3D.Data.Colour,HGamer3D.Data.HG3DClass,HGamer3D.Data.Angle,HGamer3D.Data.GameTime,HGamer3D.Data.Transform3D,HGamer3D.Data.Geometry2D,HGamer3D.Data.Window,HGamer3D.Util.FileLocation, HGamer3D.Util.UniqueName, HGamer3D.Data, HGamer3D.Util
   Other-modules:     
 
   c-sources:         
diff --git a/HGamer3D/Data.hs b/HGamer3D/Data.hs
--- a/HGamer3D/Data.hs
+++ b/HGamer3D/Data.hs
@@ -23,22 +23,24 @@
 module HGamer3D.Data 
 
 (
-    module HGamer3D.Data.HG3DClass,
     module HGamer3D.Data.Angle,
     module HGamer3D.Data.Colour,
-    module HGamer3D.Data.Operation3D,
-    module HGamer3D.Data.TimeMS,
+    module HGamer3D.Data.Transform3D,
+    module HGamer3D.Data.GameTime,
     module HGamer3D.Data.Vector,
-    module HGamer3D.Data.ScreenGeometry
+    module HGamer3D.Data.Geometry2D,
+    module HGamer3D.Data.TypeSynonyms,
+    Window,
 )
 
 where
 
-import HGamer3D.Data.HG3DClass
 import HGamer3D.Data.Angle
 import HGamer3D.Data.Colour
-import HGamer3D.Data.Operation3D
-import HGamer3D.Data.TimeMS
+import HGamer3D.Data.Transform3D
+import HGamer3D.Data.GameTime
 import HGamer3D.Data.Vector
-import HGamer3D.Data.ScreenGeometry
+import HGamer3D.Data.Geometry2D
+import HGamer3D.Data.Window
+import HGamer3D.Data.TypeSynonyms
 
diff --git a/HGamer3D/Data/Colour.hs b/HGamer3D/Data/Colour.hs
--- a/HGamer3D/Data/Colour.hs
+++ b/HGamer3D/Data/Colour.hs
@@ -18,18 +18,57 @@
 
 -- ColourValue.hs
 
--- | HGamer3D colour type
+-- | Module providing the Colour type and some standard colours
 module HGamer3D.Data.Colour 
 
 (
 	Colour (Colour, cRed, cGreen, cBlue, cAlpha),
+        white,
+        silver,
+        grey,
+	darkgrey,
+        black,
+        red,
+        maroon,
+        yellow,
+        olive,
+        lime,
+        green,
+        aqua,
+        teal,
+        blue,
+        navy,
+        fuchsia,
+        purple
 )
 
 where
+
+-- | HGamer3D colour type
 data Colour = Colour {
-  cRed :: Float,
-  cGreen :: Float,
-  cBlue :: Float,
-  cAlpha :: Float
+  cRed :: Float,   -- ^ red component ranging from 0.0 to 1.0
+  cGreen :: Float, -- ^ green component ranging from 0.0 to 1.0
+  cBlue :: Float,  -- ^ blue component ranging from 0.0 to 1.0
+  cAlpha :: Float  -- ^ alpha component ranging from 0.0 to 1.0 with 1.0 being fully opaque
    } deriving (Eq, Show)
+
+white = Colour 1.0 1.0 1.0 1.0 
+silver  = Colour 0.75 0.75 0.75 1.0
+grey = Colour 0.5 0.5 0.5 1.0
+darkgrey = Colour 0.25 0.25 0.25 1.0
+black = Colour 0.0 0.0 0.0 1.0
+red = Colour 1.0 0.0 0.0 1.0
+maroon = Colour 0.5 0.0 0.0 1.0
+yellow = Colour 1.0 1.0 0.0 1.0
+olive = Colour 0.5 0.5 0.0 1.0
+lime = Colour 0.0 1.0 0.0 1.0
+green = Colour 0.0 0.5 0.0 1.0
+aqua = Colour 0.0 1.0 1.0 1.0
+teal = Colour 0.0 0.5 0.5 1.0
+blue = Colour 0.0 0.0 1.0 1.0 
+navy = Colour 0.0 0.0 0.5 1.0
+fuchsia = Colour 1.0 0.0 1.0 1.0
+purple = Colour 0.5 0.0 0.5 1.0
+
+
 
diff --git a/HGamer3D/Data/GameTime.hs b/HGamer3D/Data/GameTime.hs
new file mode 100644
--- /dev/null
+++ b/HGamer3D/Data/GameTime.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE TypeSynonymInstances #-}
+-- This source file is part of HGamer3D
+-- (A project to enable 3D game development in Haskell)
+-- For the latest info, see http://www.hgamer3d.org
+--
+-- (c) 2011-2013 Peter Althainz
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+-- TimeMS.hs
+
+-- | Module providing the time type for HGamer3D
+module HGamer3D.Data.GameTime
+
+(
+  GameTime,
+  sec,
+  msec,
+  usec,
+  
+  secT,
+  msecT,
+  usecT,
+  
+  getTime,
+  getThreadCPUTime,
+  getProcessCPUTime
+)
+
+where
+
+import qualified System.Clock as C
+
+type GameTime = C.TimeSpec
+
+_toInteger :: C.TimeSpec -> Integer
+_toInteger ts = let
+  s = (fromIntegral (C.sec ts)) :: Integer
+  ns = (fromIntegral (C.nsec ts)) :: Integer
+  in s * 1000000000 + ns
+
+_fromInteger :: Integer -> C.TimeSpec
+_fromInteger i = let
+  s = fromIntegral (i `quot` 1000000000)
+  ns = fromIntegral (i `rem` 1000000000)
+  in C.TimeSpec s ns
+
+instance Num GameTime where
+  (+) a b = _fromInteger((_toInteger a) Prelude.+ (_toInteger b)  )
+  (-) a b = _fromInteger((_toInteger a) Prelude.- (_toInteger b)  )
+  (*) a b = _fromInteger((_toInteger a) Prelude.* (_toInteger b)  )
+  abs a = _fromInteger( Prelude.abs (_toInteger a))
+  signum a = _fromInteger( Prelude.signum (_toInteger a))
+  fromInteger i = _fromInteger i
+
+sec :: C.TimeSpec -> Int
+sec ts = fromIntegral ((_toInteger ts) `quot` 1000000000)
+
+msec :: C.TimeSpec -> Int
+msec ts = fromIntegral ((_toInteger ts) `quot` 1000000)
+
+usec :: C.TimeSpec -> Int
+usec ts = fromIntegral ((_toInteger ts) `quot` 1000)
+
+secT :: Int -> C.TimeSpec
+secT i = _fromInteger ((fromIntegral i) * 1000000000)
+
+msecT :: Int -> C.TimeSpec
+msecT i = _fromInteger ((fromIntegral i) * 1000000)
+
+usecT :: Int -> C.TimeSpec
+usecT i = _fromInteger ((fromIntegral i) * 1000)
+
+getTime :: IO GameTime
+getTime = C.getTime C.Realtime
+
+getThreadCPUTime :: IO GameTime
+getThreadCPUTime = C.getTime C.ThreadCPUTime
+
+getProcessCPUTime :: IO GameTime
+getProcessCPUTime = C.getTime C.ProcessCPUTime
+
diff --git a/HGamer3D/Data/Geometry2D.hs b/HGamer3D/Data/Geometry2D.hs
new file mode 100644
--- /dev/null
+++ b/HGamer3D/Data/Geometry2D.hs
@@ -0,0 +1,64 @@
+-- This source file is part of HGamer3D
+-- (A project to enable 3D game development in Haskell)
+-- For the latest info, see http://www.hgamer3d.org
+--
+-- (c) 2014 Peter Althainz
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+-- Rectangle.hs
+
+-- | Type definitions for 2D geometry 
+module HGamer3D.Data.Geometry2D
+(
+  -- * Geometry
+  Point (..),
+  Rectangle (..),
+  rectFromPoints,
+  pointsFromRect
+  
+) where
+  
+import HGamer3D.Data.Vector
+
+-- | A point has two coordinates an x and y one
+data Point a = Point {
+  ptX :: a,
+  ptY :: a
+  }
+                      
+-- | A rectangle has an a position as x and y and widht and height
+data Num a => Rectangle a = Rectangle {
+  rectX :: a,
+  rectY :: a,
+  rectWidth :: a,
+  rectHeight :: a } deriving (Eq, Show)
+
+-- | derive a rectangle from upper left and lower right points
+rectFromPoints :: Num a => Point a -> Point a -> Rectangle a
+rectFromPoints upperLeft lowerRight = Rectangle rx ry rw rh where
+  rx = ptX upperLeft
+  ry = ptY upperLeft
+  rw = (ptY lowerRight) - rx
+  rh = (ptY lowerRight) - ry
+  
+-- | get upper left and lower right point from a rect
+pointsFromRect :: Num a => Rectangle a -> (Point a, Point a)
+pointsFromRect rect = (ul, lr) where
+  rx = rectX rect
+  ry = rectY rect
+  rx' = rx + (rectWidth rect)
+  ry' = ry + (rectHeight rect)
+  ul = Point rx ry
+  lr = Point rx' ry'
+  
diff --git a/HGamer3D/Data/Operation3D.hs b/HGamer3D/Data/Operation3D.hs
deleted file mode 100644
--- a/HGamer3D/Data/Operation3D.hs
+++ /dev/null
@@ -1,101 +0,0 @@
--- This source file is part of HGamer3D
--- (A project to enable 3D game development in Haskell)
--- For the latest info, see http://www.hgamer3d.org
---
--- (c) 2011-2013 Peter Althainz
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
-
--- Operation3D.hs
-
--- | Typeclasses for basic 3D operations
-module HGamer3D.Data.Operation3D
-(
-        -- * Types
-	Position3D (..),
-	Scale3D (..),
-	Direction3D (..),
-	Orientation3D (..),
-        
-        -- * Functions
-	translate3D,
-        yaw3D,
-        pitch3D,
-        roll3D
-)
-
-where
-
-import HGamer3D.Data.Vector
-import HGamer3D.Data.Angle
-
--- | a type with a Position3D instance can be positioned
-class Position3D t where
-
-        -- | get position function
-	position3D :: t -> IO Vec3
-        -- | set position function
-	positionTo3D :: t -> Vec3 -> IO ()
-	
--- | move position function
-translate3D :: Position3D t => t -> Vec3 -> IO ()
-translate3D t v = do
-	p <- position3D t
-	positionTo3D t ( v &+ p )
-	return ()
-
--- | a type with a Scale3D instance can be scaled
-class Scale3D t where	
-	
-        -- | get scale function
-	scale3D :: t -> IO Vec3
-        -- | set scale function
-	scaleTo3D :: t -> Vec3 -> IO ()
-
--- | a type with a Direction3D instance can be oriented towards a point (Camera for example)
-class Direction3D t where
-        -- | get direction function
-	direction3D :: t -> IO Vec3
-        -- | set direction function
-	directionTo3D :: t -> Vec3 -> IO ()
-
--- | a type with an Orientation3D instance can be oriented in space
-class Orientation3D t where
-        -- | get orientation function
-	orientation3D :: t -> IO UnitQuaternion
-        -- | set orientation function
-	orientationTo3D :: t -> UnitQuaternion -> IO ()
-
--- yaw, roll, pitch functions
--- functions, to rotate on axis, relative to object
-rotRelativeToObjectAxis :: Orientation3D t => t -> Vec3 -> Float -> IO ()
-rotRelativeToObjectAxis object axis val = do
-	qob <- orientation3D object
-	let odir = actU qob axis
-	let qrot = rotU odir val
-	let nrot = qrot .*. qob
-	orientationTo3D object nrot
-	return ()
-	
--- | rotate object on own axis (yaw) by angle
-yaw3D :: Orientation3D t => t -> Angle -> IO ()
-yaw3D object val = rotRelativeToObjectAxis object (Vec3 0.0 1.0 0.0) (fromAngle val)
-
--- | rotate object on own axis (roll) by angle
-roll3D :: Orientation3D t => t -> Angle -> IO ()
-roll3D object val = rotRelativeToObjectAxis object (Vec3 0.0 0.0 1.0) (fromAngle val)
-
--- | rotate object on own axis (pitch) by angle
-pitch3D :: Orientation3D t => t -> Angle -> IO ()
-pitch3D object val = rotRelativeToObjectAxis object (Vec3 1.0 0.0 0.0) (fromAngle val)
-
diff --git a/HGamer3D/Data/ScreenGeometry.hs b/HGamer3D/Data/ScreenGeometry.hs
deleted file mode 100644
--- a/HGamer3D/Data/ScreenGeometry.hs
+++ /dev/null
@@ -1,67 +0,0 @@
--- This source file is part of HGamer3D
--- (A project to enable 3D game development in Haskell)
--- For the latest info, see http://www.hgamer3d.org
---
--- (c) 2014 Peter Althainz
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
-
--- Rectangle.hs
-
--- | Type definitions for 2D geometry and windows
-module HGamer3D.Data.ScreenGeometry
-(
-  -- * Windowing
-  Window (..),
-  
-  -- * Geometry
-  Point (..),
-  Rectangle (..),
-  rectFromPoints,
-  pointsFromRect
-  
-) where
-  
--- | A window is simply represented by it's window id, an unsigned C int
-data Window = Window Int
-
--- | A point has two coordinates an x and y one
-data Point = Point {
-  ptX::Int, 
-  ptY::Int } deriving (Eq, Show)
-                      
--- | A rectangle has an a position as x and y and widht and height
-data Rectangle = Rectangle {
-  rectX :: Int,
-  rectY :: Int,
-  rectWidth :: Int,
-  rectHeight :: Int } deriving (Eq, Show)
-
--- | derive a rectangle from upper left and lower right points
-rectFromPoints :: Point -> Point -> Rectangle
-rectFromPoints upperLeft lowerRight = Rectangle x y w h where
-  x = ptX upperLeft
-  y = ptY upperLeft
-  w = (ptX lowerRight) - x
-  h = (ptY lowerRight) - y
-  
--- | get upper left and lower right point from a rect
-pointsFromRect :: Rectangle -> (Point, Point)
-pointsFromRect rect = (ul, lr) where
-  x = rectX rect
-  y = rectY rect
-  x' = x + (rectWidth rect)
-  y' = y + (rectHeight rect)
-  ul = Point x y
-  lr = Point x' y'
-  
diff --git a/HGamer3D/Data/TimeMS.hs b/HGamer3D/Data/TimeMS.hs
deleted file mode 100644
--- a/HGamer3D/Data/TimeMS.hs
+++ /dev/null
@@ -1,34 +0,0 @@
--- This source file is part of HGamer3D
--- (A project to enable 3D game development in Haskell)
--- For the latest info, see http://www.hgamer3d.org
---
--- (c) 2011-2013 Peter Althainz
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
-
--- TimeMS.hs
-
--- | Module providing the time type for HGamer3D
-module HGamer3D.Data.TimeMS
-
-(
-  TimeMS (..)
-)
-
-where
-
--- | the time type of HGamer3D (in milliseconds)
-data TimeMS = TimeMS Int deriving (Eq)			-- time in milliseconds
-
-instance Show TimeMS where
-	show (TimeMS s) = (show s) ++ " Milliseconds"
diff --git a/HGamer3D/Data/Transform3D.hs b/HGamer3D/Data/Transform3D.hs
new file mode 100644
--- /dev/null
+++ b/HGamer3D/Data/Transform3D.hs
@@ -0,0 +1,96 @@
+-- This source file is part of HGamer3D
+-- (A project to enable 3D game development in Haskell)
+-- For the latest info, see http://www.hgamer3d.org
+--
+-- (c) 2011-2013 Peter Althainz
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+-- Transform3D.hs
+
+-- | Typeclasses for basic 3D transformations
+
+module HGamer3D.Data.Transform3D
+(
+        -- * Types
+	HasPosition (..),
+	HasSize (..),
+	HasOrientation (..),
+        
+        -- * Functions
+	translate,
+        scale, 
+        yaw,
+        pitch,
+        roll
+)
+
+where
+
+import HGamer3D.Data.Vector
+import HGamer3D.Data.Angle
+import HGamer3D.Data.TypeSynonyms
+
+-- | a type with a HasPosition instance has a Position
+class HasPosition t where
+
+        -- | get position function
+	position :: t -> IO Position
+        -- | set position function
+	positionTo :: t -> Position -> IO ()
+
+-- | a type with a HasSize instance has a Size
+class HasSize t where	
+	
+        -- | get scale function
+	size :: t -> IO Size
+        -- | set scale function
+	sizeTo :: t -> Size -> IO ()
+
+-- | a type with an HasOrientation instance has an oriented in space
+class HasOrientation t where
+        -- | get orientation function
+	orientation :: t -> IO Orientation
+        -- | set orientation function
+	orientationTo :: t -> Orientation -> IO ()
+
+
+-- | move the position 
+translate :: Position -> Position -> Position
+translate = (&+)
+
+-- | scale the size
+scale :: Size -> Vec3 -> Size
+scale  = (&!)
+
+-- yaw, roll, pitch functions
+-- functions, to rotate on axis, relative to object
+rotRelativeToObjectAxis :: Orientation -> Vec3 -> Float -> Orientation
+rotRelativeToObjectAxis ori axis val = let
+  odir = actU ori axis
+  qrot = rotU odir val
+  nrot = qrot .*. ori
+  in nrot
+	
+-- | rotate object on own axis (yaw) by angle
+yaw :: Orientation -> Angle -> Orientation
+yaw ori val = rotRelativeToObjectAxis ori vec3Y (fromAngle val)
+
+-- | rotate object on own axis (roll) by angle
+roll :: Orientation -> Angle -> Orientation
+roll ori val = rotRelativeToObjectAxis ori vec3Z (fromAngle val)
+
+-- | rotate object on own axis (pitch) by angle
+pitch :: Orientation -> Angle -> Orientation
+pitch ori val = rotRelativeToObjectAxis ori vec3X (fromAngle val)
+
diff --git a/HGamer3D/Data/TypeSynonyms.hs b/HGamer3D/Data/TypeSynonyms.hs
new file mode 100644
--- /dev/null
+++ b/HGamer3D/Data/TypeSynonyms.hs
@@ -0,0 +1,33 @@
+-- This source file is part of HGamer3D
+-- (A project to enable 3D game development in Haskell)
+-- For the latest info, see http://www.hgamer3d.org
+--
+-- (c) 2011-2014 Peter Althainz
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+-- HGamer3D/Data/TypeSynonyms.hs
+
+-- | Module providing better type names for standard types in HGamer3D
+module HGamer3D.Data.TypeSynonyms
+
+where
+
+import HGamer3D.Data.Vector
+  
+-- | the Size, Position and Orientation types, implemented as a Vec3 and UnitQuaternion
+type Size = Vec3
+type Position = Vec3
+type Orientation = UnitQuaternion
+
+
diff --git a/HGamer3D/Data/Vector.hs b/HGamer3D/Data/Vector.hs
--- a/HGamer3D/Data/Vector.hs
+++ b/HGamer3D/Data/Vector.hs
@@ -1,36 +1,70 @@
--- This source file is part of HGamer3D
--- (A project to enable 3D game development in Haskell)
--- For the latest info, see http://www.hgamer3d.org
---
--- (c) 2011-2013 Peter Althainz
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
-
--- Vector2.hs
-
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-
--- book: math3d vector lib
--- |Includes the right pieces of the Vect libray of Balazs Komuves.
--- see: <http://hackage.haskell.org/package/vect>
-module HGamer3D.Data.Vector
-(
-	module Data.Vect.Float,
-	module Data.Vect.Float.Util.Quaternion
-)
-
-where
-
-import Data.Vect.Float
-import Data.Vect.Float.Util.Quaternion
--- book: end
+{-# LANGUAGE GeneralizedNewtypeDeriving, StandaloneDeriving, DeriveDataTypeable #-}
+
+-- This source file is part of HGamer3D
+-- (A project to enable 3D game development in Haskell)
+-- For the latest info, see http://www.hgamer3d.org
+--
+-- (c) 2011-2014 Peter Althainz
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+-- HGamer3D/Data/Vector.hs
+
+
+-- | Vector library for HGamer3D
+module HGamer3D.Data.Vector
+(
+	
+        -- * the Vect libray of Balazs Komuves, see: <http://hackage.haskell.org/package/vect>
+        
+        module Data.Vect.Float,
+	module Data.Vect.Float.Util.Quaternion,
+
+        -- * some constants
+
+        zeroVec3,
+        unitVec2,
+
+        zeroVec3,
+        unitVec3
+
+)
+
+where
+
+import Data.Typeable
+import Data.Vect.Float
+import Data.Vect.Float.Util.Quaternion
+
+deriving instance Eq UnitQuaternion
+deriving instance Eq Vec2
+deriving instance Eq Vec3
+deriving instance Eq Vec4
+
+deriving instance Typeable UnitQuaternion
+deriving instance Typeable Vec2
+deriving instance Typeable Vec3
+deriving instance Typeable Vec4
+
+-- | the 2d zero vector
+zeroVec2 = Vec2 0.0 0.0
+
+-- | the 2d unity vector
+unitVec2 = Vec2 1.0 1.0
+
+-- | the 3d Zero vector
+zeroVec3 = Vec3 0.0 0.0 0.0
+
+-- | the 3d Unity vector
+unitVec3 = Vec3 1.0 1.0 1.0
+
diff --git a/HGamer3D/Data/Vector/Instances.hs b/HGamer3D/Data/Vector/Instances.hs
deleted file mode 100644
--- a/HGamer3D/Data/Vector/Instances.hs
+++ /dev/null
@@ -1,35 +0,0 @@
--- This source file is part of HGamer3D
--- (A project to enable 3D game development in Haskell)
--- For the latest info, see http://www.hgamer3d.org
---
--- (c) 2011-2013 Peter Althainz
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
-
--- Vector2.hs
-
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-
--- book: math3d vector lib
--- |Includes the right pieces of the Vect libray of Balazs Komuves.
--- see: <http://hackage.haskell.org/package/vect>
-
-module HGamer3D.Data.Vector.Instances
-(
-	module Data.Vect.Float.Instances,
-)
-
-where
-
-import Data.Vect.Float.Instances
--- book: end
diff --git a/HGamer3D/Data/Window.hs b/HGamer3D/Data/Window.hs
new file mode 100644
--- /dev/null
+++ b/HGamer3D/Data/Window.hs
@@ -0,0 +1,32 @@
+-- This source file is part of HGamer3D
+-- (A project to enable 3D game development in Haskell)
+-- For the latest info, see http://www.hgamer3d.org
+--
+-- (c) 2014 Peter Althainz
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+-- Rectangle.hs
+
+-- | Type definitions for 2D window
+module HGamer3D.Data.Window
+(
+  -- * Windowing
+  Window (..),
+  
+  
+) where
+
+-- | A window is simply represented by it's window id, an unsigned C int
+data Window = Window Int
+
