           if !broadcastable? or broadcastable # TODO: this is insecure by default :(
             [data] = rest
             data = JSON.stringify data
-            @mq.emit 'updateInstances', getStaticRoutingKey(ctx, event), data, autoDelete: no
+            @enqueueUpdateInstancesEvent getStaticRoutingKey(ctx, event), data
+
+  enqueueUpdateInstancesEvent: (routingKey, message) ->
+
+    unless @pendingUpdateInstancesMessages[routingKey]
+      @pendingUpdateInstancesMessages[routingKey] = []
+
+    len = @pendingUpdateInstancesMessages[routingKey].push message
+    @triggerUpdateInstancesEvent routingKey  if len is 1
+
+    return this
+
+  triggerUpdateInstancesEvent:(routingKey) ->
+    setTimeout =>
+      { pendingUpdateInstancesMessages } = this
+      messages = pendingUpdateInstancesMessages[routingKey]
+      @pendingUpdateInstancesMessages[routingKey] = []
+      if messages.length > 0
+        @mq.emit 'updateInstances', routingKey, messages, autoDelete: no
+    , @updateInstancesMessageThrottleMs
+
+    return this
 
   publishToControlExchange:(exchangeEvent, data)->
     options =

      process.exit 0
    @setMaxListeners 0
    @emit 'newInstance', this

  bound: require 'koding-bound'


    unscrubbed = scrubber.unscrub message, (callbackId)=>
      storeKey = "#{secretName}#{callbackId}"
      unless @remoteStore.has storeKey
        @remoteStore.add storeKey,
          if callback?
          then (args...) -> callback secretName, callbackId, args
          else (args...) => @handleResponse secretName, callbackId, args
