diff --git a/Vis/Camera.hs b/Vis/Camera.hs
--- a/Vis/Camera.hs
+++ b/Vis/Camera.hs
@@ -8,8 +8,8 @@
                   , cameraKeyboardMouse
                   ) where
 
-import Xyz
 import Graphics.UI.GLUT
+import SpatialMath ( V3(..) )
 
 data Camera0 = Camera0 { phi0 :: GLdouble
                        , theta0 :: GLdouble
@@ -19,7 +19,7 @@
 data Camera = Camera { phi :: GLdouble
                      , theta :: GLdouble
                      , rho :: GLdouble
-                     , pos :: Xyz GLdouble
+                     , pos :: V3 GLdouble
                      , ballX :: GLint
                      , ballY :: GLint 
                      , leftButton :: GLint
@@ -30,7 +30,7 @@
 makeCamera camera0 = Camera { phi   = phi0 camera0
                             , theta = theta0 camera0
                             , rho   = rho0 camera0
-                            , pos = Xyz 0 0 0
+                            , pos = V3 0 0 0
                             , ballX = (-1)
                             , ballY = (-1)
                             , leftButton = 0
@@ -40,7 +40,7 @@
 setCamera :: Camera -> IO ()
 setCamera camera = lookAt (Vertex3 xc yc zc) (Vertex3 x0 y0 z0) (Vector3 0 0 (-1))
   where
-    Xyz x0 y0 z0 = pos camera
+    V3 x0 y0 z0 = pos camera
     phi'   = phi   camera
     theta' = theta camera
     rho'   = rho   camera
@@ -50,7 +50,7 @@
     zc = z0 - rho'*sin(theta'*pi/180)
 
 cameraMotion :: Camera -> Position -> Camera
-cameraMotion (Camera phi0' theta0' rho0' (Xyz x0 y0 z0) bx by lb rb) (Position x y) =
+cameraMotion (Camera phi0' theta0' rho0' (V3 x0 y0 z0) bx by lb rb) (Position x y) =
   Camera nextPhi nextTheta rho0' nextPos nextBallX nextBallY lb rb
   where
     deltaX
@@ -71,8 +71,8 @@
                            else (phi0', theta0')
 
     nextPos = if rb == 1
-              then Xyz nextX nextY z0
-              else Xyz x0 y0 z0
+              then V3 nextX nextY z0
+              else V3 x0 y0 z0
 
     nextBallX = x
     nextBallY = y
diff --git a/Vis/VisObject.hs b/Vis/VisObject.hs
--- a/Vis/VisObject.hs
+++ b/Vis/VisObject.hs
@@ -27,8 +27,8 @@
 setMaterialDiffuse col = materialDiffuse Front $= (glColorOfColor col)
 
 data VisObject a = VisObjects [VisObject a]
-                 | Trans (Xyz a) (VisObject a)
-                 | RotQuat (Quat a) (VisObject a)
+                 | Trans (V3 a) (VisObject a)
+                 | RotQuat (Quaternion a) (VisObject a)
                  | RotEulerRad (Euler a) (VisObject a)
                  | RotEulerDeg (Euler a) (VisObject a) -- degrees more efficient
                  | Scale (a,a,a) (VisObject a)
@@ -37,16 +37,16 @@
                  | Cube a Flavour GlossColor.Color
                  | Sphere a Flavour GlossColor.Color
                  | Ellipsoid (a,a,a) Flavour GlossColor.Color
-                 | Line [Xyz a] GlossColor.Color
-                 | Line' [(Xyz a,GlossColor.Color)]
-                 | Arrow (a,a) (Xyz a) GlossColor.Color
+                 | Line [V3 a] GlossColor.Color
+                 | Line' [(V3 a,GlossColor.Color)]
+                 | Arrow (a,a) (V3 a) GlossColor.Color
                  | Axes (a,a)
-                 | Plane (Xyz a) GlossColor.Color GlossColor.Color
-                 | Triangle (Xyz a) (Xyz a) (Xyz a) GlossColor.Color
-                 | Quad (Xyz a) (Xyz a) (Xyz a) (Xyz a) GlossColor.Color
-                 | Text3d String (Xyz a) BitmapFont GlossColor.Color
+                 | Plane (V3 a) GlossColor.Color GlossColor.Color
+                 | Triangle (V3 a) (V3 a) (V3 a) GlossColor.Color
+                 | Quad (V3 a) (V3 a) (V3 a) (V3 a) GlossColor.Color
+                 | Text3d String (V3 a) BitmapFont GlossColor.Color
                  | Text2d String (a,a) BitmapFont GlossColor.Color
-                 | Points [Xyz a] (Maybe GLfloat) GlossColor.Color
+                 | Points [V3 a] (Maybe GLfloat) GlossColor.Color
                  | Custom (IO ())
 
 deriving instance Functor VisObject
@@ -69,12 +69,12 @@
 drawObject (VisObjects xs) = mapM_ drawObject xs
 
 -- list of objects
-drawObject (Trans (Xyz x y z) visobj) =
+drawObject (Trans (V3 x y z) visobj) =
   preservingMatrix $ do
     translate (Vector3 x y z :: Vector3 GLdouble)
     drawObject visobj
 
-drawObject (RotQuat (Quat q0 q1 q2 q3) visobj) =
+drawObject (RotQuat (Quaternion q0 (V3 q1 q2 q3)) visobj) =
   preservingMatrix $ do
     rotate (2 * acos q0 *180/pi :: GLdouble) (Vector3 q1 q2 q3)
     drawObject visobj
@@ -97,7 +97,7 @@
     normalize $= Disabled
 
 -- triangle
-drawObject (Triangle (Xyz x0 y0 z0) (Xyz x1 y1 z1) (Xyz x2 y2 z2) col) =
+drawObject (Triangle (V3 x0 y0 z0) (V3 x1 y1 z1) (V3 x2 y2 z2) col) =
   preservingMatrix $ do
     setMaterialDiffuse col
     setColor col
@@ -108,7 +108,7 @@
     glEnd
    
 -- quad
-drawObject (Quad (Xyz x0 y0 z0) (Xyz x1 y1 z1) (Xyz x2 y2 z2) (Xyz x3 y3 z3) col) =
+drawObject (Quad (V3 x0 y0 z0) (V3 x1 y1 z1) (V3 x2 y2 z2) (V3 x3 y3 z3) col) =
   preservingMatrix $ do
     lighting $= Disabled
     setColor col
@@ -189,7 +189,7 @@
   preservingMatrix $ do
     lighting $= Disabled
     setColor col
-    renderPrimitive LineStrip $ mapM_ (\(Xyz x' y' z') -> vertex $ Vertex3 x' y' z') path
+    renderPrimitive LineStrip $ mapM_ (\(V3 x' y' z') -> vertex $ Vertex3 x' y' z') path
     lighting $= Enabled
 
 -- line where you set the color at each vertex
@@ -199,7 +199,7 @@
     
     glBegin gl_LINE_STRIP
     let f (xyz, col) = do
-          let Xyz x y z = fmap realToFrac xyz
+          let V3 x y z = fmap realToFrac xyz
           setMaterialDiffuse col
           setColor col
           glVertex3f x y z
@@ -208,7 +208,7 @@
     lighting $= Enabled
 
 -- plane
-drawObject (Plane (Xyz x y z) col1 col2) =
+drawObject (Plane (V3 x y z) col1 col2) =
   preservingMatrix $ do
     let normInv = 1/(sqrt $ x*x + y*y + z*z)
         x' = x*normInv
@@ -231,12 +231,12 @@
 
     glDisable gl_BLEND
     let drawWithEps eps' = do
-          mapM_ drawObject $ concat [[ Line [ Xyz (-r) y0 eps'
-                                               , Xyz r    y0 eps'
-                                               ] col1
-                                     , Line [ Xyz x0 (-r) eps',
-                                                 Xyz x0 r    eps'
-                                               ] col1
+          mapM_ drawObject $ concat [[ Line [ V3 (-r) y0 eps'
+                                            , V3 r    y0 eps'
+                                            ] col1
+                                     , Line [ V3 x0 (-r) eps',
+                                              V3 x0 r    eps'
+                                            ] col1
                                      ] | x0 <- [-r,-r+r/n..r], y0 <- [-r,-r+r/n..r]]
     drawWithEps eps
     drawWithEps (-eps)
@@ -245,7 +245,7 @@
 
 
 -- arrow
-drawObject (Arrow (size, aspectRatio) (Xyz x y z) col) =
+drawObject (Arrow (size, aspectRatio) (V3 x y z) col) =
   preservingMatrix $ do
     let numSlices = 8
         numStacks = 15
@@ -268,14 +268,14 @@
     renderObject Solid (GLUT.Cone coneRadius coneHeight numSlices numStacks)
 
 drawObject (Axes (size, aspectRatio)) = preservingMatrix $ do
-  let xAxis = Arrow (size, aspectRatio) (Xyz 1 0 0) (GlossColor.makeColor 1 0 0 1)
-      yAxis = Arrow (size, aspectRatio) (Xyz 0 1 0) (GlossColor.makeColor 0 1 0 1)
-      zAxis = Arrow (size, aspectRatio) (Xyz 0 0 1) (GlossColor.makeColor 0 0 1 1)
+  let xAxis = Arrow (size, aspectRatio) (V3 1 0 0) (GlossColor.makeColor 1 0 0 1)
+      yAxis = Arrow (size, aspectRatio) (V3 0 1 0) (GlossColor.makeColor 0 1 0 1)
+      zAxis = Arrow (size, aspectRatio) (V3 0 0 1) (GlossColor.makeColor 0 0 1 1)
   drawObject $ VisObjects [xAxis, yAxis, zAxis]
 
 drawObject (Custom f) = preservingMatrix f
 
-drawObject (Text3d string (Xyz x y z) font col) = preservingMatrix $ do
+drawObject (Text3d string (V3 x y z) font col) = preservingMatrix $ do
   lighting $= Disabled
   setColor col
   glRasterPos3d x y z
@@ -306,7 +306,7 @@
     setColor col
     s' <- get pointSize
     when (isJust ps) $ pointSize $= (fromJust ps)
-    renderPrimitive GLUT.Points $ mapM_ (\(Xyz x' y' z') -> vertex $ Vertex3 x' y' z') xyzs
+    renderPrimitive GLUT.Points $ mapM_ (\(V3 x' y' z') -> vertex $ Vertex3 x' y' z') xyzs
     pointSize $= s'
     lighting $= Enabled
 
diff --git a/changelog.txt b/changelog.txt
new file mode 100644
--- /dev/null
+++ b/changelog.txt
@@ -0,0 +1,5 @@
+0.6.0.0:
+- use spatial-math 0.2, which uses types from `linear` package
+
+0.5.0.5:
+- GLUT/OpenGLRaw version bumps
diff --git a/not-gloss.cabal b/not-gloss.cabal
--- a/not-gloss.cabal
+++ b/not-gloss.cabal
@@ -1,17 +1,21 @@
 name:                not-gloss
-version:             0.5.0.5
+version:             0.6.0.0
 stability:           Experimental
 synopsis:            Painless 3D graphics, no affiliation with gloss
 description:{
 This package intends to make it relatively easy to do simple 3d graphics using high-level primitives.
 It is inspired by gloss and attempts to emulate it.
 This is an early release and the api will certainly change.
+
 Note that transparency can be controlled by the alpha value: "makeColor r g b alpha" but that you must draw objects from back to front for transparency to properly work (just put clear things last).
 Also, transparent ellipsoids and cylinders have ugly artifacts, sorry.
+
 Look at the complimentary package not-gloss-examples to get started.
 
-0.5.0.5 - GLUT/OpenGLRaw version bumps
 }
+
+extra-source-files:  changelog.txt
+
 license:             BSD3
 license-file:        LICENSE
 author:              Greg Horn
@@ -35,7 +39,7 @@
                        GLUT >= 2.3.0.0 && < 2.6,
                        time == 1.4.*,
                        OpenGLRaw >= 1.2.0.0 && < 1.5,
-                       spatial-math >= 0.1.7 && < 0.2
+                       spatial-math >= 0.2.0 && < 0.3
 
   ghc-options: -O2
 
