Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 7835)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 7841)
@@ -94,4 +94,9 @@
      */
     private File cacheDir = null;
+    
+    /**
+     * Internal storage for the user data directory.
+     */
+    private File userdataDir = null;
 
     /**
@@ -552,9 +557,14 @@
             return preferencesDir;
         String path;
-        path = System.getProperty("josm.home");
+        path = System.getProperty("josm.pref");
         if (path != null) {
             preferencesDir = new File(path).getAbsoluteFile();
         } else {
-            preferencesDir = Main.platform.getDefaultPrefDirectory();
+            path = System.getProperty("josm.home");
+            if (path != null) {
+                preferencesDir = new File(path).getAbsoluteFile();
+            } else {
+                preferencesDir = Main.platform.getDefaultPrefDirectory();
+            }
         }
         return preferencesDir;
@@ -568,5 +578,19 @@
      */
     public File getUserDataDirectory() {
-        return Main.platform.getDefaultUserDataDirectory();
+        if (userdataDir != null)
+            return userdataDir;
+        String path;
+        path = System.getProperty("josm.userdata");
+        if (path != null) {
+            userdataDir = new File(path).getAbsoluteFile();
+        } else {
+            path = System.getProperty("josm.home");
+            if (path != null) {
+                userdataDir = new File(path).getAbsoluteFile();
+            } else {
+                userdataDir = Main.platform.getDefaultUserDataDirectory();
+            }
+        }
+        return userdataDir;
     }
 
@@ -602,9 +626,14 @@
             cacheDir = new File(path).getAbsoluteFile();
         } else {
-            path = get("cache.folder", null);
+            path = System.getProperty("josm.home");
             if (path != null) {
-                cacheDir = new File(path);
+                cacheDir = new File(path, "cache");
             } else {
-                cacheDir = Main.platform.getDefaultCacheDirectory();
+                path = get("cache.folder", null);
+                if (path != null) {
+                    cacheDir = new File(path).getAbsoluteFile();
+                } else {
+                    cacheDir = Main.platform.getDefaultCacheDirectory();
+                }
             }
         }
