Index: /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 1910)
+++ /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 1911)
@@ -54,4 +54,5 @@
     }
 
+    @SuppressWarnings("unchecked")
     public void actionPerformed(ActionEvent event) {
         if (getCurrentDataSet() == null)
Index: /trunk/src/org/openstreetmap/josm/data/conflict/Conflict.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/conflict/Conflict.java	(revision 1910)
+++ /trunk/src/org/openstreetmap/josm/data/conflict/Conflict.java	(revision 1911)
@@ -51,4 +51,5 @@
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public boolean equals(Object obj) {
@@ -59,5 +60,5 @@
         if (getClass() != obj.getClass())
             return false;
-        Conflict<T> other = (Conflict) obj;
+        Conflict<T> other = (Conflict<T>) obj;
         if (my != other.my)
             return false;
Index: /trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java	(revision 1910)
+++ /trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java	(revision 1911)
@@ -40,4 +40,5 @@
     public Collection<WayPoint> waypoints = new LinkedList<WayPoint>();
 
+    @SuppressWarnings("unchecked")
     public void mergeFrom(GpxData other) {
         if (storageFile == null && other.storageFile != null) {
@@ -51,5 +52,5 @@
             if (k.equals(META_LINKS) && attr.containsKey(META_LINKS)) {
                 ((Collection<GpxLink>) attr.get(META_LINKS)).addAll(
-                    (Collection<GpxLink>) ent.getValue());
+                        (Collection<GpxLink>) ent.getValue());
             } else {
                 attr.put(k, ent.getValue());
Index: /trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 1910)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 1911)
@@ -71,4 +71,18 @@
     public Node getNode(int index) {
         return nodes.get(index);
+    }
+
+    /**
+     * Replies true if this way contains the node <code>node</code>, false
+     * otherwise. Replies false if  <code>node</code> is null.
+     * 
+     * @param node the node. May be null.
+     * @return true if this way contains the node <code>node</code>, false
+     * otherwise
+     * @since 1909
+     */
+    public boolean containsNode(Node node) {
+        if (node == null) return false;
+        return nodes.contains(node);
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/FileDrop.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/FileDrop.java	(revision 1910)
+++ /trunk/src/org/openstreetmap/josm/gui/FileDrop.java	(revision 1911)
@@ -1,3 +1,3 @@
-/* code from: http://iharder.sourceforge.net/current/java/filedrop/ 
+/* code from: http://iharder.sourceforge.net/current/java/filedrop/
   (public domain) with only very small additions */
 package org.openstreetmap.josm.gui;
@@ -26,5 +26,5 @@
  *      new FileDrop( myPanel, new FileDrop.Listener()
  *      {   public void filesDropped( java.io.File[] files )
- *          {   
+ *          {
  *              // handle file drop
  *              ...
@@ -55,12 +55,12 @@
     private transient javax.swing.border.Border normalBorder;
     private transient java.awt.dnd.DropTargetListener dropListener;
-    
-    
+
+
     /** Discover if the running JVM is modern enough to have drag and drop. */
     private static Boolean supportsDnD;
-    
+
     // Default border color
     private static java.awt.Color defaultBorderColor = new java.awt.Color( 0f, 0f, 1f, 0.25f );
-    
+
 
     /* Constructor for JOSM file drop */
@@ -72,10 +72,10 @@
             true, // Recursive
             new FileDrop.Listener()
-            {   
+            {
                 public void filesDropped( java.io.File[] files )
-                {   
+                {
                     OpenFileAction ofa = new OpenFileAction();
                     for( int i = 0; i < files.length; i++ )
-                    {   
+                    {
                         ofa.openFile(files[i]);
                     }   // end for: through each dropped file
@@ -84,5 +84,5 @@
     }
 
-    
+
     /**
      * Constructs a {@link FileDrop} with a default light-blue border
@@ -96,16 +96,16 @@
      */
     public FileDrop(
-    final java.awt.Component c,
-    final Listener listener )
+            final java.awt.Component c,
+            final Listener listener )
     {   this( null,  // Logging stream
-              c,     // Drop target
-              javax.swing.BorderFactory.createMatteBorder( 2, 2, 2, 2, defaultBorderColor ), // Drag border
-              true, // Recursive
-              listener );
+            c,     // Drop target
+            javax.swing.BorderFactory.createMatteBorder( 2, 2, 2, 2, defaultBorderColor ), // Drag border
+            true, // Recursive
+            listener );
     }   // end constructor
-    
-    
-    
-    
+
+
+
+
     /**
      * Constructor with a default border and the option to recursively set drop targets.
@@ -119,15 +119,15 @@
      */
     public FileDrop(
-    final java.awt.Component c,
-    final boolean recursive,
-    final Listener listener )
+            final java.awt.Component c,
+            final boolean recursive,
+            final Listener listener )
     {   this( null,  // Logging stream
-              c,     // Drop target
-              javax.swing.BorderFactory.createMatteBorder( 2, 2, 2, 2, defaultBorderColor ), // Drag border
-              recursive, // Recursive
-              listener );
+            c,     // Drop target
+            javax.swing.BorderFactory.createMatteBorder( 2, 2, 2, 2, defaultBorderColor ), // Drag border
+            recursive, // Recursive
+            listener );
     }   // end constructor
-    
-    
+
+
     /**
      * Constructor with a default border and debugging optionally turned on.
@@ -138,5 +138,5 @@
      *
      * @param out PrintStream to record debugging info or null for no debugging.
-     * @param out 
+     * @param out
      * @param c Component on which files will be dropped.
      * @param listener Listens for <tt>filesDropped</tt>.
@@ -144,16 +144,16 @@
      */
     public FileDrop(
-    final java.io.PrintStream out,
-    final java.awt.Component c,
-    final Listener listener )
+            final java.io.PrintStream out,
+            final java.awt.Component c,
+            final Listener listener )
     {   this( out,  // Logging stream
-              c,    // Drop target
-              javax.swing.BorderFactory.createMatteBorder( 2, 2, 2, 2, defaultBorderColor ), 
-              false, // Recursive
-              listener );
+            c,    // Drop target
+            javax.swing.BorderFactory.createMatteBorder( 2, 2, 2, 2, defaultBorderColor ),
+            false, // Recursive
+            listener );
     }   // end constructor
-    
-        
-    
+
+
+
     /**
      * Constructor with a default border, debugging optionally turned on
@@ -167,5 +167,5 @@
      *
      * @param out PrintStream to record debugging info or null for no debugging.
-     * @param out 
+     * @param out
      * @param c Component on which files will be dropped.
      * @param recursive Recursively set children as drop targets.
@@ -174,20 +174,20 @@
      */
     public FileDrop(
-    final java.io.PrintStream out,
-    final java.awt.Component c,
-    final boolean recursive,
-    final Listener listener)
+            final java.io.PrintStream out,
+            final java.awt.Component c,
+            final boolean recursive,
+            final Listener listener)
     {   this( out,  // Logging stream
-              c,    // Drop target
-              javax.swing.BorderFactory.createMatteBorder( 2, 2, 2, 2, defaultBorderColor ), // Drag border
-              recursive, // Recursive
-              listener );
+            c,    // Drop target
+            javax.swing.BorderFactory.createMatteBorder( 2, 2, 2, 2, defaultBorderColor ), // Drag border
+            recursive, // Recursive
+            listener );
     }   // end constructor
-    
-    
-    
-    
-    /**
-     * Constructor with a specified border 
+
+
+
+
+    /**
+     * Constructor with a specified border
      *
      * @param c Component on which files will be dropped.
@@ -197,7 +197,7 @@
      */
     public FileDrop(
-    final java.awt.Component c,
-    final javax.swing.border.Border dragBorder,
-    final Listener listener) 
+            final java.awt.Component c,
+            final javax.swing.border.Border dragBorder,
+            final Listener listener)
     {   this(
             null,   // Logging stream
@@ -207,8 +207,8 @@
             listener );
     }   // end constructor
-    
-    
-        
-    
+
+
+
+
     /**
      * Constructor with a specified border and the option to recursively set drop targets.
@@ -223,8 +223,8 @@
      */
     public FileDrop(
-    final java.awt.Component c,
-    final javax.swing.border.Border dragBorder,
-    final boolean recursive,
-    final Listener listener) 
+            final java.awt.Component c,
+            final javax.swing.border.Border dragBorder,
+            final boolean recursive,
+            final Listener listener)
     {   this(
             null,
@@ -234,7 +234,7 @@
             listener );
     }   // end constructor
-    
-            
-    
+
+
+
     /**
      * Constructor with a specified border and debugging optionally turned on.
@@ -251,8 +251,8 @@
      */
     public FileDrop(
-    final java.io.PrintStream out,
-    final java.awt.Component c,
-    final javax.swing.border.Border dragBorder,
-    final Listener listener) 
+            final java.io.PrintStream out,
+            final java.awt.Component c,
+            final javax.swing.border.Border dragBorder,
+            final Listener listener)
     {   this(
             out,    // Logging stream
@@ -262,9 +262,9 @@
             listener );
     }   // end constructor
