diff --git a/monad-time.cabal b/monad-time.cabal
--- a/monad-time.cabal
+++ b/monad-time.cabal
@@ -1,6 +1,7 @@
 name:                monad-time
-version:             0.1
+version:             0.2
 synopsis:            Type class for monads which carry the notion of the current time.
+description:         'MonadTime' type class for monads which carry the notion of the current time.
 homepage:            https://github.com/scrive/monad-time
 license:             BSD3
 license-file:        LICENSE
@@ -9,14 +10,31 @@
 category:            Control
 build-type:          Simple
 cabal-version:       >=1.10
+tested-with:         GHC==7.4.2, GHC==7.6.3, GHC==7.8.4, GHC==7.10.3, GHC==8.0.1
 
+source-repository head
+  type:     git
+  location: git@github.com:scrive/monad-time.git
+
 library
-  exposed-modules:   Control.Monad.Time,
-                     Control.Monad.Time.Instances
+  exposed-modules:   Control.Monad.Time
 
   build-depends:     base < 5,
                      mtl,
                      time
 
   hs-source-dirs:    src
+
+  ghc-options:       -Wall
+
   default-language:  Haskell2010
+
+test-suite monad-time-test
+  type:              exitcode-stdio-1.0
+  main-is:           Main.hs
+  hs-source-dirs:    test
+  default-language:  Haskell2010
+  build-depends:     base,
+                     mtl,
+                     monad-time,
+                     time
diff --git a/src/Control/Monad/Time.hs b/src/Control/Monad/Time.hs
--- a/src/Control/Monad/Time.hs
+++ b/src/Control/Monad/Time.hs
@@ -1,3 +1,6 @@
+{-# OPTIONS_GHC -fno-warn-deprecated-flags #-}
+{-# LANGUAGE FlexibleContexts, FlexibleInstances, OverlappingInstances
+  , UndecidableInstances #-}
 module Control.Monad.Time (MonadTime(..)) where
 
 import Control.Monad.Trans
@@ -7,5 +10,14 @@
 class Monad m => MonadTime m where
   currentTime :: m UTCTime
 
+-- | Base instance for IO.
 instance MonadTime IO where
   currentTime = getCurrentTime
+
+-- | Generic, overlapping instance.
+instance (
+    MonadTime m
+  , MonadTrans t
+  , Monad (t m)
+  ) => MonadTime (t m) where
+    currentTime = lift currentTime
diff --git a/src/Control/Monad/Time/Instances.hs b/src/Control/Monad/Time/Instances.hs
deleted file mode 100644
--- a/src/Control/Monad/Time/Instances.hs
+++ /dev/null
@@ -1,15 +0,0 @@
-{-# LANGUAGE FlexibleContexts, FlexibleInstances, OverlappingInstances
-  , UndecidableInstances #-}
-module Control.Monad.Time.Instances () where
-
-import Control.Monad.Trans
-
-import Control.Monad.Time
-
--- | Generic, overlapping instance.
-instance (
-    MonadTime m
-  , MonadTrans t
-  , Monad (t m)
-  ) => MonadTime (t m) where
-    currentTime = lift currentTime
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,13 @@
+module Main (main) where
+
+import Control.Monad.Reader
+import Control.Monad.State
+
+import Control.Monad.Time
+
+main :: IO ()
+main = do
+  currentTime >>= print
+  -- Test that generic MonadTrans instance works.
+  runReaderT currentTime 'x' >>= print
+  evalStateT (runReaderT currentTime 'x') 'y' >>= print
