diff --git a/distributed-process-p2p.cabal b/distributed-process-p2p.cabal
--- a/distributed-process-p2p.cabal
+++ b/distributed-process-p2p.cabal
@@ -1,5 +1,5 @@
 name:                distributed-process-p2p
-version:             0.1.1.1
+version:             0.1.1.2
 synopsis:            Peer-to-peer node discovery for Cloud Haskell
 description:         Bootstraps a peer-to-peer connection network from a set of known hosts.
 homepage:            https://bitbucket.org/dpwiz/distributed-process-p2p/
@@ -34,6 +34,7 @@
 executable jollycloud
   hs-source-dirs:      tests/
   main-is:             JollyCloud.hs
+  ghc-options:         -threaded
   build-depends:
     base ==4.*,
     mtl ==2.*,
diff --git a/src/Control/Distributed/Backend/P2P.hs b/src/Control/Distributed/Backend/P2P.hs
--- a/src/Control/Distributed/Backend/P2P.hs
+++ b/src/Control/Distributed/Backend/P2P.hs
@@ -32,6 +32,7 @@
 import Control.Applicative
 import Control.Monad.Trans
 import Control.Concurrent.MVar
+import Control.Concurrent (threadDelay)
 
 import qualified Data.ByteString.Char8 as BS
 import qualified Data.ByteString.Lazy.Char8 as BSL
@@ -52,7 +53,6 @@
 initPeerState = do
     self <- getSelfPid
     peers <- liftIO $ newMVar (S.singleton self)
-    register peerControllerService self
     return $! PeerState peers
 
 -- ** Initialization
@@ -69,6 +69,15 @@
 
     pcPid <- forkProcess node $ do
         state <- initPeerState
+
+        let waitRegister = do
+            liftIO $ threadDelay 250000
+            res <- whereis peerControllerService
+            case res of
+                Nothing -> waitRegister
+                Just _ -> return ()
+        getSelfPid >>= register peerControllerService >> waitRegister
+
         mapM_ doDiscover seeds
         say "P2P controller started."
         forever $ receiveWait [ matchIf isPeerDiscover $ onDiscover state
