 
   initialize: (@packageManager) ->
     super
+
+    @disposables = new CompositeDisposable()
+    @updatingPackages = []
+
     @updateAllButton.on 'click', => @updateAll()
-    @checkButton.on 'click', =>
-      @checkForUpdates(true)
+    @checkButton.on 'click', => @checkForUpdates(true)
 
     @updateAllButton.hide()
     @checkForUpdates()
 
-    @packageManagerSubscription = @packageManager.on 'package-update-failed theme-update-failed', ({pack, error}) =>
-      @updateErrors.append(new ErrorView(@packageManager, error))
+    @disposables.add @packageManager.on 'package-updating theme-updating', ({pack, error}) =>
+      @checkButton.prop('disabled', true)
+      @updatingPackages.push(pack)
+
+    @disposables.add @packageManager.on 'package-updated theme-updated package-update-failed theme-update-failed', ({pack, error}) =>
+      @updateErrors.append(new ErrorView(@packageManager, error)) if error?
+
+      for index, update of @updatingPackages
+        if update.name is pack.name
+          @updatingPackages.splice(index, 1)
+
+      unless @updatingPackages.length
+        @checkButton.prop('disabled', false)
 
   dispose: ->
-    @packageManagerSubscription.dispose()
+    @disposables.dispose()
 
   beforeShow: (opts) ->
     if opts?.back

      @updatesContainer.append(new PackageCard(pack, @packageManager, {back: 'Updates'}))

  updateAll: ->
    @updateAllButton.prop('disabled', true)

    packageCards = @getPackageCards()

          atom.notifications.addSuccess(message, {dismissable: true, buttons})

        if successfulUpdatesCount is totalUpdatesCount
          @checkButton.prop('disabled', false)
          @updateAllButton.hide()
        else # Some updates failed
          @checkButton.prop('disabled', false)
          @updateAllButton.prop('disabled', false)

    onUpdateResolved = ->
