Index: trunk/.classpath
===================================================================
--- trunk/.classpath	(revision 2617)
+++ trunk/.classpath	(revision 2618)
@@ -4,6 +4,5 @@
 	<classpathentry kind="src" path="test/unit"/>
 	<classpathentry kind="src" path="test/functional"/>
-	<classpathentry excluding="build/|dist/|src/|test/|test/unit/|test/functional/" including="data/|images/|presets/|styles/" kind="src" path=""/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JDK 5"/>
+	<classpathentry excluding="build/|dist/|src/|test/|test/unit/|test/functional/|test/build/" including="images/|presets/|styles/" kind="src" path=""/>
 	<classpathentry kind="lib" path="lib/metadata-extractor-2.3.1-nosun.jar"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
@@ -18,4 +17,7 @@
 	<classpathentry kind="lib" path="test/lib/fest/jcip-annotations-1.0.jar"/>
 	<classpathentry kind="lib" path="test/lib/fest/MRJToolkitStubs-1.0.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry exported="true" kind="con" path="GROOVY_SUPPORT"/>
+	<classpathentry kind="lib" path="test/build"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
Index: trunk/.project
===================================================================
--- trunk/.project	(revision 2617)
+++ trunk/.project	(revision 2618)
@@ -23,4 +23,5 @@
 	</buildSpec>
 	<natures>
+		<nature>org.eclipse.jdt.groovy.core.groovyNature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 	</natures>
Index: trunk/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- trunk/.settings/org.eclipse.jdt.core.prefs	(revision 2617)
+++ trunk/.settings/org.eclipse.jdt.core.prefs	(revision 2618)
@@ -1,3 +1,3 @@
-#Sun Dec 06 09:20:07 CET 2009
+#Tue Dec 01 19:01:34 CET 2009
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
@@ -11,6 +11,4 @@
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
@@ -32,8 +30,6 @@
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
@@ -318,4 +314,6 @@
 org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
 org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
 org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
Index: trunk/build.xml
===================================================================
--- trunk/build.xml	(revision 2617)
+++ trunk/build.xml	(revision 2618)
@@ -14,10 +14,10 @@
 	<property name="src.dir" value="src" />
 	<property name="build.dir" value="build"/>
-    <!-- build parameter: compression level (ant -Dclevel=N)
+	<!-- build parameter: compression level (ant -Dclevel=N)
              N ranges from 0 (no compression) to 9 (maximum compression)
              default: 9 -->
-    <condition property="clevel" value="${clevel}" else="9">
-        <isset property="clevel" />
-    </condition>
+	<condition property="clevel" value="${clevel}" else="9">
+		<isset property="clevel" />
+	</condition>
 
 	<!-- Java classpath addition (all jar files to compile tests with this) -->
@@ -28,9 +28,9 @@
 	</path>
 
-	
+
 	<!--
 	  ** Used by Eclipse ant builder for updating 
 	  ** the REVISION file used by JOSM
-	--> 	  
+	-->
 	<target name="create-revision-eclipse">
 		<property name="revision.dir" value="bin"/>
@@ -40,17 +40,17 @@
 	<!--
 	  ** Creates the REVISION file to be included in the distribution
-	  --> 	  
+	  -->
 	<target name="create-revision">
 		<property name="revision.dir" value="${build.dir}"/>
 		<exec append="false" output="REVISION.XML" executable="svn" failifexecutionfails="false">
-				<env key="LANG" value="C"/>
-				<arg value="info"/>
-				<arg value="--xml"/>
-				<arg value="."/>
+			<env key="LANG" value="C"/>
+			<arg value="info"/>
+			<arg value="--xml"/>
+			<arg value="."/>
 		</exec>
 		<xmlproperty file="REVISION.XML" prefix="version" keepRoot="false" collapseAttributes="true"/>
 		<delete file="REVISION.XML" />
 		<tstamp>
-		      <format property="build.tstamp" pattern="yyyy-MM-dd HH:mm:ss"/>
+			<format property="build.tstamp" pattern="yyyy-MM-dd HH:mm:ss"/>
 		</tstamp>
 
@@ -62,7 +62,7 @@
 Is-Local-Build: true
 Build-Date: ${build.tstamp}		
-</echo>						
+</echo>
 	</target>
-		
+
 
 	<target name="dist" depends="compile,create-revision">
@@ -78,13 +78,13 @@
 		<property name="version.entry.commit.revision" value="UNKNOWN"/>
 		<property name="version.entry.commit.date" value="UNKNOWN"/>
-	    <echo>Revision ${version.entry.commit.revision}</echo>
+		<echo>Revision ${version.entry.commit.revision}</echo>
 		<copy file="CONTRIBUTION" todir="build"/>
 		<copy file="README" todir="build"/>
 		<copy file="LICENSE" todir="build"/>
 
