             set_quotas : true   # if true, also sets all quotas (in parallel with start)
             cb         : required
         dbg = @dbg("start")
+        if @_state == 'running'
+            dbg("already running")
+            if opts.set_quotas
+                @set_all_quotas(cb : opts.cb)
+            else
+                opts.cb()
+            return
         if @_state == 'starting'
-            dbg("already starting -- nothing to do")
-            opts.cb()
+            dbg("wait until running")
+            @wait_for_a_state
+                states  : ['running']
+                timeout : 30
+                cb      : (err) =>
+                    if err
+                        opts.cb(err)
+                    else if opts.set_quotas
+                        @set_all_quotas(cb : opts.cb)
+                    else
+                        opts.cb()
             return
         async.series([
             (cb) =>

        winston.debug("wait_stable_state")
        @state    # opportunity to cause state update
            force : true
            cb    : () =>
                @_synctable.wait
                    timeout : opts.timeout

                dbg("issuing the start command")
                @_action(action: "start",  cb: cb)
            (cb) =>
                dbg("waiting until running")
                @wait_for_a_state
                    states  : ['running']
                    timeout : 30
                    cb      : cb
        ], (err) =>
            opts.cb(err)
