diff --git a/collada-types.cabal b/collada-types.cabal
--- a/collada-types.cabal
+++ b/collada-types.cabal
@@ -1,23 +1,21 @@
 Name:               collada-types
-Version:            0.3
-Synopsis:           Data exchange between graphic applications
-Description:        Collada is the standard graphics format for data exchange between 3d tools. As well as the file format also its representation as an algebraic data type could be used to make libraries more composable. Please propose changes.
+Version:            0.4
+Synopsis:           Data exchange between graphics applications
+Description:        Collada is the standard graphics format for data exchange between 3d tools. Not only the file format but also its representation as an algebraic data type could be used to make libraries more composable.
 category:           graphics
 License:            BSD3
 License-file:       LICENSE
 Author:             Tillmann Vogt
-Maintainer:         tillk.vogt@googlemail.com
+Maintainer:         tillk.vogt@gmail.com
 Build-Type:         Simple
 Cabal-Version:    >=1.6
 
 Library
     hs-source-dirs: src
     build-depends:
-        base ==4.*,
-        containers == 0.4.*,
+        base == 4.*,
+        containers,
         OpenGL >= 2.2.3.0,
-        enumerable,
-        tuple-gen,
         vector,
         tuple
     exposed-modules:
diff --git a/src/Graphics/Formats/Collada/ColladaTypes.hs b/src/Graphics/Formats/Collada/ColladaTypes.hs
--- a/src/Graphics/Formats/Collada/ColladaTypes.hs
+++ b/src/Graphics/Formats/Collada/ColladaTypes.hs
@@ -9,16 +9,16 @@
     Camera(..),
     ViewSize(..),
     Z(..),
-    
+
     Light(..),
     Attenuation(..),
     Controller(..),
-    
+
     Geometry(..),
     Mesh(..),
     Vertices(..),
     LinePrimitive(..), Polygon(..),
-	-- Polylist(..), Spline(..), TriangleMesh(..), TriFan(..), TriStrip(..),
+    -- Polylist(..), Spline(..), TriangleMesh(..), TriFan(..), TriStrip(..),
     AnimChannel(..),
     ID, SID,
     Semantic,
@@ -26,7 +26,7 @@
     C(..), Color(..),
     Animation(..),
     Fx_common_color_type(..), Fx_common_texture_type(..), Texture(..),
-	Interpolation(..),
+    Interpolation(..),
 )
 where
 
@@ -37,8 +37,8 @@
 
 type Mat44 = ((Float,Float,Float,Float),
               (Float,Float,Float,Float),
-			  (Float,Float,Float,Float),
-			  (Float,Float,Float,Float))
+              (Float,Float,Float,Float),
+              (Float,Float,Float,Float))
 
 type Scene = Tree SceneNode
 
@@ -248,7 +248,7 @@
                GLES Asset NewParam TechniqueCG Extra |
                GLES2 Asset Code Include NewParam TechniqueCG Extra |
                GLSL Asset Code Include NewParam TechniqueCG Extra
-			   deriving (Show, Eq)
+             deriving (Show, Eq)
 
 type Asset = String
 type Code = String
diff --git a/src/Graphics/Formats/Collada/GenerateObjects.hs b/src/Graphics/Formats/Collada/GenerateObjects.hs
--- a/src/Graphics/Formats/Collada/GenerateObjects.hs
+++ b/src/Graphics/Formats/Collada/GenerateObjects.hs
@@ -1,9 +1,7 @@
 module Graphics.Formats.Collada.GenerateObjects
 where
 
-import Data.Enumerable
 import Data.Tree
-import Data.Tuple.Gen
 import Data.Word
 import qualified Data.Vector as V
 import Data.Vector (Vector)
@@ -135,10 +133,10 @@
 getAmbientColor _ = Nothing
 
 logo = ("haskell-logo", COMMON "" NoParam
-               (PhongTex [(TDiffuse tex)]
-			             [[0,0,1,0,1,1,0,1]] -- [u0,v0,u1,v1,..] -coordinates (Floats between 0 and 1) that point into the texture
-               )
-               ""
+           (PhongTex [(TDiffuse tex)]
+             [[0,0,1,0,1,1,0,1]] -- [u0,v0,u1,v1,..] -coordinates (Floats between 0 and 1) that point into the texture
+           )
+           ""
        )
 
 tex = Texture "logo" "Haskell-Logo-Variation.png" Nothing
@@ -213,8 +211,8 @@
 
 -- | a helper function for xyz_grid
 tran :: SceneNode -> V3 -> String -> SceneNode
-tran (SceneNode _   typ layer tr                             cam contr geo light) v3 str =
-     (SceneNode str typ	layer [("tr", Translate v3)] cam contr geo light)
+tran (SceneNode _   typ layer tr                     cam contr geo light) v3 str =
+     (SceneNode str typ layer [("tr", Translate v3)] cam contr geo light)
 
 test_objs :: [SceneNode]
 test_objs = xyz_grid 10 10 10 150 aCube
diff --git a/src/Graphics/Formats/Collada/Vector2D3D.hs b/src/Graphics/Formats/Collada/Vector2D3D.hs
--- a/src/Graphics/Formats/Collada/Vector2D3D.hs
+++ b/src/Graphics/Formats/Collada/Vector2D3D.hs
@@ -149,15 +149,17 @@
   where
     m = recip (mag v)
 
-instance Monoid T2 where
-    mempty = scale 1
-    T rx1 ry1 tx1 ty1 `mappend` T rx2 ry2 tx2 ty2 = T rx ry tx ty
+instance Semigroup T2 where
+    T rx1 ry1 tx1 ty1 <> T rx2 ry2 tx2 ty2 = T rx ry tx ty
       where
         rx = rx1*rx2-ry1*ry2
         ry = ry1*rx2+rx1*ry2
         tx = rx1*tx2-ry1*ty2+tx1
         ty = ry1*tx2+rx1*ty2+ty1
 
+instance Monoid T2 where
+    mempty = scale 1
+
 -- | Inverse transformation
 inverse :: T2 -> T2
 inverse (T rx ry tx ty) = T (rx*m) (-ry*m) tx' ty'
@@ -167,8 +169,8 @@
     ty' = m*(ry*tx-rx*ty)
 
 -- | Transformation applied to a vector.
-(<>) :: T2 -> V2 -> V2
-T rx ry tx ty <> V x y = V x' y'
+(<.>) :: T2 -> V2 -> V2
+T rx ry tx ty <.> V x y = V x' y'
   where
     x' = rx*x-ry*y+tx
     y' = ry*x+rx*y+ty