-        <!-- styles -->
+		<!-- styles -->
 		<copy file="styles/standard/elemstyles.xml" todir="build/styles/standard"/>
 
-        <!-- css-->
+		<!-- css-->
 		<copy file="src/org/openstreetmap/josm/gui/help/help-browser.css" todir="build/org/openstreetmap/josm/gui/help"/>
 
@@ -92,5 +92,5 @@
 		<delete file="dist/josm-custom.jar"/>
 		<jar destfile="dist/josm-custom.jar" basedir="build" level="${clevel}">
-        <!-- add attribute excludes="**/*BZip2*,**/*Bzip2*" to create a non-bzip2 supporting jar -->
+			<!-- add attribute excludes="**/*BZip2*,**/*Bzip2*" to create a non-bzip2 supporting jar -->
 			<manifest>
 				<attribute name="Main-class" value="JOSM" />
@@ -166,20 +166,25 @@
 			<compilerarg value="-Xlint:unchecked"/>
 		</javac>
+		<javac srcdir="${src.dir}:${test.dir}/functional" classpathref="test.classpath" destdir="${test.dir}/${build.dir}"
+						target="1.5" source="1.5" debug="on" encoding="UTF-8">
+			<compilerarg value="-Xlint:deprecation"/>
+			<compilerarg value="-Xlint:unchecked"/>
+		</javac>
 	</target>
 
-    <target name="test" depends="test-compile">
-        <junit printsummary="yes">
-        	<sysproperty key="josm.home" value="${test.dir}/config/unit-josm.home"/>
-            <classpath>
-                <path refid="test.classpath"/>
-                <pathelement path="${test.dir}/${build.dir}"/>
-            	<pathelement path="${test.dir}/config"/>
-            </classpath>
-            <formatter type="plain"/>
-            <batchtest fork="no" todir="${test.dir}/report">
-                <fileset dir="${test.dir}/unit" includes="**/*.java"/>
-            </batchtest>
-        </junit>
-    </target>
+	<target name="test" depends="test-compile">
+		<junit printsummary="yes">
+			<sysproperty key="josm.home" value="${test.dir}/config/unit-josm.home"/>
+			<classpath>
+				<path refid="test.classpath"/>
+				<pathelement path="${test.dir}/${build.dir}"/>
+				<pathelement path="${test.dir}/config"/>
+			</classpath>
+			<formatter type="plain"/>
+			<batchtest fork="no" todir="${test.dir}/report">
+				<fileset dir="${test.dir}/unit" includes="**/*.java"/>
+			</batchtest>
+		</junit>
+	</target>
 
 </project>
Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 2617)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 2618)
@@ -24,4 +24,5 @@
 import java.util.TreeMap;
 import java.util.Map.Entry;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -50,6 +51,43 @@
     private File preferencesDirFile = null;
 
+    public static interface PreferenceChangeEvent{
+        public String getKey();
+        public String getOldValue();
+        public String getNewValue();
+    }
+
     public static interface PreferenceChangedListener {
-        void preferenceChanged(String key, String newValue);
+        void preferenceChanged(PreferenceChangeEvent e);
+    }
+
+    private static class DefaultPreferenceChangeEvent implements PreferenceChangeEvent {
+        private String key;
+        private String oldValue;
+        private String newValue;
+
+        public DefaultPreferenceChangeEvent(String key, String oldValue, String newValue) {
+            this.key = key;
+            this.oldValue = oldValue;
+            this.newValue = newValue;
+        }
+
+        public String getKey() {
+            return key;
+        }
+        public void setKey(String key) {
+            this.key = key;
+        }
+        public String getOldValue() {
+            return oldValue;
+        }
+        public void setOldValue(String oldValue) {
+            this.oldValue = oldValue;
+        }
+        public String getNewValue() {
+            return newValue;
+        }
+        public void setNewValue(String newValue) {
+            this.newValue = newValue;
+        }
     }
 
@@ -96,5 +134,25 @@
     }
 
