Index: trunk/src/org/openstreetmap/josm/gui/preferences/PluginPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/PluginPreference.java	(revision 502)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/PluginPreference.java	(revision 504)
@@ -23,4 +23,5 @@
 import java.util.TreeMap;
 import java.util.Map.Entry;
+import java.net.URL;
 
 import javax.swing.AbstractAction;
@@ -56,7 +57,7 @@
 		public String name;
 		public String description;
-		public String resource;
+		public URL resource;
 		public String version;
-		public PluginDescription(String name, String description, String resource, String version) {
+		public PluginDescription(String name, String description, URL resource, String version) {
 			this.name = name;
 			this.description = description;
@@ -212,5 +213,5 @@
 			pluginPanel.add(pluginCheck);
 
-			pluginCheck.setToolTipText(plugin.resource != null ? plugin.resource : tr("Plugin bundled with JOSM"));
+			pluginCheck.setToolTipText(plugin.resource != null ? ""+plugin.resource : tr("Plugin bundled with JOSM"));
 			JLabel label = new JLabel("<html><i>"+(plugin.description==null?tr("no description available"):plugin.description)+"</i></html>");
 			label.setBorder(BorderFactory.createEmptyBorder(0,20,0,0));
@@ -246,5 +247,9 @@
 							PluginInformation info = new PluginInformation(f);
 							if (!availablePlugins.containsKey(info.name))
-								availablePlugins.put(info.name, new PluginDescription(info.name, info.description, PluginInformation.getURLString(f.getPath()), info.version));
+								availablePlugins.put(info.name, new PluginDescription(
+									info.name,
+									info.description,
+									PluginInformation.fileToURL(f),
+									info.version));
 						} catch (PluginException x) {
 						}
@@ -268,6 +273,6 @@
 						proxy.info.name, 
 						proxy.info.description, 
-						proxy.info.file == null ? null : PluginInformation.getURLString(proxy.info.file.getPath()),
-								proxy.info.version));
+						proxy.info.file == null ? null : PluginInformation.fileToURL(proxy.info.file),
+						proxy.info.version));
 		return availablePlugins.values();
 	}
Index: trunk/src/org/openstreetmap/josm/plugins/PluginInformation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/PluginInformation.java	(revision 502)
+++ trunk/src/org/openstreetmap/josm/plugins/PluginInformation.java	(revision 504)
@@ -9,4 +9,5 @@
 import java.io.InputStream;
 import java.net.URL;
+import java.net.MalformedURLException;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -84,18 +85,13 @@
 				String classPath = attr.getValue(Attributes.Name.CLASS_PATH);
 				if (classPath != null) {
-					String[] cp = classPath.split(" ");
-					StringBuilder entry = new StringBuilder();
-					for (String s : cp) {
-						entry.append(s);
-						if (s.endsWith("\\")) {
-							entry.setLength(entry.length()-1);
-							entry.append("%20"); // append the split character " " as html-encode
-							continue;
+					for (String entry : classPath.split(" ")) {
+						File entryFile;
+						if (new File(entry).isAbsolute()) {
+							entryFile = new File(entry);
+						} else {
+							entryFile = new File(file.getParent(), entry);
 						}
-						s = entry.toString();
-						entry = new StringBuilder();
-						if (!s.startsWith("/") && !s.startsWith("\\") && !s.matches("^.\\:") && file != null)
-							s = file.getParent() + File.separator + s;
-						libraries.add(new URL(getURLString(s)));
+
+						libraries.add(fileToURL(entryFile));
 					}
 				}
@@ -112,5 +108,5 @@
 			}
 			if (file != null)
-				libraries.add(0, new URL(getURLString(file.getAbsolutePath())));
+				libraries.add(0, fileToURL(file));
 
 			if (jar != null)
@@ -147,8 +143,10 @@
 	}
 
-	public static String getURLString(String fileName) {
-		if (System.getProperty("os.name").startsWith("Windows"))
-			return "file:/"+fileName;
-		return "file://"+fileName;
+	public static URL fileToURL(File f) {
+		try {
+			return f.toURI().toURL();
+		} catch (MalformedURLException ex) {
+			return null;
+		}
 	}
 
