diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2011, Claude Heiland-Allen
+Copyright (c) 2011,2012, Claude Heiland-Allen
 
 All rights reserved.
 
diff --git a/Numeric/QD/Vec.hs b/Numeric/QD/Vec.hs
--- a/Numeric/QD/Vec.hs
+++ b/Numeric/QD/Vec.hs
@@ -1,16 +1,93 @@
+{-# LANGUAGE FlexibleInstances, TypeFamilies, TypeSynonymInstances #-}
 {- |
 Module      :  Numeric.QD.Vec
-Copyright   :  (c) Claude Heiland-Allen 2011
+Copyright   :  (c) Claude Heiland-Allen 2011, 2012
 License     :  BSD3
 
-Maintainer  :  claudiusmaximus@goto10.org
+Maintainer  :  claude@mathr.co.uk
 Stability   :  provisional
-Portability :  portable
+Portability :  TypeFamilies, TypeSynonymInstances, FlexibleInstance
 
-NearZero instances for QD types.
+Vec instances for QD types.
 -}
 module Numeric.QD.Vec where
-import Data.Vec (NearZero(nearZero))
+import Data.Vec (NearZero(..), PackedVec(..), Vec2, Vec3, Vec4, (:.)((:.)))
 import Numeric.QD (DoubleDouble, QuadDouble)
+
 instance NearZero DoubleDouble where nearZero x = not (abs x > (1e-28))
+
 instance NearZero QuadDouble   where nearZero x = not (abs x > (1e-60))
+
+instance PackedVec (Vec2 DoubleDouble) where
+  data Packed (Vec2 DoubleDouble) = Vec2DD {-#UNPACK#-} !DoubleDouble {-#UNPACK#-} !DoubleDouble
+  pack (a:.b:.()) = Vec2DD a b
+  unpack (Vec2DD a b) = a:.b:.()
+  {-# INLINE pack #-}
+  {-# INLINE unpack #-}
+
+instance PackedVec (Vec3 DoubleDouble) where
+  data Packed (Vec3 DoubleDouble) = Vec3DD {-#UNPACK#-} !DoubleDouble {-#UNPACK#-} !DoubleDouble {-#UNPACK#-} !DoubleDouble
+  pack (a:.b:.c:.()) = Vec3DD a b c
+  unpack (Vec3DD a b c) = a:.b:.c:.()
+  {-# INLINE pack #-}
+  {-# INLINE unpack #-}
+
+instance PackedVec (Vec4 DoubleDouble) where
+  data Packed (Vec4 DoubleDouble) = Vec4DD {-#UNPACK#-} !DoubleDouble {-#UNPACK#-} !DoubleDouble {-#UNPACK#-} !DoubleDouble {-#UNPACK#-} !DoubleDouble
+  pack (a:.b:.c:.d:.()) = Vec4DD a b c d
+  unpack (Vec4DD a b c d) = a:.b:.c:.d:.()
+  {-# INLINE pack #-}
+  {-# INLINE unpack #-}
+
+type Vec2DD = Packed (Vec2 DoubleDouble)
+type Vec3DD = Packed (Vec3 DoubleDouble)
+type Vec4DD = Packed (Vec4 DoubleDouble)
+
+type Mat22DD = Vec2 (Vec2DD)
+type Mat23DD = Vec2 (Vec3DD)
+type Mat24DD = Vec2 (Vec4DD)
+
+type Mat32DD = Vec3 (Vec2DD)
+type Mat33DD = Vec3 (Vec3DD)
+type Mat34DD = Vec3 (Vec4DD)
+
+type Mat42DD = Vec4 (Vec2DD)
+type Mat43DD = Vec4 (Vec3DD)
+type Mat44DD = Vec4 (Vec4DD)
+
+instance PackedVec (Vec2 QuadDouble) where
+  data Packed (Vec2 QuadDouble) = Vec2QD {-#UNPACK#-} !QuadDouble {-#UNPACK#-} !QuadDouble
+  pack (a:.b:.()) = Vec2QD a b
+  unpack (Vec2QD a b) = a:.b:.()
+  {-# INLINE pack #-}
+  {-# INLINE unpack #-}
+
+instance PackedVec (Vec3 QuadDouble) where
+  data Packed (Vec3 QuadDouble) = Vec3QD {-#UNPACK#-} !QuadDouble {-#UNPACK#-} !QuadDouble {-#UNPACK#-} !QuadDouble
+  pack (a:.b:.c:.()) = Vec3QD a b c
+  unpack (Vec3QD a b c) = a:.b:.c:.()
+  {-# INLINE pack #-}
+  {-# INLINE unpack #-}
+
+instance PackedVec (Vec4 QuadDouble) where
+  data Packed (Vec4 QuadDouble) = Vec4QD {-#UNPACK#-} !QuadDouble {-#UNPACK#-} !QuadDouble {-#UNPACK#-} !QuadDouble {-#UNPACK#-} !QuadDouble
+  pack (a:.b:.c:.d:.()) = Vec4QD a b c d
+  unpack (Vec4QD a b c d) = a:.b:.c:.d:.()
+  {-# INLINE pack #-}
+  {-# INLINE unpack #-}
+
+type Vec2QD = Packed (Vec2 QuadDouble)
+type Vec3QD = Packed (Vec3 QuadDouble)
+type Vec4QD = Packed (Vec4 QuadDouble)
+
+type Mat22QD = Vec2 (Vec2QD)
+type Mat23QD = Vec2 (Vec3QD)
+type Mat24QD = Vec2 (Vec4QD)
+
+type Mat32QD = Vec3 (Vec2QD)
+type Mat33QD = Vec3 (Vec3QD)
+type Mat34QD = Vec3 (Vec4QD)
+
+type Mat42QD = Vec4 (Vec2QD)
+type Mat43QD = Vec4 (Vec3QD)
+type Mat44QD = Vec4 (Vec4QD)
diff --git a/qd-vec.cabal b/qd-vec.cabal
--- a/qd-vec.cabal
+++ b/qd-vec.cabal
@@ -1,19 +1,28 @@
 Name:                 qd-vec
-Version:              1.0
-Synopsis:             Data.Vec.NearZero instances for Numeric.QD types
+Version:              1.1
+Synopsis:             'Vec' instances for 'qd' types
 Description:
-    This package provides instances of Vec's NearZero for qd's types.
+  Instances of Vec's NearZero and Packed for qd's types.
 
 License:              BSD3
 License-file:         LICENSE
 Author:               Claude Heiland-Allen
-Maintainer:           claudiusmaximus@goto10.org
+Maintainer:           claude@mathr.co.uk
 Category:             Math
 Build-type:           Simple
-Cabal-version:        >=1.2
+cabal-version:        >=1.8
 
 Library
-  Build-depends:      base >= 3 && < 6, qd >= 1 && < 2, Vec >= 0.9.8 && < 1
+  Build-depends:      base >= 3 && < 6, qd >= 1 && < 2, Vec >= 0.9.9 && < 2
   Exposed-modules:    Numeric.QD.Vec
   GHC-options:        -Wall -fno-excess-precision
-  GHC-prof-options:   -prof -auto-all -caf-all
+  GHC-prof-options:   -auto-all -caf-all
+
+source-repository head
+  type:                git
+  location:            git://gitorious.org/hsqd/hsqd-vec.git
+
+source-repository this
+  type:                git
+  location:            git://gitorious.org/hsqd/hsqd-vec.git
+  tag:                 v1.1
