diff --git a/casr-logbook.cabal b/casr-logbook.cabal
--- a/casr-logbook.cabal
+++ b/casr-logbook.cabal
@@ -1,5 +1,5 @@
 name:               casr-logbook
-version:            0.0.12
+version:            0.1.0
 license:            OtherLicense
 license-file:       LICENSE
 author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
@@ -34,47 +34,39 @@
   build-depends:
                     base < 5 && >= 4.8
                     , containers < 0.6 && >= 0.4
+                    , digit < 3 && >= 0.2.8
+                    , time < 2 && >= 1.5
+                    , lens < 5 && >= 4
                     
   ghc-options:
                     -Wall
 
+  default-extensions:
+                    NoImplicitPrelude
+
   hs-source-dirs:
                     src
 
   exposed-modules:
                     Data.Aviation.Casr.Logbook
+                    Data.Aviation.Casr.Logbook.Rating
+                    Data.Aviation.Casr.Logbook.Aviator
+                    Data.Aviation.Casr.Logbook.Engine
                     Data.Aviation.Casr.Logbook.Aircraft
-                    Data.Aviation.Casr.Logbook.ARN
-                    Data.Aviation.Casr.Logbook.Date
+                    Data.Aviation.Casr.Logbook.TimeAmount
                     Data.Aviation.Casr.Logbook.DayNight
-                    Data.Aviation.Casr.Logbook.DOB
-                    Data.Aviation.Casr.Logbook.Engine
-                    Data.Aviation.Casr.Logbook.Entries
-                    Data.Aviation.Casr.Logbook.Entry
-                    Data.Aviation.Casr.Logbook.ExamEntry
-                    Data.Aviation.Casr.Logbook.FlightEntry
+                    Data.Aviation.Casr.Logbook.Location
+                    Data.Aviation.Casr.Logbook.Command
+                    Data.Aviation.Casr.Logbook.Time
+                    Data.Aviation.Casr.Logbook.FlightPoint
                     Data.Aviation.Casr.Logbook.FlightPath
-                    Data.Aviation.Casr.Logbook.Hours
-                    Data.Aviation.Casr.Logbook.Image
-                    Data.Aviation.Casr.Logbook.Images
-                    Data.Aviation.Casr.Logbook.ImageType
-                    Data.Aviation.Casr.Logbook.Log
-                    Data.Aviation.Casr.Logbook.Printer.Markdown
-                    Data.Aviation.Casr.Logbook.Printer.Html
-                    Data.Aviation.Casr.Logbook.Name
-                    Data.Aviation.Casr.Logbook.PiC
-                    Data.Aviation.Casr.Logbook.PoB
-                    Data.Aviation.Casr.Logbook.Sequence
-                    Data.Aviation.Casr.Logbook.Totals
-                    Data.Aviation.Casr.Logbook.TrackLog
-                    Data.Aviation.Casr.Logbook.TrackLogs
-                    Data.Aviation.Casr.Logbook.TrackLogType
-                    Data.Aviation.Casr.Logbook.Video
-                    Data.Aviation.Casr.Logbook.Videos
-                    Data.Aviation.Casr.Logbook.VideoType
-                    Data.Aviation.Casr.Logbook.Visualisation
-                    Data.Aviation.Casr.Logbook.Visualisations
-                    Data.Aviation.Casr.Logbook.VisualisationType
+                    Data.Aviation.Casr.Logbook.AircraftFlight
+                    Data.Aviation.Casr.Logbook.SimulatorFlight
+                    Data.Aviation.Casr.Logbook.Exam
+                    Data.Aviation.Casr.Logbook.Briefing
+                    Data.Aviation.Casr.Logbook.Entry
+                    Data.Aviation.Casr.Logbook.Entries
+                    Data.Aviation.Casr.Logbook.Logbook
 
 test-suite doctests
   type:
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+0.1.0
+
+* More structure to a logbook.
+
 0.0.12
 
 * Fix exam output for HTML.
diff --git a/src/Data/Aviation/Casr/Logbook.hs b/src/Data/Aviation/Casr/Logbook.hs
--- a/src/Data/Aviation/Casr/Logbook.hs
+++ b/src/Data/Aviation/Casr/Logbook.hs
@@ -2,34 +2,21 @@
   module L
 ) where
 
+import Data.Aviation.Casr.Logbook.Logbook as L
+import Data.Aviation.Casr.Logbook.Rating as L
+import Data.Aviation.Casr.Logbook.Aviator as L
+import Data.Aviation.Casr.Logbook.Engine as L
 import Data.Aviation.Casr.Logbook.Aircraft as L
-import Data.Aviation.Casr.Logbook.ARN as L
-import Data.Aviation.Casr.Logbook.Date as L
+import Data.Aviation.Casr.Logbook.TimeAmount as L
 import Data.Aviation.Casr.Logbook.DayNight as L
-import Data.Aviation.Casr.Logbook.DOB as L
-import Data.Aviation.Casr.Logbook.Engine as L
-import Data.Aviation.Casr.Logbook.Entries as L
-import Data.Aviation.Casr.Logbook.Entry as L
-import Data.Aviation.Casr.Logbook.ExamEntry as L
+import Data.Aviation.Casr.Logbook.Location as L
+import Data.Aviation.Casr.Logbook.Command as L
+import Data.Aviation.Casr.Logbook.Time as L
+import Data.Aviation.Casr.Logbook.FlightPoint as L
 import Data.Aviation.Casr.Logbook.FlightPath as L
