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.2.1
+version:             0.1.2.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/
@@ -26,7 +26,7 @@
     mtl ==2.1.*,
     bytestring >=0.9 && < 0.11,
     containers >=0.4 && < 0.6,
-    binary >=0.5 && < 0.7,
+    binary >=0.5 && < 0.8,
     network >=2.3 && <3,
 
     distributed-process >=0.4.1 && <0.5,
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
@@ -63,7 +63,12 @@
     node <- newLocalNode transport rTable
 
     _ <- forkProcess node $ peerController seeds
-    runProcess node proc
+    let waitController = do
+        res <- whereis peerControllerService
+        case res of
+            Nothing -> (liftIO $ threadDelay 100000) >> waitController
+            Just _ -> say "Bootstrap complete." >> proc
+    runProcess node waitController
 
 peerControllerService :: String
 peerControllerService = "P2P:Controller"
@@ -73,13 +78,7 @@
 peerController seeds = do
     state <- initPeerState
 
-    let waitRegister = do
-        liftIO $ threadDelay 250000
-        res <- whereis peerControllerService
-        case res of
-            Nothing -> waitRegister
-            Just _ -> return ()
-    getSelfPid >>= register peerControllerService >> waitRegister
+    getSelfPid >>= register peerControllerService
 
     mapM_ doDiscover seeds
     say "P2P controller started."