-    public final ArrayList<PreferenceChangedListener> listener = new ArrayList<PreferenceChangedListener>();
+    private final CopyOnWriteArrayList<PreferenceChangedListener> listeners = new CopyOnWriteArrayList<PreferenceChangedListener>();
+
+
+    public void addPreferenceChangeListener(PreferenceChangedListener listener) {
+        if (listener != null && ! listeners.contains(listener)) {
+            listeners.add(listener);
+        }
+    }
+
+    public void removePreferenceChangeListener(PreferenceChangedListener listener) {
+        if (listener != null && listeners.contains(listener)) {
+            listeners.remove(listener);
+        }
+    }
+
+    protected void firePrefrenceChanged(String key, String oldValue, String newValue) {
+        PreferenceChangeEvent evt = new DefaultPreferenceChangeEvent(key, oldValue, newValue);
+        for (PreferenceChangedListener l : listeners) {
+            l.preferenceChanged(evt);
+        }
+    }
 
     /**
@@ -289,5 +347,5 @@
                 System.out.println(tr("Warning: failed to persist preferences to ''{0}''", getPreferenceFile().getAbsoluteFile()));
             }
-            firePreferenceChanged(key, value);
+            firePrefrenceChanged(key, oldvalue, value);
             return true;
         }
@@ -311,9 +369,4 @@
     }
 
-    private final void firePreferenceChanged(final String key, final String value) {
-        for (final PreferenceChangedListener l : listener) {
-            l.preferenceChanged(key, value);
-        }
-    }
 
     /**
@@ -618,6 +671,7 @@
     synchronized public String getCollectionAsString(final String key) {
         String s = get(key);
-        if(s != null && s.length() != 0)
+        if(s != null && s.length() != 0) {
             s = s.replaceAll("\u001e",",");
+        }
         return s;
     }
Index: trunk/src/org/openstreetmap/josm/data/osm/ChangesetCache.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/ChangesetCache.java	(revision 2617)
+++ trunk/src/org/openstreetmap/josm/data/osm/ChangesetCache.java	(revision 2618)
@@ -10,5 +10,9 @@
 import java.util.logging.Logger;
 
-public class ChangesetCache {
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+
+public class ChangesetCache implements PreferenceChangedListener{
     static private final Logger logger = Logger.getLogger(ChangesetCache.class.getName());
     static private final ChangesetCache instance = new ChangesetCache();
@@ -24,4 +28,5 @@
 
     private ChangesetCache() {
+        Main.pref.addPreferenceChangeListener(this);
     }
 
@@ -135,3 +140,16 @@
         return ret;
     }
+
+    /* ------------------------------------------------------------------------- */
+    /* interface PreferenceChangedListener                                       */
+    /* ------------------------------------------------------------------------- */
+    public void preferenceChanged(PreferenceChangeEvent e) {
+        if (e.getKey() == null || ! e.getKey().equals("osm-server.url"))
+            return;
+
+        // clear the cache when the API url changes
+        if (e.getOldValue() == null || e.getNewValue() == null || !e.getOldValue().equals(e.getNewValue())) {
+            clear();
+        }
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 2617)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 2618)
@@ -30,4 +30,6 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.APIDataSet;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -45,5 +47,5 @@
  *
  */
-public class UploadDialog extends JDialog implements PropertyChangeListener{
+public class UploadDialog extends JDialog implements PropertyChangeListener, PreferenceChangedListener{
     protected static final Logger logger = Logger.getLogger(UploadDialog.class.getName());
 
@@ -221,4 +223,6 @@
                 }
         );
+
+        Main.pref.addPreferenceChangeListener(this);
     }
 
@@ -453,3 +457,16 @@
         }
     }
+
+    /* -------------------------------------------------------------------------- */
+    /* Interface PreferenceChangedListener                                        */
+    /* -------------------------------------------------------------------------- */
+    public void preferenceChanged(PreferenceChangeEvent e) {
+        if (e.getKey() == null || ! e.getKey().equals("osm-server.url"))
+            return;
+        if (e.getNewValue() == null) {
+            setTitle(tr("Upload"));
+        } else {
+            setTitle(tr("Upload to ''{0}''", e.getNewValue()));
+        }
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java	(revision 2617)
+++ trunk/src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java	(revision 2618)
@@ -34,4 +34,5 @@
 import org.openstreetmap.josm.actions.RenameLayerAction;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
 import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.coor.EastNorth;
@@ -113,5 +114,5 @@
         setAssociatedFile(associatedFile);
         this.data = data;
-        Main.pref.listener.add(this);
+        Main.pref.addPreferenceChangeListener(this);
     }
 
@@ -284,6 +285,6 @@
     }
 
-    public void preferenceChanged(String key, String newValue) {
-        if (Main.map != null && (key.equals("draw.rawgps.lines") || key.equals("draw.rawgps.lines.force"))) {
+    public void preferenceChanged(PreferenceChangeEvent e) {
+        if (Main.map != null && (e.getKey().equals("draw.rawgps.lines") || e.getKey().equals("draw.rawgps.lines.force"))) {
             Main.map.repaint();
         }
@@ -291,5 +292,5 @@
 
     @Override public void destroy() {
-        Main.pref.listener.remove(RawGpsLayer.this);
+        Main.pref.removePreferenceChangeListener(this);
     }
 }
