Index: src/org/openstreetmap/josm/gui/preferences/PluginPreference.java
===================================================================
--- src/org/openstreetmap/josm/gui/preferences/PluginPreference.java	(revision 280)
+++ src/org/openstreetmap/josm/gui/preferences/PluginPreference.java	(revision 282)
@@ -61,6 +61,8 @@
 	private Box pluginPanel = Box.createVerticalBox();
 	private JPanel plugin;
+	private PreferenceDialog gui;
 
 	public void addGui(final PreferenceDialog gui) {
+		this.gui = gui;
 		plugin = gui.createPreferenceTab("plugin", tr("Plugins"), tr("Configure available Plugins."));
 		JScrollPane pluginPane = new JScrollPane(pluginPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
@@ -123,5 +125,4 @@
 				public void actionPerformed(ActionEvent e) {
 					pluginMap.put(plugin, pluginCheck.isSelected());
-					gui.requiresRestart = true;
 				}
 			});
@@ -189,18 +190,21 @@
 			else
 				for (PluginDescription pd : toDownload)
-					PluginDownloader.downloadPlugin(pd);
+					if (!PluginDownloader.downloadPlugin(pd))
+						pluginMap.put(pd, false);
+						
 		}
 
 		String plugins = "";
-		for (Entry<PluginDescription, Boolean> entry : pluginMap.entrySet()) {
-			if (entry.getValue()) {
+		for (Entry<PluginDescription, Boolean> entry : pluginMap.entrySet())
+			if (entry.getValue())
 				plugins += entry.getKey().name + ",";
-				if (PluginInformation.findPlugin(entry.getKey().name) == null)
-					toDownload.add(entry.getKey());
-			}
-		}
 		if (plugins.endsWith(","))
 			plugins = plugins.substring(0, plugins.length()-1);
-		Main.pref.put("plugins", plugins);
+		
+		String oldPlugins = Main.pref.get("plugins");
+		if (!plugins.equals(oldPlugins)) {
+			Main.pref.put("plugins", plugins);
+			gui.requiresRestart = true;
+		}
 	}
 }
Index: src/org/openstreetmap/josm/plugins/PluginDownloader.java
===================================================================
--- src/org/openstreetmap/josm/plugins/PluginDownloader.java	(revision 280)
+++ src/org/openstreetmap/josm/plugins/PluginDownloader.java	(revision 282)
@@ -75,5 +75,5 @@
     }
 
-	public static void downloadPlugin(PluginDescription pd) {
+	public static boolean downloadPlugin(PluginDescription pd) {
 		File file = new File(Main.pref.getPreferencesDir()+"plugins/"+pd.name+".jar");
 	    try {
@@ -85,9 +85,17 @@
 	        out.close();
 	        in.close();
+	        try {
+	            PluginInformation.findPlugin(pd.name);
+	            return true;
+            } catch (Exception e) {
+	            e.printStackTrace();
+	            JOptionPane.showMessageDialog(Main.parent, tr("The plugin {0} seem to be broken or could not be downloaded automatically.", pd.name));
+            }
         } catch (Exception e) {
-        	if (file.exists())
-        		file.delete();
         	JOptionPane.showMessageDialog(Main.parent, tr("Could not download plugin: {0} from {1}", pd.name, pd.resource));
         }
+        if (file.exists())
+        	file.delete();
+        return false;
     }
 }
