diff --git a/Data/IORef/Strict.hs b/Data/IORef/Strict.hs
--- a/Data/IORef/Strict.hs
+++ b/Data/IORef/Strict.hs
@@ -1,7 +1,7 @@
 --------------------------------------------------------------------
 -- |
 -- Module     : Data.IORef.Strict
--- Copyright  : (c) Nicolas Pouillard 2009
+-- Copyright  : (c) Nicolas Pouillard 2009-2017
 -- License    : BSD3
 --
 -- Maintainer : Nicolas Pouillard <nicolas.pouillard@gmail.com>
@@ -30,7 +30,7 @@
 import Data.IORef (IORef)
 import Control.DeepSeq (NFData(..))
 
--- | Build a new 'IORef', but force the value before storing it.
+-- | Build a new 'IORef', but deeply force the value before storing it.
 newIORef :: NFData sa => sa -> SIO (IORef sa)
 newIORef value = rnf value `seq` SIO (IO.newIORef value)
 
@@ -40,7 +40,7 @@
 
 -- | Deeply force a value and write it into an 'IORef'
 writeIORef :: NFData sa => IORef sa -> sa -> SIO ()
-writeIORef ref value = rnf value `seq` SIO $ IO.writeIORef ref value
+writeIORef ref value = rnf value `seq` SIO (IO.writeIORef ref value)
 
 -- | Mutate the contents of an 'IORef'
 modifyIORef :: NFData sa => IORef sa -> (sa -> sa) -> SIO ()
@@ -55,10 +55,11 @@
 -- Extending the atomicity to multiple 'IORef's is problematic, so it is recommended that
 -- if you need to do anything more complicated then using "Control.Concurrent.MVar.MVar"
 -- instead is a good idea.
+--
+-- Internally this function is using @Data.IORef.atomicModifyIORef'@.
 atomicModifyIORef :: (NFData sa, NFData sb) => IORef sa -> (sa -> (sa, sb)) -> SIO sb
-atomicModifyIORef ref f = SIO $ do x <- IO.atomicModifyIORef ref (rnf' . f)
+atomicModifyIORef ref f = SIO $ do x <- IO.atomicModifyIORef' ref (rnf' . f)
                                    rnf x `seq` return x
-        -- since the result of 'f' is a pair which has to forced 
   where rnf' x = rnf x `seq` x
 
 -- | Make a 'Weak' pointer to an 'IORef'
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2009, Nicolas Pouillard
+Copyright (c) 2009-2017, Nicolas Pouillard
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/System/IO/Strict.hs b/System/IO/Strict.hs
--- a/System/IO/Strict.hs
+++ b/System/IO/Strict.hs
@@ -18,7 +18,7 @@
 -- will not leak-out after the call.
 --
 -- These functions do not necessarily use their arguments completely but they do not hold
--- or return any value that could depend on these arguments. If the original functions 
+-- or return any value that could depend on these arguments. If the original functions
 -- from "System.IO" module were already strict, then this module just provides them
 -- at another type.
 -- Some functions from the original module are famously lazy like the 'getContents' like
@@ -41,7 +41,7 @@
   SIO,
   run,
   return',
-  
+
   -- * Functions stricter than there "System.IO" counterparts
   getContents, -- :: SIO String
   hGetContents, -- :: Handle -> SIO String
@@ -196,7 +196,7 @@
 hGetLine :: Handle -> SIO String
 hGetLine = wrap1 IO.hGetLine
 hGetPosn :: Handle -> SIO HandlePosn
-hGetPosn = wrap1 IO.hGetPosn 
+hGetPosn = wrap1 IO.hGetPosn
 hIsClosed :: Handle -> SIO Bool
 hIsClosed = wrap1 IO.hIsClosed
 hIsEOF :: Handle -> SIO Bool
@@ -206,11 +206,11 @@
 hIsReadable :: Handle -> SIO Bool
 hIsReadable = wrap1 IO.hIsReadable
 hIsSeekable :: Handle -> SIO Bool
-hIsSeekable = wrap1 IO.hIsSeekable 
+hIsSeekable = wrap1 IO.hIsSeekable
 hIsTerminalDevice :: Handle -> SIO Bool
 hIsTerminalDevice = wrap1 IO.hIsTerminalDevice
 hIsWritable :: Handle -> SIO Bool
-hIsWritable = wrap1 IO.hIsWritable 
+hIsWritable = wrap1 IO.hIsWritable
 hLookAhead :: Handle -> SIO Char
 hLookAhead = wrap1 IO.hLookAhead
 hPutBuf :: Handle -> Ptr a -> Int -> SIO ()
@@ -232,7 +232,7 @@
 hSetFileSize :: Handle -> Integer -> SIO ()
 hSetFileSize = wrap2 IO.hSetFileSize
 hSetPosn :: HandlePosn -> SIO ()
-hSetPosn = wrap1 IO.hSetPosn 
+hSetPosn = wrap1 IO.hSetPosn
 hShow :: Handle -> SIO String
 hShow = wrap1 IO.hShow
 hTell :: Handle -> SIO Integer
diff --git a/System/IO/Strict/Internals.hs b/System/IO/Strict/Internals.hs
--- a/System/IO/Strict/Internals.hs
+++ b/System/IO/Strict/Internals.hs
@@ -24,7 +24,7 @@
 
   -- * A stricter 'return'
   return',
-  
+
   -- * Wrapping functions
   wrap0, -- :: IO a -> SIO a
   wrap0', -- :: NFData sa => IO sa -> SIO sa
diff --git a/strict-io.cabal b/strict-io.cabal
--- a/strict-io.cabal
+++ b/strict-io.cabal
@@ -1,6 +1,6 @@
 name:            strict-io
 cabal-Version:   >=1.6
-version:         0.2.1
+version:         0.2.2
 license:         BSD3
 license-File:    LICENSE
 copyright:       (c) Nicolas Pouillard
@@ -8,24 +8,24 @@
 maintainer:      Nicolas Pouillard <nicolas.pouillard@gmail.com>
 category:        System
 synopsis:        A library wrapping standard IO modules to provide strict IO.
-description:     This library is a thin layer on top standard IO modules like System.IO
-                 and Data.IORef that re-expose these functions under a different type, namely SIO.
+description:     A thin layer on top standard IO modules like System.IO
+                 and Data.IORef that re-expose strict functions using the SIO
+                 monad.
 stability:       Provisional
 build-type:      Simple
 
 library
-  build-depends:   base>=3.0 && <5, deepseq>=1.1 && <1.4, extensible-exceptions
+  build-depends:   base>=4.6 && <5, deepseq>=1.1 && <1.5, extensible-exceptions
   exposed-modules: System.IO.Strict
                    System.IO.Strict.Internals
                    Data.IORef.Strict
   ghc-options:     -Wall -O2
 
 source-repository head
-  type:     darcs
-  location: http://patch-tag.com/publicrepos/strict-io
+  type:     git
+  location: https://github.com/np/strict-io
 
 source-repository this
-  type:     darcs
-  location: http://patch-tag.com/publicrepos/strict-io
-  tag:      0.2.0
-
+  type:     git
+  location: https://github.com/np/strict-io
+  tag:      v0.2.2
