Index: src/org/openstreetmap/josm/plugins/PluginDownloader.java
===================================================================
--- src/org/openstreetmap/josm/plugins/PluginDownloader.java	(revision 868)
+++ src/org/openstreetmap/josm/plugins/PluginDownloader.java	(working copy)
@@ -53,12 +53,14 @@
 		}
 
 		@Override protected void realRun() throws SAXException, IOException {
+			File updatedPluginDir = new File(Main.pref.getPreferencesDir() + "plugin-updates");
+			if (!updatedPluginDir.exists())
+				updatedPluginDir.mkdirs();
 			for (PluginDescription d : toUpdate) {
-				File tempFile = new File(Main.pref.getPreferencesDir()+"temp.jar");
-				if (download(d.resource, tempFile)) {
-					tempFile.renameTo(new File(Main.pref.getPreferencesDir()+"plugins/"+d.name+".jar"));
+				File pluginFile = new File(updatedPluginDir, d.name + ".jar");
+				if (download(d.resource, pluginFile))
 					count++;
-				} else
+				else
 					errors += d.name + "\n";
 			}
 		}
Index: src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- src/org/openstreetmap/josm/gui/MainApplication.java	(revision 868)
+++ src/org/openstreetmap/josm/gui/MainApplication.java	(working copy)
@@ -118,6 +118,17 @@
 			Main.pref.save();
 		}
 
+		// Copy updated plugins to proper directory
+		File updatedPluginDir = new File(Main.pref.getPreferencesDir() + "plugin-updates/");
+		File pluginDir = new File(Main.pref.getPreferencesDir() + "plugins/");
+		if (updatedPluginDir.exists() && updatedPluginDir.isDirectory()) {
+			for (File updatedPlugin : updatedPluginDir.listFiles()) {
+				File plugin = new File(pluginDir, updatedPlugin.getName());
+				plugin.delete();
+				updatedPlugin.renameTo(plugin);
+			}
+		}
+
 		// load the early plugins
 		Main.loadPlugins(true);
 
