           return acc
         , {}
 
+    @_flushBuffer()
+
+
+  # Prepares buffer for the next batch of changes.
+  #
+  _flushBuffer: ->
+
     @_buffer = @shortcuts.config.reduce (acc, collection) ->
       acc[collection.name] = []
       return acc
     , {}
 
+    return this
+
 
   # Party starts here.
   #


    overrides = _.pick value, 'binding', 'options'

    unless Object.keys(overrides).length
      throw 'value should contain \'binding\' and/or \'options\' props'

    unless @_store.isReady
      console.warn 'changes won\'t be persisted, since storage is not ready yet'

    model = @shortcuts.get collectionName, modelName
    throw "#{modelName} not found"  unless model

    if overrides.binding
      overrides.binding = klass._insertPlatformBinding model, overrides.binding

    silent = klass._isCustomShortcut model

    res = @shortcuts.update collectionName, modelName, overrides, silent

    if silent then @_handleShortcutsChange @shortcuts.get(collectionName), res

    return res

  #
  _handleShortcutsChange: (collection, model) ->

    queue   = @_buffer[collection.name]
    idx     = _.findWhere queue, name: model.name
    obj     = name: model.name
    binding = klass._getPlatformBinding model

    if (_.isArray binding) and  (not _.isEmpty binding)
      obj.binding = traverse(binding).clone()
    else
      obj.binding = null

    # even if enabled is _true_ by default for this model, we always save it on
    # appstorage. defaults may change, but user overrides should stay.
    obj.enabled = if model.options?.enabled is no then no else yes

    queue[((~idx and idx) or queue.length)] = obj

    @_save()

