           designate.list()
         .then sitrep("post-update")
     queuedFn = () ->
-      executing = null
-      semaphoredFn = () ->
-        Q.try(() -> executing = fn()).then(() -> executing = null)
-      if executing
-        executing.then semaphoredFn
+      if deferred
+        deferred.promise
       else
-        executing = semaphoredFn()
-    _.throttle(queuedFn, 1000, leading: false)
+        deferred = Q.defer()
+        Q.delay(1000)
+          .then fn
+          .done () ->
+            deferred.resolve()
+            deferred = null
+        deferred.promise
+    queuedFn
 
   resolveAndUpdateMonitors = () ->
     resolveAll(servers)

      .then () ->
        async.until(finished, () -> Q.delay(500))
      .then () ->
        if _.isEmpty(monitors)
          Q()
        else

            else
              Q.all recordsWithoutMonitors.map (r) ->
                monitor = Monitor(r.addr, tcpPort)
                enterFn = () ->
                  cli.info(r.addr+" is "+monitor.current)
                  updateDesignateRecords()
                monitor.onenterup = enterFn
                monitor.onenterdown = enterFn
                monitors.push(_.extend(r, { monitor: monitor }))
                monitor.start()
                null
