diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -47,3 +47,6 @@
 
 0.1.3.0:
 		* change scaling so that miniscule linewidths don't occur
+
+0.1.3.1:
+		* fix error in scaling
diff --git a/lib/Graphics/Rendering/Plot/Render/Plot/Annotation.hs b/lib/Graphics/Rendering/Plot/Render/Plot/Annotation.hs
--- a/lib/Graphics/Rendering/Plot/Render/Plot/Annotation.hs
+++ b/lib/Graphics/Rendering/Plot/Render/Plot/Annotation.hs
@@ -52,8 +52,8 @@
   -- transform to data coordinates
   cairo $ do 
     C.translate x (y+h)
-    C.scale xscale yscalel
-    C.translate (-xmin) yminl
+    --C.scale xscale yscalel
+    C.translate (-xmin*xscale) (yminl*yscalel)
     flipVertical
   put (BoundingBox (-xmin) (yminl) (xmax-xmin) (ymaxl-yminl))
   mapM_ (renderAnnotation xscale yscalel) an
@@ -65,8 +65,8 @@
 renderAnnotation :: Double -> Double -> Annotation -> Render ()
 renderAnnotation xscale yscale (AnnArrow h lt (x1',y1') (x2',y2')) = do
   formatLineSeries lt
-  let (x1,y1) = (x1'/xscale,y1'/yscale)
-  let (x2,y2) = (x2'/xscale,y2'/yscale)
+  let (x1,y1) = (x1'*xscale,y1'*yscale)
+  let (x2,y2) = (x2'*xscale,y2'*yscale)
   cairo $ do
     C.moveTo x1 y1
     C.lineTo x2 y2
@@ -90,8 +90,8 @@
     C.stroke
 renderAnnotation xscale yscale (AnnOval f b (x1',y1') (x2',y2')) = do
   (_,bc,c) <- formatBarSeries b
-  let (x1,y1) = (x1'/xscale,y1'/yscale)
-  let (x2,y2) = (x2'/xscale,y2'/yscale)
+  let (x1,y1) = (x1'*xscale,y1'*yscale)
+  let (x2,y2) = (x2'*xscale,y2'*yscale)
   let width = x2 - x1
       height = y2 - y1
       x = x1 + width/2
@@ -110,8 +110,8 @@
     C.newPath
 renderAnnotation xscale yscale (AnnRect f b (x1',y1') (x2',y2')) = do
   (_,bc,c) <- formatBarSeries b
-  let (x1,y1) = (x1'/xscale,y1'/yscale)
-  let (x2,y2) = (x2'/xscale,y2'/yscale)
+  let (x1,y1) = (x1'*xscale,y1'*yscale)
+  let (x2,y2) = (x2'*xscale,y2'*yscale)
   cairo $ do
     C.save
     setColour c
@@ -124,17 +124,19 @@
     C.newPath
 renderAnnotation xscale yscale (AnnGlyph pt (x1',y1')) = do
   (pw,g) <- formatPointSeries pt
-  let (x1,y1) = (x1'/xscale,y1'/yscale)
+  let (x1,y1) = (x1'*xscale,y1'*yscale)
   cairo $ do
     C.moveTo x1 y1
     renderGlyph pw g
 renderAnnotation xscale yscale (AnnText te (x1',y1')) = do
 --  (x,y) <- cairo $ C.userToDevice x1 y1
-  let (x1,y1) = (x1'/xscale,y1'/yscale)
+  let (x1,y1) = (x1'*xscale,y1'*yscale)
   cairo $ do
     C.save
     --C.scale (recip xscale) (recip (-yscale))
-  _ <- renderText te TRight TTop (x1*xscale) (y1*yscale)
+    flipVertical
+--  _ <- renderText te TRight TTop (x1') (y1')
+  _ <- renderText te TRight TTop (x1) (y1)
   cairo $ C.restore
   return ()
 renderAnnotation _   _   (AnnCairo r) = do
diff --git a/lib/Graphics/Rendering/Plot/Render/Plot/Data.hs b/lib/Graphics/Rendering/Plot/Render/Plot/Data.hs
--- a/lib/Graphics/Rendering/Plot/Render/Plot/Data.hs
+++ b/lib/Graphics/Rendering/Plot/Render/Plot/Data.hs
@@ -141,7 +141,7 @@
   cairo $ do 
     C.translate x (y+h)
     --C.scale xscale yscalel
-    C.translate (-xmin) yminl
+    C.translate (-xmin*xscale) (yminl*yscalel)
     flipVertical
   mapM_ (renderSeries xsc yscl xmin xmax xscale yscalel) los
   cairo $ C.restore
@@ -155,7 +155,7 @@
              cairo $ do 
                C.translate x (y+h)
                --C.scale xscale yscaleu
-               C.translate xmin yminu
+               C.translate (-xmin*xscale) (yminu*yscaleu)
                flipVertical
              mapM_ (renderSeries xsc yscu xmin xmax xscale yscaleu) ups
              cairo $ C.restore)
@@ -285,7 +285,7 @@
                                       diff = if mono then diff' else 1
                                   cairo $ do
                                          case s of
