Index: trunk/src/org/openstreetmap/josm/plugins/PluginSelection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/PluginSelection.java	(revision 1737)
+++ trunk/src/org/openstreetmap/josm/plugins/PluginSelection.java	(revision 1738)
@@ -23,5 +23,4 @@
 import java.util.Map;
 import java.util.Set;
-import java.util.SortedMap;
 import java.util.TreeMap;
 import java.util.Map.Entry;
@@ -70,6 +69,5 @@
             PluginInformation description = availablePlugins.get(local.name);
 
-            if (description != null && (description.version == null || description.version.equals("")) ?
-            (local.version != null && local.version.equals("")) : !description.version.equals(local.version)) {
+            if (description.version != null && !description.version.equals(local.version)) {
                 toUpdate.add(description);
                 toUpdateStr.append(description.name+"\n");
@@ -97,7 +95,9 @@
     public boolean finish() {
         Collection<PluginInformation> toDownload = new LinkedList<PluginInformation>();
+        Collection<String> installedPlugins = Main.pref.getCollection("plugins", null);
+
         String msg = "";
         for (Entry<String, Boolean> entry : pluginMap.entrySet()) {
-            if(entry.getValue())
+            if(entry.getValue() && !installedPlugins.contains(entry.getKey()))
             {
                 String name = entry.getKey();
@@ -136,5 +136,5 @@
     /* return true when plugin list changed */
     public void drawPanel(JPanel pluginPanel) {
-        availablePlugins = getAvailablePlugins();
+        loadPlugins();
         Collection<String> enabledPlugins = Main.pref.getCollection("plugins", null);
 
@@ -222,22 +222,6 @@
     }
 
-    /**
-     * Return information about a loaded plugin.
-     *
-     * Note that if you call this in your plugins bootstrap, you may get <code>null</code> if
-     * the plugin requested is not loaded yet.
-     *
-     * @return The PluginInformation to a specific plugin, but only if the plugin is loaded.
-     * If it is not loaded, <code>null</code> is returned.
-     */
-    private static PluginInformation getLoaded(String pluginName) {
-        for (PluginProxy p : PluginHandler.pluginList)
-            if (p.info.name.equals(pluginName))
-                return p.info;
-        return null;
-    }
-
-    private Map<String, PluginInformation> getAvailablePlugins() {
-        SortedMap<String, PluginInformation> availablePlugins = new TreeMap<String, PluginInformation>(new Comparator<String>(){
+    private void loadPlugins() {
+        availablePlugins = new TreeMap<String, PluginInformation>(new Comparator<String>(){
             public int compare(String o1, String o2) {
                 return o1.compareToIgnoreCase(o2);
@@ -346,5 +330,4 @@
                 localPlugins.put(proxy.info.name, proxy.info);
         }
-        return availablePlugins;
     }
 }
