Index: trunk/src/org/openstreetmap/josm/data/osm/NodeData.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/NodeData.java	(revision 2298)
+++ trunk/src/org/openstreetmap/josm/data/osm/NodeData.java	(revision 2299)
@@ -16,3 +16,8 @@
     }
 
+    @Override
+    public String toString() {
+        return super.toString() + " NODE " + coor;
+    }
+
 }
Index: trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 2298)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 2299)
@@ -841,4 +841,5 @@
 
     protected void saveCommonAttributes(PrimitiveData data) {
+        data.setId(data.getId());
         data.getKeys().clear();
         data.getKeys().putAll(getKeys());
Index: trunk/src/org/openstreetmap/josm/data/osm/PrimitiveData.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/PrimitiveData.java	(revision 2298)
+++ trunk/src/org/openstreetmap/josm/data/osm/PrimitiveData.java	(revision 2299)
@@ -12,5 +12,5 @@
  *
  */
-public class PrimitiveData {
+public abstract class PrimitiveData {
 
     // Useful?
@@ -76,3 +76,22 @@
 
 
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+
+        builder.append(id).append(keys);
+        if (modified) {
+            builder.append("M");
+        }
+        if (visible) {
+            builder.append("V");
+        }
+        if (deleted) {
+            builder.append("D");
+        }
+
+        return builder.toString();
+    }
+
+
 }
Index: trunk/src/org/openstreetmap/josm/data/osm/QuadBuckets.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/QuadBuckets.java	(revision 2298)
+++ trunk/src/org/openstreetmap/josm/data/osm/QuadBuckets.java	(revision 2299)
@@ -573,4 +573,8 @@
         QBLevel find_exact_branch(T n)
         {
+            if (content != null && content.contains(n)) {
+                return this;
+            }
+            
             QBLevel ret = null;
             for (QBLevel l : children) {
Index: trunk/src/org/openstreetmap/josm/data/osm/RelationData.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/RelationData.java	(revision 2298)
+++ trunk/src/org/openstreetmap/josm/data/osm/RelationData.java	(revision 2299)
@@ -13,3 +13,8 @@
     }
 
+    @Override
+    public String toString() {
+        return super.toString() + " REL " + members;
+    }
+
 }
Index: trunk/src/org/openstreetmap/josm/data/osm/RelationMemberData.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/RelationMemberData.java	(revision 2298)
+++ trunk/src/org/openstreetmap/josm/data/osm/RelationMemberData.java	(revision 2299)
@@ -37,3 +37,8 @@
     }
 
+    @Override
+    public String toString() {
+        return memberType.getAPIName() + " " + memberId;
+    }
+
 }
Index: trunk/src/org/openstreetmap/josm/data/osm/WayData.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/WayData.java	(revision 2298)
+++ trunk/src/org/openstreetmap/josm/data/osm/WayData.java	(revision 2299)
@@ -13,3 +13,8 @@
     }
 
+    @Override
+    public String toString() {
+        return super.toString() + " WAY" + nodes.toString();
+    }
+
 }
