       # Save all files in sketch
       (promise, item) =>
         return item.editor.save() if item.editor?
-        return unless newDirFs?
+        return promise unless newDirFs?
         # Relocate file
-        return oldDirFs.readFile(item.path).then((data) =>
+        return promise.then(=>
+          return oldDirFs.readFile(item.path)
+        ).then((data) =>
           return newDirFs.writeFile(item.path, data)
         )
       Promise.resolve()
     ).then(=>
       # Save sketch settings
       @_rubicVersion = App.version
-      return newDirFs.writeFile(SKETCH_CONFIG, JSON.stringify(this), SKETCH_ENCODING)
+      return @_dirFs.writeFile(SKETCH_CONFIG, JSON.stringify(this), SKETCH_ENCODING)
     ).then(=>
       # Successfully saved
       @_modified = false

    @_items.splice(index, 1)
    @_modify()
    @dispatchEvent({type: "removeItem", item: itemRemoved})
    return false

  ###*
  @method

  getItem: (path) ->
    return item for item in @_items when item.path == path
    return null

  ###*
  @method
    Add a new item
  @param {SketchItem/string} item
    Item or path to create
  @param {ArrayBuffer/string} content
    Content of new item
  @param {string} [encoding="utf8"]
    Encoding (for string content)
  @return {Promise}
    Promise object
  @return {SketchItem} return.PromiseValue
    Item instance created
  ###
  addNewItem: (item, content, encoding = "utf8") ->
    item = new SketchItem({path: item}) if typeof(item) == "string"
    return Promise.reject(Error("Already_exist")) unless @addItem(item)
    options = {}
    options.encoding = encoding if typeof(content) == "string"
    return @_dirFs.writeFile(item.path, content, options).then(=>
      return item # Last PromiseValue
    )

  ###*
  @method
