diff --git a/klippy/reactor.py b/klippy/reactor.py
index 1fd8426ab..655366167 100644
--- a/klippy/reactor.py
+++ b/klippy/reactor.py
@@ -3,7 +3,7 @@
 # Copyright (C) 2016  Kevin O'Connor <kevin@koconnor.net>
 #
 # This file may be distributed under the terms of the GNU GPLv3 license.
-import select, math
+import select, math, time
 import greenlet
 import chelper
 
@@ -71,9 +71,17 @@ class SelectReactor:
             return 0.
         return min(1., max(.001, self._next_timer - self.monotonic()))
     # Greenlets
+    def _sys_pause(self, waketime):
+        # Pause using system sleep for when reactor not running
+        delay = waketime - self.monotonic()
+        if delay > 0.:
+            time.sleep(delay)
+        return self.monotonic()
     def pause(self, waketime):
         g = greenlet.getcurrent()
         if g is not self._g_dispatch:
+            if self._g_dispatch is None:
+                return self._sys_pause(waketime)
             return self._g_dispatch.switch(waketime)
         if self._greenlets:
             g_next = self._greenlets.pop()
diff --git a/klippy/serialhdl.py b/klippy/serialhdl.py
index ef3443819..35e2a1353 100644
--- a/klippy/serialhdl.py
+++ b/klippy/serialhdl.py
@@ -3,7 +3,7 @@
 # Copyright (C) 2016  Kevin O'Connor <kevin@koconnor.net>
 #
 # This file may be distributed under the terms of the GNU GPLv3 license.
-import logging, threading, time
+import logging, threading
 import serial
 
 import msgproto, chelper, util
@@ -338,10 +338,10 @@ def arduino_reset(serialport, reactor):
     # First try opening the port at 1200 baud
     ser = serial.Serial(serialport, 1200, timeout=0)
     ser.read(1)
-    time.sleep(0.100)
+    reactor.pause(reactor.monotonic() + 0.100)
     # Then try toggling DTR
     ser.dtr = True
-    time.sleep(0.100)
+    reactor.pause(reactor.monotonic() + 0.100)
     ser.dtr = False
-    time.sleep(0.100)
+    reactor.pause(reactor.monotonic() + 0.100)
     ser.close()