diff --git a/ChangeLog b/ChangeLog
new file mode 100644
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,15 @@
+2015-06-15 Facundo Domínguez <facundo.dominguez@tweag.io> 0.2.1
+
+* Use random port in tests.
+* Add compatibility with ghc-7.10.
+* Fix dependency bounds.
+* Add missing NFData instances.
+
+# HEAD
+
+* Added initial GenServer module
+* Added Timer Module
+* Moved time functions into Time.hs
+* Added Async API
+* Added GenProcess API (subsumes lower level GenServer API)
+
diff --git a/distributed-process-extras.cabal b/distributed-process-extras.cabal
--- a/distributed-process-extras.cabal
+++ b/distributed-process-extras.cabal
@@ -1,5 +1,5 @@
 name:           distributed-process-extras
-version:        0.2.0
+version:        0.2.1.1
 cabal-version:  >=1.8
 build-type:     Simple
 license:        BSD3
@@ -7,7 +7,7 @@
 stability:      experimental
 Copyright:      Tim Watson 2012 - 2013
 Author:         Tim Watson
-Maintainer:     watson.timothy@gmail.com
+Maintainer:     Facundo Domínguez <facundo.dominguez@tweag.io>
 Stability:      experimental
 Homepage:       http://github.com/haskell-distributed/distributed-process-extras
 Bug-Reports:    https://cloud-haskell.atlassian.net
@@ -17,29 +17,26 @@
 category:       Control
 tested-with:    GHC == 7.4.2 GHC == 7.6.2
 data-dir:       ""
+extra-source-files: ChangeLog
 
 source-repository head
   type:      git
   location:  https://github.com/haskell-distributed/distributed-process-extras
 
-flag perf
-  description: Build with profiling enabled
-  default: False
-
 library
   build-depends:
                    base >= 4.4 && < 5,
                    data-accessor >= 0.2.2.3,
                    distributed-process >= 0.5.3 && < 0.6,
                    binary >= 0.6.3.0 && < 0.8,
-                   deepseq >= 1.3.0.1 && < 1.4,
+                   deepseq >= 1.3.0.1 && < 1.6,
                    mtl,
                    containers >= 0.4 && < 0.6,
                    hashable >= 1.2.0.5 && < 1.3,
                    unordered-containers >= 0.2.3.0 && < 0.3,
                    fingertree < 0.2,
                    stm >= 2.4 && < 2.5,
-                   time > 1.4 && < 1.5,
+                   time > 1.4 && < 1.6,
                    transformers
   if impl(ghc <= 7.5)
     Build-Depends:   template-haskell == 2.7.0.0,
@@ -73,7 +70,7 @@
                    ansi-terminal >= 0.5 && < 0.7,
                    distributed-process >= 0.5.3 && < 0.6,
                    distributed-process-extras,
-                   distributed-process-tests >= 0.4.3 && < 0.5,
+                   distributed-process-tests >= 0.4.2 && < 0.5,
                    HUnit >= 1.2 && < 2,
                    test-framework >= 0.6 && < 0.9,
                    test-framework-hunit,
@@ -96,13 +93,13 @@
                    ansi-terminal >= 0.5 && < 0.7,
                    distributed-process >= 0.5.3 && < 0.6,
                    distributed-process-extras,
-                   distributed-process-tests >= 0.4.3 && < 0.5,
+                   distributed-process-tests >= 0.4.2 && < 0.5,
                    network-transport >= 0.4 && < 0.5,
                    mtl,
                    containers >= 0.4 && < 0.6,
                    network-transport-tcp >= 0.4 && < 0.5,
                    binary >= 0.6.3.0 && < 0.8,
-                   deepseq >= 1.3.0.1 && < 1.4,
+                   deepseq >= 1.3.0.1 && < 1.6,
                    network >= 2.3 && < 2.7,
                    HUnit >= 1.2 && < 2,
                    stm >= 2.3 && < 2.5,
@@ -122,10 +119,10 @@
   build-depends:
                    base >= 4.4 && < 5,
                    ansi-terminal >= 0.5 && < 0.7,
-                   deepseq >= 1.3.0.1 && < 1.4,
+                   deepseq >= 1.3.0.1 && < 1.6,
                    distributed-process >= 0.5.3 && < 0.6,
                    distributed-process-extras,
-                   distributed-process-tests >= 0.4.3 && < 0.5,
+                   distributed-process-tests >= 0.4.2 && < 0.5,
                    network-transport >= 0.4 && < 0.5,
                    network-transport-tcp >= 0.4 && < 0.5,
                    HUnit >= 1.2 && < 2,
@@ -153,20 +150,20 @@
                    unordered-containers >= 0.2.3.0 && < 0.3,
                    distributed-process >= 0.5.3 && < 0.6,
                    distributed-process-extras,
-                   distributed-process-tests >= 0.4.3 && < 0.5,
+                   distributed-process-tests >= 0.4.2 && < 0.5,
                    distributed-static,
                    bytestring,
                    data-accessor,
                    fingertree < 0.2,
                    network-transport >= 0.4 && < 0.5,
-                   deepseq >= 1.3.0.1 && < 1.4,
+                   deepseq >= 1.3.0.1 && < 1.6,
                    mtl,
                    network-transport-tcp >= 0.4 && < 0.5,
                    binary >= 0.6.3.0 && < 0.8,
                    network >= 2.3 && < 2.7,
                    HUnit >= 1.2 && < 2,
                    stm >= 2.3 && < 2.5,
-                   time > 1.4 && < 1.5,
+                   time > 1.4 && < 1.6,
                    test-framework >= 0.6 && < 0.9,
                    test-framework-hunit,
                    transformers,
