diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,1 @@
+# hashable-time
diff --git a/hashable-time.cabal b/hashable-time.cabal
--- a/hashable-time.cabal
+++ b/hashable-time.cabal
@@ -1,25 +1,34 @@
--- Initial hashable-time.cabal generated by cabal init.  For further 
--- documentation, see http://haskell.org/cabal/users-guide/
-
 name:                hashable-time
-version:             0.1.0.1
+version:             0.2
 synopsis:            Hashable instances for Data.Time
--- description:         
+description:
+  Hashable instances for types in Data.Time
 license:             BSD3
 license-file:        LICENSE
-author:              Alexey Karakulov
-maintainer:          ankarakulov@gmail.com
--- copyright:           
+author:              Alexey Karakulov <ankarakulov@gmail.com>
+maintainer:          Alexey Karakulov <ankarakulov@gmail.com>
 category:            Data
 build-type:          Simple
--- extra-source-files:  
 cabal-version:       >=1.10
+tested-with:         GHC==7.8.4, GHC==7.10.2
+extra-source-files:  README.md
 
+flag old-locale
+  manual: False
+  default: False
+
 library
   exposed-modules:  Data.Hashable.Time
-  -- other-modules:       
-  -- other-extensions:    
-  build-depends:       base >=4.7 && <4.9, hashable, time
-  hs-source-dirs:      src
-  default-language:    Haskell2010
-  ghc-options: -Wall
+  hs-source-dirs:   src
+  default-language: Haskell2010
+  ghc-options:      -Wall
+  other-extensions: CPP
+  build-depends:    base >=4.7 && <4.9, hashable >=1.2.3.3 && <=1.3
+  if flag(old-locale)
+    build-depends:  time >=1.4 && <1.5, old-locale >=1.0 && <1.1
+  else
+    build-depends:  time >=1.5
+
+source-repository head
+  type:     git
+  location: https://github.com/w3rs/hashable-time
diff --git a/src/Data/Hashable/Time.hs b/src/Data/Hashable/Time.hs
--- a/src/Data/Hashable/Time.hs
+++ b/src/Data/Hashable/Time.hs
@@ -1,41 +1,76 @@
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE CPP #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
-
-module Data.Hashable.Time () where
+-- |
+-- Module      : Data.Hashable.Time
+-- Description : Hashable instances for Data.Time types
+-- License     : BSD3
+-- Maintainer  : Alexey Karakulov <ankarakulov@gmail.com>
+module Data.Hashable.Time (Hashable(..)) where
 
 import Data.Fixed
 import Data.Hashable (Hashable(..))
 import Data.Time
-import GHC.Generics  (Generic)
 
+#if !MIN_VERSION_time(1,5,0)
+import System.Locale
+#endif
 
+-- Dependencies
+
+-- ! (>=1.2.4) ~ <1.2.4 ~ <= 1.2.3
+#if !MIN_VERSION_hashable(1,2,4)
+-- https://github.com/tibbe/hashable/pull/101
+instance Hashable (Fixed a) where
+   hashWithSalt salt (MkFixed i) = hashWithSalt salt i
+#endif
+
+-- Data.Time.Clock
+
+instance Hashable UniversalTime where
+  hashWithSalt salt = hashWithSalt salt . getModJulianDate
+
 instance Hashable DiffTime where
-  hashWithSalt s = hashWithSalt s . toRational
+  hashWithSalt salt = hashWithSalt salt . toRational
 
+instance Hashable UTCTime where
+  hashWithSalt salt (UTCTime d dt) =
+    salt `hashWithSalt` d `hashWithSalt` dt
+
 instance Hashable NominalDiffTime where
-  hashWithSalt s = hashWithSalt s . toRational
+  hashWithSalt salt = hashWithSalt salt . toRational
 
-deriving instance Generic (Fixed a)
-instance Hashable (Fixed a)
+-- Data.Time.Calendar
 
-deriving instance Generic Day
-instance Hashable Day
+instance Hashable Day where
+  hashWithSalt salt (ModifiedJulianDay d) = hashWithSalt salt d
 
-deriving instance Generic TimeOfDay
-instance Hashable TimeOfDay
+-- Data.Time.LocalTime
 
-deriving instance Generic UTCTime
-instance Hashable UTCTime
+instance Hashable TimeZone where
+  hashWithSalt salt (TimeZone m s n) =
+    salt `hashWithSalt` m `hashWithSalt` s `hashWithSalt` n
 
-deriving instance Generic UniversalTime
-instance Hashable UniversalTime
+instance Hashable TimeOfDay where
+  hashWithSalt salt (TimeOfDay h m s) =
+    salt `hashWithSalt` h `hashWithSalt` m `hashWithSalt` s
 
-deriving instance Generic TimeZone
-instance Hashable TimeZone
+instance Hashable LocalTime where
+  hashWithSalt salt (LocalTime d tod) =
+    salt `hashWithSalt` d `hashWithSalt` tod
 
-deriving instance Generic LocalTime
-instance Hashable LocalTime
+instance Hashable ZonedTime where
+  hashWithSalt salt (ZonedTime lt tz) =
+    salt `hashWithSalt` lt `hashWithSalt` tz
 
-deriving instance Generic ZonedTime
-instance Hashable ZonedTime
+-- Data.Time.Locale / System.Locale
+
+instance Hashable TimeLocale where
+  hashWithSalt salt (TimeLocale a b c d e f g h) =
+    salt `hashWithSalt` a
+         `hashWithSalt` b
+         `hashWithSalt` c
+         `hashWithSalt` d
+         `hashWithSalt` e
+         `hashWithSalt` f
+         `hashWithSalt` g
+         `hashWithSalt` h
