 
     super()
 
-    @_store = null
+    @_store  = null
+    @_buffer = null
 
     if opts.shortcuts instanceof Shortcuts
       @shortcuts = opts.shortcuts


    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


  # Persists changes to app storage.
  #
  # This is a throttled method and will only be called once per every
  # _THROTTLE_WAIT_ milliseconds.
  #
  _save: _.throttle ->

    unless @_store.isReady
      console.warn 'could not persist shortcut changes'
      @_flushBuffer()
      return

    # take over buffer
    buffer = traverse(@_buffer).clone()
    @_flushBuffer()

    # transform it, so we can extend the remote object
    pack =
      _
        .reduce buffer, (sum, collection, key) ->
          return collection.reduce (acc, model) ->
            name = model.name.replace /\./g, '$' # safety first
            acc["#{AppStorage.DEFAULT_GROUP_NAME}.#{key}.#{name}"] = model
            return acc
          , sum
        , {}

    # so we extend the remote object
    @_store._storage.update $set: pack, =>

      # and make sure everybody is aware of the changes we've just made
      _.each (buffer, objs, collectionName) =>
        collection = @get collectionName
        _.each objs, (value) =>
          @emit 'change', collection, collection.find name: value.name

    return

  , THROTTLE_WAIT,
    leading  : no
