diff --git a/app/timeseries/Main.hs b/app/timeseries/Main.hs
new file mode 100644
--- /dev/null
+++ b/app/timeseries/Main.hs
@@ -0,0 +1,110 @@
+{-# language OverloadedStrings #-}
+module Main where
+
+-- import Control.Arrow ((***), (&&&))
+
+import Graphics.Rendering.Plot.Light
+import Graphics.Rendering.Plot.Light.PlotTypes
+  
+import qualified Data.Attoparsec.Text as A
+import qualified Attoparsec.Time as AT
+import qualified Data.Text as T 
+import qualified Data.Text.IO as T (readFile, writeFile)
+import Data.Scientific (Scientific, toRealFloat)
+import Text.Blaze.Svg.Renderer.String (renderSvg)
+import qualified Data.Colour.Names as C
+
+import Control.Applicative ((<|>))
+import Data.Time (Day, TimeOfDay)
+
+
+
+
+fname = "data/forex_small"
+
+xPlot = 800
+yPlot = 600
+fnameOut = "data/forex_plot_3.svg"
+
+
+main = do
+  d <- T.readFile fname
+  let pd = A.parseOnly parseFxDataset d
+  case pd of Left e -> error e
+             Right d -> -- print $ tsAxis (toFloat . rateOpen) xPlot yPlot 3 C.blue (-45) d
+               do
+               let svg_t = svgHeader (mkFrameOrigin xPlot yPlot) $ tsAxis avgTs xPlot yPlot 3 C.black C.red (-45) d
+               -- putStrLn $ renderSvg svg_t
+               T.writeFile fnameOut $ T.pack $ renderSvg svg_t
+
+toFloat :: Scientific -> Float
+toFloat x = toRealFloat x :: Float
+
+
+avgTs :: FxRow Scientific -> Float
+avgTs x = 0.5 * (h + l) where
+  h = toFloat (rateHigh x)
+  l = toFloat (rateLow x)
+
+
+
+
+
+-- Forex time series parsers - related
+
+
+data FxRow a  = FxRow {
+    rateOpen :: a
+  , rateHigh :: a
+  , rateLow :: a
+  , rateClose :: a
+               } deriving (Eq, Show)
+
+
+space, comma :: A.Parser Char
+space = A.char ' '
+comma = A.char ','
+
+-- | Parse a row of numbers, separated by `sep`
+rowNums :: A.Parser s -> A.Parser [Scientific]
+rowNums sep = A.sepBy A.scientific sep
+
+rowNumSpace :: A.Parser [Scientific]
+rowNumSpace = rowNums space
+
+-- | parse a grid of numbers, separated by `sep`
+gridNum :: A.Parser s -> A.Parser [[Scientific]]
+gridNum sep = A.sepBy (rowNums sep) A.endOfLine
+
+
+
+
+
+
+
+
+
+-- * Forex dataset
+
+parseFxDataset :: A.Parser [TsPoint (FxRow Scientific)]
+parseFxDataset = A.sepBy parseFxRow A.endOfLine
+
+parseFxRow :: A.Parser (TsPoint (FxRow Scientific))
+parseFxRow = do
+  (d, t) <- parseDateTime
+  _ <- comma
+  open <- A.scientific
+  _ <- comma
+  hi <- A.scientific
+  _ <- comma
+  lo <- A.scientific
+  _ <- comma
+  close <- A.scientific
+  pure $ Tsp (Tick d t) (FxRow open hi lo close)
+
+parseDateTime :: A.Parser (Day, TimeOfDay)
+parseDateTime = do
+  d <- AT.dayInISO8601
+  _ <- space
+  t <- AT.timeOfDayInISO8601
+  return (d, t)
diff --git a/plot-light.cabal b/plot-light.cabal
--- a/plot-light.cabal
+++ b/plot-light.cabal
@@ -1,5 +1,5 @@
 name:                plot-light
-version:             0.1.2
+version:             0.2
 synopsis:            A lightweight plotting library, exporting to SVG
 description:         A lightweight plotting library, exporting to SVG
 homepage:            https://github.com/ocramz/plot-light
@@ -21,21 +21,20 @@
   default-language:    Haskell2010
   ghc-options:         -Wall
   hs-source-dirs:      src
-  exposed-modules:     Graphics.Rendering.Plot.Light                    
+  exposed-modules:     Graphics.Rendering.Plot.Light
+                       Graphics.Rendering.Plot.Light.PlotTypes
   other-modules:       Graphics.Rendering.Plot.Light.Internal
-                       Graphics.Rendering.Plot.Light.IO.Text
                        Graphics.Rendering.Plot.Light.PlotTypes.Heatmap
                        Graphics.Rendering.Plot.Light.PlotTypes.Scatter
                        Graphics.Rendering.Plot.Light.PlotTypes.TimeSeries
                        Graphics.Rendering.Plot.Light.PlotTypes.TimeSeries.Candlestick
                        Data.TimeSeries
-                       Data.TimeSeries.Forex
                        Graphics.Rendering.Plot.Light.Internal.Geometry
   build-depends:       base >= 4.7 && < 5
                      , time
-                     , attoparsec-time                     
+                     -- , attoparsec-time                     
                      -- , vector
-                     , attoparsec
+                     -- , attoparsec
                      , scientific
                      , text
                      , colour
@@ -45,18 +44,20 @@
                      -- , QuickCheck
                                           
 
--- executable plot-light
---   default-language:    Haskell2010
---   ghc-options:         -threaded -rtsopts -with-rtsopts=-N
---   hs-source-dirs:      app/timeseries
---   main-is:             Main.hs
---   build-depends:       base
---                      , plot-light
---                      -- , attoparsec
---                      -- , text
---                      -- , colour
---                      -- , blaze-svg
---                      -- , scientific
+executable plot-light
+  default-language:    Haskell2010
+  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
+  hs-source-dirs:      app/timeseries
+  main-is:             Main.hs
+  build-depends:       base
+                     , plot-light
+                     , attoparsec
+                     , attoparsec-time
+                     , time
+                     , text
+                     , colour
+                     , blaze-svg
+                     , scientific
 
 test-suite spec
   default-language:    Haskell2010
diff --git a/src/Data/TimeSeries/Forex.hs b/src/Data/TimeSeries/Forex.hs
deleted file mode 100644
--- a/src/Data/TimeSeries/Forex.hs
+++ /dev/null
@@ -1,13 +0,0 @@
-module Data.TimeSeries.Forex where
-
-
-
-data FxRow a  = FxRow {
-    rateOpen :: a
-  , rateHigh :: a
-  , rateLow :: a
-  , rateClose :: a
-               } deriving (Eq, Show)
-
-
-
diff --git a/src/Graphics/Rendering/Plot/Light/IO/Text.hs b/src/Graphics/Rendering/Plot/Light/IO/Text.hs
deleted file mode 100644
--- a/src/Graphics/Rendering/Plot/Light/IO/Text.hs
+++ /dev/null
@@ -1,65 +0,0 @@
-module Graphics.Rendering.Plot.Light.IO.Text where
-
-import Data.Text
-import qualified Data.Attoparsec.Text as A
-import qualified Data.Attoparsec.Internal.Types as AP (Parser)
-import Data.Scientific
-
-import Control.Applicative ((<|>))
-import Data.Time (Day, TimeOfDay)
-import qualified Attoparsec.Time as AT
-
-import Data.TimeSeries
-import Data.TimeSeries.Forex
-
-
-
-space, comma :: A.Parser Char
-space = A.char ' '
-comma = A.char ','
-
--- | Parse a row of numbers, separated by `sep`
-rowNums :: AP.Parser Text s -> AP.Parser Text [Scientific]
-rowNums sep = A.sepBy A.scientific sep
-
-rowNumSpace :: AP.Parser Text [Scientific]
-rowNumSpace = rowNums space
-
--- | parse a grid of numbers, separated by `sep`
-gridNum :: AP.Parser Text s -> AP.Parser Text [[Scientific]]
-gridNum sep = A.sepBy (rowNums sep) A.endOfLine
-
-
-
-
-
-
-
-
-
--- * Forex dataset
-
-parseFxDataset :: AP.Parser Text [TsPoint (FxRow Scientific)]
-parseFxDataset = A.sepBy parseFxRow A.endOfLine
-
-parseFxRow :: AP.Parser Text (TsPoint (FxRow Scientific))
-parseFxRow = do
-  (d, t) <- parseDateTime
-  _ <- comma
-  open <- A.scientific
-  _ <- comma
-  hi <- A.scientific
-  _ <- comma
-  lo <- A.scientific
-  _ <- comma
-  close <- A.scientific
-  pure $ Tsp (Tick d t) (FxRow open hi lo close)
-
-parseDateTime :: AP.Parser Text (Day, TimeOfDay)
-parseDateTime = do
-  d <- AT.dayInISO8601
-  _ <- space
-  t <- AT.timeOfDayInISO8601
-  return (d, t)
-
-
diff --git a/src/Graphics/Rendering/Plot/Light/PlotTypes.hs b/src/Graphics/Rendering/Plot/Light/PlotTypes.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Rendering/Plot/Light/PlotTypes.hs
@@ -0,0 +1,5 @@
+module Graphics.Rendering.Plot.Light.PlotTypes (module X) where
+
+import Graphics.Rendering.Plot.Light.PlotTypes.TimeSeries as X
+
+import Data.TimeSeries as X