-    
-    
-    
-    
-    
+
+
+
+
+
     /**
      * Full constructor with a specified border and debugging optionally turned on.
@@ -282,156 +282,157 @@
      */
     public FileDrop(
-    final java.io.PrintStream out,
-    final java.awt.Component c,
-    final javax.swing.border.Border dragBorder,
-    final boolean recursive,
-    final Listener listener) 
-    {   
-        
+            final java.io.PrintStream out,
+            final java.awt.Component c,
+            final javax.swing.border.Border dragBorder,
+            final boolean recursive,
+            final Listener listener)
+    {
+
         if( supportsDnD() )
         {   // Make a drop listener
             dropListener = new java.awt.dnd.DropTargetListener()
             {   public void dragEnter( java.awt.dnd.DropTargetDragEvent evt )
-                {       log( out, "FileDrop: dragEnter event." );
-
-                    // Is this an acceptable drag event?
-                    if( isDragOk( out, evt ) )
-                    {
-                        // If it's a Swing component, set its border
-                        if( c instanceof javax.swing.JComponent )
-                        {   javax.swing.JComponent jc = (javax.swing.JComponent) c;
-                            normalBorder = jc.getBorder();
-                            log( out, "FileDrop: normal border saved." );
-                            jc.setBorder( dragBorder );
-                            log( out, "FileDrop: drag border set." );
-                        }   // end if: JComponent   
-
-                        // Acknowledge that it's okay to enter
-                        //evt.acceptDrag( java.awt.dnd.DnDConstants.ACTION_COPY_OR_MOVE );
-                        evt.acceptDrag( java.awt.dnd.DnDConstants.ACTION_COPY );
-                        log( out, "FileDrop: event accepted." );
-                    }   // end if: drag ok
-                    else 
-                    {   // Reject the drag event
-                        evt.rejectDrag();
-                        log( out, "FileDrop: event rejected." );
-                    }   // end else: drag not ok
-                }   // end dragEnter
-
-                public void dragOver( java.awt.dnd.DropTargetDragEvent evt ) 
-                {   // This is called continually as long as the mouse is
-                    // over the drag target.
-                }   // end dragOver
-
-                public void drop( java.awt.dnd.DropTargetDropEvent evt )
-                {   log( out, "FileDrop: drop event." );
-                    try
-                    {   // Get whatever was dropped
-                        java.awt.datatransfer.Transferable tr = evt.getTransferable();
-
-                        // Is it a file list?
-                        if (tr.isDataFlavorSupported (java.awt.datatransfer.DataFlavor.javaFileListFlavor))
-                        {
+            {       log( out, "FileDrop: dragEnter event." );
+
+            // Is this an acceptable drag event?
+            if( isDragOk( out, evt ) )
+            {
+                // If it's a Swing component, set its border
+                if( c instanceof javax.swing.JComponent )
+                {   javax.swing.JComponent jc = (javax.swing.JComponent) c;
+                normalBorder = jc.getBorder();
+                log( out, "FileDrop: normal border saved." );
+                jc.setBorder( dragBorder );
+                log( out, "FileDrop: drag border set." );
+                }   // end if: JComponent
+
+                // Acknowledge that it's okay to enter
+                //evt.acceptDrag( java.awt.dnd.DnDConstants.ACTION_COPY_OR_MOVE );
+                evt.acceptDrag( java.awt.dnd.DnDConstants.ACTION_COPY );
+                log( out, "FileDrop: event accepted." );
+            }   // end if: drag ok
+            else
+            {   // Reject the drag event
+                evt.rejectDrag();
+                log( out, "FileDrop: event rejected." );
+            }   // end else: drag not ok
+            }   // end dragEnter
+
+            public void dragOver( java.awt.dnd.DropTargetDragEvent evt )
+            {   // This is called continually as long as the mouse is
+                // over the drag target.
+            }   // end dragOver
+
+            public void drop( java.awt.dnd.DropTargetDropEvent evt )
+            {   log( out, "FileDrop: drop event." );
+            try
+            {   // Get whatever was dropped
+                java.awt.datatransfer.Transferable tr = evt.getTransferable();
+
+                // Is it a file list?
+                if (tr.isDataFlavorSupported (java.awt.datatransfer.DataFlavor.javaFileListFlavor))
+                {
+                    // Say we'll take it.
+                    //evt.acceptDrop ( java.awt.dnd.DnDConstants.ACTION_COPY_OR_MOVE );
+                    evt.acceptDrop ( java.awt.dnd.DnDConstants.ACTION_COPY );
+                    log( out, "FileDrop: file list accepted." );
+
+                    // Get a useful list
+                    java.util.List<Object> fileList = (java.util.List<Object>)
+                    tr.getTransferData(java.awt.datatransfer.DataFlavor.javaFileListFlavor);
+
+                    // Convert list to array
+                    java.io.File[] filesTemp = new java.io.File[ fileList.size() ];
+                    fileList.toArray( filesTemp );
+                    final java.io.File[] files = filesTemp;
+
+                    // Alert listener to drop.
+                    if( listener != null ) {
+                        listener.filesDropped( files );
+                    }
+
+                    // Mark that drop is completed.
+                    evt.getDropTargetContext().dropComplete(true);
+                    log( out, "FileDrop: drop complete." );
+                }   // end if: file list
+                else // this section will check for a reader flavor.
+                {
+                    // Thanks, Nathan!
+                    // BEGIN 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+                    DataFlavor[] flavors = tr.getTransferDataFlavors();
+                    boolean handled = false;
+                    for (int zz = 0; zz < flavors.length; zz++) {
+                        if (flavors[zz].isRepresentationClassReader()) {
                             // Say we'll take it.
                             //evt.acceptDrop ( java.awt.dnd.DnDConstants.ACTION_COPY_OR_MOVE );
-                            evt.acceptDrop ( java.awt.dnd.DnDConstants.ACTION_COPY );
-                            log( out, "FileDrop: file list accepted." );
-
-                            // Get a useful list
-                            java.util.List fileList = (java.util.List) 
-                                tr.getTransferData(java.awt.datatransfer.DataFlavor.javaFileListFlavor);
-                            java.util.Iterator iterator = fileList.iterator();
-
-                            // Convert list to array
-                            java.io.File[] filesTemp = new java.io.File[ fileList.size() ];
-                            fileList.toArray( filesTemp );
-                            final java.io.File[] files = filesTemp;
-
-                            // Alert listener to drop.
-                            if( listener != null )
-                                listener.filesDropped( files );
+                            evt.acceptDrop(java.awt.dnd.DnDConstants.ACTION_COPY);
+                            log(out, "FileDrop: reader accepted.");
+
+                            Reader reader = flavors[zz].getReaderForText(tr);
+
+                            BufferedReader br = new BufferedReader(reader);
+
+                            if(listener != null) {
+                                listener.filesDropped(createFileArray(br, out));
+                            }
 
                             // Mark that drop is completed.
                             evt.getDropTargetContext().dropComplete(true);
-                            log( out, "FileDrop: drop complete." );
-                        }   // end if: file list
-                        else // this section will check for a reader flavor.
-                        {
-                            // Thanks, Nathan!
-                            // BEGIN 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
-                            DataFlavor[] flavors = tr.getTransferDataFlavors();
-                            boolean handled = false;
-                            for (int zz = 0; zz < flavors.length; zz++) {
-                                if (flavors[zz].isRepresentationClassReader()) {
-                                    // Say we'll take it.
-                                    //evt.acceptDrop ( java.awt.dnd.DnDConstants.ACTION_COPY_OR_MOVE );
-                                    evt.acceptDrop(java.awt.dnd.DnDConstants.ACTION_COPY);
-                                    log(out, "FileDrop: reader accepted.");
-
-                                    Reader reader = flavors[zz].getReaderForText(tr);
-
-                                    BufferedReader br = new BufferedReader(reader);
-                                    
-                                    if(listener != null)
-                                        listener.filesDropped(createFileArray(br, out));
-                                    
-                                    // Mark that drop is completed.
-                                    evt.getDropTargetContext().dropComplete(true);
-                                    log(out, "FileDrop: drop complete.");
-                                    handled = true;
-                                    break;
-                                }
-                            }
-                            if(!handled){
-                                log( out, "FileDrop: not a file list or reader - abort." );
-                                evt.rejectDrop();
-                            }
-                            // END 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
-                        }   // end else: not a file list
-                    }   // end try
-                    catch ( java.io.IOException io) 
-                    {   log( out, "FileDrop: IOException - abort:" );
-                        io.printStackTrace( out );
+                            log(out, "FileDrop: drop complete.");
+                            handled = true;
+                            break;
+                        }
+                    }
+                    if(!handled){
+                        log( out, "FileDrop: not a file list or reader - abort." );
                         evt.rejectDrop();
-                    }   // end catch IOException
-                    catch (java.awt.datatransfer.UnsupportedFlavorException ufe) 
-                    {   log( out, "FileDrop: UnsupportedFlavorException - abort:" );
-                        ufe.printStackTrace( out );
-                        evt.rejectDrop();
-                    }   // end catch: UnsupportedFlavorException
-                    finally
-                    {
-                        // If it's a Swing component, reset its border
-                        if( c instanceof javax.swing.JComponent )
-                        {   javax.swing.JComponent jc = (javax.swing.JComponent) c;
-                            jc.setBorder( normalBorder );
-                            log( out, "FileDrop: normal border restored." );
-                        }   // end if: JComponent
-                    }   // end finally
-                }   // end drop
-
-                public void dragExit( java.awt.dnd.DropTargetEvent evt ) 
-                {   log( out, "FileDrop: dragExit event." );
-                    // If it's a Swing component, reset its border
-                    if( c instanceof javax.swing.JComponent )
-                    {   javax.swing.JComponent jc = (javax.swing.JComponent) c;
-                        jc.setBorder( normalBorder );
-                        log( out, "FileDrop: normal border restored." );
-                    }   // end if: JComponent
-                }   // end dragExit
-
-                public void dropActionChanged( java.awt.dnd.DropTargetDragEvent evt ) 
-                {   log( out, "FileDrop: dropActionChanged event." );
-                    // Is this an acceptable drag event?
-                    if( isDragOk( out, evt ) )
-                    {   //evt.acceptDrag( java.awt.dnd.DnDConstants.ACTION_COPY_OR_MOVE );
-                        evt.acceptDrag( java.awt.dnd.DnDConstants.ACTION_COPY );
-                        log( out, "FileDrop: event accepted." );
-                    }   // end if: drag ok
-                    else 
-                    {   evt.rejectDrag();
-                        log( out, "FileDrop: event rejected." );
-                    }   // end else: drag not ok
-                }   // end dropActionChanged
+                    }
+                    // END 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+                }   // end else: not a file list
+            }   // end try
+            catch ( java.io.IOException io)
+            {   log( out, "FileDrop: IOException - abort:" );
+            io.printStackTrace( out );
+            evt.rejectDrop();
+            }   // end catch IOException
+            catch (java.awt.datatransfer.UnsupportedFlavorException ufe)
+            {   log( out, "FileDrop: UnsupportedFlavorException - abort:" );
+            ufe.printStackTrace( out );
+            evt.rejectDrop();
+            }   // end catch: UnsupportedFlavorException
+            finally
+            {
+                // If it's a Swing component, reset its border
+                if( c instanceof javax.swing.JComponent )
+                {   javax.swing.JComponent jc = (javax.swing.JComponent) c;
+                jc.setBorder( normalBorder );
+                log( out, "FileDrop: normal border restored." );
+                }   // end if: JComponent
+            }   // end finally
+            }   // end drop
+
+            public void dragExit( java.awt.dnd.DropTargetEvent evt )
+            {   log( out, "FileDrop: dragExit event." );
+            // If it's a Swing component, reset its border
+            if( c instanceof javax.swing.JComponent )
+            {   javax.swing.JComponent jc = (javax.swing.JComponent) c;
+            jc.setBorder( normalBorder );
+            log( out, "FileDrop: normal border restored." );
+            }   // end if: JComponent
+            }   // end dragExit
+
+            public void dropActionChanged( java.awt.dnd.DropTargetDragEvent evt )
+            {   log( out, "FileDrop: dropActionChanged event." );
+            // Is this an acceptable drag event?
+            if( isDragOk( out, evt ) )
+            {   //evt.acceptDrag( java.awt.dnd.DnDConstants.ACTION_COPY_OR_MOVE );
+                evt.acceptDrag( java.awt.dnd.DnDConstants.ACTION_COPY );
+                log( out, "FileDrop: event accepted." );
+            }   // end if: drag ok
+            else
+            {   evt.rejectDrag();
+            log( out, "FileDrop: event rejected." );
+            }   // end else: drag not ok
+            }   // end dropActionChanged
             }; // end DropTargetListener
 
@@ -444,13 +445,13 @@
     }   // end constructor
 
-    
+
     private static boolean supportsDnD()
     {   // Static Boolean
         if( supportsDnD == null )
-        {   
+        {
             boolean support = false;
             try
             {   Class arbitraryDndClass = Class.forName( "java.awt.dnd.DnDConstants" );
-                support = true;
+            support = true;
             }   // end try
             catch( Exception e )
@@ -461,18 +462,20 @@
         return supportsDnD.booleanValue();
     }   // end supportsDnD
-    
-    
-     // BEGIN 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
-     private static String ZERO_CHAR_STRING = "" + (char)0;
-     private static File[] createFileArray(BufferedReader bReader, PrintStream out)
-     {
-        try { 
-            java.util.List list = new java.util.ArrayList();
+
+
+    // BEGIN 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+    private static String ZERO_CHAR_STRING = "" + (char)0;
+    private static File[] createFileArray(BufferedReader bReader, PrintStream out)
+    {
+        try {
+            java.util.List<File> list = new java.util.ArrayList<File>();
             java.lang.String line = null;
             while ((line = bReader.readLine()) != null) {
                 try {
                     // kde seems to append a 0 char to the end of the reader
-                    if(ZERO_CHAR_STRING.equals(line)) continue; 
-                    
+                    if(ZERO_CHAR_STRING.equals(line)) {
+                        continue;
+                    }
+
                     java.io.File file = new java.io.File(new java.net.URI(line));
                     list.add(file);
@@ -482,13 +485,13 @@
             }
 
-            return (java.io.File[]) list.toArray(new File[list.size()]);
+            return list.toArray(new File[list.size()]);
         } catch (IOException ex) {
             log(out, "FileDrop: IOException");
         }
         return new File[0];
-     }
-     // END 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
-     
-    
+    }
+    // END 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+
+
     private void makeDropTarget( final java.io.PrintStream out, final java.awt.Component c, boolean recursive )
     {
@@ -500,85 +503,90 @@
         catch( java.util.TooManyListenersException e )
         {   e.printStackTrace();
-            log(out, "FileDrop: Drop will not work due to previous error. Do you have another listener attached?" );
+        log(out, "FileDrop: Drop will not work due to previous error. Do you have another listener attached?" );
         }   // end catch
-        
+
         // Listen for hierarchy changes and remove the drop target when the parent gets cleared out.
         c.addHierarchyListener( new java.awt.event.HierarchyListener()
         {   public void hierarchyChanged( java.awt.event.HierarchyEvent evt )
-            {   log( out, "FileDrop: Hierarchy changed." );
-                java.awt.Component parent = c.getParent();
-                if( parent == null )
-                {   c.setDropTarget( null );
-                    log( out, "FileDrop: Drop target cleared from component." );
-                }   // end if: null parent
-                else
-                {   new java.awt.dnd.DropTarget(c, dropListener);
-                    log( out, "FileDrop: Drop target added to component." );
-                }   // end else: parent not null
-            }   // end hierarchyChanged
+        {   log( out, "FileDrop: Hierarchy changed." );
+        java.awt.Component parent = c.getParent();
+        if( parent == null )
+        {   c.setDropTarget( null );
+        log( out, "FileDrop: Drop target cleared from component." );
+        }   // end if: null parent
+        else
+        {   new java.awt.dnd.DropTarget(c, dropListener);
+        log( out, "FileDrop: Drop target added to component." );
+        }   // end else: parent not null
+        }   // end hierarchyChanged
         }); // end hierarchy listener
-        if( c.getParent() != null )
+        if( c.getParent() != null ) {
             new java.awt.dnd.DropTarget(c, dropListener);
-        
+        }
+
         if( recursive && (c instanceof java.awt.Container ) )
-        {   
+        {
             // Get the container
             java.awt.Container cont = (java.awt.Container) c;
-            
+
             // Get it's components
             java.awt.Component[] comps = cont.getComponents();
-            
+
             // Set it's components as listeners also
-            for( int i = 0; i < comps.length; i++ )
+            for( int i = 0; i < comps.length; i++ ) {
                 makeDropTarget( out, comps[i], recursive );
+            }
         }   // end if: recursively set components as listener
     }   // end dropListener
-    
-    
-    
+
+
+
     /** Determine if the dragged data is a file list. */
     private boolean isDragOk( final java.io.PrintStream out, final java.awt.dnd.DropTargetDragEvent evt )
     {   boolean ok = false;
-        
-        // Get data flavors being dragged
-        java.awt.datatransfer.DataFlavor[] flavors = evt.getCurrentDataFlavors();
-        
-        // See if any of the flavors are a file list
-        int i = 0;
-        while( !ok && i < flavors.length )
-        {   
-            // BEGIN 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
-            // Is the flavor a file list?
-            final DataFlavor curFlavor = flavors[i];
-            if( curFlavor.equals( java.awt.datatransfer.DataFlavor.javaFileListFlavor ) ||
+
+    // Get data flavors being dragged
+    java.awt.datatransfer.DataFlavor[] flavors = evt.getCurrentDataFlavors();
+
+    // See if any of the flavors are a file list
+    int i = 0;
+    while( !ok && i < flavors.length )
+    {
+        // BEGIN 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+        // Is the flavor a file list?
+        final DataFlavor curFlavor = flavors[i];
+        if( curFlavor.equals( java.awt.datatransfer.DataFlavor.javaFileListFlavor ) ||
                 curFlavor.isRepresentationClassReader()){
-                ok = true;
-            }
-            // END 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
-            i++;
-        }   // end while: through flavors
-        
-        // If logging is enabled, show data flavors
-        if( out != null )
-        {   if( flavors.length == 0 )
-                log( out, "FileDrop: no data flavors." );
-            for( i = 0; i < flavors.length; i++ )
-                log( out, flavors[i].toString() );
-        }   // end if: logging enabled
-        
-        return ok;
+            ok = true;
+        }
+        // END 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+        i++;
+    }   // end while: through flavors
+
+    // If logging is enabled, show data flavors
+    if( out != null )
+    {   if( flavors.length == 0 ) {
+        log( out, "FileDrop: no data flavors." );
+    }
+    for( i = 0; i < flavors.length; i++ ) {
+        log( out, flavors[i].toString() );
+    }
+    }   // end if: logging enabled
+
+    return ok;
     }   // end isDragOk
-    
-    
+
+
     /** Outputs <tt>message</tt> to <tt>out</tt> if it's not null. */
     private static void log( java.io.PrintStream out, String message )
     {   // Log message if requested
-        if( out != null )
+        if( out != null ) {
             out.println( message );
+        }
     }   // end log
 
-    
-    
-    
+
+
+
     /**
      * Removes the drag-and-drop hooks from the component and optionally
@@ -594,7 +602,7 @@
     {   return remove( null, c, true );
     }   // end remove
-    
-    
-    
+
+
+
     /**
      * Removes the drag-and-drop hooks from the component and optionally
@@ -611,22 +619,23 @@
         if( supportsDnD() )
         {   log( out, "FileDrop: Removing drag-and-drop hooks." );
-            c.setDropTarget( null );
-            if( recursive && ( c instanceof java.awt.Container ) )
-            {   java.awt.Component[] comps = ((java.awt.Container)c).getComponents();
-                for( int i = 0; i < comps.length; i++ )
-                    remove( out, comps[i], recursive );
-                return true;
-            }   // end if: recursive
-            else return false;
+        c.setDropTarget( null );
+        if( recursive && ( c instanceof java.awt.Container ) )
+        {   java.awt.Component[] comps = ((java.awt.Container)c).getComponents();
+        for( int i = 0; i < comps.length; i++ ) {
+            remove( out, comps[i], recursive );
+        }
+        return true;
+        }   // end if: recursive
+        else return false;
         }   // end if: supports DnD
         else return false;
     }   // end remove
-    
-    
-
-    
-/* ********  I N N E R   I N T E R F A C E   L I S T E N E R  ******** */    
-    
-    
+
+
+
+
+    /* ********  I N N E R   I N T E R F A C E   L I S T E N E R  ******** */
+
+
     /**
      * Implement this inner interface to listen for when files are dropped. For example
@@ -645,5 +654,5 @@
      */
     public static interface Listener {
-       
+
         /**
          * This method is called when files have been successfully dropped.
@@ -653,12 +662,12 @@
          */
         public abstract void filesDropped( java.io.File[] files );
-        
-        
+
+
     }   // end inner-interface Listener
-    
-    
-/* ********  I N N E R   C L A S S  ******** */    
-    
-    
+
+
+    /* ********  I N N E R   C L A S S  ******** */
+
+
     /**
      * This is the event that is passed to the
@@ -701,11 +710,11 @@
             return files;
         }   // end getFiles
-    
+
     }   // end inner class Event
-    
-    
-    
-/* ********  I N N E R   C L A S S  ******** */
-    
+
+
+
+    /* ********  I N N E R   C L A S S  ******** */
+
 
     /**
@@ -737,5 +746,5 @@
      * </code></pre>
      *
-     * The {@link java.awt.datatransfer.DataFlavor} associated with 
+     * The {@link java.awt.datatransfer.DataFlavor} associated with
      * {@link TransferableObject} has the representation class
      * <tt>net.iharder.dnd.TransferableObject.class</tt> and MIME type
@@ -754,5 +763,5 @@
     {
         /**
-         * The MIME type for {@link #DATA_FLAVOR} is 
+         * The MIME type for {@link #DATA_FLAVOR} is
          * <tt>application/x-net.iharder.dnd.TransferableObject</tt>.
          *
@@ -766,10 +775,10 @@
          * {@link TransferableObject} has the representation class
          * <tt>net.iharder.dnd.TransferableObject.class</tt>
-         * and the MIME type 
+         * and the MIME type
          * <tt>application/x-net.iharder.dnd.TransferableObject</tt>.
          *
          * @since 1.1
          */
-        public final static java.awt.datatransfer.DataFlavor DATA_FLAVOR = 
+        public final static java.awt.datatransfer.DataFlavor DATA_FLAVOR =
             new java.awt.datatransfer.DataFlavor( FileDrop.TransferableObject.class, MIME_TYPE );
 
@@ -778,5 +787,5 @@
         private Object data;
 
-        private java.awt.datatransfer.DataFlavor customFlavor; 
+        private java.awt.datatransfer.DataFlavor customFlavor;
 
 
@@ -785,5 +794,5 @@
          * Creates a new {@link TransferableObject} that wraps <var>data</var>.
          * Along with the {@link #DATA_FLAVOR} associated with this class,
-         * this creates a custom data flavor with a representation class 
+         * this creates a custom data flavor with a representation class
          * determined from <code>data.getClass()</code> and the MIME type
          * <tt>application/x-net.iharder.dnd.TransferableObject</tt>.
@@ -794,5 +803,5 @@
         public TransferableObject( Object data )
         {   this.data = data;
-            this.customFlavor = new java.awt.datatransfer.DataFlavor( data.getClass(), MIME_TYPE );
+        this.customFlavor = new java.awt.datatransfer.DataFlavor( data.getClass(), MIME_TYPE );
         }   // end constructor
 
@@ -830,5 +839,5 @@
         public TransferableObject( Class dataClass, Fetcher fetcher )
         {   this.fetcher = fetcher;
-            this.customFlavor = new java.awt.datatransfer.DataFlavor( dataClass, MIME_TYPE );
+        this.customFlavor = new java.awt.datatransfer.DataFlavor( dataClass, MIME_TYPE );
         }   // end constructor
 
@@ -846,5 +855,5 @@
 
 
-    /* ********  T R A N S F E R A B L E   M E T H O D S  ******** */    
+        /* ********  T R A N S F E R A B L E   M E T H O D S  ******** */
 
 
@@ -859,17 +868,17 @@
          * @since 1.1
          */
-        public java.awt.datatransfer.DataFlavor[] getTransferDataFlavors() 
-        {   
+        public java.awt.datatransfer.DataFlavor[] getTransferDataFlavors()
+        {
             if( customFlavor != null )
                 return new java.awt.datatransfer.DataFlavor[]
-                {   customFlavor,
+                                                            {   customFlavor,
                     DATA_FLAVOR,
                     java.awt.datatransfer.DataFlavor.stringFlavor
-                };  // end flavors array
+                                                            };  // end flavors array
             else
                 return new java.awt.datatransfer.DataFlavor[]
-                {   DATA_FLAVOR,
+                                                            {   DATA_FLAVOR,
                     java.awt.datatransfer.DataFlavor.stringFlavor
-                };  // end flavors array
+                                                            };  // end flavors array
         }   // end getTransferDataFlavors
 
@@ -888,6 +897,6 @@
          */
         public Object getTransferData( java.awt.datatransfer.DataFlavor flavor )
-        throws java.awt.datatransfer.UnsupportedFlavorException, java.io.IOException 
-        {   
+        throws java.awt.datatransfer.UnsupportedFlavorException, java.io.IOException
+        {
             // Native object
             if( flavor.equals( DATA_FLAVOR ) )
@@ -898,6 +907,6 @@
                 return fetcher == null ? data.toString() : fetcher.getObject().toString();
 
-            // We can't do anything else
-            throw new java.awt.datatransfer.UnsupportedFlavorException(flavor);
+                // We can't do anything else
+                throw new java.awt.datatransfer.UnsupportedFlavorException(flavor);
         }   // end getTransferData
 
@@ -913,5 +922,5 @@
          * @since 1.1
          */
-        public boolean isDataFlavorSupported( java.awt.datatransfer.DataFlavor flavor ) 
+        public boolean isDataFlavorSupported( java.awt.datatransfer.DataFlavor flavor )
         {
             // Native object
@@ -928,5 +937,5 @@
 
 
-    /* ********  I N N E R   I N T E R F A C E   F E T C H E R  ******** */    
+        /* ********  I N N E R   I N T E R F A C E   F E T C H E R  ******** */
 
         /**
@@ -959,7 +968,7 @@
     }   // end class TransferableObject
 
-    
-    
-    
-    
+
+
+
+
 }   // end class FileDrop
Index: /trunk/src/org/openstreetmap/josm/gui/SelectionManager.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 1910)
+++ /trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 1911)
@@ -145,6 +145,7 @@
      */
     public void mousePressed(MouseEvent e) {
-        if (e.getButton() == MouseEvent.BUTTON1)
+        if (e.getButton() == MouseEvent.BUTTON1) {
             mousePosStart = mousePos = e.getPoint();
+        }
     }
 
@@ -157,6 +158,7 @@
 
         if (buttonPressed != 0) {
-            if (mousePosStart == null)
+            if (mousePosStart == null) {
                 mousePosStart = mousePos = e.getPoint();
+            }
             paintRect();
         }
@@ -191,6 +193,7 @@
         boolean alt = (e.getModifiersEx() & MouseEvent.ALT_DOWN_MASK) != 0;
         boolean ctrl = (e.getModifiersEx() & MouseEvent.CTRL_DOWN_MASK) != 0;
-        if ((e.getModifiersEx() & MouseEvent.BUTTON3_DOWN_MASK) == 0)
+        if ((e.getModifiersEx() & MouseEvent.BUTTON3_DOWN_MASK) == 0) {
             selectionEndedListener.selectionEnded(r, alt, shift, ctrl);
+        }
     }
 
@@ -235,11 +238,13 @@
             if ((double)w/h < aspectRatio) {
                 int neww = (int)(h*aspectRatio);
-                if (mousePos.x < mousePosStart.x)
+                if (mousePos.x < mousePosStart.x) {
                     x += w - neww;
+                }
                 w = neww;
             } else {
                 int newh = (int)(w/aspectRatio);
-                if (mousePos.y < mousePosStart.y)
+                if (mousePos.y < mousePosStart.y) {
                     y += h - newh;
+                }
                 h = newh;
             }
@@ -275,17 +280,20 @@
         if (clicked) {
             OsmPrimitive osm = nc.getNearest(center);
-            if (osm != null)
+            if (osm != null) {
                 selection.add(osm);
+            }
         } else {
             // nodes
             for (Node n : nc.getCurrentDataSet().nodes) {
-                if (!n.deleted && !n.incomplete && r.contains(nc.getPoint(n)))
+                if (!n.deleted && !n.incomplete && r.contains(nc.getPoint(n))) {
                     selection.add(n);
+                }
             }
 
             // ways
             for (Way w : nc.getCurrentDataSet().ways) {
-                if (w.deleted || w.getNodesCount() == 0 || w.incomplete)
-                        continue;
+                if (w.deleted || w.getNodesCount() == 0 || w.incomplete) {
+                    continue;
+                }
                 if (alt) {
                     for (Node n : w.getNodes()) {
@@ -303,5 +311,7 @@
                         }
                     }
-                    if (allIn) selection.add(w);
+                    if (allIn) {
+                        selection.add(w);
+                    }
                 }
             }
Index: /trunk/src/org/openstreetmap/josm/gui/conflict/nodes/NodeListTableCellRenderer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/conflict/nodes/NodeListTableCellRenderer.java	(revision 1910)
+++ /trunk/src/org/openstreetmap/josm/gui/conflict/nodes/NodeListTableCellRenderer.java	(revision 1911)
@@ -167,17 +167,17 @@
         reset();
         switch(column) {
-        case 0:
-            renderRowId(getModel(table),row, isSelected);
-            break;
-        case 1:
-            if (node == null) {
-                renderEmptyRow();
-            } else {
-                renderNode(getModel(table), node, row, isSelected);
-            }
-            break;
-        default:
-            // should not happen
-            throw new RuntimeException(tr("unexpected column index. Got {0}", column));
+            case 0:
+                renderRowId(getModel(table),row, isSelected);
+                break;
+            case 1:
+                if (node == null) {
+                    renderEmptyRow();
+                } else {
+                    renderNode(getModel(table), node, row, isSelected);
+                }
+                break;
+            default:
+                // should not happen
+                throw new RuntimeException(tr("unexpected column index. Got {0}", column));
         }
         return this;
@@ -189,4 +189,5 @@
      * @return the table model
      */
+    @SuppressWarnings("unchecked")
     protected ListMergeModel<Node>.EntriesTableModel getModel(JTable table) {
         return (ListMergeModel.EntriesTableModel)table.getModel();
Index: /trunk/src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberTableCellRenderer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberTableCellRenderer.java	(revision 1910)
+++ /trunk/src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberTableCellRenderer.java	(revision 1911)
@@ -198,23 +198,23 @@
         renderForeground(getModel(table), member, row, column, isSelected);
         switch(column) {
-        case 0:
-            renderRowId(row);
-            break;
-        case 1:
-            if (member == null) {
-                renderEmptyRow();
-            } else {
-                renderRole(member);
-            }
-            break;
-        case 2:
-            if (member == null) {
-                renderEmptyRow();
-            } else {
-                renderPrimitive(member);
-            }
-            break;
-        default:
-            // should not happen
+            case 0:
+                renderRowId(row);
+                break;
+            case 1:
+                if (member == null) {
+                    renderEmptyRow();
+                } else {
+                    renderRole(member);
+                }
+                break;
+            case 2:
+                if (member == null) {
+                    renderEmptyRow();
+                } else {
+                    renderPrimitive(member);
+                }
+                break;
+            default:
+                // should not happen
         }
         return this;
@@ -226,4 +226,5 @@
      * @return the table model
      */
+    @SuppressWarnings("unchecked")
     protected ListMergeModel<Node>.EntriesTableModel getModel(JTable table) {
         return (ListMergeModel.EntriesTableModel)table.getModel();
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 1910)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 1911)
@@ -32,5 +32,4 @@
 import javax.swing.ListModel;
 import javax.swing.ListSelectionModel;
-import javax.swing.SwingUtilities;
 import javax.swing.UIManager;
 import javax.swing.event.ListDataEvent;
@@ -314,13 +313,13 @@
             );
             switch(ret) {
-            case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return DeleteDecision.deleteAll;
-            case JOptionPane.CLOSED_OPTION: return DeleteDecision.cancel;
-            case 0: return DeleteDecision.deleteCurrent;
-            case 1: return DeleteDecision.dontDeleteCurrent;
-            case 2: return DeleteDecision.deleteAll;
-            case 3: return DeleteDecision.cancel;
-            default:
-                // shouldn't happen. This is the safest option.
-                return DeleteDecision.cancel;
+                case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return DeleteDecision.deleteAll;
+                case JOptionPane.CLOSED_OPTION: return DeleteDecision.cancel;
+                case 0: return DeleteDecision.deleteCurrent;
+                case 1: return DeleteDecision.dontDeleteCurrent;
+                case 2: return DeleteDecision.deleteAll;
+                case 3: return DeleteDecision.cancel;
+                default:
+                    // shouldn't happen. This is the safest option.
+                    return DeleteDecision.cancel;
             }
         }
@@ -360,8 +359,8 @@
                     DeleteDecision decision = confirmDeleteMultipleLayer(layer, i, layers.size());
                     switch(decision) {
-                    case deleteCurrent: /* do nothing */ break;
-                    case deleteAll: doAskConfirmation = false; break;
-                    case dontDeleteCurrent: continue;
-                    case cancel: return;
+                        case deleteCurrent: /* do nothing */ break;
+                        case deleteAll: doAskConfirmation = false; break;
+                        case dontDeleteCurrent: continue;
+                        case cancel: return;
                     }
                 }
@@ -674,8 +673,13 @@
     public class LayerListModel extends DefaultListModel implements LayerChangeListener, PropertyChangeListener{
 
-        //private ArrayList<Layer> layers;
+        /** manages list selection state*/
         private DefaultListSelectionModel selectionModel;
         private CopyOnWriteArrayList<LayerListModelListener> listeners;
 
+        /**
+         * constructor
+         * 
+         * @param selectionModel the list selection model
+         */
         private LayerListModel(DefaultListSelectionModel selectionModel) {
             this.selectionModel = selectionModel;
@@ -683,4 +687,9 @@
         }
 
+        /**
+         * Adds a listener to this model
+         * 
+         * @param listener the listener
+         */
         public void addLayerListModelListener(LayerListModelListener listener) {
             synchronized(listeners) {
@@ -691,4 +700,9 @@
         }
 
+        /**
+         * removes a listener from  this model
+         * @param listener the listener
+         * 
+         */
         public void removeLayerListModelListener(LayerListModelListener listener) {
             synchronized(listeners) {
@@ -699,4 +713,11 @@
         }
 
+        /**
+         * Fires a make visible event to listeners
+         * 
+         * @param index the index of the row to make visible
+         * @param layer the layer at this index
+         * @see LayerListModelListener#makeVisible(int, Layer)
+         */
         protected void fireMakeVisible(int index, Layer layer) {
             for (LayerListModelListener listener : listeners) {
@@ -705,4 +726,9 @@
         }
 
+        /**
+         * Fires a refresh event to listeners of this model
+         * 
+         * @see LayerListModelListener#refresh()
+         */
         protected void fireRefresh() {
             for (LayerListModelListener listener : listeners) {
@@ -711,18 +737,27 @@
         }
 
+        /**
+         * Populates the model with the current layers managed by
+         * {@see MapView}.
+         * 
+         */
         public void populate() {
-            if (getLayers() != null) {
-                for (Layer layer: getLayers()) {
-                    // make sure the model is registered exactly once
-                    //
-                    layer.removePropertyChangeListener(this);
-                    layer.addPropertyChangeListener(this);
-                }
+            for (Layer layer: getLayers()) {
+                // make sure the model is registered exactly once
+                //
+                layer.removePropertyChangeListener(this);
+                layer.addPropertyChangeListener(this);
             }
             fireContentsChanged(this, 0, getSize());
         }
 
+        /**
+         * Marks <code>layer</code> as selected layer. Ignored, if
+         * layer is null.
+         * 
+         * @param layer the layer.
+         */
         public void setSelectedLayer(Layer layer) {
-            if (layer == null || getLayers() == null)
+            if (layer == null)
                 return;
             int idx = getLayers().indexOf(layer);
@@ -734,7 +769,13 @@
         }
 
+        /**
+         * Replies the list of currently selected layers. Never null, but may
+         * be empty.
+         * 
+         * @return the list of currently selected layers. Never null, but may
+         * be empty.
+         */
         public List<Layer> getSelectedLayers() {
             ArrayList<Layer> selected = new ArrayList<Layer>();
-            if (getLayers() == null) return selected;
             for (int i=0; i<getLayers().size(); i++) {
                 if (selectionModel.isSelectedIndex(i)) {
@@ -745,7 +786,13 @@
         }
 
+        /**
+         * Replies a the list of indices of the selected rows. Never null,
+         * but may be empty.
+         * 
+         * @return  the list of indices of the selected rows. Never null,
+         * but may be empty.
+         */
         public List<Integer> getSelectedRows() {
             ArrayList<Integer> selected = new ArrayList<Integer>();
-            if (getLayers() == null) return selected;
             for (int i=0; i<getLayers().size();i++) {
                 if (selectionModel.isSelectedIndex(i)) {
@@ -756,12 +803,27 @@
         }
 
-        protected void removeLayer(Layer layer) {
+        /**
+         * Invoked if a layer managed by {@see MapView} is removed
+         * 
+         * @param layer the layer which is removed
+         */
+        protected void onRemoveLayer(Layer layer) {
             if (layer == null)
                 return;
+            int size = getSize();
+            List<Integer> rows = getSelectedRows();
+            if (rows.isEmpty() && size > 0) {
+                selectionModel.setSelectionInterval(size-1, size-1);
+            }
             fireRefresh();
             ensureSelectedIsVisible();
         }
 
-        protected void addLayer(Layer layer) {
+        /**
+         * Invoked when a layer managed by {@see MapView} is added
+         * 
+         * @param layer the layer
+         */
+        protected void onAddLayer(Layer layer) {
             if (layer == null) return;
             layer.addPropertyChangeListener(this);
@@ -769,4 +831,9 @@
         }
 
+        /**
+         * Replies the first layer. Null if no layers are present
+         * 
+         * @return the first layer. Null if no layers are present
+         */
         public Layer getFirstLayer() {
             if (getSize() == 0) return null;
@@ -774,4 +841,11 @@
         }
 
+        /**
+         * Replies the layer at position <code>index</code>
+         * 
+         * @param index the index
+         * @return the layer at position <code>index</code>. Null,
+         * if index is out of range.
+         */
         public Layer getLayer(int index) {
             if (index < 0 || index >= getSize())
@@ -780,4 +854,11 @@
         }
 
+        /**
+         * Replies true if the the currently selected layers can move up
+         * by one position
+         * 
+         * @return true if the the currently selected layers can move up
+         * by one position
+         */
         public boolean canMoveUp() {
             List<Integer> sel = getSelectedRows();
@@ -785,4 +866,8 @@
         }
 
+        /**
+         * Move up the currently selected layers by one position
+         * 
+         */
         public void moveUp() {
             if (!canMoveUp()) return;
@@ -802,4 +887,11 @@
         }
 
+        /**
+         * Replies true if the currently selected layers can move down
+         * by one position
+         * 
+         * @return true if the currently selected layers can move down
+         * by one position
+         */
         public boolean canMoveDown() {
             List<Integer> sel = getSelectedRows();
@@ -807,4 +899,8 @@
         }
 
+        /**
+         * Move down the currently selected layers by one position
+         * 
+         */
         public void moveDown() {
             if (!canMoveDown()) return;
@@ -825,8 +921,12 @@
         }
 
+        /**
+         * Make sure the first of the selected layers is visible in the
+         * views of this model.
+         * 
+         */
         protected void ensureSelectedIsVisible() {
             int index = selectionModel.getMinSelectionIndex();
             if (index <0 )return;
-            if (getLayers() == null) return;
             if (index >= getLayers().size()) return;
             Layer layer = getLayers().get(index);
@@ -834,13 +934,21 @@
         }
 
-        public List<Layer> getPossibleMergeTargets(Layer layer) {
+        /**
+         * Replies a list of layers which are possible merge targets
+         * for <code>source</code>
+         * 
+         * @param source the source layer
+         * @return a list of layers which are possible merge targets
+         * for <code>source</code>. Never null, but can be empty.
+         */
+        public List<Layer> getPossibleMergeTargets(Layer source) {
             ArrayList<Layer> targets = new ArrayList<Layer>();
-            if (layer == null)
+            if (source == null)
                 return targets;
             for(Layer target: getLayers()) {
-                if (layer == target) {
+                if (source == target) {
                     continue;
                 }
-                if (target.isMergable(layer)) {
+                if (target.isMergable(source)) {
                     targets.add(target);
                 }
@@ -849,5 +957,12 @@
         }
 
+        /**
+         * Activates the layer <code>layer</code>
+         * 
+         * @param layer the layer
+         */
         public void activateLayer(Layer layer) {
+            if (layer == null)
+                return;
             Main.map.mapView.moveLayer(layer,0);
             Main.map.mapView.setActiveLayer(layer);
@@ -857,7 +972,14 @@
         }
 
+        /**
+         * Replies the list of layers currently managed by {@see MapView}.
+         * Never null, but can be empty.
+         * 
+         * @return the list of layers currently managed by {@see MapView}.
+         * Never null, but can be empty.
+         */
         protected List<Layer> getLayers() {
-            if (Main.map == null) return null;
-            if (Main.map.mapView == null) return null;
+            if (Main.map == null || Main.map.mapView == null)
+                return Collections.<Layer>emptyList();
             return Main.map.mapView.getAllLayersAsList();
         }
@@ -898,17 +1020,10 @@
 
         public void layerAdded(Layer newLayer) {
-            addLayer(newLayer);
+            onAddLayer(newLayer);
         }
 
         public void layerRemoved(final Layer oldLayer) {
-            SwingUtilities.invokeLater(
-                    new Runnable() {
-                        public void run() {
-                            removeLayer(oldLayer);
-                        }
-                    }
-            );
-        }
-
+            onRemoveLayer(oldLayer);
+        }
 
         /* ------------------------------------------------------------------------------ */
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 1910)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 1911)
@@ -133,4 +133,5 @@
      * @param row The row of the table from which the value is edited.
      */
+    @SuppressWarnings("unchecked")
     void propertyEdit(int row) {
         Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected();
@@ -488,16 +489,16 @@
                     String str = null;
                     switch (column) {
-                    case 0:
-                        str = (String) value;
-                        break;
-                    case 1:
-                        Map<String, Integer> v = (Map<String,Integer>) value;
-                        if (v.size()!=1) {
-                            str=tr("<different>");
-                            c.setFont(c.getFont().deriveFont(Font.ITALIC));
-                        } else {
-                            str=v.entrySet().iterator().next().getKey();
-                        }
-                        break;
+                        case 0:
+                            str = (String) value;
+                            break;
+                        case 1:
+                            Map<String, Integer> v = (Map<String,Integer>) value;
+                            if (v.size()!=1) {
+                                str=tr("<different>");
+                                c.setFont(c.getFont().deriveFont(Font.ITALIC));
+                            } else {
+                                str=v.entrySet().iterator().next().getKey();
+                            }
+                            break;
                     }
                     ((JLabel)c).setText(str);
@@ -524,4 +525,5 @@
 
         membershipTable.getColumnModel().getColumn(1).setCellRenderer(new DefaultTableCellRenderer() {
+            @SuppressWarnings("unchecked")
             @Override public Component getTableCellRendererComponent(JTable table, Object value,
                     boolean isSelected, boolean hasFocus, int row, int column) {
Index: /trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java	(revision 1910)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java	(revision 1911)
@@ -70,8 +70,9 @@
 
     public final void setCoor(LatLon coor) {
-        if(this.coor == null)
+        if(this.coor == null) {
             this.coor = new CachedLatLon(coor);
-        else
+        } else {
             this.coor.setCoor(coor);
+        }
     }
 
@@ -98,4 +99,5 @@
     static {
         Marker.markerProducers.add(new MarkerProducers() {
+            @SuppressWarnings("unchecked")
             public Marker createMarker(WayPoint wpt, File relativePath, MarkerLayer parentLayer, double time, double offset) {
                 String uri = null;
@@ -110,6 +112,7 @@
 
                 // Try a relative file:// url, if the link is not in an URL-compatible form
-                if (relativePath != null && uri != null && !isWellFormedAddress(uri))
+                if (relativePath != null && uri != null && !isWellFormedAddress(uri)) {
                     uri = new File(relativePath.getParentFile(), uri).toURI().toString();
+                }
 
                 String name_desc = "";
@@ -147,8 +150,10 @@
         this.time = time;
         Icon symbol = ImageProvider.getIfAvailable("markers",iconName);
-        if (symbol == null)
+        if (symbol == null) {
             symbol = ImageProvider.getIfAvailable("symbols",iconName);
-        if (symbol == null)
+        }
+        if (symbol == null) {
             symbol = ImageProvider.getIfAvailable("nodes",iconName);
+        }
         this.symbol = symbol;
         this.parentLayer = parentLayer;
@@ -190,6 +195,7 @@
         }
 
-        if ((text != null) && (show.equalsIgnoreCase("show")))
+        if ((text != null) && (show.equalsIgnoreCase("show"))) {
             g.drawString(text, screen.x+4, screen.y+2);
+        }
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 1910)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 1911)
@@ -63,4 +63,5 @@
     public GpxLayer fromLayer = null;
 
+    @SuppressWarnings("unchecked")
     public MarkerLayer(GpxData indata, String name, File associatedFile, GpxLayer fromLayer) {
 
