   handleUpdateAll: (callback) ->
     if !@props.disabled
       updating = @state.updating
-      toUpdate = []
+      toInstall = []
       for plugin, index in plugins
-        if semver.lt(plugin.version, @state.latest[plugin.packageName]) && @state.removeStatus[index] == 0
+        if needUpdate(plugin.version, @state.latest[plugin.packageName]) && @state.removeStatus[index] == 0
           updating[index] = true
-          toUpdate.push plugin.packageName
+          toInstall.push "#{plugin.packageName}@#{@state.latest[plugin.packageName]}"
       npm.load npmConfig, (err) ->
-        npm.commands.update toUpdate, (er, data) ->
+        npm.commands.install toInstall, (er, data) ->
           callback(er)
       @setState
         updating: updating

                      {
                        if @state.updating[index]
                           __ "Updating"
                        else if semver.lt(plugin.version, @state.latest[plugin.packageName])
                           __ "Update"
                        else
                           __ "Latest"

              <span style={paddingTop: 2}> @<span onClick={@handleClickAuthorLink.bind @, plugin.link}>{plugin.author}</span></span>
              <div style={paddingTop: 2}>
                <Label bsStyle="#{if ifStableVersion @state.latest[plugin.packageName] then 'primary' else 'warning'}"
                       className="#{if @state.updating[index] || not needUpdate(plugin.version, @state.latest[plugin.packageName]) || @state.removeStatus[index] != 0 then 'hidden' else ''}">
                  <FontAwesome name='cloud-upload' />
                  Version {@state.latest[plugin.packageName]}
                </Label>
