Index: trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- trunk/src/org/openstreetmap/josm/Main.java	(revision 1059)
+++ trunk/src/org/openstreetmap/josm/Main.java	(revision 1062)
@@ -221,6 +221,7 @@
 	public static void loadPlugins(boolean early) {
 		List<String> plugins = new LinkedList<String>();
-		if (Main.pref.hasKey("plugins"))
-			plugins.addAll(Arrays.asList(Main.pref.get("plugins").split(",")));
+		Collection<String> cp = Main.pref.getCollection("plugins", null);
+		if (cp != null)
+			plugins.addAll(cp);
 		if (System.getProperty("josm.plugins") != null)
 			plugins.addAll(Arrays.asList(System.getProperty("josm.plugins").split(",")));
@@ -232,4 +233,5 @@
 			{
 				plugins.remove(p);
+				Main.pref.removeFromCollection("plugins", p);
 				System.out.println(tr("Warning - loading of {0} plugin was requested. This plugin is no longer required.", p));
 			}
Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 1059)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 1062)
@@ -10,4 +10,5 @@
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.LinkedList;
@@ -401,4 +402,42 @@
 	}
 
+	synchronized public Collection<String> getCollection(String key, Collection<String> def) {
+		String s = get(key);
+		if(s != null)
+		{
+			/* handle old comma separated stuff - remove in future */
+			if(s.indexOf(',') >= 0)
+				return Arrays.asList(s.split(","));
+			else
+				return Arrays.asList(s.split(";"));
+		}
+		else if(def != null)
+			return def;
+		return null;
+	}
+	synchronized public void removeFromCollection(String key, String value) {
+		ArrayList<String> a = new ArrayList<String>(getCollection(key, null));
+		if(a != null)
+		{
+			a.remove(value);
+			putCollection(key, a);
+		}
+	}
+	synchronized public void putCollection(String key, Collection<String> val) {
+		String s = null;
+		if(val != null)
+		{
+			for(String a : val)
+			{
+				if(s != null)
+					s += ";" + a;
+				else
+					s = a;
+			}
+		}
+
+		put(key, s);
+	}
+
 	private void setSystemProperties() {
 		Properties sysProp = System.getProperties();
