diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py
index 5c6812f4731be646dfc43451170c5769c747754f..0987a76cfcb57eee249a4822daeec11b2e3ef1b6 100755
--- a/synapse/app/homeserver.py
+++ b/synapse/app/homeserver.py
@@ -442,11 +442,15 @@ def setup(config_options):
 
     hs.start_listening()
 
-    hs.get_pusherpool().start()
     hs.get_state_handler().start_caching()
     hs.get_datastore().start_profiling()
     hs.get_replication_layer().start_get_pdu_cache()
 
+    def on_start():
+        hs.get_pusherpool().start()
+
+    reactor.callWhenRunning(on_start)
+
     return hs
 
 
diff --git a/synapse/push/pusherpool.py b/synapse/push/pusherpool.py
index 2e58f70ffac703a41f8613a51119c7355598ed14..571d8b2f822b6d631b634cd722c708f83676b492 100644
--- a/synapse/push/pusherpool.py
+++ b/synapse/push/pusherpool.py
@@ -19,8 +19,6 @@ from twisted.internet import defer
 from httppusher import HttpPusher
 from synapse.push import PusherConfigException
 
-from synapse.util.async import run_on_reactor
-
 import logging
 
 logger = logging.getLogger(__name__)
@@ -50,7 +48,6 @@ class PusherPool:
 
     @defer.inlineCallbacks
     def start(self):
-        yield run_on_reactor()
         pushers = yield self.store.get_all_pushers()
         self._start_pushers(pushers)