-import Data.Aviation.Casr.Logbook.Hours as L
-import Data.Aviation.Casr.Logbook.Image as L
-import Data.Aviation.Casr.Logbook.Images as L
-import Data.Aviation.Casr.Logbook.ImageType as L
-import Data.Aviation.Casr.Logbook.Log as L
-import Data.Aviation.Casr.Logbook.Printer.Html as L
-import Data.Aviation.Casr.Logbook.Printer.Markdown as L
-import Data.Aviation.Casr.Logbook.Name as L
-import Data.Aviation.Casr.Logbook.PiC as L
-import Data.Aviation.Casr.Logbook.PoB as L
-import Data.Aviation.Casr.Logbook.Sequence as L
-import Data.Aviation.Casr.Logbook.Totals as L
-import Data.Aviation.Casr.Logbook.TrackLog as L
-import Data.Aviation.Casr.Logbook.TrackLogs as L
-import Data.Aviation.Casr.Logbook.TrackLogType as L
-import Data.Aviation.Casr.Logbook.Video as L
-import Data.Aviation.Casr.Logbook.Videos as L
-import Data.Aviation.Casr.Logbook.VideoType as L
-import Data.Aviation.Casr.Logbook.Visualisation as L
-import Data.Aviation.Casr.Logbook.Visualisations as L
-import Data.Aviation.Casr.Logbook.VisualisationType as L
+import Data.Aviation.Casr.Logbook.AircraftFlight as L
+import Data.Aviation.Casr.Logbook.SimulatorFlight as L
+import Data.Aviation.Casr.Logbook.Exam as L
+import Data.Aviation.Casr.Logbook.Briefing as L
+import Data.Aviation.Casr.Logbook.Entry as L
+import Data.Aviation.Casr.Logbook.Entries as L
diff --git a/src/Data/Aviation/Casr/Logbook/ARN.hs b/src/Data/Aviation/Casr/Logbook/ARN.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/ARN.hs
+++ /dev/null
@@ -1,24 +0,0 @@
-module Data.Aviation.Casr.Logbook.ARN (
-  ARN(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.String
-
-newtype ARN =
-  ARN
-    String
-  deriving (Eq, Ord, Show)
-
-instance IsString ARN where
-  fromString =
-    ARN
-    
-instance Markdown ARN where
-  markdown (ARN s) =
-    "* Aviation Reference Number: **`" ++ markdown s ++ "`**\n"
-
-instance Html ARN where
-  html (ARN s) =
-    "<span class=\"heading arnheading\">ARN: </span><span class=\"arninfo\">" ++ html s ++ "</span>"
diff --git a/src/Data/Aviation/Casr/Logbook/Aircraft.hs b/src/Data/Aviation/Casr/Logbook/Aircraft.hs
--- a/src/Data/Aviation/Casr/Logbook/Aircraft.hs
+++ b/src/Data/Aviation/Casr/Logbook/Aircraft.hs
@@ -1,69 +1,44 @@
-module Data.Aviation.Casr.Logbook.Aircraft (
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aviation.Casr.Logbook.Aircraft(
   Aircraft(..)
+, singleaircraft
+, multiaircraft
 ) where
 
-import Data.Aviation.Casr.Logbook.Engine
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
+import Control.Lens(makeClassy)
+import Data.Aviation.Casr.Logbook.Engine(Engine(Single, Multi))
+import Data.Eq(Eq)
+import Data.Ord(Ord)
+import Data.String(String)
+import Prelude(Show)
 
 data Aircraft =
-  Aircraft
-    String -- type
-    String -- registration
-    Engine
-  deriving (Eq, Ord, Show)
+  Aircraft {
+    _aircraftType :: String
+  , _aircraftRegistration :: String
+  , _aircraftEngine :: Engine
+  } deriving (Eq, Ord, Show)
 
-instance Markdown Aircraft where
-  markdown (Aircraft t r e) =
-    concat
-      [
-        "* Aircraft"
-      , "\n  * Type: **"
-      , markdown t
-      , "**\n  * Registration: **`"
-      , markdown r
-      , "`**\n  * Engine: **`"
-      , markdown e
-      , "`**\n"
-      ]
+makeClassy ''Aircraft
 
-instance Html Aircraft where
-  html (Aircraft t r e) =
-    concat
-      [
-        "<span class=\"heading aircraftheading\">"
-      , "Aircraft"
-      , "</span>"
-      , ": "
-      , "<div class=\"info aircraftinfo\">"
-      , "<ul>"
-      , "<li>"
-      , "<span class=\"heading aircrafttypeheading\">"
-      , "Type"
-      , "</span>"
-      , ": "
-      , "<span class=\"info aircrafttypeinfo\">"
-      , html t
-      , "</span>"
-      , "</li>"
-      , "<li>"
-      , "<span class=\"heading aircraftregistrationheading\">"
-      , "Registration"
-      , "</span>"
-      , ": "
-      , "<span class=\"info aircraftregistrationinfo\">"
-      , html r
-      , "</span>"
-      , "</li>"
-      , "<li>"
-      , "<span class=\"heading aircraftengineheading\">"
-      , "Engine"
-      , "</span>"
-      , ": "
-      , "<span class=\"info aircraftengineinfo\">"
-      , html e
-      , "</span>"
-      , "</li>"
-      , "</ul>"
-      , "</div>"
-      ]
+singleaircraft ::
+  String
+  -> String
+  -> Aircraft
+singleaircraft t r =
+  Aircraft
+    t
+    r
+    Single
+
+multiaircraft ::
+  String
+  -> String
+  -> Aircraft
+multiaircraft t r =
+  Aircraft
+    t
+    r
+    Multi
diff --git a/src/Data/Aviation/Casr/Logbook/AircraftFlight.hs b/src/Data/Aviation/Casr/Logbook/AircraftFlight.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/Casr/Logbook/AircraftFlight.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aviation.Casr.Logbook.AircraftFlight(
+  AircraftFlight(..)
+, icusonlyflight
+, noif_icusonlyflight
+, dualonlyflight
+, noif_dualonlyflight
+, commandonlyflight
+, noif_commandonlyflight
+) where
+
+import Control.Lens(makeClassy)
+import Data.Aviation.Casr.Logbook.Aircraft(Aircraft)
+import Data.Aviation.Casr.Logbook.Command(Command(ICUS, Dual, InCommand))
+import Data.Aviation.Casr.Logbook.DayNight(DayNight)
+import Data.Aviation.Casr.Logbook.FlightPath(FlightPath)
+import Data.Aviation.Casr.Logbook.Aviator(Aviator)
+import Data.Aviation.Casr.Logbook.TimeAmount(TimeAmount, zerotimeamount)
+import Data.Eq(Eq)
+import Data.Ord(Ord)
+import Data.String(String)
+import Prelude(Show)
+
+data AircraftFlight =
+  AircraftFlight {
+    _aircraftflightname :: String
+  , _flightaircraft :: Aircraft
+  , _command :: Command
+  , _daynight :: DayNight
+  , _flightpath :: FlightPath
+  , _flightothercrew :: [Aviator]
+  , _instrumentflightTime :: TimeAmount
+  } deriving (Eq, Ord, Show)
+
+makeClassy ''AircraftFlight
+
+icusonlyflight ::
+  String
+  -> Aircraft
+  -> Aviator
+  -> DayNight
+  -> FlightPath
+  -> TimeAmount
+  -> AircraftFlight
+icusonlyflight n a v t p i =
+  AircraftFlight
+    n
+    a
+    (ICUS v)
+    t
+    p
+    []
+    i
+
+noif_icusonlyflight ::
+  String
+  -> Aircraft
+  -> Aviator
+  -> DayNight
+  -> FlightPath
+  -> AircraftFlight
+noif_icusonlyflight n a v t p =
+  icusonlyflight
+    n
+    a
+    v
+    t
+    p
+    zerotimeamount
+
+dualonlyflight ::
+  String
+  -> Aircraft
+  -> Aviator
+  -> DayNight
+  -> FlightPath
+  -> TimeAmount
+  -> AircraftFlight
+dualonlyflight n a v t p i =
+  AircraftFlight
+    n
+    a
+    (Dual v)
+    t
+    p
+    []
+    i
+
+noif_dualonlyflight ::
+  String
+  -> Aircraft
+  -> Aviator
+  -> DayNight
+  -> FlightPath
+  -> AircraftFlight
+noif_dualonlyflight n a v t p =
+  dualonlyflight
+    n
+    a
+    v
+    t
+    p
+    zerotimeamount
+
+commandonlyflight ::
+  String
+  -> Aircraft
+  -> DayNight
+  -> FlightPath
+  -> TimeAmount
+  -> AircraftFlight
+commandonlyflight n a t p i =
+  AircraftFlight
+    n
+    a
+    InCommand
+    t
+    p
+    []
+    i
+
+noif_commandonlyflight ::
+  String
+  -> Aircraft
+  -> DayNight
+  -> FlightPath
+  -> AircraftFlight
+noif_commandonlyflight n a t p =
+  commandonlyflight
+    n
+    a
+    t
+    p
+    zerotimeamount
diff --git a/src/Data/Aviation/Casr/Logbook/Aviator.hs b/src/Data/Aviation/Casr/Logbook/Aviator.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/Casr/Logbook/Aviator.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aviation.Casr.Logbook.Aviator(
+  Aviator(..)
+, aviatorwithname
+, nodobaviator
+, dobaviator
+) where
+
+import Control.Lens(makeClassy)
+import Data.Aviation.Casr.Logbook.Rating(Rating)
+import Data.Eq(Eq)
+import Data.Ord(Ord)
+import Data.Digit(Digit)
+import Data.Maybe(Maybe(Nothing, Just))
+import Data.String(String)
+import Data.Time(Day)
+import Prelude(Show)
+
+data Aviator =
+  Aviator {
+    _surname :: String
+  , _firstname :: String
+  , _arn :: [Digit]
+  , _dob :: Maybe Day
+  , _ratings :: [Rating]
+  } deriving (Eq, Ord, Show)
+
+makeClassy ''Aviator
+
+aviatorwithname ::
+  String
+  -> String
+  -> Aviator
+aviatorwithname s f =
+  Aviator
+    s
+    f
+    []
+    Nothing
+    []
+
+nodobaviator ::
+  String
+  -> String
+  -> [Digit]
+  -> [Rating]
+  -> Aviator
+nodobaviator s f r =
+  Aviator
+    s 
+    f
+    r
+    Nothing
+
+dobaviator ::
+  String
+  -> String
+  -> [Digit]
+  -> Day
+  -> [Rating]
+  -> Aviator
+dobaviator s f r b =
+  Aviator
+    s 
+    f
+    r
+    (Just b)
diff --git a/src/Data/Aviation/Casr/Logbook/Briefing.hs b/src/Data/Aviation/Casr/Logbook/Briefing.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/Casr/Logbook/Briefing.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aviation.Casr.Logbook.Briefing(
+  Briefing(..)
+) where
+  
+import Control.Lens(makeClassy)
+import Data.Aviation.Casr.Logbook.Aviator(Aviator)
+import Data.Aviation.Casr.Logbook.Location(Location)
+import Data.Aviation.Casr.Logbook.Time(Time)
+import Data.Aviation.Casr.Logbook.TimeAmount(TimeAmount)
+import Data.Eq(Eq)
+import Data.Ord(Ord)
+import Data.String(String)
+import Prelude(Show)
+
+data Briefing =
+  Briefing {
+    _briefingName :: String
+  , _briefingLocation :: Location
+  , _briefingTime :: Time
+  , _briefer :: Aviator
+  , _briefingTimeAmount :: TimeAmount
+  } deriving (Eq, Ord, Show)
+
+makeClassy ''Briefing
diff --git a/src/Data/Aviation/Casr/Logbook/Command.hs b/src/Data/Aviation/Casr/Logbook/Command.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/Casr/Logbook/Command.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aviation.Casr.Logbook.Command(
+  Command(..)
+) where
+
+import Control.Lens(makeClassyPrisms)
+import Data.Aviation.Casr.Logbook.Aviator(Aviator)
+import Data.Eq(Eq)
+import Data.Ord(Ord)
+import Prelude(Show)
+
+data Command =
+  ICUS Aviator
+  | Dual Aviator
+  | InCommand
+  deriving (Eq, Ord, Show)
+
+makeClassyPrisms ''Command
diff --git a/src/Data/Aviation/Casr/Logbook/DOB.hs b/src/Data/Aviation/Casr/Logbook/DOB.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/DOB.hs
+++ /dev/null
@@ -1,24 +0,0 @@
-module Data.Aviation.Casr.Logbook.DOB (
-  DOB(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.String
-
-newtype DOB =
-  DOB
-    String
-  deriving (Eq, Ord, Show)
-
-instance IsString DOB where
-  fromString =
-    DOB
-
-instance Markdown DOB where
-  markdown (DOB s) =
-    "* Date of Birth: **`" ++ markdown s ++ "`**\n"
-
-instance Html DOB where
-  html (DOB s) =
-    "<span class=\"heading dobheading\">Date of Birth: </span><span class=\"dobinfo\">" ++ html s ++ "</span>"
diff --git a/src/Data/Aviation/Casr/Logbook/Date.hs b/src/Data/Aviation/Casr/Logbook/Date.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/Date.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-module Data.Aviation.Casr.Logbook.Date (
-  Date(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.String
-    
-newtype Date =
-  Date
-    String
-  deriving (Eq, Ord, Show)
-
-instance IsString Date where
-  fromString =
-    Date
-    
-instance Markdown Date where
-  markdown (Date s) =
-    "* Date: **`" ++ s ++ "`**\n"
-
-instance Html Date where
-  html (Date s) =
-    concat
-      [
-        "<span class=\"heading dateheading\">"
-      , "Date"
-      , "</span>"
-      , ": "
-      , "<span class=\"info dateinfo\">"
-      , html s
-      , "</span>"
-      ]
diff --git a/src/Data/Aviation/Casr/Logbook/DayNight.hs b/src/Data/Aviation/Casr/Logbook/DayNight.hs
--- a/src/Data/Aviation/Casr/Logbook/DayNight.hs
+++ b/src/Data/Aviation/Casr/Logbook/DayNight.hs
@@ -1,40 +1,38 @@
-module Data.Aviation.Casr.Logbook.DayNight (
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aviation.Casr.Logbook.DayNight(
   DayNight(..)
+, day
+, night
 ) where
 
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
+import Control.Lens(makeClassy)
+import Data.Aviation.Casr.Logbook.TimeAmount(TimeAmount(TimeAmount), zerotimeamount)
+import Data.Digit(Digit)
+import Data.Eq(Eq)
+import Data.Int(Int)
+import Data.Ord(Ord)
+import Prelude(Show)
 
 data DayNight =
-  Day
-  | Night
-  | DayNight
-  deriving (Eq, Ord, Show)
-    
-instance Markdown DayNight where
-  markdown x =
-    concat
-      [
-        "* Day/Night: **"
-      , case x of
-          Day -> "Day"
-          Night -> "Night"
-          DayNight -> "Day & Night"
-      , "**\n"
-      ]
-    
-instance Html DayNight where
-  html x =
-    concat
-      [
-        "<span class=\"heading daynightheading\">"
-      , "Day/Night"
-      , "</span>"
-      , ": "
-      , "<span class=\"info daynightinfo\">"
-      , case x of
-          Day -> "Day"
-          Night -> "Night"
-          DayNight -> "Day &amp; Night"
-      , "</span>"
-      ]
+  DayNight {
+    _dayDayNight :: TimeAmount
+  , _nightDayNight :: TimeAmount
+  } deriving (Eq, Ord, Show)
+
+makeClassy ''DayNight
+
+day ::
+  Int
+  -> Digit
+  -> DayNight
+day h p =
+  DayNight (TimeAmount h p) zerotimeamount
+
+night ::
+  Int
+  -> Digit
+  -> DayNight
+night h p =
+  DayNight zerotimeamount (TimeAmount h p)
diff --git a/src/Data/Aviation/Casr/Logbook/Engine.hs b/src/Data/Aviation/Casr/Logbook/Engine.hs
--- a/src/Data/Aviation/Casr/Logbook/Engine.hs
+++ b/src/Data/Aviation/Casr/Logbook/Engine.hs
@@ -1,23 +1,18 @@
-module Data.Aviation.Casr.Logbook.Engine (
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aviation.Casr.Logbook.Engine(
   Engine(..)
 ) where
 
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
+import Control.Lens(makeClassyPrisms)
+import Data.Eq(Eq)
+import Data.Ord(Ord)
+import Prelude(Show)
 
 data Engine =
   Single
   | Multi
   deriving (Eq, Ord, Show)
-    
-instance Markdown Engine where
-  markdown Single =
-    "single"
-  markdown Multi =
-    "multi"
 
-instance Html Engine where
-  html Single =
-    "single"
-  html Multi =
-    "multi"
+makeClassyPrisms ''Engine
diff --git a/src/Data/Aviation/Casr/Logbook/Entries.hs b/src/Data/Aviation/Casr/Logbook/Entries.hs
--- a/src/Data/Aviation/Casr/Logbook/Entries.hs
+++ b/src/Data/Aviation/Casr/Logbook/Entries.hs
@@ -1,87 +1,35 @@
-module Data.Aviation.Casr.Logbook.Entries (
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE TypeFamilies #-}
+
+module Data.Aviation.Casr.Logbook.Entries(
   Entries(..)
-, flightEntries
+, emptyentries
+, singleentry
 ) where
 
-import Data.Aviation.Casr.Logbook.Aircraft
-import Data.Aviation.Casr.Logbook.Date
-import Data.Aviation.Casr.Logbook.Entry
-import Data.Aviation.Casr.Logbook.ExamEntry
-import Data.Aviation.Casr.Logbook.FlightEntry
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.List
-
-newtype Entries =
+import Control.Lens(makeWrapped)
+import Data.Aviation.Casr.Logbook.Entry(Entry)
+import Data.Eq(Eq)
+import Data.Ord(Ord)
+import Prelude(Show)
+  
+newtype Entries ae se ee be =
   Entries
-    [Entry]
+    [Entry ae se ee be]
   deriving (Eq, Ord, Show)
 
-instance Monoid Entries where
-  mempty =
-    Entries []
-  Entries e1 `mappend` Entries e2 =
-    Entries (e1 `mappend` e2)
+makeWrapped ''Entries
 
-instance Markdown Entries where
-  markdown (Entries g) =
-    intercalate "\n\n----\n\n" (fmap markdown g)
+emptyentries ::
+  Entries ae se ee be
+emptyentries =
+  Entries []
 
-instance Html Entries where
-  html (Entries g) =
-    (\(i, h) -> let nospace =
-                      map (\c -> case c of
-                                   ' ' ->
-                                     '_'
-                                   _ ->
-                                     c)
-                    divid =
-                      case h of
-                        EntryFlight (FlightEntry _ (Date d) (Aircraft _ reg _) _ _ _ _ _ _ _ _ _) ->
-                          concat
-                            [
-                              nospace d
-                            , "_"
-                            , nospace reg
-                            , "_"
-                            , show (i :: Int)
-                            ]
-                        EntryExam (ExamEntry (Date d) n _ _ _ _ _) ->
-                            concat
-                              [
-                                nospace d
-                              , "_"
-                              , nospace n
-                              ]
-                    divclass =
-                      case h of
-                        EntryFlight _ ->
-                          "flightlogentry"
-                        EntryExam _ ->
-                          "examentry"
-                in  concat
-                      [
-                        "<div id=\""
-                      , divid
-                      , "\" class=\""
-                      , divclass
-                      , "\">"
-                      , "<div class=\"hreflink\">"
-                      , "<a href=\"#"
-                      , divid
-                      , "\">"
-                      , "§"
-                      , "</a>"
-                      , "</div>"
-                      , html h
-                      , "</div>"
-                      , "<hr>"
-                      ]
-                      ) =<< zip [0..] g
-    
-flightEntries ::
- Entries
- -> [FlightEntry]
-flightEntries (Entries e) =
-  foldr (\x z -> case x of EntryFlight f -> f:z
-                           EntryExam _ -> z) [] e
+singleentry ::
+  Entry ae se ee be
+  -> Entries ae se ee be
+singleentry e =
+  Entries [e]
diff --git a/src/Data/Aviation/Casr/Logbook/Entry.hs b/src/Data/Aviation/Casr/Logbook/Entry.hs
--- a/src/Data/Aviation/Casr/Logbook/Entry.hs
+++ b/src/Data/Aviation/Casr/Logbook/Entry.hs
@@ -1,69 +1,27 @@
-module Data.Aviation.Casr.Logbook.Entry (
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE FlexibleInstances #-}
+
+module Data.Aviation.Casr.Logbook.Entry(
   Entry(..)
-, flight
-, exam
 ) where
 
-import Data.Aviation.Casr.Logbook.Aircraft
-import Data.Aviation.Casr.Logbook.ARN
-import Data.Aviation.Casr.Logbook.Date
-import Data.Aviation.Casr.Logbook.DayNight
-import Data.Aviation.Casr.Logbook.ExamEntry
-import Data.Aviation.Casr.Logbook.FlightEntry
-import Data.Aviation.Casr.Logbook.FlightPath
-import Data.Aviation.Casr.Logbook.Hours
-import Data.Aviation.Casr.Logbook.Images
-import Data.Aviation.Casr.Logbook.PiC
-import Data.Aviation.Casr.Logbook.PoB
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.Aviation.Casr.Logbook.Sequence
-import Data.Aviation.Casr.Logbook.TrackLogs
-import Data.Aviation.Casr.Logbook.Videos
-import Data.Aviation.Casr.Logbook.Visualisations
+import Control.Lens(makeClassyPrisms)
+import Data.Aviation.Casr.Logbook.AircraftFlight(AircraftFlight)
+import Data.Aviation.Casr.Logbook.SimulatorFlight(SimulatorFlight)
+import Data.Aviation.Casr.Logbook.Exam(Exam)
+import Data.Aviation.Casr.Logbook.Briefing(Briefing)
+import Data.Eq(Eq)
+import Data.Ord(Ord)
+import Prelude(Show)
 
-data Entry =
-  EntryExam ExamEntry
-  | EntryFlight FlightEntry
+data Entry ae se ee be =
+  AircraftFlightEntry AircraftFlight ae
+  | SimulatorFlightEntry SimulatorFlight se
+  | ExamEntry Exam ee
+  | BriefingEntry Briefing be
   deriving (Eq, Ord, Show)
 
-instance Markdown Entry where
-  markdown (EntryExam e) =
-    markdown e
-  markdown (EntryFlight f) =
-    markdown f
-
-instance Html Entry where
-  html (EntryExam e) =
-    html e
-  html (EntryFlight f) =
-    html f
-
-flight ::
-  Sequence
-  -> Date
-  -> Aircraft
-  -> Hours
-  -> PoB
-  -> FlightPath
-  -> DayNight
-  -> PiC
-  -> TrackLogs
-  -> Visualisations
-  -> Images
-  -> Videos
-  -> Entry
-flight sequ date aircraft hours pob flightpath daynight pic tracklogs visualisations images videos =
-  EntryFlight (FlightEntry sequ date aircraft hours pob flightpath daynight pic tracklogs visualisations images videos)
-
-exam ::
-  Date
-  -> String
-  -> String
-  -> String
-  -> ARN
-  -> Int
-  -> Int
-  -> Entry
-exam d n dn dr da r m =
-  EntryExam (ExamEntry d n dn dr da r m)
+makeClassyPrisms ''Entry
diff --git a/src/Data/Aviation/Casr/Logbook/Exam.hs b/src/Data/Aviation/Casr/Logbook/Exam.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/Casr/Logbook/Exam.hs
@@ -0,0 +1,44 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aviation.Casr.Logbook.Exam(
+  Exam(..)
+, dayonlyexam
+) where
+
+import Control.Lens(makeClassy)
+import Data.Aviation.Casr.Logbook.Aviator(Aviator)
+import Data.Aviation.Casr.Logbook.Time(Time, dayonly)
+import Data.Aviation.Casr.Logbook.Location(Location)
+import Data.Eq(Eq)
+import Data.Int(Int)
+import Data.Ord(Ord)
+import Data.String(String)
+import Data.Time(Day)
+import Prelude(Show)
+
+data Exam =
+  Exam {
+    _examName :: String
+  , _examLocation :: Location
+  , _examTime :: Time
+  , _examDelegate :: Aviator
+  , _examResult :: Int
+  , _examResultMaximum :: Int
+  } deriving (Eq, Ord, Show)  
+
+makeClassy ''Exam
+
+dayonlyexam ::
+  String
+  -> Location
+  -> Day
+  -> Aviator
+  -> Int
+  -> Int
+  -> Exam
+dayonlyexam n l d =
+  Exam
+    n
+    l
+    (dayonly d)
diff --git a/src/Data/Aviation/Casr/Logbook/ExamEntry.hs b/src/Data/Aviation/Casr/Logbook/ExamEntry.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/ExamEntry.hs
+++ /dev/null
@@ -1,85 +0,0 @@
-module Data.Aviation.Casr.Logbook.ExamEntry (
-  ExamEntry(..)
-) where
-
-import Data.Aviation.Casr.Logbook.ARN
-import Data.Aviation.Casr.Logbook.Date
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-
-data ExamEntry =
-  ExamEntry
-    Date
-    String -- name
-    String -- delegate name
-    String -- delegate rating
-    ARN -- delegate ARN
-    Int -- result
-    Int -- maximum possible result
-  deriving (Eq, Ord, Show)
-
-instance Markdown ExamEntry where
-  markdown (ExamEntry d n dn dr da r m) =
-    concat [
-      markdown d
-    , "* Exam: **"
-    , markdown n
-    , "**\n"
-    , "* Delegate Name: **"
-    , markdown dn
-    , " ("
-    , markdown dr
-    , ")**\n"
-    , markdown da
-    , "* Result: **`"
-    , markdown r
-    , "/"
-    , markdown m
-    , "`**"
-    ]
-
-instance Html ExamEntry where
-  html (ExamEntry date n dn dr da r m) =
-    concat
-      [
-        "<div class=\"examlog\">"
-      , "<h3 class=\"exam\">"
-      , html n
-      , "</h3>"
-      , "</div>"
-      , "<ul>"
-      , "<li class=\"date\">"
-      , html date
-      , "</li>"
-      , concat
-        [
-          "<span class=\"heading delegateheading\">"
-        , "Delegate"
-        , "</span>"
-        , ": "
-        , "<span class=\"info delegateinfo\">"
-        , html dn
-        , " ("
-        , html dr
-        , ")"
-        , "</span>"
-        ]
-      , "</li>"      
-      , "<li class=\"delegatearn\">"
-      , html da
-      , "<li class=\"examresult\">"
-      , concat
-        [
-          "<span class=\"heading resultheading\">"
-        , "Result"
-        , "</span>"
-        , ": "
-        , "<span class=\"info resultinfo\">"
-        , html r
-        , "/"
-        , html m
-        , "</span>"
-        ]
-      , "</li>"
-      , "</ul>"
-      ]
diff --git a/src/Data/Aviation/Casr/Logbook/FlightEntry.hs b/src/Data/Aviation/Casr/Logbook/FlightEntry.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/FlightEntry.hs
+++ /dev/null
@@ -1,114 +0,0 @@
-module Data.Aviation.Casr.Logbook.FlightEntry (
-  FlightEntry(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Aircraft
-import Data.Aviation.Casr.Logbook.Date
-import Data.Aviation.Casr.Logbook.DayNight
-import Data.Aviation.Casr.Logbook.FlightPath
-import Data.Aviation.Casr.Logbook.Hours
-import Data.Aviation.Casr.Logbook.Images
-import Data.Aviation.Casr.Logbook.PiC
-import Data.Aviation.Casr.Logbook.PoB
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.Aviation.Casr.Logbook.Sequence
-import Data.Aviation.Casr.Logbook.TrackLogs
-import Data.Aviation.Casr.Logbook.Videos
-import Data.Aviation.Casr.Logbook.Visualisations
-
-{-
-
-This data structure currently only handles Day VFR. More modifications are
-likely to result in a complete flight log entry structure.
-
--}
-data FlightEntry =
-  FlightEntry
-    Sequence
-    Date 
-    Aircraft
-    Hours
-    PoB
-    FlightPath
-    DayNight
-    PiC
-    TrackLogs
-    Visualisations
-    Images
-    Videos
-  deriving (Eq, Ord, Show)
-    
-instance Markdown FlightEntry where
-  markdown (FlightEntry sequ date aircraft hours pob flightpath daynight pic tracklogs visualisations images videos) =
-    concat
-      [
-        markdown date
-      , markdown sequ
-      , markdown aircraft
-      , markdown hours
-      , markdown pob
-      , markdown flightpath
-      , markdown daynight
-      , markdown pic
-      , markdown tracklogs
-      , markdown videos
-      , markdown visualisations
-      , markdown images
-      ]
-
-instance Html FlightEntry where
-  html (FlightEntry sequ date aircraft hours pob flightpath daynight pic tracklogs visualisations images videos) =
-    let onethen x c r = concat $
-                 case r of
-                   [] ->
-                     []
-                   _ ->
-                     [
-                       "<"
-                     , x
-                     , " class=\""
-                     , c
-                     , "\">"
-                     , r 
-                     , "</"
-                     , x
-                     , ">"
-                     ]
-        li = onethen "li"
-        div' = onethen "div"             
-    in  concat
-          [
-            "<div class=\"flightlogsequence\">"
-          , "<h3 class=\"sequence\">"
-          , html sequ
-          , "</h3>"
-          , "</div>"
-          , "<ul>"
-          , "<li class=\"date\">"
-          , html date
-          , "</li>"
-          , "<li class=\"aircraft\">"
-          , html aircraft
-          , "</li>"
-          , "<li class=\"hours\">"
-          , html hours
-          , "</li>"
-          , "<li class=\"pob\">"
-          , html pob
-          , "</li>"
-          , "<li class=\"flightpath\">"
-          , html flightpath
-          , "</li>"
-          , "<li class=\"daynight\">"
-          , html daynight
-          , "</li>"
-          , "<li class=\"pic\">"
-          , html pic
-          , "</li>"
-          , li "tracklogs" (html tracklogs)
-          , li "videos" (html videos) 
-          , li "visualisations" (html visualisations) 
-          , "</ul>"
-          , div' "images" (html images) 
-          ]
diff --git a/src/Data/Aviation/Casr/Logbook/FlightPath.hs b/src/Data/Aviation/Casr/Logbook/FlightPath.hs
--- a/src/Data/Aviation/Casr/Logbook/FlightPath.hs
+++ b/src/Data/Aviation/Casr/Logbook/FlightPath.hs
@@ -1,54 +1,52 @@
-module Data.Aviation.Casr.Logbook.FlightPath (
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aviation.Casr.Logbook.FlightPath(
   FlightPath(..)
-, pathlist
-, directPath
+, directflightpath
+, directcircuit
+, pointsatdate
 ) where
 
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.List
+import Control.Lens(makeClassy)
+import Data.Aviation.Casr.Logbook.FlightPoint(FlightPoint, pointatdate)
+import Data.Eq(Eq)
+import Data.Functor((<$>))
+import Data.Ord(Ord)
+import Data.String(String)
+import Data.Time(Day)
+import Prelude(Show)
 
 data FlightPath =
-  FlightPath
-    String -- start
-    [String] -- touch-downs
-    String -- end
-  deriving (Eq, Ord, Show)
+  FlightPath {
+    _flightStart :: FlightPoint
+  , _flightIntermediate :: [FlightPoint]
+  , _flightEnd :: FlightPoint
+  } deriving (Eq, Ord, Show)
 
-directPath ::
+makeClassy ''FlightPath
+
+directflightpath ::
+  FlightPoint
+  -> FlightPoint
+  -> FlightPath
+directflightpath x y =
+  FlightPath x [] y
+
+directcircuit ::
+  FlightPoint
+  -> FlightPath
+directcircuit x =
+  directflightpath x x
+
+pointsatdate ::
   String
+  -> [String]
   -> String
+  -> Day
   -> FlightPath
-directPath fr to =
-  FlightPath
-    fr
-    []
-    to
-
-pathlist ::
+pointsatdate x i y d =
   FlightPath
-  -> [String]
-pathlist (FlightPath s x e) =
-  s : (x ++ [e])
-
-instance Markdown FlightPath where
-  markdown p =
-    concat
-      [
-        "* Flight path: **"
-      , intercalate " - " (map markdown (pathlist p))
-      , "**\n"
-      ]
-
-instance Html FlightPath where
-  html p =
-    concat
-      [
-        "<span class=\"heading flightpathheading\">"
-      , "Flight path"
-      , "</span>"
-      , ": "
-      , "<span class=\"info flightpathinfo\">"
-      , intercalate " &mdash; " (map html (pathlist p))
-      , "</span>"
-      ]
+    (pointatdate x d)
+    ((\s -> pointatdate s d) <$> i)
+    (pointatdate y d)
diff --git a/src/Data/Aviation/Casr/Logbook/FlightPoint.hs b/src/Data/Aviation/Casr/Logbook/FlightPoint.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/Casr/Logbook/FlightPoint.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aviation.Casr.Logbook.FlightPoint(
+  FlightPoint(..)
+, pointatdate
+, runwayatdate
+) where
+
+import Control.Lens(makeClassy)
+import Data.Aviation.Casr.Logbook.Time(Time, dayonly)
+import Data.Eq(Eq)
+import Data.Maybe(Maybe(Nothing, Just))
+import Data.Ord(Ord)
+import Data.String(String)
+import Data.Time(Day)
+import Prelude(Show)
+
+data FlightPoint =
+  FlightPoint {
+    _point :: String
+  , _runway :: Maybe String
+  , _landingTime :: Time
+  } deriving (Eq, Ord, Show)
+
+makeClassy ''FlightPoint
+
+pointatdate ::
+  String
+  -> Day
+  -> FlightPoint
+pointatdate a d =
+  FlightPoint
+    a
+    Nothing
+    (dayonly d)
+
+runwayatdate ::
+  String
+  -> String
+  -> Day
+  -> FlightPoint
+runwayatdate a r d =
+  FlightPoint
+    a
+    (Just r)
+    (dayonly d)
diff --git a/src/Data/Aviation/Casr/Logbook/Hours.hs b/src/Data/Aviation/Casr/Logbook/Hours.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/Hours.hs
+++ /dev/null
@@ -1,61 +0,0 @@
-module Data.Aviation.Casr.Logbook.Hours (
-  Hours(..)
-, zeroHours
-, addHours
-, fractionalHours
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-
--- abstract
-data Hours =
-  Hours
-    Int -- full
-    Int  -- partial
-  deriving (Eq, Ord, Show)
-
-zeroHours ::
-  Hours
-zeroHours =
-  Hours 0 0
-
-addHours ::
-  Hours 
-  -> Hours
-  -> Hours
-Hours f1 p1 `addHours` Hours f2 p2 =
-  let (h, q) = divMod (p1 + p2) 10
-  in  Hours (f1 + f2 + h) q 
-
-instance Monoid Hours where
-  mempty =
-    zeroHours
-  mappend =
-    addHours
-
-instance Markdown Hours where
-  markdown (Hours t p) =
-    "* Hours: **`" ++ markdown t ++ "." ++ markdown p ++ "`**\n"
-
-instance Html Hours where
-  html (Hours t p) =
-    concat
-      [
-        "<span class=\"heading hoursheading\">"
-      , "Hours"
-      , "</span>"
-      , ": "
-      , "<span class=\"info hoursinfo\">"
-      , html t
-      , "."
-      , html p
-      , "</span>"
-      ]
-      
-fractionalHours ::
-  Fractional a =>
-  Hours
-  -> a
-fractionalHours (Hours f p) =
-  fromIntegral f + (fromIntegral p / 10)
diff --git a/src/Data/Aviation/Casr/Logbook/Image.hs b/src/Data/Aviation/Casr/Logbook/Image.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/Image.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-module Data.Aviation.Casr.Logbook.Image (
-  Image(..)  
-) where
-
-import Data.Aviation.Casr.Logbook.ImageType
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Maybe
-
-data Image =
-  Image
-    String -- uri
-    (Maybe String) -- name
-    ImageType
-  deriving (Eq, Ord, Show)
-
-instance Markdown Image where
-  markdown (Image uri name itype) =
-    let t = markdown itype
-        n = fromMaybe ("Image (" ++ t ++ ")") name
-    in  concat
-          [
-            "<a href=\""
-          , uri
-          , "\"><img src=\""
-          , uri
-          , "\" width=\"120\" alt=\""
-          , n
-          , "\"></a>"
-          ]
-
-instance Html Image where
-  html (Image uri name itype) =
-    let t = html itype
-        n = fromMaybe ("Image (" ++ t ++ ")") name
-    in  concat
-          [
-            "<a href=\""
-          , uri
-          , "\"><img src=\""
-          , uri
-          , "\" width=\"120\" alt=\""
-          , n
-          , "\"></a>"
-          ]
diff --git a/src/Data/Aviation/Casr/Logbook/ImageType.hs b/src/Data/Aviation/Casr/Logbook/ImageType.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/ImageType.hs
+++ /dev/null
@@ -1,23 +0,0 @@
-module Data.Aviation.Casr.Logbook.ImageType (
-  ImageType(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-
-data ImageType =
-  Png
-  | Jpg
-  deriving (Eq, Ord, Show)
-
-instance Markdown ImageType where
-  markdown Png =
-    "png"
-  markdown Jpg =
-    "jpg"
-
-instance Html ImageType where
-  html Png =
-    "png"
-  html Jpg =
-    "jpg"
diff --git a/src/Data/Aviation/Casr/Logbook/Images.hs b/src/Data/Aviation/Casr/Logbook/Images.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/Images.hs
+++ /dev/null
@@ -1,34 +0,0 @@
-module Data.Aviation.Casr.Logbook.Images (
-  Images(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Image
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-
-newtype Images =
-  Images
-    [Image]
-  deriving (Eq, Ord, Show)
-    
-instance Monoid Images where
-  mempty =
-    Images []
-  Images i1 `mappend` Images i2 =
-    Images (i1 `mappend` i2)
-
-instance Markdown Images where
-  markdown (Images i) =
-    case i of
-      [] ->
-        []        
-      _ ->
-        "\n<div style=\"text-align: justify\">\n" ++ (i >>= \j -> markdown j ++ "\n") ++ "</div>"
-
-instance Html Images where
-  html (Images i) =
-    case i of
-      [] ->
-        []        
-      _ ->
-        "<div style=\"text-align: justify\">" ++ (i >>= html) ++ "</div>"
diff --git a/src/Data/Aviation/Casr/Logbook/Location.hs b/src/Data/Aviation/Casr/Logbook/Location.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/Casr/Logbook/Location.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aviation.Casr.Logbook.Location(
+  Location(..)
+) where
+
+import Control.Lens(makeClassy)
+import Data.Eq(Eq)
+import Data.Ord(Ord)
+import Data.String(String)
+import Prelude(Show, Double)
+
+data Location =
+  Location {
+    _locationname :: String
+  , _locationlatitude :: Double
+  , _locationlongitude :: Double
+  } deriving (Eq, Ord, Show)
+
+makeClassy ''Location
diff --git a/src/Data/Aviation/Casr/Logbook/Log.hs b/src/Data/Aviation/Casr/Logbook/Log.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/Log.hs
+++ /dev/null
@@ -1,86 +0,0 @@
-module Data.Aviation.Casr.Logbook.Log (
-  Log(..)
-) where
-
-import Data.Aviation.Casr.Logbook.ARN
-import Data.Aviation.Casr.Logbook.DOB
-import Data.Aviation.Casr.Logbook.Entries
-import Data.Aviation.Casr.Logbook.Name
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.Aviation.Casr.Logbook.Totals
-
-data Log =
-  Log
-    Name
-    DOB
-    ARN
-    Entries
-  deriving (Eq, Ord, Show)
-    
-instance Markdown Log where
-  markdown (Log (Name name') dob arn entries) =
-    concat
-      [
-        "# Pilot Personal Log Book\n"
-      , "### Civil Aviation Safety Regulation 1998 (61.345) [*austlii.edu.au*](http://www.austlii.edu.au/au/legis/cth/consol_reg/casr1998333/s61.345.html)\n\n"
-      , "* "
-      , markdown name'
-      , "\n"
-      , markdown dob
-      , markdown arn
-      , "\n----\n\n"
-      , markdown (totals entries)
-      , "\n----\n\n"
-      , markdown entries
-      ]
-    
-instance Html Log where
-  html (Log name@(Name name') dob arn@(ARN arn') entries) =
-    concat
-      [
-        "<!DOCTYPE HTML>"
-      , "<html lang=\"en\">"
-      , "<head>"
-      , "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"
-      , "<title>Pilot Personal Log Book &mdash; "
-      , html name'
-      , " ("
-      , html arn'
-      , ")"
-      , "</title>"
-      , "<link href=\"https://fonts.googleapis.com/css?family=Inconsolata:400,700\" rel=\"stylesheet\" type=\"text/css\">"
-      , "<link rel=\"stylesheet\" type=\"text/css\" href=\"casr-logbook.css\">"
-      , "<link rel=\"alternate\" type=\"application/atom+xml\" href=\"/atom.xml\" title=\"Atom feed\">"
-      , "<script type=\"text/javascript\" src=\"http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML\"></script>"
-      , "<script type=\"text/javascript\" src=\"https://raw.github.com/Mathapedia/LaTeX2HTML5/master/latex2html5.min.js\"></script>"
-      , "</head>"
-      , "<body class=\"casr-logbook\">"    
-      , "<div id=\"title\" class=\"title\">"
-      , "<h1>Pilot Personal Log Book</h1>"
-      , "</div>"
-      , "<div id=\"subtitle\" class=\"subtitle\">"
-      , "<h2>Civil Aviation Safety Regulation 1998 (61.345) <span class=\"austlii\"><a href=\"http://www.austlii.edu.au/au/legis/cth/consol_reg/casr1998333/s61.345.html\">austlii.edu.au</a></span></h2>"
-      , "</div>" 
-      , "<div id=\"personal\" class=\"personal\">"     
-      , "<ul>"
-      , "<li id=\"name\">"
-      , html name
-      , "</li>"
-      , "<li id=\"dob\">"
-      , html dob
-      , "</li>"
-      , "<li id=\"arn\">"
-      , html arn
-      , "</li>"
-      , "</ul>"            
-      , "</div>"
-      , "<hr>"
-      , html (totals entries)
-      , "<hr>"
-      , "<div id=\"flightlogentries\" class=\"flightlogentries\">"
-      , html entries
-      , "</div> "
-      , "</body>"
-      , "</html>"
-      ]
diff --git a/src/Data/Aviation/Casr/Logbook/Logbook.hs b/src/Data/Aviation/Casr/Logbook/Logbook.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/Casr/Logbook/Logbook.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE FlexibleInstances #-}
+
+module Data.Aviation.Casr.Logbook.Logbook(
+  Logbook(..)
+, aviatorlogbook
+, emptylogbook
+, singleentrylogbook
+) where
+
+import Control.Lens(makeClassy)
+import Data.Aviation.Casr.Logbook.Aviator(Aviator)
+import Data.Aviation.Casr.Logbook.Entries(Entries(Entries), emptyentries, singleentry)
+import Data.Aviation.Casr.Logbook.Entry(Entry)
+import Data.Eq(Eq)
+import Data.Ord(Ord)
+import Prelude(Show)
+
+data Logbook ae se ee be =
+  Logbook {
+    _logbookaviator :: Aviator
+  , _logbookentries :: (Entries ae se ee be)
+  } deriving (Eq, Ord, Show)
+
+makeClassy ''Logbook
+
+aviatorlogbook ::
+  Aviator
+  -> [Entry ae se ee be]
+  -> Logbook ae se ee be
+aviatorlogbook a e =
+  Logbook
+    a
+    (Entries e)
+
+emptylogbook ::
+  Aviator
+  -> Logbook ae se ee be
+emptylogbook a =
+  Logbook
+    a
+    emptyentries
+
+singleentrylogbook ::
+  Aviator
+  -> Entry ae se ee be
+  -> Logbook ae se ee be
+singleentrylogbook a e =
+  Logbook
+    a
+    (singleentry e)
diff --git a/src/Data/Aviation/Casr/Logbook/Name.hs b/src/Data/Aviation/Casr/Logbook/Name.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/Name.hs
+++ /dev/null
@@ -1,24 +0,0 @@
-module Data.Aviation.Casr.Logbook.Name (
-  Name(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.String
-
-newtype Name =
-  Name
-    String
-  deriving (Eq, Ord, Show)
-
-instance IsString Name where
-  fromString =
-    Name
-
-instance Markdown Name where
-  markdown (Name s) =
-    "### " ++ markdown s ++ "\n"
-
-instance Html Name where
-  html (Name s) =
-    "<span class=\"heading nameheading\">Name: </span><span class=\"nameinfo\">" ++ html s ++ "</span>"
diff --git a/src/Data/Aviation/Casr/Logbook/PiC.hs b/src/Data/Aviation/Casr/Logbook/PiC.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/PiC.hs
+++ /dev/null
@@ -1,34 +0,0 @@
-module Data.Aviation.Casr.Logbook.PiC (
-  PiC(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.String
-
-newtype PiC =
-  PiC
-    String
-  deriving (Eq, Ord, Show)
-
-instance IsString PiC where
-  fromString =
-    PiC
-    
-instance Markdown PiC where
-  markdown (PiC s) =
-    "* Pilot in Command: **" ++ markdown s ++ "**\n"
-
-instance Html PiC where
-  html (PiC s) =
-    concat
-      [
-        "<span class=\"heading picheading\">"
-      , "Pilot in Command"
-      , "</span>"
-      , ": "
-      , "<span class=\"info picinfo\">"
-      , html s
-      , "</span>"
-      ]
-    
diff --git a/src/Data/Aviation/Casr/Logbook/PoB.hs b/src/Data/Aviation/Casr/Logbook/PoB.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/PoB.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-module Data.Aviation.Casr.Logbook.PoB (
-  PoB(..)
-, solo
-, dual
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-
-data PoB =
-  PoB Int
-  deriving (Eq, Ord, Show)
-
-solo ::
-  PoB
-solo =
-  PoB 1
-
-dual ::
-  PoB
-dual =
-  PoB 2
-
-instance Markdown PoB where  
-  markdown (PoB n) =
-    concat
-      [
-        "* PoB: **`"
-      , case n of
-          0 -> "unmanned"
-          1 -> "solo"
-          2 -> "dual"
-          _ -> markdown n
-      , "`**\n"
-      ]
-
-instance Html PoB where  
-  html (PoB n) =
-    concat
-      [
-        "<span class=\"heading pobheading\">"
-      , "PoB"
-      , "</span>"
-      , ": "
-      , "<span class=\"info pobinfo\">"
-      , case n of
-          0 -> "unmanned"
-          1 -> "solo"
-          2 -> "dual"
-          _ -> html n
-      , "</span>"
-      ]
diff --git a/src/Data/Aviation/Casr/Logbook/Printer/Html.hs b/src/Data/Aviation/Casr/Logbook/Printer/Html.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/Printer/Html.hs
+++ /dev/null
@@ -1,40 +0,0 @@
-module Data.Aviation.Casr.Logbook.Printer.Html (
-  Html(..)
-, printHtml
-, writeHtmlFile
-) where
-
-class Html s where
-  html ::
-    s
-    -> String
-
-instance Html Char where
-  html '&' =
-    "&amp;"
-  html c =
-    [c]
-    
-instance Html Int where
-  html =
-    show
-    
-instance Html a => Html [a] where
-  html =
-    (=<<) html
-
-printHtml ::
-  Html s =>
-  s
-  -> IO ()
-printHtml =
-  putStrLn . html
-
-writeHtmlFile ::
-  Html s =>
-  FilePath
-  -> s
-  -> IO ()
-writeHtmlFile p =
-  writeFile p . html
-  
diff --git a/src/Data/Aviation/Casr/Logbook/Printer/Markdown.hs b/src/Data/Aviation/Casr/Logbook/Printer/Markdown.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/Printer/Markdown.hs
+++ /dev/null
@@ -1,38 +0,0 @@
-module Data.Aviation.Casr.Logbook.Printer.Markdown (
-  Markdown(..)
-, printMarkdown
-, writeMarkdownFile
-) where
-
-class Markdown s where
-  markdown ::
-    s
-    -> String
-
-instance Markdown Char where
-  markdown =
-    pure
-
-instance Markdown Int where
-  markdown =
-    show
-
-instance Markdown a => Markdown [a] where
-  markdown =
-    (=<<) markdown
-
-printMarkdown ::
-  Markdown s =>
-  s
-  -> IO ()
-printMarkdown =
-  putStrLn . markdown
-
-writeMarkdownFile ::
-  Markdown s =>
-  FilePath
-  -> s
-  -> IO ()
-writeMarkdownFile p =
-  writeFile p . markdown
-  
diff --git a/src/Data/Aviation/Casr/Logbook/Rating.hs b/src/Data/Aviation/Casr/Logbook/Rating.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/Casr/Logbook/Rating.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aviation.Casr.Logbook.Rating(
+  Rating(..)
+, nodayrating
+, dayrating
+) where
+
+import Control.Lens(makeClassy)
+import Data.Eq(Eq)
+import Data.Maybe(Maybe(Nothing, Just))
+import Data.Ord(Ord)
+import Data.String(String)
+import Data.Time(Day)
+import Prelude(Show)
+
+data Rating =
+  Rating {
+    _ratingName :: String
+  , _ratingAchieved :: Maybe Day
+  } deriving (Eq, Ord, Show)
+
+makeClassy ''Rating
+
+nodayrating ::
+  String
+  -> Rating
+nodayrating r =
+  Rating
+    r
+    Nothing
+
+dayrating ::
+  String
+  -> Day
+  -> Rating
+dayrating r d =
+  Rating
+    r
+    (Just d)
diff --git a/src/Data/Aviation/Casr/Logbook/Sequence.hs b/src/Data/Aviation/Casr/Logbook/Sequence.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/Sequence.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-module Data.Aviation.Casr.Logbook.Sequence (
-  Sequence(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.String
-
-newtype Sequence =
-  Sequence
-    String
-  deriving (Eq, Ord, Show)
-
-instance IsString Sequence where
-  fromString =
-    Sequence
-
-instance Markdown Sequence where
-  markdown (Sequence s) =
-    "* Sequence: **" ++ markdown s ++ "**\n"
-
-instance Html Sequence where
-  html (Sequence s) =
-    concat
-      [
-        "<span class=\"heading sequenceheading\">"
-      , "Sequence"
-      , "</span>"
-      , ": "
-      , "<span class=\"info sequenceinfo\">"
-      , html s
-      , "</span>"
-      ]
diff --git a/src/Data/Aviation/Casr/Logbook/SimulatorFlight.hs b/src/Data/Aviation/Casr/Logbook/SimulatorFlight.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/Casr/Logbook/SimulatorFlight.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aviation.Casr.Logbook.SimulatorFlight(
+  SimulatorFlight(..)
+, dayonlysimulator
+) where
+
+import Control.Lens(makeClassy)
+import Data.Aviation.Casr.Logbook.Time(Time, dayonly)
+import Data.Aviation.Casr.Logbook.Aviator(Aviator)
+import Data.Aviation.Casr.Logbook.TimeAmount(TimeAmount)
+import Data.Eq(Eq)
+import Data.Ord(Ord)
+import Data.String(String)
+import Data.Time(Day)
+import Prelude(Show)
+
+data SimulatorFlight =
+  SimulatorFlight {
+    _simulatorflightname :: String
+  , _simulatorflighttime :: Time
+  , _simulatortype :: String
+  , _simulatorothercrew :: [Aviator]
+  , _instrumentsimulatorTimeAmount :: TimeAmount
+  } deriving (Eq, Ord, Show)   
+
+makeClassy ''SimulatorFlight
+
+dayonlysimulator ::
+  String
+  -> Day
+  -> String
+  -> [Aviator]
+  -> TimeAmount
+  -> SimulatorFlight
+dayonlysimulator n d =
+  SimulatorFlight
+    n
+    (dayonly d)
+    
diff --git a/src/Data/Aviation/Casr/Logbook/Time.hs b/src/Data/Aviation/Casr/Logbook/Time.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/Casr/Logbook/Time.hs
@@ -0,0 +1,36 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aviation.Casr.Logbook.Time(
+  Time(..)
+, dayonly
+, dayandtime
+) where
+
+import Control.Lens(makeClassy)
+import Data.Eq(Eq)
+import Data.Ord(Ord)
+import Data.Maybe(Maybe(Nothing, Just))
+import Data.Time(Day, TimeOfDay)
+import Prelude(Show)
+
+data Time =
+  Time {
+    _day :: Day
+  , _timeofday :: Maybe TimeOfDay
+  } deriving (Eq, Ord, Show)
+
+makeClassy ''Time
+
+dayonly ::
+  Day
+  -> Time
+dayonly d =
+  Time d Nothing
+
+dayandtime ::
+  Day
+  -> TimeOfDay
+  -> Time
+dayandtime d t =
+  Time d (Just t)
diff --git a/src/Data/Aviation/Casr/Logbook/TimeAmount.hs b/src/Data/Aviation/Casr/Logbook/TimeAmount.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/Casr/Logbook/TimeAmount.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Data.Aviation.Casr.Logbook.TimeAmount(
+  TimeAmount(..)
+, parttimeamount
+, zerotimeamount
+, addtimeamount
+) where
+
+import Control.Lens(makeClassy, ( # ))
+import Data.Eq(Eq)
+import Data.Digit(Digit, x0, digit, (/+/))
+import Data.Int(Int)
+import Data.Monoid(Monoid(mempty, mappend))
+import Data.Ord(Ord)
+import Prelude(Show, Num((+)))
+
+data TimeAmount =
+  TimeAmount {
+    _hours :: Int
+  , _tenthofhour :: Digit
+  } deriving (Eq, Ord, Show)
+
+makeClassy ''TimeAmount
+
+parttimeamount ::
+  Digit
+  -> TimeAmount
+parttimeamount =
+  TimeAmount 0
+
+zerotimeamount ::
+  TimeAmount
+zerotimeamount =
+  TimeAmount 0 x0
+
+addtimeamount ::
+  TimeAmount 
+  -> TimeAmount
+  -> TimeAmount
+TimeAmount f1 p1 `addtimeamount` TimeAmount f2 p2 =
+  let (h, q) = p1 /+/ p2
+  in  TimeAmount (f1 + f2 + digit # h) q 
+
+instance Monoid TimeAmount where
+  mempty =
+    zerotimeamount
+  mappend =
+    addtimeamount
diff --git a/src/Data/Aviation/Casr/Logbook/Totals.hs b/src/Data/Aviation/Casr/Logbook/Totals.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/Totals.hs
+++ /dev/null
@@ -1,232 +0,0 @@
-module Data.Aviation.Casr.Logbook.Totals (
-  Totals(..)
-, zeroTotals
-, singleTotals
-, updateTotals
-, totals
-) where
-
-import Data.Aviation.Casr.Logbook.Aircraft
-import Data.Aviation.Casr.Logbook.DayNight
-import Data.Aviation.Casr.Logbook.Engine
-import Data.Aviation.Casr.Logbook.Entries
-import Data.Aviation.Casr.Logbook.FlightEntry
-import Data.Aviation.Casr.Logbook.Hours
-import Data.Aviation.Casr.Logbook.PoB
-import Data.Aviation.Casr.Logbook.PiC
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.Foldable(foldl')
-import Data.Map(Map)
-import qualified Data.Map as Map
-import Text.Printf
-
-data Totals =
-  Totals
-    Hours -- total
-    Hours -- dual
-    Hours -- solo
-    (Map String Hours) -- type
-    (Map String Hours) -- aircraft
-    Hours -- single-engine
-    Hours -- multi-engine
-    Hours -- day
-    Hours -- night
-    Hours -- day & night
-    (Map String Hours) -- pilot in command
-  deriving (Eq, Ord, Show)
-
-instance Monoid Totals where
-  mempty =
-    zeroTotals
-  Totals total1 dualhours1 solohours1 intype1 inreg1 singleengine1 multiengine1 day1 night1 daynight1 pic1 `mappend` Totals total2 dualhours2 solohours2 intype2 inreg2 singleengine2 multiengine2 day2 night2 daynight2 pic2 =
-    Totals
-      (total1 `mappend` total2)
-      (dualhours1 `mappend` dualhours2)
-      (solohours1 `mappend` solohours2)
-      (Map.unionWith mappend intype1 intype2)
-      (Map.unionWith mappend inreg1 inreg2)
-      (singleengine1 `mappend` singleengine2)
-      (multiengine1 `mappend` multiengine2)
-      (day1 `mappend` day2)
-      (night1 `mappend` night2)
-      (daynight1 `mappend` daynight2)
-      (Map.unionWith mappend pic1 pic2)
-
-instance Markdown Totals where
-  markdown (Totals total dualhours solohours intype inreg singleengine multiengine day night daynight pic) =
-    let displayHours (Hours f p) =
-          show f ++ "." ++ show p
-        displayPoint x h =
-          "* " ++ x ++ ": **`" ++ displayHours h ++ "`**\n"
-        displayMap x m =
-          "* " ++ x ++ "\n" ++ Map.foldrWithKey (\k h s -> "  * " ++ k ++ ": **`" ++ displayHours h ++ " (" ++ printf "%.2f" (fractionalHours h / fractionalHours total * 100 :: Double) ++ "%)`**\n" ++ s) "" m
-    in  concat
-          [
-            "##### Summary\n"
-          , displayPoint "Total Hours" total
-          , displayPoint "Dual Hours" dualhours
-          , displayPoint "Solo Hours" solohours
-          , displayMap "Hours in type" intype
-          , displayMap "Hours in registration" inreg
-          , displayPoint "Single-engine Hours" singleengine
-          , displayPoint "Multi-engine Hours" multiengine
-          , displayPoint "Day Hours" day
-          , displayPoint "Night Hours" night
-          , displayPoint "Day & Night Hours" daynight
-          , displayMap "Hours with PiC" pic            
-          ]
-
-instance Html Totals where
-  html (Totals total dualhours solohours intype inreg singleengine multiengine day night daynight pic) =
-    let displayHours (Hours f p) =
-          show f ++ "." ++ show p
-        displayPoint x h q =
-          concat
-            [
-              "<li class=\"summarypoint\">"
-            , "<span id=\""
-            , q
-            , "\" class=\"heading summarypointheading summarypointheading"
-            , q
-            , "\">"
-            , x            
-            , "</span>: <span class=\"summarypoint summarypoint"
-            , q
-            , "\">"            
-            , displayHours h
-            , "</span></li>"
-            ]
-        displayMap x m q =
-          concat
-            [
-              "<li class=\"summarypoint summarypoint"
-            , q
-            , "\">"
-            , "<span id=\""
-            , q
-            , "\" class=\"heading summarypointheading summarypointheading"
-            , q
-            , "\">"
-            , x            
-            , "</span>: <div class=\"summarypoint summarypoint"
-            , q
-            , "\"><ul>"
-            , Map.foldrWithKey (\k h s -> concat [
-                                                   "<li class=\"subsummarypoint subsummarypoint"
-                                                 , q
-                                                 , "\">"
-                                                 , "<span class=\"heading subsummarypointheading subsummarypointheading"
-                                                 , q
-                                                 , "\">"
-                                                 , k
-                                                 , "</span>: <span class=\"subsummarypointhours subsummarypointhours"
-                                                 , q
-                                                 , "\">"
-                                                 , displayHours h
-                                                 , "</span> <span class=\"subsummarypointpercentage subsummarypointpercentage"
-                                                 , q
-                                                 , "\">("
-                                                 , printf "%.2f" (fractionalHours h / fractionalHours total * 100 :: Double)
-                                                 , "%)</span>"
-                                                 , "</li>"
-                                                 , s
-                                                 ]) "" m
-            , "</ul></div></li>"
-            ]        
-    in  concat
-          [
-            "<div id=\"summary\" class=\"totals\">"
-          , "<div class=\"hreflink\">"
-          , "<a href=\"#summary\">§</a>"
-          , "</div>"
-          , "<h5>Summary</h5>"
-          , "<ul>"
-          , displayPoint "Total Hours" total "totalhours"
-          , displayPoint "Dual Hours" dualhours "dualhours"
-          , displayPoint "Solo Hours" solohours "solohours"
-          , displayMap "Hours in type" intype "hoursintype"
-          , displayMap "Hours in registration" inreg "hoursinregistration"
-          , displayPoint "Single-engine Hours" singleengine "singleenginehours"
-          , displayPoint "Multi-engine Hours" multiengine "multienginehours"
-          , displayPoint "Day Hours" day "dayhours"
-          , displayPoint "Night Hours" night "nighthours"
-          , displayPoint "Day &amp; Night Hours" daynight "daynighthours"
-          , displayMap "Hours with PiC" pic "pichours"           
-          , "</ul>"
-          , "</div>"
-          ]
-
-zeroTotals ::
-  Totals
-zeroTotals =
-  Totals
-    zeroHours
-    zeroHours
-    zeroHours
-    Map.empty
-    Map.empty
-    zeroHours
-    zeroHours
-    zeroHours
-    zeroHours
-    zeroHours
-    Map.empty
-
-singleTotals ::
- FlightEntry
- -> Totals
-singleTotals (FlightEntry _ _ (Aircraft atype areg aeng) hours (PoB pob) _ dn (PiC pic) _ _ _ _) =
-  Totals
-    hours
-    (
-      case pob of
-        2 -> hours
-        _ -> zeroHours
-    )
-    (
-      case pob of
-        1 -> hours
-        _ -> zeroHours
-    )
-    (Map.singleton atype hours)
-    (Map.singleton areg hours)
-    (
-      case aeng of
-        Single -> hours
-        _ -> zeroHours
-    )
-    (
-      case aeng of
-        Multi -> hours
-        _ -> zeroHours
-    )
-    (
-      case dn of
-        Day -> hours
-        _ -> zeroHours
-    )
-    (
-      case dn of
-        Night -> hours
-        _ -> zeroHours
-    )
-    (
-      case dn of
-        Night -> hours
-        _ -> zeroHours
-    )
-    (Map.singleton pic hours)
-
-updateTotals ::
-  FlightEntry
-  -> Totals
-  -> Totals
-updateTotals =
-  mappend . singleTotals
-
-totals ::
-  Entries
-  -> Totals
-totals =
-  foldl' (flip updateTotals) zeroTotals . flightEntries
diff --git a/src/Data/Aviation/Casr/Logbook/TrackLog.hs b/src/Data/Aviation/Casr/Logbook/TrackLog.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/TrackLog.hs
+++ /dev/null
@@ -1,105 +0,0 @@
-module Data.Aviation.Casr.Logbook.TrackLog (
-  TrackLog(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.Aviation.Casr.Logbook.TrackLogType
-import Data.Maybe
-
-data TrackLog =
-  TrackLog
-    String -- uri
-    (Maybe String) -- name
-    TrackLogType
-  deriving (Eq, Ord, Show)
-
-instance Markdown TrackLog where
-  markdown (TrackLog uri name ttype) =
-    let t = markdown ttype        
-        n = fmap (\z -> "**" ++ z ++ "**") name
-    in  concat $ 
-          case ttype of 
-            ImageLog _ ->              
-                [
-                  "  * "
-                , case n of
-                    Nothing ->
-                      "*" ++ t ++ "*"
-                    Just n' ->
-                      n'
-                , "\n\n    "
-                , "<a href=\""
-                , uri
-                , "\"><img src=\""
-                , uri
-                , "\" width=\"360\" alt=\""
-                , fromMaybe t name
-                , "\"></a>"
-                ]
-            _ ->              
-                [
-                  "  * "
-                , case n of
-                    Nothing ->
-                      ""
-                    Just n' ->
-                      n' ++ ": "
-                , "["
-                , t
-                , "]("
-                , uri
-                , ")"
-                ]
-
-instance Html TrackLog where
-  html (TrackLog uri name ttype) =
-    let t = html ttype   
-        n = fmap html name
-    in  concat [
-            "<div class=\"tracklog\">"
-          , concat $ 
-              case ttype of 
-                ImageLog _ ->
-                  [
-                    fromMaybe (concat
-                          [
-                            "<a href=\""
-                          , uri
-                          , "\">"
-                          , "<span class=\"tracklogtype\">"
-                          , t
-                          , "</span>"
-                          , "</a>"
-                          ]) n
-                  , "<p>"
-                  , "<a href=\""
-                  , uri
-                  , "\">"
-                  , "<span class=\"tracklogimage\">"
-                  , "<img src=\""
-                  , uri
-                  , "\" width=\"360\" alt=\""
-                  , fromMaybe t n
-                  , "\">"
-                  , "</span>"
-                  , "</a>"
-                  , "</p>"
-                  ]
-                _ ->
-                  [
-                    case n of
-                      Nothing ->
-                        ""
-                      Just n' ->
-                        n' ++ ": "
-                  , "<a href=\""
-                  , uri
-                  , "\">"
-                  , "<span class=\"tracklogtype\">"
-                  , t
-                  , "</span>"
-                  , "</a>"
-                  ]
-             , "</div>"
-          ]
diff --git a/src/Data/Aviation/Casr/Logbook/TrackLogType.hs b/src/Data/Aviation/Casr/Logbook/TrackLogType.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/TrackLogType.hs
+++ /dev/null
@@ -1,34 +0,0 @@
-module Data.Aviation.Casr.Logbook.TrackLogType (
-  TrackLogType(..)
-) where
-
-import Data.Aviation.Casr.Logbook.ImageType
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-
-data TrackLogType =
-  Gpx
-  | Kml
-  | Kmz
-  | ImageLog ImageType
-  deriving (Eq, Ord, Show)
-    
-instance Markdown TrackLogType where
-  markdown Gpx =
-    "gpx"
-  markdown Kml =
-    "kml"
-  markdown Kmz =
-    "kmz"
-  markdown (ImageLog i) =
-    markdown i
-
-instance Html TrackLogType where
-  html Gpx =
-    "gpx"
-  html Kml =
-    "kml"
-  html Kmz =
-    "kmz"
-  html (ImageLog i) =
-    html i
diff --git a/src/Data/Aviation/Casr/Logbook/TrackLogs.hs b/src/Data/Aviation/Casr/Logbook/TrackLogs.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/TrackLogs.hs
+++ /dev/null
@@ -1,48 +0,0 @@
-module Data.Aviation.Casr.Logbook.TrackLogs (
-  TrackLogs(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.Aviation.Casr.Logbook.TrackLog
-
-newtype TrackLogs =
-  TrackLogs
-    [TrackLog]
-  deriving (Eq, Ord, Show)
-
-instance Monoid TrackLogs where
-  mempty =
-    TrackLogs []
-  TrackLogs t1 `mappend` TrackLogs t2 =
-    TrackLogs (t1 `mappend` t2)
-
-instance Markdown TrackLogs where
-  markdown (TrackLogs t) =
-    case t of
-      [] ->
-        ""
-      _ ->
-        "* **Track**\n" ++ (t >>= \u -> markdown u ++ "\n")
-
-instance Html TrackLogs where
-  html (TrackLogs t) =
-    case t of
-      [] ->
-        ""
-      _ ->
-        concat
-          [
-            "<span class=\"heading tracklogheading\">"
-          , "Track"
-          , "</span>"
-          , "<ul>"
-          , t >>= \u -> concat
-                          [
-                            "<li>"
-                          , html u
-                          , "</li>"
-                          ]
-          , "</ul>"
-          ]
-        
diff --git a/src/Data/Aviation/Casr/Logbook/Video.hs b/src/Data/Aviation/Casr/Logbook/Video.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/Video.hs
+++ /dev/null
@@ -1,103 +0,0 @@
-module Data.Aviation.Casr.Logbook.Video (
-  Video(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.Aviation.Casr.Logbook.VideoType
-import Data.Maybe
-
-data Video =
-  Video
-    String -- uri
-    (Maybe String) -- name
-    VideoType
-  deriving (Eq, Ord, Show)
-
-instance Markdown Video where
-  markdown (Video uri name vtype) =
-    let t = markdown vtype
-        n = fromMaybe ("Video (" ++ t ++ ")") name
-    in  concat
-          [
-            "**"
-          , n
-          , ":** ["
-          , t
-          , "]("
-          , "https://www.youtube.com/watch?v="
-          , uri
-          , ")"
-          ]
-
-instance Html Video where
-  html (Video uri name vtype) =
-    let t = html vtype
-        n = fromMaybe ("Video (" ++ t ++ ")") name
-    in  concat
-          [
-            "<div>"
-          , case vtype of
-              YouTube ->
-                concat
-                  [
-                    "<a href=\"https://www.youtube.com/watch?v="
-                  , uri
-                  , "\">"
-                  , "<span class=\"videoname\">"
-                  , html n
-                  , "</span>"
-                  , "</a>"
-                  ]
-              Bambuser ->
-                concat
-                  [
-                    "<a href=\"https://bambuser.com/v/"
-                  , uri
-                  , "\">"
-                  , "<span class=\"videoname\">"
-                  , html n
-                  , "</span>"
-                  , "</a>"
-                  ]
-              Vimeo ->
-                concat
-                  [
-                    "<a href=\"https://vimeo.com/"
-                  , uri
-                  , "\">"
-                  , "<span class=\"videoname\">"
-                  , html n
-                  , "</span>"
-                  , "</a>"
-                   ]
-          , "</div>"
-          , "<p>"
-          , case vtype of
-              YouTube ->
-                concat
-                  [  
-                    "<iframe width=\"560\" height=\"315\" allowfullscreen=\"allowfullscreen\" src=\"http://www.youtube.com/embed/"
-                  , uri
-                  , "?autohide=1&amp;cc_load_policy=1&amp;color=white&amp;controls=1&amp;disablekb=0&amp;fs=1&amp;iv_load_policy=0&amp;loop=0&amp;modestbranding=1&amp;rel=0&amp;showinfo=0\">"
-                  , "</iframe>"                                  
-                  ]
-              Bambuser ->
-                concat
-                  [                 
-                    "<iframe width=\"560\" height=\"315\" allowfullscreen=\"allowfullscreen\" src=\"https://embed.bambuser.com/broadcast/"
-                  , uri
-                  , "?chat=1&amp;mute=0"
-                  , "\">"
-                  , "</iframe>"                   
-                  ]
-              Vimeo ->
-                concat
-                  [ 
-                    "<iframe width=\"560\" height=\"315\" allowfullscreen=\"allowfullscreen\" src=\"https://player.vimeo.com/video/"
-                  , uri
-                  , "\">"
-                  , "</iframe>"                                  
-                  ]
-            , "</p>"
-          ]
diff --git a/src/Data/Aviation/Casr/Logbook/VideoType.hs b/src/Data/Aviation/Casr/Logbook/VideoType.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/VideoType.hs
+++ /dev/null
@@ -1,28 +0,0 @@
-module Data.Aviation.Casr.Logbook.VideoType (
-  VideoType(..)  
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-
-data VideoType =
-  YouTube
-  | Vimeo
-  | Bambuser
-  deriving (Eq, Ord, Show)
-
-instance Markdown VideoType where
-  markdown YouTube =
-    "youtube"
-  markdown Vimeo =
-    "vimeo"
-  markdown Bambuser =
-    "bambuser"
-
-instance Html VideoType where
-  html YouTube =
-    "youtube"
-  html Vimeo =
-    "vimeo"
-  html Bambuser =
-    "bambuser"
diff --git a/src/Data/Aviation/Casr/Logbook/Videos.hs b/src/Data/Aviation/Casr/Logbook/Videos.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/Videos.hs
+++ /dev/null
@@ -1,48 +0,0 @@
-module Data.Aviation.Casr.Logbook.Videos (
-  Videos(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.Aviation.Casr.Logbook.Video
-
-newtype Videos =
-  Videos
-    [Video]
-  deriving (Eq, Ord, Show)
-    
-instance Monoid Videos where
-  mempty =
-    Videos []
-  Videos v1 `mappend` Videos v2 =
-    Videos (v1 `mappend` v2)
-
-instance Markdown Videos where
-  markdown (Videos v) =
-    case v of
-      [] ->
-        ""
-      _ ->
-        "* **Videos**\n" ++ (v >>= \w -> "  * " ++ markdown w ++ "\n")
-
-instance Html Videos where
-  html (Videos v) =
-    case v of
-      [] ->
-        ""
-      _ ->
-        concat
-          [
-            "<span class=\"heading videoheading\">"
-          , "Video"
-          , "</span>"
-          , "<ul>"
-          , v >>= \u -> concat
-                          [
-                            "<li>"
-                          , html u
-                          , "</li>"
-                          ]
-          , "</ul>"
-          ]
-        
diff --git a/src/Data/Aviation/Casr/Logbook/Visualisation.hs b/src/Data/Aviation/Casr/Logbook/Visualisation.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/Visualisation.hs
+++ /dev/null
@@ -1,56 +0,0 @@
-module Data.Aviation.Casr.Logbook.Visualisation (
-  Visualisation(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.VisualisationType
-import Data.Maybe
-
-data Visualisation =
-  Visualisation
-    String -- uri
-    (Maybe String) -- name
-    VisualisationType
-  deriving (Eq, Ord, Show)
-
-instance Markdown Visualisation where
-  markdown (Visualisation uri name vtype) =
-    let t = markdown vtype
-        n = case name of
-              Nothing -> ""
-              Just n' -> "**" ++ n' ++ "**: "
-    in  concat
-          [
-            n
-          , "["
-          , t
-          , "]("
-          , uri
-          , ")"
-          ]
-
-instance Html Visualisation where
-  html (Visualisation uri name vtype) =
-    let t = html vtype
-        n = fromMaybe t name
-    in  concat
-          [
-            "<a href=\""
-          , uri
-          , "\">"
-          , "<span class=\"visualisationheading\">"
-          , html n
-          , "</span>"
-          , "</a>"
-          , "<p>"
-          , case vtype of
-              Doarama e ->
-                concat
-                  [
-                    "<iframe src=\"http://www.doarama.com/embed?k="
-                  , e
-                  , "\" width=\"560\" height=\"315\" allowfullscreen=\"allowfullscreen\">"
-                  , "</iframe>"
-                  ]
-          ]
diff --git a/src/Data/Aviation/Casr/Logbook/VisualisationType.hs b/src/Data/Aviation/Casr/Logbook/VisualisationType.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/VisualisationType.hs
+++ /dev/null
@@ -1,19 +0,0 @@
-module Data.Aviation.Casr.Logbook.VisualisationType (
-  VisualisationType(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-
-data VisualisationType =
-  Doarama
-    String -- http://oembed.frdnspnzr.de/
-  deriving (Eq, Ord, Show)
-
-instance Markdown VisualisationType where
-  markdown (Doarama _) =
-    "doarama"
-
-instance Html VisualisationType where
-  html (Doarama _) =
-    "doarama"
diff --git a/src/Data/Aviation/Casr/Logbook/Visualisations.hs b/src/Data/Aviation/Casr/Logbook/Visualisations.hs
deleted file mode 100644
--- a/src/Data/Aviation/Casr/Logbook/Visualisations.hs
+++ /dev/null
@@ -1,48 +0,0 @@
-module Data.Aviation.Casr.Logbook.Visualisations (
-  Visualisations(..)
-) where
-
-import Data.Aviation.Casr.Logbook.Printer.Html
-import Data.Aviation.Casr.Logbook.Printer.Markdown
-import Data.Aviation.Casr.Logbook.Visualisation
-
-newtype Visualisations =
-  Visualisations
-    [Visualisation]
-  deriving (Eq, Ord, Show)
-    
-instance Monoid Visualisations where
-  mempty =
-    Visualisations []
-  Visualisations v1 `mappend` Visualisations v2 =
-    Visualisations (v1 `mappend` v2)
-       
-instance Markdown Visualisations where
-  markdown (Visualisations v) =
-    case v of
-      [] ->
-        ""
-      _ ->
-        "* **Visualisations**\n" ++ (v >>= \w -> "  * " ++ markdown w ++ "\n")
-
-instance Html Visualisations where
-  html (Visualisations v) =
-    case v of
-      [] ->
-        ""
-      _ ->
-        concat
-          [
-            "<span class=\"heading visualisationheading\">"
-          , "Visualisation"
-          , "</span>"
-          , "<ul>"
-          , v >>= \u -> concat
-                          [
-                            "<li>"
-                          , html u
-                          , "</li>"
-                          ]
-          , "</ul>"
-          ]
-        
