Index: /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 1898)
+++ /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 1899)
@@ -153,5 +153,5 @@
         Node c = new Node(selectedNode);
         c.keys = null;
-        c.selected = false;
+        c.setSelected(false);
         cmds.add(new ChangeCommand(selectedNode, c));
 
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1898)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1899)
@@ -403,5 +403,5 @@
                     // here so /only/ the new way will be selected after this method finishes.
                     if(alt) {
-                        wnew.selected = false;
+                        wnew.setSelected(false);
                     }
 
@@ -530,5 +530,5 @@
                 title = tr("Add node into way");
                 for (Way w : reuseWays) {
-                    w.selected = false;
+                    w.setSelected(false);
                 }
             }
Index: /trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 1898)
+++ /trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 1899)
@@ -177,8 +177,8 @@
                         sel.remove(osm);
                     }
-                } else if (mode == SearchMode.add && !osm.selected && matcher.match(osm)) {
+                } else if (mode == SearchMode.add && !osm.isSelected() && matcher.match(osm)) {
                     sel.add(osm);
                     ++foundMatches;
-                } else if (mode == SearchMode.remove && osm.selected && matcher.match(osm)) {
+                } else if (mode == SearchMode.remove && osm.isSelected() && matcher.match(osm)) {
                     sel.remove(osm);
                     ++foundMatches;
Index: /trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 1898)
+++ /trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 1899)
@@ -409,5 +409,5 @@
     private static class Selected extends Match {
         @Override public boolean match(OsmPrimitive osm) {
-            return osm.selected;
+            return osm.isSelected();
         }
         @Override public String toString() {return "selected";}
Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 1898)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 1899)
@@ -1,4 +1,6 @@
 // License: GPL. Copyright 2007 by Immanuel Scholz and others
 package org.openstreetmap.josm.data.osm;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.geom.Area;
@@ -7,6 +9,6 @@
 import java.util.Collection;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.HashSet;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
@@ -15,5 +17,4 @@
 
 import org.openstreetmap.josm.data.SelectionChangedListener;
-import static org.openstreetmap.josm.tools.I18n.tr;
 
 /**
@@ -108,5 +109,5 @@
     /**
      * Adds a primitive to the dataset
-     * 
+     *
      * @param primitive the primitive. Ignored if null.
      */
@@ -129,5 +130,5 @@
      * {@see #relations}. References from other primitives to this
      * primitive are left unchanged.
-     * 
+     *
      * @param primitive the primitive. Ignored if null.
      */
@@ -188,5 +189,5 @@
         clearSelection(relations);
         for (OsmPrimitive osm : selection) {
-            osm.selected = true;
+            osm.setSelected(true);
         }
         fireSelectionChanged(selection);
@@ -203,5 +204,5 @@
         for (OsmPrimitive o : osm)
             if (o != null) {
-                o.selected = true;
+                o.setSelected(true);
             }
         fireSelectionChanged(Arrays.asList(osm));
@@ -216,5 +217,5 @@
             return;
         for (OsmPrimitive osm : list) {
-            osm.selected = false;
+            osm.setSelected(false);
         }
     }
@@ -229,5 +230,5 @@
             return sel;
         for (OsmPrimitive osm : list)
-            if (osm.selected && !osm.deleted) {
+            if (osm.isSelected() && !osm.deleted) {
                 sel.add(osm);
             }
@@ -347,5 +348,5 @@
      * Replies the set of ids of all complete primitivies (i.e. those with
      * ! primitive.incomplete)
-     * 
+     *
      * @return the set of ids of all complete primitivies
      */
@@ -377,5 +378,5 @@
     /**
      * removes all references from ways in this dataset to a particular node
-     * 
+     *
      * @param node the node
      */
@@ -393,5 +394,5 @@
     /**
      * removes all references from relations in this dataset  to this primitive
-     * 
+     *
      * @param primitive the primitive
      */
@@ -411,5 +412,5 @@
      * removes all references from from other primitives  to the
      * referenced primitive
-     * 
+     *
      * @param referencedPrimitive the referenced primitive
      */
@@ -426,5 +427,5 @@
      * Replies a list of parent relations which refer to the relation
      * <code>child</code>. Replies an empty list if child is null.
-     * 
+     *
      * @param child the child relation
      * @return a list of parent relations which refer to the relation
Index: /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 1898)
+++ /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 1899)
@@ -100,5 +100,21 @@
      * If set to true, this object is currently selected.
      */
