         @onFileRemoved.fire file
 
     save: ->
-      @__finalize()
-      @__uploadDf.done =>
-        @__createGroup()
-          .done (groupInfo) =>
-            @__uuid = groupInfo.group_id
-            @__buildInfo (info) =>
-              if @settings.imagesOnly && !info.isImage
-                @__infoDf.reject('image', info)
-              else
-                @__infoDf.resolve(info)
-          .fail =>
-            @__infoDf.reject('info')
+      unless @__finalized
+        @__finalize()
+        @__uploadDf.done =>
+          @__createGroup()
+            .done (groupInfo) =>
+              @__uuid = groupInfo.group_id
+              @__buildInfo (info) =>
+                if @settings.imagesOnly && !info.isImage
+                  @__infoDf.reject('image', info)
+                else
+                  @__infoDf.resolve(info)
+            .fail =>
+              @__infoDf.reject('info')
 
     cancel: =>
       @__finalize()


    isFinalized: -> @__finalized

    __progressInfo: ->
      progress = 0
      for file in @__files
        progress += (@__fileProgresses[file] or 0) / @__files.length
      state: @__progressState
      uploadProgress: progress
      progress: if @__progressState == 'ready' then 1 else progress * 0.9


  class ns.FileGroup

    constructor: (settings, files) ->
      @settings = utils.buildSettings settings
      @__files = []

