Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 3839)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 3840)
@@ -656,5 +656,5 @@
                 put(key, s);
             }
-            return Arrays.asList(s.split("\u001e"));
+            return Arrays.asList(s.split("\u001e", -1));
         }
         return Collections.emptyList();
@@ -670,9 +670,9 @@
         return put(key, join("\u001e", val));
     }
-    
+
     synchronized private void putCollectionDefault(String key, Collection<String> val) {
         putDefault(key, join("\u001e", val));
     }
-    
+
     /**
      * Used to read a 2-dimensional array of strings from the preference file.
Index: trunk/src/org/openstreetmap/josm/tools/Base64.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Base64.java	(revision 3839)
+++ trunk/src/org/openstreetmap/josm/tools/Base64.java	(revision 3840)
@@ -6,8 +6,14 @@
 public class Base64 {
 
-    private static String enc = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+    private static String encDefault = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+    private static String encUrlSafe = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
 
     public static String encode(String s) {
+        return encode(s, false);
+    }
+
+    public static String encode(String s, boolean urlsafe) {
         StringBuilder out = new StringBuilder();
+        String enc = urlsafe ? encUrlSafe : encDefault;
         for (int i = 0; i < (s.length()+2)/3; ++i) {
             int l = Math.min(3, s.length()-i*3);
@@ -26,5 +32,10 @@
 
     public static String encode(ByteBuffer s) {
+        return encode(s, false);
+    }
+
+    public static String encode(ByteBuffer s, boolean urlsafe) {
         StringBuilder out = new StringBuilder();
+        String enc = urlsafe ? encUrlSafe : encDefault;
         // Read 3 bytes at a time.
         for (int i = 0; i < (s.limit()+2)/3; ++i) {
Index: trunk/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java	(revision 3839)
+++ trunk/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java	(revision 3840)
@@ -14,4 +14,5 @@
 import java.io.StringWriter;
 import java.net.URL;
+import java.nio.ByteBuffer;
 
 import javax.swing.JLabel;
@@ -20,6 +21,4 @@
 import javax.swing.JScrollPane;
 import javax.swing.JTextArea;
-
-import org.apache.commons.codec.binary.Base64;
 
 import org.openstreetmap.josm.Main;
@@ -109,5 +108,5 @@
 
                     URL url = new URL("http://josm.openstreetmap.de/josmticket?" +
-                            "tdata="+Base64.encodeBase64URLSafeString(urltext.getBytes("UTF8")));
+                            "tdata="+Base64.encode(ByteBuffer.wrap(urltext.getBytes("UTF8")), true));
 
                     JPanel p = new JPanel(new GridBagLayout());
