                       }
                     </Button>
                     <Button bsStyle='primary'
-                            disabled={@state.updating[index] || semver.gte(plugin.version, @state.latest[plugin.packageName]) || @state.removeStatus[index] != 0}
+                            disabled={@state.updating[index] || not needUpdate(plugin.version, @state.latest[plugin.packageName]) || @state.removeStatus[index] != 0}
                             onClick={@handleUpdate.bind @, index, @handleUpdateComplete}
                             style={width: "33%"}
                             className="plugin-control-button">
                       <FontAwesome name={
                                      if @state.updating[index]
                                        "spinner"
-                                     else if semver.lt(plugin.version, @state.latest[plugin.packageName])
+                                     else if needUpdate(plugin.version, @state.latest[plugin.packageName])
                                        "cloud-download"
                                      else
                                        "check"

      latest = @state.latest
      updateCount = 0
      for updateObject, index in updateData
        if latest[updateObject[1]]? && semver.lt(latest[updateObject[1]], updateObject[4])
          latest[updateObject[1]] = updateObject[4]
          updateCount++
      @isUpdateAvailable = updateCount > 0

ifStableVersion = (version) ->
  semver.satisfies version,
    ">= #{semver.major version}.#{semver.minor version}.#{semver.patch version}"

needUpdate = (now, check) ->
  if ifStableVersion now
    semver.lt now, check
  else if not ifStableVersion(now) and not ifStableVersion(check)
    semver.lt now, check
  else
    true

PluginConfig = React.createClass
  getInitialState: ->
