diff --git a/Graphics/Diagrams/Core.hs b/Graphics/Diagrams/Core.hs
--- a/Graphics/Diagrams/Core.hs
+++ b/Graphics/Diagrams/Core.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeSynonymInstances, FlexibleContexts, FlexibleInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, RecursiveDo, TypeFamilies, OverloadedStrings, RecordWildCards,UndecidableInstances, PackageImports, TemplateHaskell, RankNTypes, GADTs, ImpredicativeTypes, DeriveFunctor, ScopedTypeVariables, ConstraintKinds, OverloadedStrings #-}
+{-# LANGUAGE TypeSynonymInstances, FlexibleContexts, FlexibleInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, RecursiveDo, TypeFamilies, OverloadedStrings, RecordWildCards,UndecidableInstances, PackageImports, TemplateHaskell, RankNTypes, GADTs, DeriveFunctor, ScopedTypeVariables, ConstraintKinds, OverloadedStrings #-}
 
 module Graphics.Diagrams.Core (
   module Graphics.Diagrams.Types,
@@ -26,6 +26,7 @@
 import Data.String
 import System.Process
 import SMT.Model
+import Numeric (showFFloat)
 
 -- | Expressions are linear functions of the variables
 
@@ -151,7 +152,9 @@
           Right model -> return $ M.fromList model
           Left err -> do print err
                          error "die."
-      lkMod m (Var v) = M.findWithDefault (error "variable not in model") ("x"++show v) m
+      lkMod m (Var v) = M.findWithDefault
+        (error ("variable not in model x" ++ show v))
+        ("x"++show v) m
 
   forM_ ds (\(Freeze f x) -> f (fmap (\(E (R g)) -> g (lkMod solution)) x))
   return a
@@ -229,8 +232,8 @@
 
 drawText :: Monad m => Point' Expr -> lab -> Diagram lab m BoxSpec
 drawText point lab = do
-  tl <- view (diaBackend . traceLabel)
-  tl freeze diaRaw point lab
+  be <- view diaBackend
+  case be of Backend _ tl -> tl freeze diaRaw point lab
 
 diaRaw :: Monad m => m a -> Diagram lab m a
 diaRaw = Dia . lift
@@ -305,6 +308,9 @@
   absE (E x) = E (absE x)
 
 instance IsDouble SExpr where
-  fromDouble x = S $ show x
+  fromDouble x = S $ showFFloat Nothing x ""
+  -- can't use 'show': z3 solver 4.4.1 does not understand scientific notation
+  -- (eg. 4e-2)
+
   -- sqrtE x = binop "^" x "0.5"
   absE = unop "abs"
diff --git a/Graphics/Diagrams/Types.hs b/Graphics/Diagrams/Types.hs
--- a/Graphics/Diagrams/Types.hs
+++ b/Graphics/Diagrams/Types.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeSynonymInstances, FlexibleContexts, FlexibleInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, RecursiveDo, TypeFamilies, OverloadedStrings, RecordWildCards,UndecidableInstances, PackageImports, TemplateHaskell, RankNTypes, GADTs, ImpredicativeTypes, DeriveFunctor, ScopedTypeVariables, ConstraintKinds #-}
+{-# LANGUAGE TypeSynonymInstances, FlexibleContexts, FlexibleInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, RecursiveDo, TypeFamilies, OverloadedStrings, RecordWildCards,UndecidableInstances, PackageImports, TemplateHaskell, RankNTypes, GADTs, DeriveFunctor, ScopedTypeVariables, ConstraintKinds, InstanceSigs #-}
 
 module Graphics.Diagrams.Types where
 import Algebra.Classes as AC
@@ -149,7 +149,8 @@
                                                  x BoxSpec
                          }
 
-$(makeLenses ''Backend)
+tracePath :: Lens' (Backend lab m) (PathOptions -> FrozenPath -> m ())
+tracePath f (Backend tp tl) = fmap (\x -> Backend x tl) (f tp)
 
 data Env lab m = Env {_diaTightness :: Rational -- ^ Multiplicator to minimize constraints
                      ,_diaPathOptions :: PathOptions
diff --git a/lp-diagrams.cabal b/lp-diagrams.cabal
--- a/lp-diagrams.cabal
+++ b/lp-diagrams.cabal
@@ -1,5 +1,5 @@
 name:                lp-diagrams
-version:             2.0.0
+version:             2.1.0
 synopsis:            An EDSL for diagrams based based on linear constraints
 license:             AGPL-3
 license-file:        LICENSE
