diff --git a/CHANGES b/CHANGES
new file mode 100644
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,8 @@
+
+
+
+0.1.0 to 0.1.1:
+
+  * Added missing LICENSE file to the Cabal file.
+
+  * Added this CHANGES file.
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c) 2008 Stephen Peter Tetley
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the author nor the names of his contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,29 @@
+#!/usr/bin/env runhaskell
+
+import Distribution.Simple
+import Distribution.Simple.Setup ( SDistFlags )
+import Distribution.PackageDescription ( HookedBuildInfo, emptyHookedBuildInfo )
+
+
+main = defaultMainWithHooks sdist_warning_hooks
+
+sdist_warning_hooks :: UserHooks
+sdist_warning_hooks = simpleUserHooks { preSDist = sdistVersionWarning }
+
+
+sdistVersionWarning :: Args -> SDistFlags -> IO HookedBuildInfo
+sdistVersionWarning _ _ = 
+    mapM_ putStrLn msg >> printVersionNumberFile >> return emptyHookedBuildInfo
+  where
+    msg = [ "-------------------------------------------------------"
+          , "-------------------------------------------------------"
+          , ""
+          , "WARNING - is Wumpus.Basic.VersionNumber correct?"
+          , ""
+          , "-------------------------------------------------------"
+          , "-------------------------------------------------------"
+          ]
+
+printVersionNumberFile :: IO ()
+printVersionNumberFile = 
+  readFile "src/Wumpus/Basic/VersionNumber.hs" >>= putStrLn
diff --git a/demo/FontPic.hs b/demo/FontPic.hs
new file mode 100644
--- /dev/null
+++ b/demo/FontPic.hs
@@ -0,0 +1,171 @@
+{-# OPTIONS -Wall #-}
+
+module FontPic where
+
+import Wumpus.Core
+import Wumpus.Extra.PictureLanguage
+import Wumpus.Basic.SafeFonts
+import Wumpus.Basic.SVGColours ( steelBlue )
+import Wumpus.Basic.X11Colours ( indianRed1 )
+
+import Data.AffineSpace
+import Data.VectorSpace
+
+import Data.List ( unfoldr )
+
+import System.Directory
+
+main :: IO ()
+main = do 
+    createDirectoryIfMissing True "./out/"
+    writeEPS_latin1 "./out/font_courier.eps"   courier_pic
+    writeSVG_latin1 "./out/font_courier.svg"   courier_pic
+    writeEPS_latin1 "./out/font_times.eps"     times_pic
+    writeSVG_latin1 "./out/font_times.svg"     times_pic
+    writeEPS_latin1 "./out/font_helvetica.eps" helvetica_pic
+    writeSVG_latin1 "./out/font_helvetica.svg" helvetica_pic
+    writeEPS_latin1 "./out/font_symbol.eps"    symbol_pic
+    writeSVG_latin1 "./out/font_symbol.svg"    symbol_pic
+
+
+makeFontLabel :: DRGB -> FontAttr -> (DPoint2 -> DPrimitive)
+makeFontLabel c fa = textlabel (c,fa) msg
+  where
+    msg = unwords [ font_name fa, (show $ font_size fa) ++ "pt"]
+
+blueLabel :: FontAttr -> (DPoint2 -> DPrimitive)
+blueLabel = makeFontLabel steelBlue
+
+redLabel :: FontAttr -> (DPoint2 -> DPrimitive)
+redLabel = makeFontLabel indianRed1
+
+
+--------------------------------------------------------------------------------
+-- Times
+
+times_pic :: Picture Double
+times_pic = timesroman_pic -//- timesitalic_pic -//- timesbold_pic
+                           -//- timesbolditalic_pic
+
+
+
+timesroman_pic :: Picture Double
+timesroman_pic = 
+    frameMulti $ zipWith blueLabel xs (mkPoints 1.5)
+  where
+    xs = [ timesRoman10, timesRoman12, timesRoman18
+         , timesRoman24, timesRoman36, timesRoman48 ]
+
+timesitalic_pic :: Picture Double
+timesitalic_pic = 
+    frameMulti $ zipWith redLabel xs (mkPoints 1.5)
+  where
+    xs = [ timesItalic10, timesItalic12, timesItalic18
+         , timesItalic24, timesItalic36, timesItalic48 ]
+
+
+timesbold_pic :: Picture Double
+timesbold_pic = 
+    frameMulti $ zipWith blueLabel xs (mkPoints 1.5)
+  where
+    xs = [ timesBold10, timesBold12, timesBold18
+         , timesBold24, timesBold36, timesBold48 ]
+
+timesbolditalic_pic :: Picture Double
+timesbolditalic_pic = 
+    frameMulti $ zipWith redLabel xs (mkPoints 1.5)
+  where
+    xs = [ timesBoldItalic10, timesBoldItalic12, timesBoldItalic18
+         , timesBoldItalic24, timesBoldItalic36, timesBoldItalic48 ]
+
+--------------------------------------------------------------------------------
+helvetica_pic :: Picture Double
+helvetica_pic = helvetica_pic1 -//- helveticaoblique_pic -//- helveticabold_pic
+                           -//- helveticaboldoblique_pic
+
+helvetica_pic1 :: Picture Double
+helvetica_pic1 = 
+    frameMulti $ zipWith blueLabel xs (mkPoints 1.5)
+  where
+    xs = [ helvetica10, helvetica12, helvetica18
+         , helvetica24, helvetica36, helvetica48 ]
+
+
+    
+helveticaoblique_pic :: Picture Double
+helveticaoblique_pic = 
+    frameMulti $ zipWith redLabel xs (mkPoints 1.5)
+  where
+    xs = [ helveticaOblique10, helveticaOblique12, helveticaOblique18
+         , helveticaOblique24, helveticaOblique36, helveticaOblique48 ]
+
+    
+helveticabold_pic :: Picture Double
+helveticabold_pic = 
+    frameMulti $ zipWith blueLabel xs (mkPoints 1.5)
+  where
+    xs = [ helveticaBold10, helveticaBold12, helveticaBold18
+         , helveticaBold24, helveticaBold36, helveticaBold48 ]
+
+    
+helveticaboldoblique_pic :: Picture Double
+helveticaboldoblique_pic = 
+    frameMulti $ zipWith redLabel xs (mkPoints 1.5)
+  where
+    xs = [ helveticaBoldOblique10, helveticaBoldOblique12
+         , helveticaBoldOblique18, helveticaBoldOblique24
+         , helveticaBoldOblique36, helveticaBoldOblique48 ]
+
+--------------------------------------------------------------------------------
+
+courier_pic :: Picture Double
+courier_pic = courier_pic1 -//- courieroblique_pic -//- courierbold_pic
+                           -//- courierboldoblique_pic
+    
+courier_pic1 :: Picture Double
+courier_pic1 = 
+    frameMulti $ zipWith blueLabel xs (mkPoints 1.5)
+  where
+    xs = [ courier10, courier12, courier18
+         , courier24, courier36, courier48 ]
+
+    
+courieroblique_pic :: Picture Double
+courieroblique_pic = 
+    frameMulti $ zipWith redLabel xs (mkPoints 1.5)
+  where
+    xs = [ courierOblique10, courierOblique12, courierOblique18
+         , courierOblique24, courierOblique36, courierOblique48 ]
+
+    
+courierbold_pic :: Picture Double
+courierbold_pic = 
+    frameMulti $ zipWith blueLabel xs (mkPoints 1.5)
+  where
+    xs = [ courierBold10, courierBold12, courierBold18
+         , courierBold24, courierBold36, courierBold48 ]
+
+    
+courierboldoblique_pic :: Picture Double
+courierboldoblique_pic = 
+    frameMulti $ zipWith redLabel xs (mkPoints 1.5)
+  where
+    xs = [ courierBoldOblique10, courierBoldOblique12, courierBoldOblique18
+         , courierBoldOblique24, courierBoldOblique36, courierBoldOblique48 ]
+
+--------------------------------------------------------------------------------
+
+    
+symbol_pic :: Picture Double
+symbol_pic = 
+    frameMulti $ zipWith blueLabel xs (mkPoints 1.5)
+  where
+    xs = [ symbol10, symbol12, symbol18, symbol24, symbol36, symbol48 ]
+
+
+--------------------------------------------------------------------------------
+
+
+mkPoints :: Num u => u -> [Point2 u]
+mkPoints n = unfoldr phi zeroPt where
+  phi pt = Just (pt, pt .+^ (V2 0 15 ^* n))
diff --git a/src/Wumpus/Basic/Monads/TraceMonad.hs b/src/Wumpus/Basic/Monads/TraceMonad.hs
new file mode 100644
--- /dev/null
+++ b/src/Wumpus/Basic/Monads/TraceMonad.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE FunctionalDependencies     #-}
+{-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE TypeSynonymInstances       #-}
+{-# OPTIONS -Wall #-}
+
+
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  Wumpus.Basic.Monads.TraceMonad
+-- Copyright   :  (c) Stephen Tetley 2010
+-- License     :  BSD3
+--
+-- Maintainer  :  stephen.tetley@gmail.com
+-- Stability   :  unstable
+-- Portability :  GHC 
+--
+-- \"Trace\" monad and monad transformer.
+--
+-- Trace is operationally similar to the Writer monad but it
+-- supports elementary consing as well as the Writer\'s monoidal 
+-- concatenation. 
+--
+-- Note, some care is needed to order the output to a trace with
+-- respect to the Z-order of a drawing. The API here may well
+-- be too limited... 
+-- 
+--------------------------------------------------------------------------------
+
+module Wumpus.Basic.Monads.TraceMonad
+  (
+
+    Trace
+  , TraceT
+  , TraceM(..)
+
+  , runTrace
+  , runTraceT
+ 
+  ) where
+
+import MonadLib ( MonadT(..) )          -- package: monadLib
+
+import Wumpus.Basic.Utils.HList
+
+import Control.Applicative
+
+
+
+newtype Trace  i   a = Trace  { getTrace  :: H i -> (a, H i) }
+
+newtype TraceT i m a = TraceT { getTraceT :: H i -> m (a, H i) }
+
+-- Functor
+
+instance Functor (Trace i) where
+  fmap f m = Trace $ \w -> let (a,w') = getTrace m w in (f a, w')
+
+instance Monad m => Functor (TraceT i m) where
+  fmap f m = TraceT $ \w -> getTraceT m w >>= \(a,w') ->
+                            return (f a, w')
+
+-- Applicative
+
+instance Applicative (Trace i) where
+  pure a    = Trace $ \w -> (a,w)
+  mf <*> ma = Trace $ \w -> let (f,w')  = getTrace mf w 
+                                (a,w'') = getTrace ma w'
+                            in (f a,w'')
+
+
+instance Monad m => Applicative (TraceT i m) where
+  pure a    = TraceT $ \w -> return (a,w)
+  mf <*> ma = TraceT $ \w -> getTraceT mf w  >>= \(f,w')  ->
+                             getTraceT ma w' >>= \(a,w'') ->
+                             return (f a,w'') 
+
+-- Monad
+
+instance Monad (Trace i) where
+  return a = Trace $ \w -> (a,w)
+  m >>= k  = Trace $ \w -> let (a,w') = getTrace m w
+                           in (getTrace . k) a w'
+     
+
+
+instance Monad m => Monad (TraceT i m) where
+  return a = TraceT $ \w -> return (a,w)
+  m >>= k  = TraceT $ \w -> getTraceT m w        >>= \(a,w')  ->
+                            (getTraceT . k) a w' >>= \(b,w'') ->
+                            return (b,w'')
+
+
+
+
+instance MonadT (TraceT i) where 
+  lift m = TraceT $ \w -> m >>= \ a -> return (a,w)
+
+class TraceM  m i | m -> i where
+  trace  :: H i -> m ()
+  trace1 :: i -> m ()
+
+
+instance TraceM (Trace i) i where
+  trace  h = Trace $ \w -> ((), h . w)  
+  trace1 i = Trace $ \w -> ((), i `consH` w)  
+
+instance Monad m => TraceM (TraceT i m) i where
+  trace  h = TraceT $ \w -> return ((), h . w)  
+  trace1 i = TraceT $ \w -> return ((), i `consH` w)  
+
+
+
+runTrace :: Trace i a -> (a,H i)
+runTrace mf = getTrace mf id 
+
+runTraceT :: Monad m => TraceT i m a -> m (a,H i)
+runTraceT mf = getTraceT mf id >>= \(a,w) -> return (a,w)
+
+
+
+ 
+
diff --git a/src/Wumpus/Basic/Monads/TurtleMonad.hs b/src/Wumpus/Basic/Monads/TurtleMonad.hs
new file mode 100644
--- /dev/null
+++ b/src/Wumpus/Basic/Monads/TurtleMonad.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE TypeSynonymInstances       #-}
+{-# OPTIONS -Wall #-}
+
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  Wumpus.Basic.Monads.TurtleMonad
+-- Copyright   :  (c) Stephen Tetley 2010
+-- License     :  BSD3
+--
+-- Maintainer  :  stephen.tetley@gmail.com
+-- Stability   :  unstable
+-- Portability :  GHC 
+--
+-- Turtle monad and monad transformer.
+--
+-- The Turtle monad embodies the LOGO style of imperative 
+-- drawing - sending commands to update the a cursor.
+--
+-- While Wumpus generally aims for a more compositional,
+-- \"coordinate-free\" style of drawing, some types of 
+-- diagram are very easily expressed in the LOGO style.
+--
+--------------------------------------------------------------------------------
+
+module Wumpus.Basic.Monads.TurtleMonad
+  (
+    Coord(..)
+
+  , Turtle
+  , TurtleT
+
+  , TurtleM(..)
+
+  , runTurtle
+  , runTurtleT
+
+  , setsLoc
+  , setsLoc_
+
+  -- * movement
+  , reset
+  , moveLeft
+  , moveRight
+  , moveUp
+  , moveDown
+  , nextLine
+
+  , wander
+ 
+  ) where
+
+
+import MonadLib ( MonadT(..) )          -- package: monadLib
+
+import Control.Applicative
+
+
+data Coord = Coord !Int !Int
+
+instance Show Coord where
+  showsPrec i (Coord x y) = showsPrec i (x,y)
+
+
+newtype Turtle    a = Turtle  { getTurtle  :: Coord -> (a, Coord) } 
+
+newtype TurtleT m a = TurtleT { getTurtleT :: Coord -> m (a, Coord) }
+
+
+-- Functor
+
+instance Functor Turtle where
+  fmap f m = Turtle $ \st -> let (a,st') = getTurtle m st in (f a, st')                   
+
+instance Monad m => Functor (TurtleT m) where
+  fmap f m = TurtleT $ \st -> getTurtleT m st >>= \(a,st') ->
+                              return (f a, st')
+
+-- Applicative 
+instance Applicative Turtle where
+  pure a    = Turtle $ \st -> (a,st)
+  mf <*> ma = Turtle $ \st -> let (f,st')  = getTurtle mf st 
+                                  (a,st'') = getTurtle ma st'
+                              in (f a,st'') 
+
+
+instance Monad m => Applicative (TurtleT m) where
+  pure a    = TurtleT $ \st -> return (a,st)
+  mf <*> ma = TurtleT $ \st -> getTurtleT mf st  >>= \(f,st')  ->
+                               getTurtleT ma st' >>= \(a,st'') ->
+                               return (f a,st'') 
+
+
+-- Monad 
+
+instance Monad Turtle where
+  return a = Turtle $ \st -> (a,st)
+  m >>= k  = Turtle $ \st -> let (a,st') = getTurtle m st
+                             in (getTurtle . k) a st'
+
+instance Monad m => Monad (TurtleT m) where
+  return a = TurtleT $ \st -> return (a,st)
+  m >>= k  = TurtleT $ \st -> getTurtleT m st        >>= \(a,st')  ->
+                              (getTurtleT . k) a st' >>= \(b,st'') ->
+                              return (b,st'')
+
+instance MonadT TurtleT where
+  lift m = TurtleT $ \st -> m >>= \a -> return (a,st)
+
+class Monad m => TurtleM m where
+  getLoc :: m Coord
+  setLoc :: Coord -> m ()
+
+instance TurtleM Turtle where
+  getLoc   = Turtle $ \st -> (st,st)
+  setLoc c = Turtle $ \_  -> ((),c)
+  
+
+instance Monad m => TurtleM (TurtleT m) where
+  getLoc   = TurtleT $ \st -> return (st,st)
+  setLoc c = TurtleT $ \_  -> return ((),c)
+
+
+runTurtle :: Turtle a -> (a,(Int,Int))
+runTurtle mf = post $ getTurtle mf (Coord 0 0) 
+  where
+    post (a, Coord x y) = (a,(x,y))
+
+runTurtleT :: Monad m => TurtleT m a -> m (a,(Int,Int))
+runTurtleT mf = getTurtleT mf (Coord 0 0) >>= \(a, Coord x y) -> return (a,(x,y))
+
+
+setsLoc :: TurtleM m => (Coord -> (a,Coord)) -> m a
+setsLoc f = getLoc >>= \st -> let (a,st') = f st in setLoc st' >> return a
+
+setsLoc_ :: TurtleM m => (Coord -> Coord) -> m ()
+setsLoc_ f = getLoc >>= \st -> let st' = f st in setLoc st'
+
+reset       :: TurtleM m => m ()
+reset       = setLoc (Coord 0 0)
+
+moveRight   :: TurtleM m => m ()
+moveRight   = setsLoc_ $ \(Coord x y) -> Coord (x+1) y
+
+moveLeft    :: TurtleM m => m ()
+moveLeft    = setsLoc_ $ \(Coord x y) -> Coord (x-1) y
+
+moveUp      :: TurtleM m => m ()
+moveUp      = setsLoc_ $ \(Coord x y) -> Coord x (y-1)
+
+moveDown    :: TurtleM m => m ()
+moveDown    = setsLoc_ $ \(Coord x y) -> Coord x (y+1)
+
+nextLine    :: TurtleM m => m ()
+nextLine    = setsLoc_ $ \(Coord _ y) -> Coord 0 (y-1)
+
+
+-- | No longer sure about this combinator...
+--
+wander :: TurtleM m => m a -> m (a,Coord,Coord)
+wander ma = getLoc >>= \start ->
+            ma     >>= \ans   ->
+            getLoc >>= \end   ->
+            return (ans,start,end)
+
diff --git a/src/Wumpus/Basic/SVGColours.hs b/src/Wumpus/Basic/SVGColours.hs
new file mode 100644
--- /dev/null
+++ b/src/Wumpus/Basic/SVGColours.hs
@@ -0,0 +1,626 @@
+{-# OPTIONS -Wall #-}
+
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  Wumpus.Basic.SVGColours
+-- Copyright   :  (c) Stephen Tetley 2009-2010
+-- License     :  BSD3
+--
+-- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
+-- Stability   :  highly unstable
+-- Portability :  GHC with TypeFamilies and more
+--
+-- The SVG \'named colours\', as rgb [0,1] values 
+--
+--------------------------------------------------------------------------------
+
+module Wumpus.Basic.SVGColours 
+  (
+    
+  -- * Named colours
+    aliceBlue
+  , antiqueWhite
+  , aqua
+  , aquamarine
+  , azure
+  , beige
+  , bisque
+  , black
+  , blanchedAlmond
+  , blue
+  , blueViolet
+  , brown
+  , burlywood
+  , cadetBlue
+  , chartreuse
+  , chocolate
+  , coral
+  , cornflowerBlue
+  , cornsilk
+  , crimson
+  , cyan
+  , darkBlue
+  , darkCyan
+  , darkGoldenrod
+  , darkGray
+  , darkGreen
+  , darkGrey
+  , darkKhaki
+  , darkMagenta
+  , darkOliveGreen
+  , darkOrange
+  , darkOrchid
+  , darkRed
+  , darkSalmon
+  , darkSeaGreen
+  , darkSlateBlue
+  , darkSlateGray
+  , darkSlateGrey
+  , darkTurquoise
+  , darkViolet
+  , deepPink
+  , deepSkyBlue
+  , dimGray
+  , dimGrey
+  , dodgerBlue
+  , firebrick
+  , floralWhite
+  , forestGreen
+  , fuchsia
+  , gainsboro
+  , ghostWhite
+  , gold
+  , goldenrod
+  , gray
+  , grey
+  , green
+  , greenYellow
+  , honeydew
+  , hotPink
+  , indianRed
+  , indigo
+  , ivory
+  , khaki
+  , lavender
+  , lavenderBlush
+  , lawnGreen
+  , lemonChiffon
+  , lightBlue
+  , lightCoral
+  , lightCyan
+  , lightGoldenrodYellow
+  , lightGray
+  , lightGreen
+  , lightGrey
+  , lightPink
+  , lightSalmon
+  , lightSeaGreen
+  , lightSkyBlue
+  , lightSlateGray
+  , lightSlateGrey
+  , lightSteelBlue
+  , lightYellow
+  , lime
+  , limeGreen
+  , linen
+  , magenta
+  , maroon
+  , mediumAquamarine
+  , mediumBlue
+  , mediumOrchid
+  , mediumPurple
+  , mediumSeaGreen
+  , mediumSlateBlue
+  , mediumSpringGreen
+  , mediumTurquoise
+  , mediumVioletRed
+  , midnightBlue
+  , mintcream
+  , mistyrose
+  , moccasin
+  , navajoWhite
+  , navy
+  , oldlace
+  , olive
+  , oliveDrab
+  , orange
+  , orangeRed
+  , orchid
+  , paleGoldenrod
+  , paleGreen
+  , paleTurquoise
+  , paleVioletRed
+  , papayawhip
+  , peachpuff
+  , peru
+  , pink
+  , plum
+  , powderBlue
+  , purple
+  , red
+  , rosyBrown
+  , royalBlue
+  , saddleBrown
+  , salmon
+  , sandyBrown
+  , seaGreen
+  , seashell
+  , sienna
+  , silver
+  , skyBlue
+  , slateBlue
+  , slateGray
+  , slateGrey
+  , snow
+  , springGreen
+  , steelBlue
+  , tan
+  , teal
+  , thistle
+  , tomato
+  , turquoise
+  , violet
+  , wheat
+  , white
+  , whitesmoke
+  , yellow
+  , yellowGreen
+  
+  ) where
+
+
+import Wumpus.Core.Colour ( RGB3(..), DRGB )
+
+
+import Prelude ( )
+  
+
+
+
+--------------------------------------------------------------------------------
+  
+aliceBlue           :: DRGB
+aliceBlue           = RGB3 0.941  0.973  1.0
+
+antiqueWhite        :: DRGB
+antiqueWhite        = RGB3 0.980  0.922  0.843
+
+aqua                :: DRGB
+aqua                = RGB3 0.0  1.0  1.0
+
+aquamarine          :: DRGB
+aquamarine          = RGB3 0.498  1.0  0.831
+
+azure               :: DRGB
+azure               = RGB3 0.941  1.0  1.0
+
+beige               :: DRGB  
+beige               = RGB3 0.961  0.961  0.863
+
+bisque              :: DRGB
+bisque              = RGB3 1.0  0.894  0.769
+
+black               :: DRGB
+black               = RGB3 0.0  0.0  0.0
+
+blanchedAlmond      :: DRGB
+blanchedAlmond      = RGB3 1.0  0.922  0.804
+
+blue                :: DRGB
+blue                = RGB3 0.0  0.0  1.0
+
+blueViolet          :: DRGB
+blueViolet          = RGB3 0.541  0.169  0.886
+
+brown               :: DRGB
+brown               = RGB3 0.647  0.165  0.165
+
+burlywood           :: DRGB
+burlywood           = RGB3 0.871  0.722  0.529
+
+cadetBlue           :: DRGB
+cadetBlue           = RGB3 0.373  0.620  0.627
+
+chartreuse          :: DRGB
+chartreuse          = RGB3 0.498  1.0  0.0
+
+chocolate           :: DRGB
+chocolate           = RGB3 0.824  0.412  0.118
+
+coral               :: DRGB
+coral               = RGB3 1.0  0.498  0.314
+
+cornflowerBlue      :: DRGB
+cornflowerBlue      = RGB3 0.392  0.584  0.929
+
+cornsilk            :: DRGB
+cornsilk            = RGB3 1.0  0.973  0.863
+
+crimson             :: DRGB
+crimson             = RGB3 0.863  0.078  0.235
+
+cyan                :: DRGB
+cyan                = RGB3 0.0  1.0  1.0
+
+darkBlue            :: DRGB
+darkBlue            = RGB3 0.0  0.0  0.545
+
+darkCyan            :: DRGB
+darkCyan            = RGB3 0.0  0.545  0.545
+
+darkGoldenrod       :: DRGB
+darkGoldenrod       = RGB3 0.722  0.545  0.043
+
+darkGray            :: DRGB
+darkGray            = RGB3 0.663  0.663  0.663
+
+darkGreen           :: DRGB
+darkGreen           = RGB3 0.0  0.392  0.0
+
+darkGrey            :: DRGB
+darkGrey            = RGB3 0.663  0.663  0.663
+
+darkKhaki           :: DRGB
+darkKhaki           = RGB3 0.741  0.718  0.420
+
+darkMagenta         :: DRGB
+darkMagenta         = RGB3 0.545  0.0  0.545
+
+darkOliveGreen      :: DRGB
+darkOliveGreen      = RGB3 0.333  0.420  0.184
+
+darkOrange          :: DRGB
+darkOrange          = RGB3 1.0  0.549  0.0
+
+darkOrchid          :: DRGB
+darkOrchid          = RGB3 0.600  0.196  0.800
+
+darkRed             :: DRGB
+darkRed             = RGB3 0.545  0.0  0.0
+
+darkSalmon          :: DRGB
+darkSalmon          = RGB3 0.914  0.588  0.478
+
+darkSeaGreen        :: DRGB
+darkSeaGreen        = RGB3 0.561  0.737  0.561
+
+darkSlateBlue       :: DRGB
+darkSlateBlue       = RGB3 0.282  0.239  0.545
+
+darkSlateGray       :: DRGB
+darkSlateGray       = RGB3 0.184  0.310  0.310
+
+darkSlateGrey       :: DRGB
+darkSlateGrey       = RGB3 0.184  0.310  0.310
+
+darkTurquoise       :: DRGB
+darkTurquoise       = RGB3 0.0  0.808  0.820
+
+darkViolet          :: DRGB
+darkViolet          = RGB3 0.580  0.0  0.827
+
+deepPink            :: DRGB
+deepPink            = RGB3 1.0  0.078  0.576
+
+deepSkyBlue         :: DRGB
+deepSkyBlue         = RGB3 0.0  0.750  1.0
+
+dimGray             :: DRGB
+dimGray             = RGB3 0.412  0.412  0.412
+
+dimGrey             :: DRGB
+dimGrey             = RGB3 0.412  0.412  0.412
+
+dodgerBlue          :: DRGB
+dodgerBlue          = RGB3 0.118  0.565  1.0
+
+firebrick           :: DRGB
+firebrick           = RGB3 0.698  0.133  0.133
+
+floralWhite         :: DRGB
+floralWhite         = RGB3 1.0  0.980  0.941
+
+forestGreen         :: DRGB
+forestGreen         = RGB3 0.133  0.545  0.133
+
+fuchsia             :: DRGB
+fuchsia             = RGB3 1.0  0.0  1.0
+
+gainsboro           :: DRGB
+gainsboro           = RGB3 0.863  0.863  0.863
+
+ghostWhite          :: DRGB
+ghostWhite          = RGB3 0.973  0.973  1.0
+
+gold                :: DRGB
+gold                = RGB3 1.0  0.843  0.0
+
+goldenrod           :: DRGB
+goldenrod           = RGB3 0.855  0.647  0.125
+
+gray                :: DRGB
+gray                = RGB3 0.5  0.5  0.5
+
+grey                :: DRGB
+grey                = RGB3 0.5  0.5  0.5
+
+green               :: DRGB
+green               = RGB3 0.0  0.5  0.0
+
+greenYellow         :: DRGB
+greenYellow         = RGB3 0.678  1.0  0.184
+
+honeydew            :: DRGB
+honeydew            = RGB3 0.941  1.0  0.941
+
+hotPink             :: DRGB
+hotPink             = RGB3 1.0  0.412  0.706
+
+indianRed           :: DRGB
+indianRed           = RGB3 0.804  0.361  0.361
+
+indigo              :: DRGB
+indigo              = RGB3 0.294  0.0  0.510
+
+ivory               :: DRGB
+ivory               = RGB3 1.0  1.0  0.941
+
+khaki               :: DRGB
+khaki               = RGB3 0.941  0.902  0.549
+
+lavender            :: DRGB
+lavender            = RGB3 0.902  0.902  0.980
+
+lavenderBlush       :: DRGB
+lavenderBlush       = RGB3 1.0  0.941  0.961
+
+lawnGreen           :: DRGB
+lawnGreen           = RGB3 0.486  0.988  0.0
+
+lemonChiffon        :: DRGB
+lemonChiffon        = RGB3 1.0  0.980  0.804
+
+lightBlue           :: DRGB
+lightBlue           = RGB3 0.678  0.847  0.902
+
+lightCoral          :: DRGB
+lightCoral          = RGB3 0.941  0.5  0.5
+
+lightCyan           :: DRGB
+lightCyan           = RGB3 0.878  1.0  1.0
+
+lightGoldenrodYellow  :: DRGB
+lightGoldenrodYellow  = RGB3 0.980  0.980  0.824
+
+lightGray           :: DRGB
+lightGray           = RGB3 0.827  0.827  0.827
+
+lightGreen          :: DRGB
+lightGreen          = RGB3 0.565  0.933  0.565
+
+lightGrey           :: DRGB
+lightGrey           = RGB3 0.827  0.827  0.827
+
+lightPink           :: DRGB
+lightPink           = RGB3 1.0  0.714  0.757
+
+lightSalmon         :: DRGB
+lightSalmon         = RGB3 1.0  0.627  0.478
+
+lightSeaGreen       :: DRGB
+lightSeaGreen       = RGB3 0.125  0.698  0.666
+
+lightSkyBlue        :: DRGB
+lightSkyBlue        = RGB3 0.529  0.808  0.980
+
+lightSlateGray      :: DRGB
+lightSlateGray      = RGB3 0.466  0.533  0.600
+
+lightSlateGrey      :: DRGB
+lightSlateGrey      = RGB3 0.466  0.533  0.600
+
+lightSteelBlue      :: DRGB
+lightSteelBlue      = RGB3 0.690  0.769  0.871
+
+lightYellow         :: DRGB
+lightYellow         = RGB3 1.0  1.0  0.878
+
+lime                :: DRGB
+lime                = RGB3 0.0  1.0  0.0
+
+limeGreen           :: DRGB
+limeGreen           = RGB3 0.196  0.804  0.196
+
+linen               :: DRGB
+linen               = RGB3 0.980  0.941  0.902
+
+magenta             :: DRGB
+magenta             = RGB3 1.0  0.0  1.0
+
+maroon              :: DRGB
+maroon              = RGB3 0.5  0.0  0.0
+
+mediumAquamarine    :: DRGB
+mediumAquamarine    = RGB3 0.4  0.804  0.666
+
+mediumBlue          :: DRGB
+mediumBlue          = RGB3 0.0  0.0  0.804
+
+mediumOrchid        :: DRGB
+mediumOrchid        = RGB3 0.729  0.333  0.827
+
+mediumPurple        :: DRGB
+mediumPurple        = RGB3 0.576  0.439  0.859
+
+mediumSeaGreen      :: DRGB
+mediumSeaGreen      = RGB3 0.235  0.702  0.443
+
+mediumSlateBlue     :: DRGB
+mediumSlateBlue     = RGB3 0.482  0.408  0.933
+
+mediumSpringGreen   :: DRGB
+mediumSpringGreen   = RGB3 0.0  0.980  0.604
+
+mediumTurquoise     :: DRGB
+mediumTurquoise     = RGB3 0.282  0.820  0.800
+
+mediumVioletRed     :: DRGB
+mediumVioletRed     = RGB3 0.780  0.082  0.522
+
+midnightBlue        :: DRGB
+midnightBlue        = RGB3 0.098  0.098  0.439
+
+mintcream           :: DRGB
+mintcream           = RGB3 0.961  1.0  0.980
+
+mistyrose           :: DRGB
+mistyrose           = RGB3 1.0  0.894  0.882
+
+moccasin            :: DRGB
+moccasin            = RGB3 1.0  0.894  0.710
+
+navajoWhite         :: DRGB
+navajoWhite         = RGB3 1.0  0.871  0.678
+
+navy                :: DRGB
+navy                = RGB3 0.0  0.0  0.5
+
+oldlace             :: DRGB
+oldlace             = RGB3 0.992  0.961  0.902
+
+olive               :: DRGB
+olive               = RGB3 0.5  0.5  0.0
+
+oliveDrab           :: DRGB
+oliveDrab           = RGB3 0.420  0.557  0.137
+
+orange              :: DRGB
+orange              = RGB3 1.0  0.647  0.0
+
+orangeRed           :: DRGB
+orangeRed           = RGB3 1.0  0.271  0.0
+
+orchid              :: DRGB
+orchid              = RGB3 0.855  0.439  0.839
+
+paleGoldenrod       :: DRGB
+paleGoldenrod       = RGB3 0.933  0.910  0.666
+
+paleGreen           :: DRGB
+paleGreen           = RGB3 0.596  0.984  0.596
+
+paleTurquoise       :: DRGB
+paleTurquoise       = RGB3 0.686  0.933  0.933
+
+paleVioletRed       :: DRGB
+paleVioletRed       = RGB3 0.859  0.439  0.576
+
+papayawhip          :: DRGB
+papayawhip          = RGB3 1.0  0.937  0.835
+
+peachpuff           :: DRGB
+peachpuff           = RGB3 1.0  0.855  0.725
+
+peru                :: DRGB
+peru                = RGB3 0.804  0.522  0.247
+
+pink                :: DRGB
+pink                = RGB3 1.0  0.753  0.796
+
+plum                :: DRGB
+plum                = RGB3 0.867  0.627  0.867
+
+powderBlue          :: DRGB
+powderBlue          = RGB3 0.690  0.878  0.902
+
+purple              :: DRGB
+purple              = RGB3 0.5  0.0  0.5
+
+red                 :: DRGB
+red                 = RGB3 1.0  0.0  0.0
+
+rosyBrown           :: DRGB
+rosyBrown           = RGB3 0.737  0.561  0.561
+
+royalBlue           :: DRGB
+royalBlue           = RGB3 0.255  0.412  0.882
+
+saddleBrown         :: DRGB
+saddleBrown         = RGB3 0.545  0.271  0.075
+
+salmon              :: DRGB
+salmon              = RGB3 0.980  0.5  0.447
+
+sandyBrown          :: DRGB
+sandyBrown          = RGB3 0.957  0.643  0.376
+
+seaGreen            :: DRGB
+seaGreen            = RGB3 0.180  0.545  0.341
+
+seashell            :: DRGB
+seashell            = RGB3 1.0  0.961  0.933
+
+sienna              :: DRGB
+sienna              = RGB3 0.627  0.322  0.176
+
+silver              :: DRGB
+silver              = RGB3 0.753  0.753  0.753
+
+skyBlue             :: DRGB
+skyBlue             = RGB3 0.529  0.808  0.922
+
+slateBlue           :: DRGB
+slateBlue           = RGB3 0.416  0.353  0.804
+
+slateGray           :: DRGB
+slateGray           = RGB3 0.439  0.5  0.565
+
+slateGrey           :: DRGB
+slateGrey           = RGB3 0.439  0.5  0.565
+
+snow                :: DRGB
+snow                = RGB3 1.0  0.980  0.980
+
+springGreen         :: DRGB
+springGreen         = RGB3 0.0  1.0  0.498
+
+steelBlue           :: DRGB
+steelBlue           = RGB3 0.275  0.510  0.706
+
+tan                 :: DRGB
+tan                 = RGB3 0.824  0.706  0.549
+
+teal                :: DRGB
+teal                = RGB3 0.0  0.5  0.5
+
+thistle             :: DRGB
+thistle             = RGB3 0.847  0.750  0.847
+
+tomato              :: DRGB
+tomato              = RGB3 1.0  0.388  0.278
+
+turquoise           :: DRGB
+turquoise           = RGB3 0.251  0.878  0.816
+
+violet              :: DRGB
+violet              = RGB3 0.933  0.510  0.933
+
+wheat               :: DRGB
+wheat               = RGB3 0.961  0.871  0.702
+
+white               :: DRGB
+white               = RGB3 1.0  1.0  1.0
+
+whitesmoke          :: DRGB
+whitesmoke          = RGB3 0.961  0.961  0.961
+
+yellow              :: DRGB
+yellow              = RGB3 1.0  1.0  0.0
+
+yellowGreen         :: DRGB
+yellowGreen         = RGB3 0.604  0.804  0.196
+
+
+
+
+
diff --git a/src/Wumpus/Basic/SafeFonts.hs b/src/Wumpus/Basic/SafeFonts.hs
new file mode 100644
--- /dev/null
+++ b/src/Wumpus/Basic/SafeFonts.hs
@@ -0,0 +1,459 @@
+{-# OPTIONS -Wall #-}
+
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  Wumpus.Basic.SafeFonts
+-- Copyright   :  (c) Stephen Tetley 2009-2010
+-- License     :  BSD3
+--
+-- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
+-- Stability   :  highly unstable
+-- Portability :  GHC with TypeFamilies and more
+--
+-- Safe to use font / size combinations.
+--
+-- Using fonts at other sizes than the ones enumerated in this 
+-- module may case unusual rendering errors, consider drawing 
+-- at a standard size then uniform-scaling for other sizes in 
+-- PostScript.
+--
+--------------------------------------------------------------------------------
+
+module Wumpus.Basic.SafeFonts
+  ( 
+  -- * Times Roman
+    timesRoman10
+  , timesRoman12
+  , timesRoman18
+  , timesRoman24
+  , timesRoman36
+  , timesRoman48
+
+  , timesItalic10
+  , timesItalic12
+  , timesItalic18
+  , timesItalic24
+  , timesItalic36
+  , timesItalic48
+
+  , timesBold10
+  , timesBold12
+  , timesBold18
+  , timesBold24
+  , timesBold36
+  , timesBold48
+
+  , timesBoldItalic10
+  , timesBoldItalic12
+  , timesBoldItalic18
+  , timesBoldItalic24
+  , timesBoldItalic36
+  , timesBoldItalic48
+
+  -- * Helvetica
+  , helvetica10
+  , helvetica12
+  , helvetica18
+  , helvetica24
+  , helvetica36
+  , helvetica48
+
+  , helveticaOblique10
+  , helveticaOblique12
+  , helveticaOblique18
+  , helveticaOblique24
+  , helveticaOblique36  
+  , helveticaOblique48
+
+  , helveticaBold10
+  , helveticaBold12
+  , helveticaBold18
+  , helveticaBold24
+  , helveticaBold36
+  , helveticaBold48
+
+  , helveticaBoldOblique10
+  , helveticaBoldOblique12
+  , helveticaBoldOblique18
+  , helveticaBoldOblique24
+  , helveticaBoldOblique36
+  , helveticaBoldOblique48
+
+  -- * Courier
+  , courier10
+  , courier12
+  , courier18
+  , courier24
+  , courier36
+  , courier48
+
+  , courierOblique10
+  , courierOblique12
+  , courierOblique18
+  , courierOblique24
+  , courierOblique36
+  , courierOblique48
+
+  , courierBold10
+  , courierBold12
+  , courierBold18
+  , courierBold24
+  , courierBold36
+  , courierBold48
+
+  , courierBoldOblique10
+  , courierBoldOblique12
+  , courierBoldOblique18
+  , courierBoldOblique24
+  , courierBoldOblique36
+  , courierBoldOblique48
+
+  -- * Symbol
+  -- $symboldoc
+  , symbol10
+  , symbol12
+  , symbol18
+  , symbol24
+  , symbol36
+  , symbol48
+
+  ) where
+
+
+
+import Wumpus.Core
+
+{-
+
+ Times-Roman  Times-Italic  Times-Bold  Times-BoldItalic
+ Helvetica  Helvetica-Oblique  Helvetica-Bold  Helvetica-Bold-Oblique
+ Courier  Courier-Oblique  Courier-Bold  Courier-Bold-Oblique
+ Symbol
+
+-}
+--------------------------------------------------------------------------------
+-- Times-Roman
+
+mkTimesRoman :: Int -> FontAttr
+mkTimesRoman = FontAttr "Times-Roman" "Times New Roman" SVG_REGULAR
+
+timesRoman10 :: FontAttr
+timesRoman10 = mkTimesRoman 10
+
+timesRoman12 :: FontAttr
+timesRoman12 = mkTimesRoman 12
+
+timesRoman18 :: FontAttr
+timesRoman18 = mkTimesRoman 18
+
+timesRoman24 :: FontAttr
+timesRoman24 = mkTimesRoman 24
+
+timesRoman36 :: FontAttr
+timesRoman36 = mkTimesRoman 36
+
+timesRoman48 :: FontAttr
+timesRoman48 = mkTimesRoman 48
+
+-- Times Italic
+
+mkTimesItalic :: Int -> FontAttr
+mkTimesItalic = FontAttr "Times-Italic" "Times New Roman" SVG_ITALIC
+
+timesItalic10 :: FontAttr
+timesItalic10 = mkTimesItalic 10
+
+timesItalic12 :: FontAttr
+timesItalic12 = mkTimesItalic 12
+
+timesItalic18 :: FontAttr
+timesItalic18 = mkTimesItalic 18
+
+timesItalic24 :: FontAttr
+timesItalic24 = mkTimesItalic 24
+
+timesItalic36 :: FontAttr
+timesItalic36 = mkTimesItalic 36
+
+timesItalic48 :: FontAttr
+timesItalic48 = mkTimesItalic 48
+
+-- Times Bold
+
+mkTimesBold :: Int -> FontAttr
+mkTimesBold = FontAttr "Times-Bold" "Times New Roman" SVG_BOLD
+
+timesBold10 :: FontAttr
+timesBold10 = mkTimesBold 10
+
+timesBold12 :: FontAttr
+timesBold12 = mkTimesBold 12
+
+timesBold18 :: FontAttr
+timesBold18 = mkTimesBold 18
+
+timesBold24 :: FontAttr
+timesBold24 = mkTimesBold 24
+
+timesBold36 :: FontAttr
+timesBold36 = mkTimesBold 36
+
+timesBold48 :: FontAttr
+timesBold48 = mkTimesBold 48
+
+-- Times Bold Italic
+
+mkTimesBoldItalic :: Int -> FontAttr
+mkTimesBoldItalic = 
+    FontAttr "Times-BoldItalic" "Times New Roman" SVG_BOLD_ITALIC
+
+timesBoldItalic10 :: FontAttr
+timesBoldItalic10 = mkTimesBoldItalic 10
+
+timesBoldItalic12 :: FontAttr
+timesBoldItalic12 = mkTimesBoldItalic 12
+
+timesBoldItalic18 :: FontAttr
+timesBoldItalic18 = mkTimesBoldItalic 18
+
+timesBoldItalic24 :: FontAttr
+timesBoldItalic24 = mkTimesBoldItalic 24
+
+timesBoldItalic36 :: FontAttr
+timesBoldItalic36 = mkTimesBoldItalic 36
+
+timesBoldItalic48 :: FontAttr
+timesBoldItalic48 = mkTimesBoldItalic 48
+
+
+--------------------------------------------------------------------------------
+-- Helvetica
+
+mkHelvetica :: Int -> FontAttr
+mkHelvetica = FontAttr "Helvetica" "Helvetica" SVG_REGULAR
+
+
+helvetica10 :: FontAttr
+helvetica10 = mkHelvetica 10
+
+helvetica12 :: FontAttr
+helvetica12 = mkHelvetica 12
+
+helvetica18 :: FontAttr
+helvetica18 = mkHelvetica 18
+
+helvetica24 :: FontAttr
+helvetica24 = mkHelvetica 24
+
+helvetica36 :: FontAttr
+helvetica36 = mkHelvetica 36
+
+helvetica48 :: FontAttr
+helvetica48 = mkHelvetica 48
+
+-- Helvetica Oblique
+
+mkHelveticaOblique :: Int -> FontAttr
+mkHelveticaOblique = FontAttr "Helvetica-Oblique" "Helvetica" SVG_OBLIQUE
+
+
+helveticaOblique10 :: FontAttr
+helveticaOblique10 = mkHelveticaOblique 10
+
+helveticaOblique12 :: FontAttr
+helveticaOblique12 = mkHelveticaOblique 12
+
+helveticaOblique18 :: FontAttr
+helveticaOblique18 = mkHelveticaOblique 18
+
+helveticaOblique24 :: FontAttr
+helveticaOblique24 = mkHelveticaOblique 24
+
+helveticaOblique36 :: FontAttr
+helveticaOblique36 = mkHelveticaOblique 36
+
+helveticaOblique48 :: FontAttr
+helveticaOblique48 = mkHelveticaOblique 48
+
+
+-- Helvetica Bold
+
+mkHelveticaBold :: Int -> FontAttr
+mkHelveticaBold = FontAttr "Helvetica-Bold" "Helvetica" SVG_BOLD
+
+
+helveticaBold10 :: FontAttr
+helveticaBold10 = mkHelveticaBold 10
+
+helveticaBold12 :: FontAttr
+helveticaBold12 = mkHelveticaBold 12
+
+helveticaBold18 :: FontAttr
+helveticaBold18 = mkHelveticaBold 18
+
+helveticaBold24 :: FontAttr
+helveticaBold24 = mkHelveticaBold 24
+
+helveticaBold36 :: FontAttr
+helveticaBold36 = mkHelveticaBold 36
+
+helveticaBold48 :: FontAttr
+helveticaBold48 = mkHelveticaBold 48
+
+-- Helvetica Bold Oblique
+
+mkHelveticaBoldOblique :: Int -> FontAttr
+mkHelveticaBoldOblique = 
+    FontAttr "Helvetica-Bold-Oblique" "Helvetica" SVG_BOLD_OBLIQUE
+
+
+helveticaBoldOblique10 :: FontAttr
+helveticaBoldOblique10 = mkHelveticaBoldOblique 10
+
+helveticaBoldOblique12 :: FontAttr
+helveticaBoldOblique12 = mkHelveticaBoldOblique 12
+
+helveticaBoldOblique18 :: FontAttr
+helveticaBoldOblique18 = mkHelveticaBoldOblique 18
+
+helveticaBoldOblique24 :: FontAttr
+helveticaBoldOblique24 = mkHelveticaBoldOblique 24
+
+helveticaBoldOblique36 :: FontAttr
+helveticaBoldOblique36 = mkHelveticaBoldOblique 36
+
+helveticaBoldOblique48 :: FontAttr
+helveticaBoldOblique48 = mkHelveticaBoldOblique 48
+
+
+
+
+--------------------------------------------------------------------------------
+-- Courier
+
+mkCourier :: Int -> FontAttr
+mkCourier = FontAttr "Courier" "Courier New" SVG_REGULAR
+
+courier10 :: FontAttr
+courier10 = mkCourier 10
+
+courier12 :: FontAttr
+courier12 = mkCourier 12
+
+courier18 :: FontAttr
+courier18 = mkCourier 18
+
+courier24 :: FontAttr
+courier24 = mkCourier 24
+
+courier36 :: FontAttr
+courier36 = mkCourier 36
+
+courier48 :: FontAttr
+courier48 = mkCourier 48
+
+-- Courier Oblique
+
+mkCourierOblique :: Int -> FontAttr
+mkCourierOblique = FontAttr "Courier-Oblique" "Courier New" SVG_OBLIQUE
+
+
+courierOblique10 :: FontAttr
+courierOblique10 = mkCourierOblique 10
+
+courierOblique12 :: FontAttr
+courierOblique12 = mkCourierOblique 12
+
+courierOblique18 :: FontAttr
+courierOblique18 = mkCourierOblique 18
+
+courierOblique24 :: FontAttr
+courierOblique24 = mkCourierOblique 24
+
+courierOblique36 :: FontAttr
+courierOblique36 = mkCourierOblique 36
+
+courierOblique48 :: FontAttr
+courierOblique48 = mkCourierOblique 48
+
+-- Courier Bold
+
+mkCourierBold :: Int -> FontAttr
+mkCourierBold = FontAttr "Courier-Bold" "Courier New" SVG_BOLD
+
+
+courierBold10 :: FontAttr
+courierBold10 = mkCourierBold 10
+
+courierBold12 :: FontAttr
+courierBold12 = mkCourierBold 12
+
+courierBold18 :: FontAttr
+courierBold18 = mkCourierBold 18
+
+courierBold24 :: FontAttr
+courierBold24 = mkCourierBold 24
+
+courierBold36 :: FontAttr
+courierBold36 = mkCourierBold 36
+
+courierBold48 :: FontAttr
+courierBold48 = mkCourierBold 48
+
+-- Courier Bold Oblique
+
+mkCourierBoldOblique :: Int -> FontAttr
+mkCourierBoldOblique = 
+    FontAttr "Courier-Bold-Oblique" "Courier New" SVG_BOLD_OBLIQUE
+
+
+courierBoldOblique10 :: FontAttr
+courierBoldOblique10 = mkCourierBoldOblique 10
+
+courierBoldOblique12 :: FontAttr
+courierBoldOblique12 = mkCourierBoldOblique 12
+
+courierBoldOblique18 :: FontAttr
+courierBoldOblique18 = mkCourierBoldOblique 18
+
+courierBoldOblique24 :: FontAttr
+courierBoldOblique24 = mkCourierBoldOblique 24
+
+courierBoldOblique36 :: FontAttr
+courierBoldOblique36 = mkCourierBoldOblique 36
+
+courierBoldOblique48 :: FontAttr
+courierBoldOblique48 = mkCourierBoldOblique 48
+
+--------------------------------------------------------------------------------
+-- Symbol
+
+-- $symboldoc
+-- Symbol does not appear to be well supported by SVG.
+-- It renders in Chrome but not in Firefox.
+
+mkSymbol :: Int -> FontAttr
+mkSymbol = FontAttr "Symbol" "Symbol" SVG_REGULAR
+
+
+symbol10 :: FontAttr
+symbol10 = mkSymbol 10
+
+symbol12 :: FontAttr
+symbol12 = mkSymbol 12
+
+symbol18 :: FontAttr
+symbol18 = mkSymbol 18
+
+symbol24 :: FontAttr
+symbol24 = mkSymbol 24
+
+symbol36 :: FontAttr
+symbol36 = mkSymbol 36
+
+symbol48 :: FontAttr
+symbol48 = mkSymbol 48
+
+
+
+
diff --git a/src/Wumpus/Basic/Utils/HList.hs b/src/Wumpus/Basic/Utils/HList.hs
new file mode 100644
--- /dev/null
+++ b/src/Wumpus/Basic/Utils/HList.hs
@@ -0,0 +1,79 @@
+{-# OPTIONS -Wall #-}
+
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  Wumpus.Basic.Utils.HList
+-- Copyright   :  (c) Stephen Tetley 2010
+-- License     :  BSD3
+--
+-- Maintainer  :  stephen.tetley@gmail.com
+-- Stability   :  unstable
+-- Portability :  GHC
+--
+-- Hughes list, ...
+--
+--------------------------------------------------------------------------------
+
+module Wumpus.Basic.Utils.HList
+  (
+
+  -- * Hughes list
+    H
+  , emptyH
+  , wrapH
+  , consH
+  , snocH
+  , appendH
+  , veloH
+  , concatH
+
+  , toListH
+  , fromListH
+
+
+  ) where
+
+
+--------------------------------------------------------------------------------
+-- Hughes list
+
+type H a = [a] -> [a]
+
+emptyH :: H a
+emptyH = id
+
+wrapH :: a -> H a
+wrapH a = consH a id 
+
+consH :: a -> H a -> H a
+consH a f = (a:) . f
+
+snocH :: H a -> a -> H a
+snocH  f a = f . (a:)
+
+appendH :: H a -> H a -> H a
+appendH f g = f . g
+
+-- | velo consumes the list as per map, but builds it back
+-- as a Hughes list - so items can be dropped
+-- replaced, repeated, etc...
+-- 
+veloH :: (a -> H b) -> [a] -> H b
+veloH f = foldr step id 
+  where step a hf = f a . hf
+
+concatH :: [H a] -> H a
+concatH = foldr (.) id
+
+
+toListH :: H a -> [a]
+toListH = ($ [])
+
+fromListH :: [a] -> H a
+fromListH xs = (xs++)
+
+
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
diff --git a/src/Wumpus/Basic/VersionNumber.hs b/src/Wumpus/Basic/VersionNumber.hs
new file mode 100644
--- /dev/null
+++ b/src/Wumpus/Basic/VersionNumber.hs
@@ -0,0 +1,25 @@
+{-# OPTIONS -Wall #-}
+
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  Wumpus.Basic.VersionNumber
+-- Copyright   :  (c) Stephen Tetley 2010
+-- License     :  BSD3
+--
+-- Maintainer  :  stephen.tetley@gmail.com
+-- Stability   :  unstable
+-- Portability :  GHC with TypeFamilies and more
+--
+-- Version number
+--
+--------------------------------------------------------------------------------
+
+module Wumpus.Basic.VersionNumber
+  ( 
+    wumpus_basic_version
+
+  ) where
+
+
+wumpus_basic_version :: (Int,Int,Int)
+wumpus_basic_version = (0,1,1)
diff --git a/src/Wumpus/Basic/X11Colours.hs b/src/Wumpus/Basic/X11Colours.hs
new file mode 100644
--- /dev/null
+++ b/src/Wumpus/Basic/X11Colours.hs
@@ -0,0 +1,1060 @@
+{-# OPTIONS -Wall #-}
+
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  Wumpus.Basic.X11Colours
+-- Copyright   :  (c) Stephen Tetley 2009-2010
+-- License     :  BSD3
+--
+-- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
+-- Stability   :  highly unstable
+-- Portability :  GHC with TypeFamilies and more
+--
+-- The X11 \'named colours\', as rgb [0,1] values 
+--
+--------------------------------------------------------------------------------
+
+module Wumpus.Basic.X11Colours
+  ( 
+  
+  -- * Named X11 colours
+    antiqueWhite1
+  , antiqueWhite2
+  , antiqueWhite3
+  , antiqueWhite4
+  , aquamarine1
+  , aquamarine2
+  , aquamarine3
+  , aquamarine4
+  , azure1
+  , azure2
+  , azure3
+  , azure4
+  , bisque1
+  , bisque2
+  , bisque3
+  , bisque4
+  , blue1
+  , blue2
+  , blue3
+  , blue4
+  , brown1
+  , brown2
+  , brown3
+  , brown4
+  , burlywood1
+  , burlywood2
+  , burlywood3
+  , burlywood4
+  , cadetBlue1
+  , cadetBlue2
+  , cadetBlue3
+  , cadetBlue4
+  , chartreuse1
+  , chartreuse2
+  , chartreuse3
+  , chartreuse4
+  , chocolate1
+  , chocolate2
+  , chocolate3
+  , chocolate4
+  , coral1
+  , coral2
+  , coral3
+  , coral4
+  , cornsilk1
+  , cornsilk2
+  , cornsilk3
+  , cornsilk4
+  , cyan1
+  , cyan2
+  , cyan3
+  , cyan4
+  , darkGoldenrod1
+  , darkGoldenrod2
+  , darkGoldenrod3
+  , darkGoldenrod4
+  , darkOliveGreen1
+  , darkOliveGreen2
+  , darkOliveGreen3
+  , darkOliveGreen4
+  , darkOrange1
+  , darkOrange2
+  , darkOrange3
+  , darkOrange4
+  , darkOrchid1
+  , darkOrchid2
+  , darkOrchid3
+  , darkOrchid4
+  , darkSeaGreen1
+  , darkSeaGreen2
+  , darkSeaGreen3
+  , darkSeaGreen4
+  , darkSlateGray1
+  , darkSlateGray2
+  , darkSlateGray3
+  , darkSlateGray4
+  , deepPink1
+  , deepPink2
+  , deepPink3
+  , deepPink4
+  , deepSkyBlue1
+  , deepSkyBlue2
+  , deepSkyBlue3
+  , deepSkyBlue4
+  , dodgerBlue1
+  , dodgerBlue2
+  , dodgerBlue3
+  , dodgerBlue4
+  , firebrick1
+  , firebrick2
+  , firebrick3
+  , firebrick4
+  , gold1
+  , gold2
+  , gold3
+  , gold4
+  , goldenrod1
+  , goldenrod2
+  , goldenrod3
+  , goldenrod4
+  , green1
+  , green2
+  , green3
+  , green4
+  , honeydew1
+  , honeydew2
+  , honeydew3
+  , honeydew4
+  , hotPink1
+  , hotPink2
+  , hotPink3
+  , hotPink4
+  , indianRed1
+  , indianRed2
+  , indianRed3
+  , indianRed4
+  , ivory1
+  , ivory2
+  , ivory3
+  , ivory4
+  , khaki1
+  , khaki2
+  , khaki3
+  , khaki4
+  , lavenderBlush1
+  , lavenderBlush2
+  , lavenderBlush3
+  , lavenderBlush4
+  , lemonChiffon1
+  , lemonChiffon2
+  , lemonChiffon3
+  , lemonChiffon4
+  , lightBlue1
+  , lightBlue2
+  , lightBlue3
+  , lightBlue4
+  , lightCyan1
+  , lightCyan2
+  , lightCyan3
+  , lightCyan4
+  , lightGoldenrod1
+  , lightGoldenrod2
+  , lightGoldenrod3
+  , lightGoldenrod4
+  , lightPink1
+  , lightPink2
+  , lightPink3
+  , lightPink4
+  , lightSalmon1
+  , lightSalmon2
+  , lightSalmon3
+  , lightSalmon4
+  , lightSkyBlue1
+  , lightSkyBlue2
+  , lightSkyBlue3
+  , lightSkyBlue4
+  , lightSteelBlue1
+  , lightSteelBlue2
+  , lightSteelBlue3
+  , lightSteelBlue4
+  , lightYellow1
+  , lightYellow2
+  , lightYellow3
+  , lightYellow4
+  , magenta1
+  , magenta2
+  , magenta3
+  , magenta4
+  , maroon1
+  , maroon2
+  , maroon3
+  , maroon4
+  , mediumOrchid1
+  , mediumOrchid2
+  , mediumOrchid3
+  , mediumOrchid4
+  , mediumPurple1
+  , mediumPurple2
+  , mediumPurple3
+  , mediumPurple4
+  , mistyRose1
+  , mistyRose2
+  , mistyRose3
+  , mistyRose4
+  , navajoWhite1
+  , navajoWhite2
+  , navajoWhite3
+  , navajoWhite4
+  , oliveDrab1
+  , oliveDrab2
+  , oliveDrab3
+  , oliveDrab4
+  , orange1
+  , orange2
+  , orange3
+  , orange4
+  , orangeRed1
+  , orangeRed2
+  , orangeRed3
+  , orangeRed4
+  , orchid1
+  , orchid2
+  , orchid3
+  , orchid4
+  , paleGreen1
+  , paleGreen2
+  , paleGreen3
+  , paleGreen4
+  , paleTurquoise1
+  , paleTurquoise2
+  , paleTurquoise3
+  , paleTurquoise4
+  , paleVioletRed1
+  , paleVioletRed2
+  , paleVioletRed3
+  , paleVioletRed4
+  , peachPuff1
+  , peachPuff2
+  , peachPuff3
+  , peachPuff4
+  , pink1
+  , pink2
+  , pink3
+  , pink4
+  , plum1
+  , plum2
+  , plum3
+  , plum4
+  , purple1
+  , purple2
+  , purple3
+  , purple4
+  , red1
+  , red2
+  , red3
+  , red4
+  , rosyBrown1
+  , rosyBrown2
+  , rosyBrown3
+  , rosyBrown4
+  , royalBlue1
+  , royalBlue2
+  , royalBlue3
+  , royalBlue4
+  , salmon1
+  , salmon2
+  , salmon3
+  , salmon4
+  , seaGreen1
+  , seaGreen2
+  , seaGreen3
+  , seaGreen4
+  , seashell1
+  , seashell2
+  , seashell3
+  , seashell4
+  , sienna1
+  , sienna2
+  , sienna3
+  , sienna4
+  , skyBlue1
+  , skyBlue2
+  , skyBlue3
+  , skyBlue4
+  , slateBlue1
+  , slateBlue2
+  , slateBlue3
+  , slateBlue4
+  , slateGray1
+  , slateGray2
+  , slateGray3
+  , slateGray4
+  , snow1
+  , snow2
+  , snow3
+  , snow4
+  , springGreen1
+  , springGreen2
+  , springGreen3
+  , springGreen4
+  , steelBlue1
+  , steelBlue2
+  , steelBlue3
+  , steelBlue4
+  , tan1
+  , tan2
+  , tan3
+  , tan4
+  , thistle1
+  , thistle2
+  , thistle3
+  , thistle4
+  , tomato1
+  , tomato2
+  , tomato3
+  , tomato4
+  , turquoise1
+  , turquoise2
+  , turquoise3
+  , turquoise4
+  , violetRed1
+  , violetRed2
+  , violetRed3
+  , violetRed4
+  , wheat1
+  , wheat2
+  , wheat3
+  , wheat4
+  , yellow1
+  , yellow2
+  , yellow3
+  , yellow4
+  , gray0
+  , green0
+  , grey0
+  , maroon0
+  , purple0
+
+  ) where
+
+import Wumpus.Core.Colour ( RGB3(..), DRGB )
+
+--------------------------------------------------------------------------------
+
+antiqueWhite1           :: DRGB
+antiqueWhite2           :: DRGB
+antiqueWhite3           :: DRGB
+antiqueWhite4           :: DRGB
+antiqueWhite1           = RGB3 1   0.936   0.86
+antiqueWhite2           = RGB3 0.932   0.875   0.8
+antiqueWhite3           = RGB3 0.804   0.752   0.69
+antiqueWhite4           = RGB3 0.545   0.512   0.47
+
+aquamarine1             :: DRGB
+aquamarine2             :: DRGB
+aquamarine3             :: DRGB
+aquamarine4             :: DRGB
+aquamarine1             = RGB3 0.498  1   0.83
+aquamarine2             = RGB3 0.464   0.932   0.776
+aquamarine3             = RGB3 0.4   0.804   0.668
+aquamarine4             = RGB3 0.27   0.545   0.455
+
+azure1                  :: DRGB
+azure2                  :: DRGB
+azure3                  :: DRGB
+azure4                  :: DRGB
+azure1                  = RGB3 0.94  1  1
+azure2                  = RGB3 0.88   0.932   0.932
+azure3                  = RGB3 0.756   0.804   0.804
+azure4                  = RGB3 0.512   0.545   0.545
+
+bisque1                 :: DRGB
+bisque2                 :: DRGB
+bisque3                 :: DRGB
+bisque4                 :: DRGB
+bisque1                 = RGB3 1   0.894   0.77
+bisque2                 = RGB3 0.932   0.835   0.716
+bisque3                 = RGB3 0.804   0.716   0.62
+bisque4                 = RGB3 0.545   0.49   0.42
+
+blue1                   :: DRGB
+blue2                   :: DRGB
+blue3                   :: DRGB
+blue4                   :: DRGB
+blue1                   = RGB3 0  0  1
+blue2                   = RGB3 0  0   0.932
+blue3                   = RGB3 0  0   0.804
+blue4                   = RGB3 0  0   0.545
+
+brown1                  :: DRGB
+brown2                  :: DRGB
+brown3                  :: DRGB
+brown4                  :: DRGB
+brown1                  = RGB3 1   0.25   0.25
+brown2                  = RGB3 0.932   0.23   0.23
+brown3                  = RGB3 0.804   0.2   0.2
+brown4                  = RGB3 0.545   0.136   0.136
+
+burlywood1              :: DRGB
+burlywood2              :: DRGB
+burlywood3              :: DRGB
+burlywood4              :: DRGB
+burlywood1              = RGB3 1   0.828   0.608
+burlywood2              = RGB3 0.932   0.772   0.57
+burlywood3              = RGB3 0.804   0.668   0.49
+burlywood4              = RGB3 0.545   0.45   0.332
+
+cadetBlue1              :: DRGB
+cadetBlue2              :: DRGB
+cadetBlue3              :: DRGB
+cadetBlue4              :: DRGB
+cadetBlue1              = RGB3 0.596   0.96  1
+cadetBlue2              = RGB3 0.556   0.898   0.932
+cadetBlue3              = RGB3 0.48   0.772   0.804
+cadetBlue4              = RGB3 0.325   0.525   0.545
+
+chartreuse1             :: DRGB
+chartreuse2             :: DRGB
+chartreuse3             :: DRGB
+chartreuse4             :: DRGB
+chartreuse1             = RGB3 0.498  1  0
+chartreuse2             = RGB3 0.464   0.932  0
+chartreuse3             = RGB3 0.4   0.804  0
+chartreuse4             = RGB3 0.27   0.545  0
+
+chocolate1              :: DRGB
+chocolate2              :: DRGB
+chocolate3              :: DRGB
+chocolate4              :: DRGB
+chocolate1              = RGB3 1   0.498   0.14
+chocolate2              = RGB3 0.932   0.464   0.13
+chocolate3              = RGB3 0.804   0.4   0.112
+chocolate4              = RGB3 0.545   0.27   0.075
+
+coral1                  :: DRGB
+coral2                  :: DRGB
+coral3                  :: DRGB
+coral4                  :: DRGB
+coral1                  = RGB3 1   0.448   0.336
+coral2                  = RGB3 0.932   0.415   0.312
+coral3                  = RGB3 0.804   0.356   0.27
+coral4                  = RGB3 0.545   0.244   0.185
+
+cornsilk1               :: DRGB
+cornsilk2               :: DRGB
+cornsilk3               :: DRGB
+cornsilk4               :: DRGB
+cornsilk1               = RGB3 1   0.972   0.864
+cornsilk2               = RGB3 0.932   0.91   0.804
+cornsilk3               = RGB3 0.804   0.785   0.694
+cornsilk4               = RGB3 0.545   0.532   0.47
+
+cyan1                   :: DRGB
+cyan2                   :: DRGB
+cyan3                   :: DRGB
+cyan4                   :: DRGB
+cyan1                   = RGB3 0   1   1
+cyan2                   = RGB3 0   0.932   0.932
+cyan3                   = RGB3 0   0.804   0.804
+cyan4                   = RGB3 0   0.545   0.545
+
+darkGoldenrod1          :: DRGB
+darkGoldenrod2          :: DRGB
+darkGoldenrod3          :: DRGB
+darkGoldenrod4          :: DRGB
+darkGoldenrod1          = RGB3 1   0.725   0.06
+darkGoldenrod2          = RGB3 0.932   0.68   0.055
+darkGoldenrod3          = RGB3 0.804   0.585   0.048
+darkGoldenrod4          = RGB3 0.545   0.396   0.03
+
+darkOliveGreen1         :: DRGB
+darkOliveGreen2         :: DRGB
+darkOliveGreen3         :: DRGB
+darkOliveGreen4         :: DRGB
+darkOliveGreen1         = RGB3 0.792  1   0.44
+darkOliveGreen2         = RGB3 0.736   0.932   0.408
+darkOliveGreen3         = RGB3 0.635   0.804   0.352
+darkOliveGreen4         = RGB3 0.43   0.545   0.24
+
+darkOrange1             :: DRGB
+darkOrange2             :: DRGB
+darkOrange3             :: DRGB
+darkOrange4             :: DRGB
+darkOrange1             = RGB3 1   0.498  0
+darkOrange2             = RGB3 0.932   0.464  0
+darkOrange3             = RGB3 0.804   0.4  0
+darkOrange4             = RGB3 0.545   0.27  0
+
+darkOrchid1             :: DRGB
+darkOrchid2             :: DRGB
+darkOrchid3             :: DRGB
+darkOrchid4             :: DRGB
+darkOrchid1             = RGB3 0.75   0.244  1
+darkOrchid2             = RGB3 0.698   0.228   0.932
+darkOrchid3             = RGB3 0.604   0.196   0.804
+darkOrchid4             = RGB3 0.408   0.132   0.545
+
+darkSeaGreen1           :: DRGB
+darkSeaGreen2           :: DRGB
+darkSeaGreen3           :: DRGB
+darkSeaGreen4           :: DRGB
+darkSeaGreen1           = RGB3 0.756  1   0.756
+darkSeaGreen2           = RGB3 0.705   0.932   0.705
+darkSeaGreen3           = RGB3 0.608   0.804   0.608
+darkSeaGreen4           = RGB3 0.41   0.545   0.41
+
+darkSlateGray1          :: DRGB
+darkSlateGray2          :: DRGB
+darkSlateGray3          :: DRGB
+darkSlateGray4          :: DRGB
+darkSlateGray1          = RGB3 0.592  1  1
+darkSlateGray2          = RGB3 0.552   0.932   0.932
+darkSlateGray3          = RGB3 0.475   0.804   0.804
+darkSlateGray4          = RGB3 0.32   0.545   0.545
+
+deepPink1               :: DRGB
+deepPink2               :: DRGB
+deepPink3               :: DRGB
+deepPink4               :: DRGB
+deepPink1               = RGB3 1   0.08   0.576
+deepPink2               = RGB3 0.932   0.07   0.536
+deepPink3               = RGB3 0.804   0.064   0.464
+deepPink4               = RGB3 0.545   0.04   0.312
+
+deepSkyBlue1            :: DRGB
+deepSkyBlue2            :: DRGB
+deepSkyBlue3            :: DRGB
+deepSkyBlue4            :: DRGB
+deepSkyBlue1            = RGB3 0   0.75  1
+deepSkyBlue2            = RGB3 0   0.698   0.932
+deepSkyBlue3            = RGB3 0   0.604   0.804
+deepSkyBlue4            = RGB3 0   0.408   0.545
+
+dodgerBlue1             :: DRGB
+dodgerBlue2             :: DRGB
+dodgerBlue3             :: DRGB
+dodgerBlue4             :: DRGB
+dodgerBlue1             = RGB3 0.116   0.565  1
+dodgerBlue2             = RGB3 0.11   0.525   0.932
+dodgerBlue3             = RGB3 0.094   0.455   0.804
+dodgerBlue4             = RGB3 0.064   0.305   0.545
+
+firebrick1              :: DRGB
+firebrick2              :: DRGB
+firebrick3              :: DRGB
+firebrick4              :: DRGB
+firebrick1              = RGB3 1   0.19   0.19
+firebrick2              = RGB3 0.932   0.172   0.172
+firebrick3              = RGB3 0.804   0.15   0.15
+firebrick4              = RGB3 0.545   0.1   0.1
+
+gold1                   :: DRGB
+gold2                   :: DRGB
+gold3                   :: DRGB
+gold4                   :: DRGB
+gold1                   = RGB3 1   0.844  0
+gold2                   = RGB3 0.932   0.79  0
+gold3                   = RGB3 0.804   0.68  0
+gold4                   = RGB3 0.545   0.46  0
+
+goldenrod1              :: DRGB
+goldenrod2              :: DRGB
+goldenrod3              :: DRGB
+goldenrod4              :: DRGB
+goldenrod1              = RGB3 1   0.756   0.145
+goldenrod2              = RGB3 0.932   0.705   0.132
+goldenrod3              = RGB3 0.804   0.608   0.112
+goldenrod4              = RGB3 0.545   0.41   0.08
+
+green1                  :: DRGB
+green2                  :: DRGB
+green3                  :: DRGB
+green4                  :: DRGB
+green1                  = RGB3 0  1  0
+green2                  = RGB3 0   0.932  0
+green3                  = RGB3 0   0.804  0
+green4                  = RGB3 0   0.545  0
+
+honeydew1               :: DRGB
+honeydew2               :: DRGB
+honeydew3               :: DRGB
+honeydew4               :: DRGB
+honeydew1               = RGB3 0.94  1   0.94
+honeydew2               = RGB3 0.88   0.932   0.88
+honeydew3               = RGB3 0.756   0.804   0.756
+honeydew4               = RGB3 0.512   0.545   0.512
+
+hotPink1                :: DRGB
+hotPink2                :: DRGB
+hotPink3                :: DRGB
+hotPink4                :: DRGB
+hotPink1                = RGB3 1   0.43   0.705
+hotPink2                = RGB3 0.932   0.415   0.655
+hotPink3                = RGB3 0.804   0.376   0.565
+hotPink4                = RGB3 0.545   0.228   0.385
+
+indianRed1              :: DRGB
+indianRed2              :: DRGB
+indianRed3              :: DRGB
+indianRed4              :: DRGB
+indianRed1              = RGB3 1   0.415   0.415
+indianRed2              = RGB3 0.932   0.39   0.39
+indianRed3              = RGB3 0.804   0.332   0.332
+indianRed4              = RGB3 0.545   0.228   0.228
+
+ivory1                  :: DRGB
+ivory2                  :: DRGB
+ivory3                  :: DRGB
+ivory4                  :: DRGB
+ivory1                  = RGB3 1   1   0.94
+ivory2                  = RGB3 0.932   0.932   0.88
+ivory3                  = RGB3 0.804   0.804   0.756
+ivory4                  = RGB3 0.545   0.545   0.512
+
+khaki1                  :: DRGB
+khaki2                  :: DRGB
+khaki3                  :: DRGB
+khaki4                  :: DRGB
+khaki1                  = RGB3 1   0.965   0.56
+khaki2                  = RGB3 0.932   0.9   0.52
+khaki3                  = RGB3 0.804   0.776   0.45
+khaki4                  = RGB3 0.545   0.525   0.305
+
+lavenderBlush1          :: DRGB
+lavenderBlush2          :: DRGB
+lavenderBlush3          :: DRGB
+lavenderBlush4          :: DRGB
+lavenderBlush1          = RGB3 1   0.94   0.96
+lavenderBlush2          = RGB3 0.932   0.88   0.898
+lavenderBlush3          = RGB3 0.804   0.756   0.772
+lavenderBlush4          = RGB3 0.545   0.512   0.525
+
+lemonChiffon1           :: DRGB
+lemonChiffon2           :: DRGB
+lemonChiffon3           :: DRGB
+lemonChiffon4           :: DRGB
+lemonChiffon1           = RGB3 1   0.98   0.804
+lemonChiffon2           = RGB3 0.932   0.912   0.75
+lemonChiffon3           = RGB3 0.804   0.79   0.648
+lemonChiffon4           = RGB3 0.545   0.536   0.44
+
+lightBlue1              :: DRGB
+lightBlue2              :: DRGB
+lightBlue3              :: DRGB
+lightBlue4              :: DRGB
+lightBlue1              = RGB3 0.75   0.936  1
+lightBlue2              = RGB3 0.698   0.875   0.932
+lightBlue3              = RGB3 0.604   0.752   0.804
+lightBlue4              = RGB3 0.408   0.512   0.545
+
+lightCyan1              :: DRGB
+lightCyan2              :: DRGB
+lightCyan3              :: DRGB
+lightCyan4              :: DRGB
+lightCyan1              = RGB3 0.88  1  1
+lightCyan2              = RGB3 0.82   0.932   0.932
+lightCyan3              = RGB3 0.705   0.804   0.804
+lightCyan4              = RGB3 0.48   0.545   0.545
+
+lightGoldenrod1         :: DRGB
+lightGoldenrod2         :: DRGB
+lightGoldenrod3         :: DRGB
+lightGoldenrod4         :: DRGB
+lightGoldenrod1         = RGB3 1   0.925   0.545
+lightGoldenrod2         = RGB3 0.932   0.864   0.51
+lightGoldenrod3         = RGB3 0.804   0.745   0.44
+lightGoldenrod4         = RGB3 0.545   0.505   0.298
+
+lightPink1              :: DRGB
+lightPink2              :: DRGB
+lightPink3              :: DRGB
+lightPink4              :: DRGB
+lightPink1              = RGB3 1   0.684   0.725
+lightPink2              = RGB3 0.932   0.635   0.68
+lightPink3              = RGB3 0.804   0.55   0.585
+lightPink4              = RGB3 0.545   0.372   0.396
+
+lightSalmon1            :: DRGB
+lightSalmon2            :: DRGB
+lightSalmon3            :: DRGB
+lightSalmon4            :: DRGB
+lightSalmon1            = RGB3 1   0.628   0.48
+lightSalmon2            = RGB3 0.932   0.585   0.448
+lightSalmon3            = RGB3 0.804   0.505   0.385
+lightSalmon4            = RGB3 0.545   0.34   0.26
+
+lightSkyBlue1           :: DRGB
+lightSkyBlue2           :: DRGB
+lightSkyBlue3           :: DRGB
+lightSkyBlue4           :: DRGB
+lightSkyBlue1           = RGB3 0.69   0.888  1
+lightSkyBlue2           = RGB3 0.644   0.828   0.932
+lightSkyBlue3           = RGB3 0.552   0.712   0.804
+lightSkyBlue4           = RGB3 0.376   0.484   0.545
+
+lightSteelBlue1         :: DRGB
+lightSteelBlue2         :: DRGB
+lightSteelBlue3         :: DRGB
+lightSteelBlue4         :: DRGB
+lightSteelBlue1         = RGB3 0.792   0.884  1
+lightSteelBlue2         = RGB3 0.736   0.824   0.932
+lightSteelBlue3         = RGB3 0.635   0.71   0.804
+lightSteelBlue4         = RGB3 0.43   0.484   0.545
+
+lightYellow1            :: DRGB
+lightYellow2            :: DRGB
+lightYellow3            :: DRGB
+lightYellow4            :: DRGB
+lightYellow1            = RGB3 1  1   0.88
+lightYellow2            = RGB3 0.932   0.932   0.82
+lightYellow3            = RGB3 0.804   0.804   0.705
+lightYellow4            = RGB3 0.545   0.545   0.48
+
+magenta1                :: DRGB
+magenta2                :: DRGB
+magenta3                :: DRGB
+magenta4                :: DRGB
+magenta1                = RGB3 1  0  1
+magenta2                = RGB3 0.932  0   0.932
+magenta3                = RGB3 0.804  0   0.804
+magenta4                = RGB3 0.545  0   0.545
+
+maroon1                 :: DRGB
+maroon2                 :: DRGB
+maroon3                 :: DRGB
+maroon4                 :: DRGB
+maroon1                 = RGB3 1   0.204   0.7
+maroon2                 = RGB3 0.932   0.19   0.655
+maroon3                 = RGB3 0.804   0.16   0.565
+maroon4                 = RGB3 0.545   0.11   0.385
+
+mediumOrchid1           :: DRGB
+mediumOrchid2           :: DRGB
+mediumOrchid3           :: DRGB
+mediumOrchid4           :: DRGB
+mediumOrchid1           = RGB3 0.88   0.4  1
+mediumOrchid2           = RGB3 0.82   0.372   0.932
+mediumOrchid3           = RGB3 0.705   0.32   0.804
+mediumOrchid4           = RGB3 0.48   0.215   0.545
+
+mediumPurple1           :: DRGB
+mediumPurple2           :: DRGB
+mediumPurple3           :: DRGB
+mediumPurple4           :: DRGB
+mediumPurple1           = RGB3 0.67   0.51  1
+mediumPurple2           = RGB3 0.624   0.475   0.932
+mediumPurple3           = RGB3 0.536   0.408   0.804
+mediumPurple4           = RGB3 0.365   0.28   0.545
+
+mistyRose1              :: DRGB
+mistyRose2              :: DRGB
+mistyRose3              :: DRGB
+mistyRose4              :: DRGB
+mistyRose1              = RGB3 1   0.894   0.884
+mistyRose2              = RGB3 0.932   0.835   0.824
+mistyRose3              = RGB3 0.804   0.716   0.71
+mistyRose4              = RGB3 0.545   0.49   0.484
+
+navajoWhite1            :: DRGB
+navajoWhite2            :: DRGB
+navajoWhite3            :: DRGB
+navajoWhite4            :: DRGB
+navajoWhite1            = RGB3 1   0.87   0.68
+navajoWhite2            = RGB3 0.932   0.81   0.63
+navajoWhite3            = RGB3 0.804   0.7   0.545
+navajoWhite4            = RGB3 0.545   0.475   0.37
+
+oliveDrab1              :: DRGB
+oliveDrab2              :: DRGB
+oliveDrab3              :: DRGB
+oliveDrab4              :: DRGB
+oliveDrab1              = RGB3 0.752  1   0.244
+oliveDrab2              = RGB3 0.7   0.932   0.228
+oliveDrab3              = RGB3 0.604   0.804   0.196
+oliveDrab4              = RGB3 0.41   0.545   0.132
+
+orange1                 :: DRGB
+orange2                 :: DRGB
+orange3                 :: DRGB
+orange4                 :: DRGB
+orange1                 = RGB3 1   0.648  0
+orange2                 = RGB3 0.932   0.604  0
+orange3                 = RGB3 0.804   0.52  0
+orange4                 = RGB3 0.545   0.352  0
+
+orangeRed1              :: DRGB
+orangeRed2              :: DRGB
+orangeRed3              :: DRGB
+orangeRed4              :: DRGB
+orangeRed1              = RGB3 1   0.27  0
+orangeRed2              = RGB3 0.932   0.25  0
+orangeRed3              = RGB3 0.804   0.215  0
+orangeRed4              = RGB3 0.545   0.145  0
+
+orchid1                 :: DRGB
+orchid2                 :: DRGB
+orchid3                 :: DRGB
+orchid4                 :: DRGB
+orchid1                 = RGB3 1   0.512   0.98
+orchid2                 = RGB3 0.932   0.48   0.912
+orchid3                 = RGB3 0.804   0.41   0.79
+orchid4                 = RGB3 0.545   0.28   0.536
+
+paleGreen1              :: DRGB
+paleGreen2              :: DRGB
+paleGreen3              :: DRGB
+paleGreen4              :: DRGB
+paleGreen1              = RGB3 0.604  1   0.604
+paleGreen2              = RGB3 0.565   0.932   0.565
+paleGreen3              = RGB3 0.488   0.804   0.488
+paleGreen4              = RGB3 0.33   0.545   0.33
+
+paleTurquoise1          :: DRGB
+paleTurquoise2          :: DRGB
+paleTurquoise3          :: DRGB
+paleTurquoise4          :: DRGB
+paleTurquoise1          = RGB3 0.732  1  1
+paleTurquoise2          = RGB3 0.684   0.932   0.932
+paleTurquoise3          = RGB3 0.59   0.804   0.804
+paleTurquoise4          = RGB3 0.4   0.545   0.545
+
+paleVioletRed1          :: DRGB
+paleVioletRed2          :: DRGB
+paleVioletRed3          :: DRGB
+paleVioletRed4          :: DRGB
+paleVioletRed1          = RGB3 1   0.51   0.67
+paleVioletRed2          = RGB3 0.932   0.475   0.624
+paleVioletRed3          = RGB3 0.804   0.408   0.536
+paleVioletRed4          = RGB3 0.545   0.28   0.365
+
+peachPuff1              :: DRGB
+peachPuff2              :: DRGB
+peachPuff3              :: DRGB
+peachPuff4              :: DRGB
+peachPuff1              = RGB3 1   0.855   0.725
+peachPuff2              = RGB3 0.932   0.796   0.68
+peachPuff3              = RGB3 0.804   0.688   0.585
+peachPuff4              = RGB3 0.545   0.468   0.396
+
+pink1                   :: DRGB
+pink2                   :: DRGB
+pink3                   :: DRGB
+pink4                   :: DRGB
+pink1                   = RGB3 1   0.71   0.772
+pink2                   = RGB3 0.932   0.664   0.72
+pink3                   = RGB3 0.804   0.57   0.62
+pink4                   = RGB3 0.545   0.39   0.424
+
+plum1                   :: DRGB
+plum2                   :: DRGB
+plum3                   :: DRGB
+plum4                   :: DRGB
+plum1                   = RGB3 1   0.732  1
+plum2                   = RGB3 0.932   0.684   0.932
+plum3                   = RGB3 0.804   0.59   0.804
+plum4                   = RGB3 0.545   0.4   0.545
+
+purple1                 :: DRGB
+purple2                 :: DRGB
+purple3                 :: DRGB
+purple4                 :: DRGB
+purple1                 = RGB3 0.608   0.19  1
+purple2                 = RGB3 0.57   0.172   0.932
+purple3                 = RGB3 0.49   0.15   0.804
+purple4                 = RGB3 0.332   0.1   0.545
+
+red1                    :: DRGB
+red2                    :: DRGB
+red3                    :: DRGB
+red4                    :: DRGB
+red1                    = RGB3 1  0  0
+red2                    = RGB3 0.932  0  0
+red3                    = RGB3 0.804  0  0
+red4                    = RGB3 0.545  0  0
+
+rosyBrown1              :: DRGB
+rosyBrown2              :: DRGB
+rosyBrown3              :: DRGB
+rosyBrown4              :: DRGB
+rosyBrown1              = RGB3 1   0.756   0.756
+rosyBrown2              = RGB3 0.932   0.705   0.705
+rosyBrown3              = RGB3 0.804   0.608   0.608
+rosyBrown4              = RGB3 0.545   0.41   0.41
+
+royalBlue1              :: DRGB
+royalBlue2              :: DRGB
+royalBlue3              :: DRGB
+royalBlue4              :: DRGB
+royalBlue1              = RGB3 0.284   0.464  1
+royalBlue2              = RGB3 0.264   0.43   0.932
+royalBlue3              = RGB3 0.228   0.372   0.804
+royalBlue4              = RGB3 0.152   0.25   0.545
+
+salmon1                 :: DRGB
+salmon2                 :: DRGB
+salmon3                 :: DRGB
+salmon4                 :: DRGB
+salmon1                 = RGB3 1   0.55   0.41
+salmon2                 = RGB3 0.932   0.51   0.385
+salmon3                 = RGB3 0.804   0.44   0.33
+salmon4                 = RGB3 0.545   0.298   0.224
+
+seaGreen1               :: DRGB
+seaGreen2               :: DRGB
+seaGreen3               :: DRGB
+seaGreen4               :: DRGB
+seaGreen1               = RGB3 0.33  1   0.624
+seaGreen2               = RGB3 0.305   0.932   0.58
+seaGreen3               = RGB3 0.264   0.804   0.5
+seaGreen4               = RGB3 0.18   0.545   0.34
+
+seashell1               :: DRGB
+seashell2               :: DRGB
+seashell3               :: DRGB
+seashell4               :: DRGB
+seashell1               = RGB3 1   0.96   0.932
+seashell2               = RGB3 0.932   0.898   0.87
+seashell3               = RGB3 0.804   0.772   0.75
+seashell4               = RGB3 0.545   0.525   0.51
+
+sienna1                 :: DRGB
+sienna2                 :: DRGB
+sienna3                 :: DRGB
+sienna4                 :: DRGB
+sienna1                 = RGB3 1   0.51   0.28
+sienna2                 = RGB3 0.932   0.475   0.26
+sienna3                 = RGB3 0.804   0.408   0.224
+sienna4                 = RGB3 0.545   0.28   0.15
+
+skyBlue1                :: DRGB
+skyBlue2                :: DRGB
+skyBlue3                :: DRGB
+skyBlue4                :: DRGB
+skyBlue1                = RGB3 0.53   0.808  1
+skyBlue2                = RGB3 0.494   0.752   0.932
+skyBlue3                = RGB3 0.424   0.65   0.804
+skyBlue4                = RGB3 0.29   0.44   0.545
+
+slateBlue1              :: DRGB
+slateBlue2              :: DRGB
+slateBlue3              :: DRGB
+slateBlue4              :: DRGB
+slateBlue1              = RGB3 0.512   0.435  1
+slateBlue2              = RGB3 0.48   0.404   0.932
+slateBlue3              = RGB3 0.41   0.35   0.804
+slateBlue4              = RGB3 0.28   0.235   0.545
+
+slateGray1              :: DRGB
+slateGray2              :: DRGB
+slateGray3              :: DRGB
+slateGray4              :: DRGB
+slateGray1              = RGB3 0.776   0.888  1
+slateGray2              = RGB3 0.725   0.828   0.932
+slateGray3              = RGB3 0.624   0.712   0.804
+slateGray4              = RGB3 0.424   0.484   0.545
+
+snow1                   :: DRGB
+snow2                   :: DRGB
+snow3                   :: DRGB
+snow4                   :: DRGB
+snow1                   = RGB3 1   0.98   0.98
+snow2                   = RGB3 0.932   0.912   0.912
+snow3                   = RGB3 0.804   0.79   0.79
+snow4                   = RGB3 0.545   0.536   0.536
+
+springGreen1            :: DRGB
+springGreen2            :: DRGB
+springGreen3            :: DRGB
+springGreen4            :: DRGB
+springGreen1            = RGB3 0  1   0.498
+springGreen2            = RGB3 0   0.932   0.464
+springGreen3            = RGB3 0   0.804   0.4
+springGreen4            = RGB3 0   0.545   0.27
+
+steelBlue1              :: DRGB
+steelBlue2              :: DRGB
+steelBlue3              :: DRGB
+steelBlue4              :: DRGB
+steelBlue1              = RGB3 0.39   0.72  1
+steelBlue2              = RGB3 0.36   0.675   0.932
+steelBlue3              = RGB3 0.31   0.58   0.804
+steelBlue4              = RGB3 0.21   0.392   0.545
+
+tan1                    :: DRGB
+tan2                    :: DRGB
+tan3                    :: DRGB
+tan4                    :: DRGB
+tan1                    = RGB3 1   0.648   0.31
+tan2                    = RGB3 0.932   0.604   0.288
+tan3                    = RGB3 0.804   0.52   0.248
+tan4                    = RGB3 0.545   0.352   0.17
+
+thistle1                :: DRGB
+thistle2                :: DRGB
+thistle3                :: DRGB
+thistle4                :: DRGB
+thistle1                = RGB3 1   0.884  1
+thistle2                = RGB3 0.932   0.824   0.932
+thistle3                = RGB3 0.804   0.71   0.804
+thistle4                = RGB3 0.545   0.484   0.545
+
+tomato1                 :: DRGB
+tomato2                 :: DRGB
+tomato3                 :: DRGB
+tomato4                 :: DRGB
+tomato1                 = RGB3 1   0.39   0.28
+tomato2                 = RGB3 0.932   0.36   0.26
+tomato3                 = RGB3 0.804   0.31   0.224
+tomato4                 = RGB3 0.545   0.21   0.15
+
+turquoise1              :: DRGB
+turquoise2              :: DRGB
+turquoise3              :: DRGB
+turquoise4              :: DRGB
+turquoise1              = RGB3 0   0.96  1
+turquoise2              = RGB3 0   0.898   0.932
+turquoise3              = RGB3 0   0.772   0.804
+turquoise4              = RGB3 0   0.525   0.545
+
+violetRed1              :: DRGB
+violetRed2              :: DRGB
+violetRed3              :: DRGB
+violetRed4              :: DRGB
+violetRed1              = RGB3 1   0.244   0.59
+violetRed2              = RGB3 0.932   0.228   0.55
+violetRed3              = RGB3 0.804   0.196   0.47
+violetRed4              = RGB3 0.545   0.132   0.32
+
+wheat1                  :: DRGB
+wheat2                  :: DRGB
+wheat3                  :: DRGB
+wheat4                  :: DRGB
+wheat1                  = RGB3 1   0.905   0.73
+wheat2                  = RGB3 0.932   0.848   0.684
+wheat3                  = RGB3 0.804   0.73   0.59
+wheat4                  = RGB3 0.545   0.494   0.4
+
+yellow1                 :: DRGB
+yellow2                 :: DRGB
+yellow3                 :: DRGB
+yellow4                 :: DRGB
+yellow1                 = RGB3 1  1  0
+yellow2                 = RGB3 0.932   0.932  0
+yellow3                 = RGB3 0.804   0.804  0
+yellow4                 = RGB3 0.545   0.545  0
+
+gray0                   :: DRGB
+green0                  :: DRGB
+grey0                   :: DRGB
+maroon0                 :: DRGB
+purple0                 :: DRGB
+gray0                   = RGB3 0.745  0.745  0.745
+green0                  = RGB3 0      1      0
+grey0                   = RGB3 0.745  0.745  0.745
+maroon0                 = RGB3 0.69   0.19   0.376
+purple0                 = RGB3 0.628  0.125  0.94
+
+
+
+
diff --git a/wumpus-basic.cabal b/wumpus-basic.cabal
new file mode 100644
--- /dev/null
+++ b/wumpus-basic.cabal
@@ -0,0 +1,52 @@
+name:             wumpus-basic
+version:          0.1.1
+license:          BSD3
+license-file:     LICENSE
+copyright:        Stephen Tetley <stephen.tetley@gmail.com>
+maintainer:       Stephen Tetley <stephen.tetley@gmail.com>
+homepage:         http://code.google.com/p/copperbox/
+category:         Graphics
+synopsis:         Common drawing utilities built on wumpus-core.
+description:
+  .
+  Very preliminary release...
+  .
+  .
+build-type:         Simple
+stability:          highly unstable
+cabal-version:      >= 1.2
+
+extra-source-files:
+  CHANGES,
+  LICENSE,
+  demo/FontPic.hs
+  
+library
+  hs-source-dirs:     src
+  build-depends:      base            <  5, 
+                      vector-space    >= 0.6,
+                      monadLib        >= 3.6,
+                      wumpus-core     >= 0.20.0
+
+  
+  exposed-modules:
+    Wumpus.Basic.Monads.TraceMonad,
+    Wumpus.Basic.Monads.TurtleMonad,
+    Wumpus.Basic.SafeFonts,
+    Wumpus.Basic.SVGColours,
+    Wumpus.Basic.X11Colours,
+    Wumpus.Basic.Utils.HList,
+    Wumpus.Basic.VersionNumber
+
+  other-modules:
+
+  extensions:
+    
+
+  ghc-options:
+  
+  includes: 
+  
+
+  
+  
