Index: /trunk/.settings/org.eclipse.jdt.ui.prefs
===================================================================
--- /trunk/.settings/org.eclipse.jdt.ui.prefs	(revision 2362)
+++ /trunk/.settings/org.eclipse.jdt.ui.prefs	(revision 2363)
@@ -1,3 +1,3 @@
-#Mon Jun 08 20:01:40 CEST 2009
+#Sat Oct 31 19:47:16 CET 2009
 cleanup_settings_version=2
 eclipse.preferences.version=1
@@ -31,5 +31,5 @@
 sp_cleanup.never_use_parentheses_in_expressions=true
 sp_cleanup.on_save_use_additional_actions=true
-sp_cleanup.organize_imports=false
+sp_cleanup.organize_imports=true
 sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
 sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
Index: /trunk/src/org/openstreetmap/josm/data/osm/Node.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 2362)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 2363)
@@ -112,6 +112,6 @@
 
     @Override public String toString() {
-        if (coor == null) return "{Node id="+getId()+"}";
-        return "{Node id="+getId()+",version="+getVersion()+",lat="+coor.lat()+",lon="+coor.lon()+"}";
+        String coorDesc = coor == null?"":"lat="+coor.lat()+",lon="+coor.lon();
+        return "{Node id=" + getUniqueId() + " version=" + getVersion() + " " + getFlagsAsString() + " "  + coorDesc+"}";
     }
 
Index: /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 2362)
+++ /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 2363)
@@ -490,5 +490,4 @@
      */
     @Override public boolean equals(Object obj) {
-        if (isNew()) return obj == this;
         if (obj instanceof OsmPrimitive)
             return ((OsmPrimitive)obj).id == id && obj.getClass() == getClass();
@@ -502,6 +501,4 @@
      */
     @Override public final int hashCode() {
-        if (id == 0)
-            return super.hashCode();
         final int[] ret = new int[1];
         Visitor v = new Visitor(){
@@ -512,5 +509,5 @@
         };
         visit(v);
-        return id == 0 ? super.hashCode() : (int)(id<<2)+ret[0];
+        return (int)(id<<2)+ret[0];
     }
 
@@ -832,4 +829,28 @@
     }
 
+    protected String getFlagsAsString() {
+
+        StringBuilder builder = new StringBuilder();
+
+        if (isModified()) {
+            builder.append("M");
+        }
+        if (isVisible()) {
+            builder.append("V");
+        }
+        if (isDeleted()) {
+            builder.append("D");
+        }
+        if (isFiltered()) {
+            builder.append("f");
+        }
+
+        if (isDeleted()) {
+            builder.append("d");
+        }
+
+        return builder.toString();
+    }
+
 }
 
Index: /trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 2362)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 2363)
@@ -171,13 +171,13 @@
         for (RelationMemberData member:relationData.getMembers()) {
             switch (member.getMemberType()) {
-                case NODE:
-                    nodes.put(member.getMemberId(), nodeMarker);
-                    break;
-                case WAY:
-                    ways.put(member.getMemberId(), wayMarker);
-                    break;
-                case RELATION:
-                    relations.put(member.getMemberId(), relationMarker);
-                    break;
+            case NODE:
+                nodes.put(member.getMemberId(), nodeMarker);
+                break;
+            case WAY:
+                ways.put(member.getMemberId(), wayMarker);
+                break;
+            case RELATION:
+                relations.put(member.getMemberId(), relationMarker);
+                break;
             }
         }
@@ -203,19 +203,19 @@
             OsmPrimitive foundMember = null;
             switch (member.getMemberType()) {
-                case NODE:
-                    foundMember = nodes.get(member.getMemberId());
-                    if (foundMember == nodeMarker)
-                        throw new AssertionError("Data consistency problem - relation with missing member detected");
-                    break;
-                case WAY:
-                    foundMember = ways.get(member.getMemberId());
-                    if (foundMember == wayMarker)
-                        throw new AssertionError("Data consistency problem - relation with missing member detected");
-                    break;
-                case RELATION:
-                    foundMember = relations.get(member.getMemberId());
-                    if (foundMember == relationMarker)
-                        throw new AssertionError("Data consistency problem - relation with missing member detected");
-                    break;
+            case NODE:
+                foundMember = nodes.get(member.getMemberId());
+                if (foundMember == nodeMarker)
+                    throw new AssertionError("Data consistency problem - relation with missing member detected");
+                break;
+            case WAY:
+                foundMember = ways.get(member.getMemberId());
+                if (foundMember == wayMarker)
+                    throw new AssertionError("Data consistency problem - relation with missing member detected");
+                break;
+            case RELATION:
+                foundMember = relations.get(member.getMemberId());
+                if (foundMember == relationMarker)
+                    throw new AssertionError("Data consistency problem - relation with missing member detected");
+                break;
             }
             newMembers.add(new RelationMember(member.getRole(), foundMember));
@@ -234,7 +234,20 @@
 
     @Override public String toString() {
-        // return "{Relation id="+id+" version="+version+" members="+Arrays.toString(members.toArray())+"}";
-        // adding members in string increases memory usage a lot and overflows for looped relations
-        return "{Relation id="+getId()+" version="+getVersion()+"}";
+        StringBuilder result = new StringBuilder();
+        result.append("{Relation id=");
+        result.append(getUniqueId());
+        result.append(" version=");
+        result.append(getVersion());
+        result.append(" [");
+        for (RelationMember rm:getMembers()) {
+            result.append(OsmPrimitiveType.from(rm.getMember()));
+            result.append(" ");
+            result.append(rm.getMember().getUniqueId());
+            result.append(", ");
+        }
+        result.delete(result.length()-2, result.length());
+        result.append("]");
+        result.append("}");
+        return result.toString();
     }
 
Index: /trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 2362)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 2363)
@@ -173,4 +173,5 @@
      * @param dataSet Dataset this way is part of. This parameter will be removed in future
      */
+    @Override
     public void load(PrimitiveData data, DataSet dataSet) {
         super.load(data, dataSet);
@@ -195,7 +196,6 @@
             if (node != marker) {
                 newNodes.add(foundNodes.get(nodeId));
-            } else {
+            } else
                 throw new AssertionError("Data consistency problem - way with missing node detected");
-            }
         }
         setNodes(newNodes);
@@ -219,6 +219,6 @@
 
     @Override public String toString() {
-        if (incomplete) return "{Way id="+getId()+" version="+getVersion()+" (incomplete)}";
-        return "{Way id="+getId()+" version="+getVersion()+" nodes="+Arrays.toString(nodes)+"}";
+        String nodesDesc = incomplete?"(incomplete)":"nodes=" + Arrays.toString(nodes);
+        return "{Way id=" + getUniqueId() + " version=" + getVersion()+ " " + getFlagsAsString()  + " " + nodesDesc + "}";
     }
 
