Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java	(revision 5009)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java	(revision 5010)
@@ -55,60 +55,39 @@
 
     @Override
-    public void parseArgs() {
-        StringTokenizer st = new StringTokenizer(request, "&?");
+    protected void parseArgs() {
         HashMap<String, String> args = new HashMap<String, String>();
-        // skip first element which is the command
-        if(st.hasMoreTokens()) {
-            st.nextToken();
-        }
-        while (st.hasMoreTokens()) {
-            String param = st.nextToken();
-            int eq = param.indexOf("=");
-            if (eq > -1)
-            {
-                String key = param.substring(0, eq);
-                /* "url=" terminates normal parameters
-                 * and will be handled separately
-                 */
-                if("url".equals(key)) {
-                    break;
+        if (request.indexOf('?') != -1) {
+            String query = request.substring(request.indexOf('?') + 1);
+            if (query.indexOf("url=") == 0) {
+                args.put("url", decodeURL(query.substring(4)));
+            } else {
+                int urlIdx = query.indexOf("&url=");
+                if (urlIdx != -1) {
+                    String url = query.substring(urlIdx + 1);
+                    args.put("url", decodeURL(query.substring(urlIdx + 5)));
+                    query = query.substring(0, urlIdx);
+                } else {
+                    if (query.indexOf('#') != -1) {
+                        query = query.substring(0, query.indexOf('#'));
+                    }
                 }
-
-                String value = param.substring(eq + 1);
-                // urldecode all normal values
-                try {
-                    value = URLDecoder.decode(value, "UTF-8");
-                } catch (UnsupportedEncodingException e) {
-                    // TODO Auto-generated catch block
-                    e.printStackTrace();
-                }
-                args.put(key,
-                        value);
-            }
-        }
-        // url as second or later parameter
-        int urlpos = request.indexOf("&url=");
-        // url as first (and only) parameter
-        if(urlpos < 0) {
-            urlpos = request.indexOf("?url=");
-        }
-        // url found?
-        if(urlpos >= 0) {
-            // URL value
-            String value = request.substring(urlpos + 5);
-            // allow skipping URL decoding with urldecode=false
-            String urldecode = args.get("urldecode");
-            if((urldecode == null) || (Boolean.valueOf(urldecode) == true))
-            {
-                try {
-                    value = URLDecoder.decode(value, "UTF-8");
-                } catch (UnsupportedEncodingException e) {
-                    // TODO Auto-generated catch block
-                    e.printStackTrace();
+                String[] params = query.split("&", -1);
+                for (String param : params) {
+                    int eq = param.indexOf('=');
+                    if (eq != -1) {
+                        args.put(param.substring(0, eq), param.substring(eq + 1));
+                    }
                 }
             }
-            args.put("url", value);
         }
         this.args = args;
     }
+
+    private String decodeURL(String url) {
+        try {
+            return URLDecoder.decode(url, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException();
+        }
+    }
 }
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java	(revision 5009)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java	(revision 5010)
@@ -4,5 +4,7 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
+import java.util.HashMap;
 
 import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
@@ -23,5 +25,5 @@
         try {
             DownloadTask osmTask = new DownloadOsmTask();
-            osmTask.loadUrl(false, URLDecoder.decode(args.get("url"), "UTF-8"), null);
+            osmTask.loadUrl(false, args.get("url"), null);
         } catch (Exception ex) {
             System.out.println("RemoteControl: Error parsing import remote control request:");
@@ -49,3 +51,41 @@
                 "RemoteControl: import forbidden by preferences");
     }
+
+    @Override
+    protected void parseArgs() {
+        HashMap<String, String> args = new HashMap<String, String>();
+        if (request.indexOf('?') != -1) {
+            String query = request.substring(request.indexOf('?') + 1);
+            if (query.indexOf("url=") == 0) {
+                args.put("url", decodeURL(query.substring(4)));
+            } else {
+                int urlIdx = query.indexOf("&url=");
+                if (urlIdx != -1) {
+                    String url = query.substring(urlIdx + 1);
+                    args.put("url", decodeURL(query.substring(urlIdx + 5)));
+                    query = query.substring(0, urlIdx);
+                } else {
+                    if (query.indexOf('#') != -1) {
+                        query = query.substring(0, query.indexOf('#'));
+                    }
+                }
+                String[] params = query.split("&", -1);
+                for (String param : params) {
+                    int eq = param.indexOf('=');
+                    if (eq != -1) {
+                        args.put(param.substring(0, eq), param.substring(eq + 1));
+                    }
+                }
+            }
+        }
+        this.args = args;
+    }
+
+    private String decodeURL(String url) {
+        try {
+            return URLDecoder.decode(url, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException();
+        }
+    }
 }