diff --git a/src/Control/Distributed/Process/Extras/Internal/Containers/MultiMap.hs b/src/Control/Distributed/Process/Extras/Internal/Containers/MultiMap.hs
--- a/src/Control/Distributed/Process/Extras/Internal/Containers/MultiMap.hs
+++ b/src/Control/Distributed/Process/Extras/Internal/Containers/MultiMap.hs
@@ -16,13 +16,14 @@
   ) where
 
 import qualified Data.Foldable as Foldable
+import Data.Foldable (Foldable)
 
 import Data.Hashable
 import Data.HashMap.Strict (HashMap)
 import qualified Data.HashMap.Strict as Map
 import Data.HashSet (HashSet)
 import qualified Data.HashSet as Set
-import Data.Foldable (Foldable(..))
+import Data.Foldable (Foldable(foldr))
 import Prelude hiding (lookup, filter, pred)
 
 -- | Class of things that can be inserted in a map or
@@ -92,4 +93,3 @@
   where
     explode xs k vs = Set.foldl' (\ys v -> ((k, v):ys)) xs vs
 {-# INLINE toList #-}
-
diff --git a/src/Control/Distributed/Process/Extras/Internal/Types.hs b/src/Control/Distributed/Process/Extras/Internal/Types.hs
--- a/src/Control/Distributed/Process/Extras/Internal/Types.hs
+++ b/src/Control/Distributed/Process/Extras/Internal/Types.hs
@@ -43,7 +43,7 @@
   , newMVar
   , modifyMVar
   )
-import Control.DeepSeq (NFData, ($!!))
+import Control.DeepSeq (NFData(..), ($!!))
 import Control.Distributed.Process hiding (send)
 import qualified Control.Distributed.Process as P
   ( send
@@ -138,6 +138,10 @@
 --  | GlobalReg String
   deriving (Typeable, Generic, Show, Eq)
 instance Binary Recipient where
+instance NFData Recipient where
+  rnf (Pid p) = rnf p `seq` ()
+  rnf (Registered s) = rnf s `seq` ()
+  rnf (RemoteRegistered s n) = rnf s `seq` rnf n `seq` ()
 
 -- useful exit reasons
 
diff --git a/src/Control/Distributed/Process/Extras/SystemLog.hs b/src/Control/Distributed/Process/Extras/SystemLog.hs
--- a/src/Control/Distributed/Process/Extras/SystemLog.hs
+++ b/src/Control/Distributed/Process/Extras/SystemLog.hs
@@ -6,6 +6,7 @@
 {-# LANGUAGE FlexibleInstances    #-}
 {-# LANGUAGE OverlappingInstances #-}
 {-# LANGUAGE UndecidableInstances #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 
 -----------------------------------------------------------------------------
 -- |
@@ -67,7 +68,7 @@
   , sendLog
   ) where
 
-import Control.DeepSeq (NFData)
+import Control.DeepSeq (NFData(..))
 import Control.Distributed.Process
 import Control.Distributed.Process.Management
   ( MxEvent(MxConnected, MxDisconnected, MxLog, MxUser)
@@ -127,16 +128,16 @@
   deriving (Typeable, Generic, Eq,
             Read, Show, Ord, Enum)
 instance Binary LogLevel where
+instance NFData LogLevel where rnf x = x `seq` ()
 
 data SetLevel = SetLevel !LogLevel
   deriving (Typeable, Generic)
 instance Binary SetLevel where
-instance NFData SetLevel where
+instance NFData SetLevel where rnf x = x `seq` ()
 
-data AddFormatter = AddFormatter !(Closure (Message -> Process (Maybe String)))
-  deriving (Typeable, Generic)
-instance Binary AddFormatter where
-instance NFData AddFormatter where
+newtype AddFormatter = AddFormatter (Closure (Message -> Process (Maybe String)))
+  deriving (Typeable, Generic, NFData)
+instance Binary AddFormatter
 
 data LogState =
   LogState { output      :: !(String -> Process ())
@@ -151,7 +152,7 @@
   | LogData    !Message !LogLevel
   deriving (Typeable, Generic, Show)
 instance Binary LogMessage where
-instance NFData LogMessage where
+instance NFData LogMessage where rnf x = x `seq` ()
 
 type LogFormat = String -> Process String
 
diff --git a/tests/TestLog.hs b/tests/TestLog.hs
--- a/tests/TestLog.hs
+++ b/tests/TestLog.hs
@@ -134,7 +134,7 @@
 testMain :: (NT.Transport -> IO [Test]) -> IO ()
 testMain builder = do
   Right (transport, _) <- createTransportExposeInternals
-                                     "127.0.0.1" "10501" defaultTCPParameters
+                                     "127.0.0.1" "0" defaultTCPParameters
   testData <- builder transport
   defaultMain testData
 
diff --git a/tests/TestPrimitives.hs b/tests/TestPrimitives.hs
--- a/tests/TestPrimitives.hs
+++ b/tests/TestPrimitives.hs
@@ -214,7 +214,7 @@
 testMain :: (NT.Transport -> IO [Test]) -> IO ()
 testMain builder = do
   Right (transport, _) <- createTransportExposeInternals
-                                     "127.0.0.1" "10501" defaultTCPParameters
+                                     "127.0.0.1" "0" defaultTCPParameters
   testData <- builder transport
   defaultMain testData
 
diff --git a/tests/TestTimer.hs b/tests/TestTimer.hs
--- a/tests/TestTimer.hs
+++ b/tests/TestTimer.hs
@@ -188,7 +188,7 @@
 testMain :: (NT.Transport -> IO [Test]) -> IO ()
 testMain builder = do
   Right (transport, _) <- createTransportExposeInternals
-                                     "127.0.0.1" "10501" defaultTCPParameters
+                                     "127.0.0.1" "0" defaultTCPParameters
   testData <- builder transport
   defaultMain testData
 
