diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+2011-07-02 - 0.2.2
+* fixed the handling of vertex colour attributes
+
 2011-06-23 - 0.2.1
 * complete overhaul
 
diff --git a/Graphics/LambdaCube/VertexBufferVector.hs b/Graphics/LambdaCube/VertexBufferVector.hs
--- a/Graphics/LambdaCube/VertexBufferVector.hs
+++ b/Graphics/LambdaCube/VertexBufferVector.hs
@@ -45,7 +45,7 @@
     | VVD_BLEND_INDICES         (Vector Int)
     | VVD_NORMAL                (Vector Vec3)
     | VVD_DIFFUSE               (Vector Vec4)
-    | VVD_SPECULAR              (Vector Vec4)
+    | VVD_SPECULAR              (Vector Vec3)
     | VVD_TEXTURE_COORDINATES1  (Vector FloatType)
     | VVD_TEXTURE_COORDINATES2  (Vector Vec2)
     | VVD_TEXTURE_COORDINATES3  (Vector Vec3)
@@ -151,8 +151,8 @@
             (VES_BLEND_WEIGHTS,VET_FLOAT1)          -> VVD_BLEND_WEIGHTS <$> gs ve
             (VES_BLEND_INDICES,VET_SHORT1)          -> VVD_BLEND_INDICES <$> gs ve
             (VES_NORMAL,VET_FLOAT3)                 -> VVD_NORMAL <$> gv ve
-            (VES_DIFFUSE,VET_COLOUR_ABGR)           -> VVD_DIFFUSE <$> gv ve
-            (VES_SPECULAR,VET_COLOUR_ABGR)          -> VVD_SPECULAR <$> gv ve
+            (VES_DIFFUSE,VET_FLOAT4)                -> VVD_DIFFUSE <$> gv ve
+            (VES_SPECULAR,VET_FLOAT3)               -> VVD_SPECULAR <$> gv ve
             (VES_TEXTURE_COORDINATES,VET_FLOAT1)    -> VVD_TEXTURE_COORDINATES1 <$> gs ve
             (VES_TEXTURE_COORDINATES,VET_FLOAT2)    -> VVD_TEXTURE_COORDINATES2 <$> gv ve
             (VES_TEXTURE_COORDINATES,VET_FLOAT3)    -> VVD_TEXTURE_COORDINATES3 <$> gv ve
@@ -170,15 +170,15 @@
           where
             i = (Map.findWithDefault 0 vs m)
             (vs,vt,vf,vc) = cf ve
-            g a ptr vsize = V.foldM' (\p ed -> do poke (castPtr p) ed; return $ plusPtr p vsize) (plusPtr ptr o) a
+            g  a ptr vsize = V.foldM' (\p ed -> do poke (castPtr p) ed; return $ plusPtr p vsize) (plusPtr ptr o) a
             g' a ptr vsize = V.foldM' (\p ed -> do poke (castPtr p) ed; return $ plusPtr p vsize) (plusPtr ptr o) a
             cf t = case t of
                 VVD_POSITION a              -> (VES_POSITION,VET_FLOAT3,g a,V.length a)
                 VVD_BLEND_WEIGHTS a         -> (VES_BLEND_WEIGHTS,VET_FLOAT1,g' a,V.length a)
                 VVD_BLEND_INDICES a         -> (VES_BLEND_INDICES,VET_SHORT1,g' a,V.length a)
                 VVD_NORMAL a                -> (VES_NORMAL,VET_FLOAT3,g a,V.length a)
-                VVD_DIFFUSE a               -> (VES_DIFFUSE,VET_COLOUR_ABGR,g a,V.length a)
-                VVD_SPECULAR a              -> (VES_SPECULAR,VET_COLOUR_ABGR,g a,V.length a)
+                VVD_DIFFUSE a               -> (VES_DIFFUSE,VET_FLOAT4,g a,V.length a)
+                VVD_SPECULAR a              -> (VES_SPECULAR,VET_FLOAT3,g a,V.length a)
                 VVD_TEXTURE_COORDINATES1 a  -> (VES_TEXTURE_COORDINATES,VET_FLOAT1,g' a,V.length a)
                 VVD_TEXTURE_COORDINATES2 a  -> (VES_TEXTURE_COORDINATES,VET_FLOAT2,g a,V.length a)
                 VVD_TEXTURE_COORDINATES3 a  -> (VES_TEXTURE_COORDINATES,VET_FLOAT3,g a,V.length a)
diff --git a/lambdacube-engine.cabal b/lambdacube-engine.cabal
--- a/lambdacube-engine.cabal
+++ b/lambdacube-engine.cabal
@@ -1,5 +1,5 @@
 name: lambdacube-engine
-version: 0.2.1
+version: 0.2.2
 cabal-version: >= 1.6 && < 2
 build-type: Simple
 license: BSD3