+    @Deprecated
     public volatile boolean selected = false;
+
+    /**
+     *
+     * @since 1899
+     */
+    public void setSelected(boolean selected) {
+        this.selected = selected;
+    }
+    /**
+     *
+     * @since 1899
+     */
+    public boolean isSelected() {
+        return selected;
+    }
 
     /**
@@ -179,5 +195,5 @@
     public final void delete(boolean deleted) {
         this.deleted = deleted;
-        selected = false;
+        setSelected(false);
         modified = true;
     }
@@ -303,5 +319,5 @@
         modified = osm.modified;
         deleted = osm.deleted;
-        selected = osm.selected;
+        setSelected(osm.isSelected());
         timestamp = osm.timestamp;
         version = osm.version;
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1898)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1899)
@@ -147,8 +147,8 @@
 
         if (nodeStyle != null && isZoomOk(nodeStyle) && showIcons > dist)
-            drawNode(n, nodeStyle.icon, nodeStyle.annotate, n.selected);
+            drawNode(n, nodeStyle.icon, nodeStyle.annotate, n.isSelected());
         else if (n.highlighted)
             drawNode(n, highlightColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
-        else if (n.selected)
+        else if (n.isSelected())
             drawNode(n, selectedColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
         else if (n.isTagged())
@@ -209,5 +209,5 @@
             //profilerVisibleWays++;
             //if(!profilerOmitDraw)
-            drawWay(w, null, untaggedColor, w.selected);
+            drawWay(w, null, untaggedColor, w.isSelected());
         }
         else if(wayStyle instanceof LineElemStyle)
@@ -216,5 +216,5 @@
             //profilerVisibleWays++;
             //if(!profilerOmitDraw)
-            drawWay(w, (LineElemStyle)wayStyle, untaggedColor, w.selected);
+            drawWay(w, (LineElemStyle)wayStyle, untaggedColor, w.isSelected());
         }
         else if (wayStyle instanceof AreaElemStyle)
@@ -227,9 +227,9 @@
             {
             //    profilerVisibleAreas++;
-                drawArea(w, w.selected ? selectedColor : areaStyle.color);
+                drawArea(w, w.isSelected() ? selectedColor : areaStyle.color);
                 if(!w.isClosed())
                     w.putError(tr("Area style way is not closed."), true);
             }
-            drawWay(w, areaStyle.line, areaStyle.color, w.selected);
+            drawWay(w, areaStyle.line, areaStyle.color, w.isSelected());
             //}
         }
@@ -240,9 +240,9 @@
            the way is tagged with a direction key
            (even if the tag is negated as in oneway=false) or the way is selected */
