diff --git a/Data/RelevantTime.hs b/Data/RelevantTime.hs
--- a/Data/RelevantTime.hs
+++ b/Data/RelevantTime.hs
@@ -1,20 +1,23 @@
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE OverloadedStrings #-}
+{-# language DeriveGeneric #-}
+{-# language LambdaCase #-}
+{-# language OverloadedStrings #-}
 
-{-# OPTIONS_GHC -Wall #-}
+{-# options_ghc -Wall #-}
 
 module Data.RelevantTime
   ( RelevantTime(..)
   , encodeRelevantTime
   , decodeRelevantTime
   , absolutizeRelevantTime
+  , relativizeAbsoluteTime
   ) where
 
 import Data.Text (Text)
 import Data.Aeson (ToJSON(..),FromJSON(..))
 import Data.Int (Int64)
 import Chronos.Types (Time)
-import Torsor (add,invert,scale)
+import Torsor (add,difference,invert,scale)
+import GHC.Generics (Generic)
 import qualified Chronos as CH
 import qualified Data.Text as T
 import qualified Data.Text.Read as TR
@@ -27,7 +30,7 @@
   | RelevantTimeNow
   | RelevantTimeMidnight
   | RelevantTimeNoon
-  deriving (Eq,Show)
+  deriving (Eq,Ord,Generic,Show)
 
 instance ToJSON RelevantTime where
   toJSON = AE.String . encodeRelevantTime
@@ -56,16 +59,36 @@
       'm' -> RelevantTimeMinute <$> readInt (T.init t)
       'h' -> RelevantTimeHour <$> readInt (T.init t)
       'd' -> RelevantTimeDay <$> readInt (T.init t)
+      'w' -> RelevantTimeDay <$> (fmap ((*) 7 ) $ readInt (T.init t))
+      'M' -> RelevantTimeDay <$> (fmap ((*) 30) $ readInt (T.init t))
       _ -> Nothing
 
 absolutizeRelevantTime :: Time -> RelevantTime -> Time
-absolutizeRelevantTime now x = case x of
+absolutizeRelevantTime now = \case
   RelevantTimeNow -> now
-  RelevantTimeNoon-> add (scale 12 CH.hour) (CH.dayToTimeMidnight (CH.timeToDayTruncate now))
+  RelevantTimeNoon -> add (scale 12 CH.hour) (CH.dayToTimeMidnight (CH.timeToDayTruncate now))
   RelevantTimeMidnight -> CH.dayToTimeMidnight (CH.timeToDayTruncate now)
   RelevantTimeMinute n -> add (invert (scale n CH.minute)) now
   RelevantTimeHour n -> add (invert (scale n CH.hour)) now
   RelevantTimeDay n -> add (invert (scale n CH.day)) now
+
+relativizeAbsoluteTime :: Time -> Time -> RelevantTime
+relativizeAbsoluteTime now abst
+  | absolutizeRelevantTime now RelevantTimeNoon == abst = RelevantTimeNoon
+  | absolutizeRelevantTime now RelevantTimeMidnight == abst = RelevantTimeMidnight
+  | diff <  (CH.getTimespan CH.minute) = RelevantTimeNow
+  | diff <= (CH.getTimespan CH.minute) * 59 = RelevantTimeMinute $ round $ (toFrac diff) / (minute * nanoseconds)
+  | diff <= (CH.getTimespan CH.hour) * 23 = RelevantTimeHour $ round $ (toFrac diff) / (hour * nanoseconds)
+  | otherwise = RelevantTimeDay $ round $ (toFrac diff) / (day * nanoseconds)
+  where
+  diff :: Int64
+  diff = (abs $ CH.getTimespan (now `difference` abst))
+  toFrac :: Int64 -> Rational
+  toFrac = fromIntegral . abs
+  minute = 60
+  hour = 60 * minute
+  day = 24 * hour
+  nanoseconds = 1000000000
 
 readInt :: Text -> Maybe Int64
 readInt x = case TR.signed TR.decimal x of
diff --git a/relevant-time.cabal b/relevant-time.cabal
--- a/relevant-time.cabal
+++ b/relevant-time.cabal
@@ -1,26 +1,32 @@
-name:                relevant-time
-version:             0.1.0.0
-synopsis:            humanised relevant time
-description:         Humans tend to think of time relative to a fixed point.
-                     This library offers a simple datatype, 'RelevantTime',
-                     which captures the logic behind that idea.
-homepage:            https://github.com/chessai/relevant-time.git
-license:             BSD3
-license-file:        LICENSE
-author:              Daniel Cartwright
-maintainer:          dcartwright@layer3com.com
-copyright:           copyright (c) Layer 3 Communications, Daniel Cartwright 
-category:            Data 
-build-type:          Simple
-extra-source-files:  ChangeLog.md
-cabal-version:       >=1.10
+name: relevant-time
+version: 0.1.1.0
+synopsis: humanised relevant time
+description: 
+  Humans tend to think of time relative to a fixed point.
+  This library offers a simple datatype, 'RelevantTime',
+  which captures the logic behind that idea.
+homepage: https://github.com/chessai/relevant-time.git
+license: BSD3
+license-file: LICENSE
+author: Daniel Cartwright
+maintainer: dcartwright@layer3com.com
+copyright: copyright (c) Layer 3 Communications, Daniel Cartwright 
+category: Data 
+build-type: Simple
+extra-source-files: ChangeLog.md
+cabal-version: >=1.10
 
 library
-  exposed-modules:     Data.RelevantTime
-  other-extensions:    LambdaCase, OverloadedStrings
-  build-depends:       base >=4.7 && <5.0
-                     , aeson
-                     , chronos
-                     , text
-                     , torsor
-  default-language:    Haskell2010
+ exposed-modules: Data.RelevantTime
+ other-extensions: LambdaCase, OverloadedStrings
+ build-depends: 
+    base >=4.8 && <5.0
+  , aeson >= 1.0 && < 1.5
+  , text >= 1.2 && < 1.3
+  , chronos >= 1.0 && < 1.1
+  , torsor >= 0.1 && < 0.2
+ default-language: Haskell2010
+
+source-repository head
+ type: git
+ location: https://github.com/layer-3-communications/relevant-time