-                                                Nothing -> C.moveTo ((t @> xmin_ix)/xscale) ((y @> xmin_ix)/yscale)
+                                                Nothing -> C.moveTo ((t @> xmin_ix)*xscale) ((y @> xmin_ix)*yscale)
                                                 Just s' -> s'
                                          _ <- runMaybeT $ do
                                                mapVectorWithIndexM_ (\i y' -> do
@@ -314,7 +314,7 @@
                                       diff = if mono then diff' else 1
                                   cairo $ do
                                          case s of
-                                                Nothing -> C.moveTo ((t @> xmin_ix)/xscale) (((fst $ y) @> xmin_ix)/yscale)
+                                                Nothing -> C.moveTo ((t @> xmin_ix)*xscale) (((fst $ y) @> xmin_ix)*yscale)
                                                 Just s' -> s'
                                          _ <- runMaybeT $ mapVectorWithIndexM_ (\i t' -> do
                                             when (i >= xmin_ix && i `mod` diff == 0)
@@ -349,14 +349,14 @@
 -----------------------------------------------------------------------------
 
 renderLineSample :: Double → Double -> Double -> Double -> C.Render ()
-renderLineSample xscale yscale x y = C.lineTo (x/xscale) (y/yscale)
+renderLineSample xscale yscale x y = C.lineTo (x*xscale) (y*yscale)
 
 endLineSample :: Double -> Double -> C.Render ()
 endLineSample _ _ = C.stroke
 
 renderPointSample :: LineWidth -> Glyph -> Double -> Double -> Double -> Double -> C.Render ()
 renderPointSample pz g xscale yscale x y = do
-  C.moveTo (x/xscale) (y/yscale)
+  C.moveTo (x*xscale) (y*yscale)
   renderGlyph pz g
 
 endPointSample :: Double -> Double -> C.Render ()
@@ -364,9 +364,9 @@
 
 renderImpulseSample :: Double -> Double -> Double -> Double -> C.Render ()
 renderImpulseSample xscale yscale x y = do
-  let x' = x/xscale
+  let x' = x*xscale
   C.moveTo x' 0
-  C.lineTo x (y/yscale)
+  C.lineTo x (y*yscale)
   C.stroke
 
 endImpulseSample :: Double -> Double -> C.Render ()
@@ -375,20 +375,20 @@
 renderStepSample :: Double -> Double -> Double -> Double -> C.Render ()
 renderStepSample xscale yscale x y = do
   (x',_) <- C.getCurrentPoint
-  let y' = y/yscale
+  let y' = y*yscale
   C.lineTo x'         y'
-  C.lineTo (x/xscale) y'
+  C.lineTo (x*xscale) y'
 
 endStepSample :: Double -> Double -> C.Render ()
 endStepSample _ _ = C.stroke
 
 renderAreaSample :: Double -> Double -> Double -> Double -> C.Render ()
-renderAreaSample xscale yscale x y = C.lineTo (x/xscale) (y/yscale)
+renderAreaSample xscale yscale x y = C.lineTo (x*xscale) (y*yscale)
 
 endAreaSample :: Double -> Double -> Double -> Double -> C.Render ()
 endAreaSample x0 _ xscale _ = do
   (x',_) <- C.getCurrentPoint
-  let x0' = x0/xscale
+  let x0' = x0*xscale
   C.lineTo x'  0
   C.lineTo x0' 0
   -- C.lineTo x0 y0
@@ -399,8 +399,8 @@
 renderBarSample :: Width -> Color -> Color -> Double -> Double -> Double -> Double -> C.Render ()
 renderBarSample bw c bc xscale yscale x y = do
   setColour bc
-  let bw' = bw/xscale
-  C.rectangle ((x/xscale)-bw'/2) 0 bw' (y/yscale)
+  let bw' = bw*xscale
+  C.rectangle ((x*xscale)-bw'/2) 0 bw' (y*yscale)
   C.strokePreserve
   setColour c
   C.fill
@@ -411,10 +411,10 @@
 renderHistSample :: Width -> Color -> Color -> Double -> Double -> Double -> Double -> C.Render ()
 renderHistSample _ c bc xscale yscale x y = do
   (x',_) <- C.getCurrentPoint
-  let x'' = x/xscale
+  let x'' = x*xscale
   C.stroke
   setColour bc
-  C.rectangle x' 0 (x''-x') (y/yscale)
+  C.rectangle x' 0 (x''-x') (y*yscale)
   C.strokePreserve
   setColour c
   C.fill
@@ -426,9 +426,9 @@
 renderCandleSample :: Width -> Color -> Color -> Double -> Double -> Double -> (Double,Double) -> C.Render ()
 renderCandleSample bw c bc xscale yscale x (yl,yu) = do
   setColour bc
-  let (yl',yu') = (yl/yscale,yu/yscale)
-      bw' = bw/xscale
-  C.rectangle ((x/xscale)-bw'/2) yl' bw' (yu'-yl')
+  let (yl',yu') = (yl*yscale,yu*yscale)
+      bw' = bw*xscale
+  C.rectangle ((x*xscale)-bw'/2) yl' bw' (yu'-yl')
   C.strokePreserve
   --liftIO $ putStrLn $ (show yl') ++ " " ++ (show yu')
   if (yl < yu)
@@ -444,8 +444,8 @@
 renderWhiskerSample :: Width -> Color -> Color → Bool -> Double -> Double -> Double -> (Double,Double) -> C.Render ()
 renderWhiskerSample bw _ bc whiskers x xscale yscale (yl,yu) = do
   setColour bc
-  let (x',yl',yu') = (x/xscale,yl/yscale,yu/yscale)
-      bw' = bw/xscale
+  let (x',yl',yu') = (x*xscale,yl*yscale,yu*yscale)
+      bw' = bw*xscale
   C.moveTo x' yl'
   C.lineTo x' yu'
   if whiskers
diff --git a/plot.cabal b/plot.cabal
--- a/plot.cabal
+++ b/plot.cabal
@@ -1,5 +1,5 @@
 Name:                plot
-Version:             0.1.3.0
+Version:             0.1.3.1
 License:             BSD3
 License-file:        LICENSE
 Copyright:           (c) A.V.H. McPhail 2010