-        boolean showDirection = w.selected || ((!useRealWidth) && (showDirectionArrow
+        boolean showDirection = w.isSelected() || ((!useRealWidth) && (showDirectionArrow
         && (!showRelevantDirectionsOnly || w.hasDirectionKeys())));
         /* head only takes over control if the option is true,
            the direction should be shown at all and not only because it's selected */
-        boolean showOnlyHeadArrowOnly = showDirection && !w.selected && showHeadArrowOnly;
+        boolean showOnlyHeadArrowOnly = showDirection && !w.isSelected() && showHeadArrowOnly;
         int width = defaultSegmentWidth;
         int realWidth = 0; /* the real width of the element in meters */
@@ -283,5 +283,5 @@
         if(w.highlighted)
             color = highlightColor;
-        else if(w.selected)
+        else if(w.isSelected())
             color = selectedColor;
 
@@ -298,5 +298,5 @@
                         if(lastN != null)
                         {
-                            drawSeg(lastN, n, s.color != null  && !w.selected ? s.color : color,
+                            drawSeg(lastN, n, s.color != null  && !w.isSelected() ? s.color : color,
                             false, s.getWidth(width), s.dashed, s.dashedColor);
                         }
@@ -331,5 +331,5 @@
                         if(lastN != null)
                         {
-                            drawSeg(lastN, n, s.color != null && !w.selected ? s.color : color,
+                            drawSeg(lastN, n, s.color != null && !w.isSelected() ? s.color : color,
                             false, s.getWidth(width), s.dashed, s.dashedColor);
                         }
@@ -377,5 +377,5 @@
                         Way c = (Way)joinArray[i];
                         if(w == null)
-                        { w = c; selected = w.selected; joinArray[i] = null; --left; }
+                        { w = c; selected = w.isSelected(); joinArray[i] = null; --left; }
                         else
                         {
@@ -403,5 +403,5 @@
                                 joinArray[i] = null;
                                 joined = true;
-                                if(c.selected) selected = true;
+                                if(c.isSelected()) selected = true;
                                 --left;
                                 if(n == null) n = w.getNodes();
@@ -430,5 +430,5 @@
                 w = new Way(w);
                 w.setNodes(n);
-                w.selected = selected;
+                w.setSelected(selected);
             }
             if(!w.isClosed())
@@ -505,5 +505,5 @@
         }
 
-        if(r.selected) /* draw ways*/
+        if(r.isSelected()) /* draw ways*/
         {
             for (RelationMember m : r.members)
@@ -765,5 +765,5 @@
         smallIcon.paintIcon ( Main.map.mapView, g, (int)(pVia.x+vx+vx2)-w/2, (int)(pVia.y+vy+vy2)-h/2 );
 
-        if (r.selected)
+        if (r.isSelected())
         {
             g.setColor (  selectedColor );
@@ -811,5 +811,5 @@
                         if(m.role == null || m.role.length() == 0)
                             outer.add(w);
-                        else if(r.selected)
+                        else if(r.isSelected())
                             drawSelectedMember(m.member, styles != null
                             ? getPrimitiveStyle(m.member) : null, true, true);
@@ -977,5 +977,5 @@
                     if(isPolygonVisible(p))
                     {
-                        drawAreaPolygon(p, (pd.way.selected || r.selected) ? selectedColor
+                        drawAreaPolygon(p, (pd.way.isSelected() || r.isSelected()) ? selectedColor
                         : areaStyle.color);
                         visible = true;
@@ -1001,6 +1001,6 @@
                     {
                         drawWay(wInner, ((AreaElemStyle)wayStyle).line,
-                        ((AreaElemStyle)wayStyle).color, wInner.selected
-                        || r.selected);
+                        ((AreaElemStyle)wayStyle).color, wInner.isSelected()
+                        || r.isSelected());
                     }
                     wInner.mappaintDrawnCode = paintid;
@@ -1008,8 +1008,8 @@
                 else
                 {
-                    if(r.selected)
+                    if(r.isSelected())
                     {
                         drawSelectedMember(wInner, innerStyle,
-                        !wayStyle.equals(innerStyle), wInner.selected);
+                        !wayStyle.equals(innerStyle), wInner.isSelected());
                     }
                     if(wayStyle.equals(innerStyle))
@@ -1017,5 +1017,5 @@
                         r.putError(tr("Style for inner way ''{0}'' equals multipolygon.",
                         wInner.getName()), false);
-                        if(!r.selected)
+                        if(!r.isSelected())
                             wInner.mappaintDrawnAreaCode = paintid;
                     }
@@ -1030,6 +1030,6 @@
                     {
                         drawWay(wOuter, ((AreaElemStyle)wayStyle).line,
-                        ((AreaElemStyle)wayStyle).color, wOuter.selected
-                        || r.selected);
+                        ((AreaElemStyle)wayStyle).color, wOuter.isSelected()
+                        || r.isSelected());
                     }
                     wOuter.mappaintDrawnCode = paintid;
@@ -1043,5 +1043,5 @@
                         wOuter.getName()), true);
                     }
-                    if(r.selected)
+                    if(r.isSelected())
                     {
                         drawSelectedMember(wOuter, outerStyle, false, false);
@@ -1363,5 +1363,5 @@
         //    profilerN = 0;
             for (final OsmPrimitive osm : data.ways)
-                if (!osm.incomplete && !osm.deleted && !osm.selected
+                if (!osm.incomplete && !osm.deleted && !osm.isSelected()
                 && osm.mappaintVisibleCode != viewid )
                 {
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 1898)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 1899)
@@ -149,5 +149,5 @@
         //profilerN = 0;
         for (final OsmPrimitive osm : data.relations)
-            if (!osm.deleted && !osm.selected)
+            if (!osm.deleted && !osm.isSelected())
             {
                 osm.visit(this);
@@ -163,5 +163,5 @@
         //profilerN = 0;
         for (final OsmPrimitive osm : data.ways)
-            if (!osm.deleted && !osm.selected && osm.isTagged())
+            if (!osm.deleted && !osm.isSelected() && osm.isTagged())
             {
                 osm.visit(this);
@@ -171,5 +171,5 @@
 
         for (final OsmPrimitive osm : data.ways)
-            if (!osm.deleted && !osm.selected && !osm.isTagged())
+            if (!osm.deleted && !osm.isSelected() && !osm.isTagged())
             {
                 osm.visit(this);
@@ -202,5 +202,5 @@
         //profilerN = 0;
         for (final OsmPrimitive osm : data.nodes)
-            if (!osm.deleted && !osm.selected)
+            if (!osm.deleted && !osm.isSelected())
             {
                 osm.visit(this);
@@ -253,5 +253,5 @@
         else if (n.highlighted)
             drawNode(n, highlightColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
-        else if (n.selected)
+        else if (n.isSelected())
             drawNode(n, selectedColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
         else if(n.isTagged())
@@ -300,9 +300,9 @@
            (even if the tag is negated as in oneway=false) or the way is selected */
 
-        boolean showThisDirectionArrow = w.selected
+        boolean showThisDirectionArrow = w.isSelected()
         || (showDirectionArrow && (!showRelevantDirectionsOnly || w.hasDirectionKeys()));
         /* head only takes over control if the option is true,
            the direction should be shown at all and not only because it's selected */
-        boolean showOnlyHeadArrowOnly = showThisDirectionArrow && !w.selected && showHeadArrowOnly;
+        boolean showOnlyHeadArrowOnly = showThisDirectionArrow && !w.isSelected() && showHeadArrowOnly;
         Color wayColor;
 
@@ -311,5 +311,5 @@
         } else if(w.highlighted) {
             wayColor = highlightColor;
-        } else if(w.selected) {
+        } else if(w.isSelected()) {
             wayColor = selectedColor;
         } else if (!w.isTagged()) {
@@ -341,5 +341,5 @@
         if (inactive) {
             col = inactiveColor;
-        } else if (r.selected) {
+        } else if (r.isSelected()) {
             col = selectedColor;
         } else {
Index: /trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 1898)
+++ /trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 1899)
@@ -297,6 +297,6 @@
             // when multiple nodes on one point, prefer new or selected nodes
             else if(dist == minDistanceSq && minPrimitive != null
-                    && ((n.id == 0 && n.selected)
-                            || (!minPrimitive.selected && (n.selected || n.id == 0)))) {
+                    && ((n.id == 0 && n.isSelected())
+                            || (!minPrimitive.isSelected() && (n.isSelected() || n.id == 0)))) {
                 minPrimitive = n;
             }
@@ -336,5 +336,5 @@
                 double perDist = a-(a-b+c)*(a-b+c)/4/c; // perpendicular distance squared
                 if (perDist < snapDistance && a < c+snapDistance && b < c+snapDistance) {
-                    if(w.selected) {
+                    if(w.isSelected()) {
                         perDist -= 0.00001;
                     }
Index: /trunk/src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 1898)
+++ /trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 1899)
@@ -86,5 +86,5 @@
             osm.keys = keys;
             osm.modified = modified;
-            osm.selected = selected;
+            osm.setSelected(selected);
             osm.deleted = deleted;
             osm.setTimestamp(timestamp);
