Index: /trunk/src/org/openstreetmap/josm/actions/AboutAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/AboutAction.java	(revision 1597)
+++ /trunk/src/org/openstreetmap/josm/actions/AboutAction.java	(revision 1598)
@@ -104,5 +104,5 @@
             myVersion = Integer.parseInt(version.split(" ")[0]);
         } catch (NumberFormatException e) {
-            e.printStackTrace();
+            // e.printStackTrace();
         }
         return myVersion;
@@ -201,6 +201,5 @@
             for (String line = in.readLine(); line != null; line = in.readLine())
                 s += line + "\n";
-            if(manifest)
-            {
+            if (manifest) {
                 s = Pattern.compile("\n ", Pattern.DOTALL).matcher(s).replaceAll("");
                 s = Pattern.compile("^(SHA1-Digest|Name): .*?$", Pattern.DOTALL|Pattern.MULTILINE).matcher(s).replaceAll("");
@@ -210,5 +209,6 @@
             area.setCaretPosition(0);
         } catch (IOException e) {
-            e.printStackTrace();
+            System.err.println("Cannot load resource " + resource + ": " + e.getMessage());
+            //e.printStackTrace();
         }
         return area;
Index: /trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 1597)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 1598)
@@ -106,4 +106,5 @@
     }
 
+    // seems to be different from member "incomplete" - FIXME
     public boolean isIncomplete() {
         for (RelationMember m : members)
@@ -114,7 +115,9 @@
     
     public RelationMember firstMember() {
+        if (incomplete) return null;
         return (members.size() == 0) ? null : members.get(0);
     }
     public RelationMember lastMember() {
+        if (incomplete) return null;
         return (members.size() == 0) ? null : members.get(members.size() -1);
     }
Index: /trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 1597)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 1598)
@@ -31,6 +31,5 @@
     public Integer mappaintDrawnAreaCode = 0;
     /* end of mappaint data */
-    @Override protected void clearCached()
-    {
+    @Override protected void clearCached() {
         super.clearCached();
         isMappaintArea = false;
@@ -39,4 +38,5 @@
 
     public void visitNodes(Visitor v) {
+        if (incomplete) return;
         for (Node n : this.nodes)
             v.visit(n);
@@ -45,4 +45,5 @@
     public ArrayList<Pair<Node,Node>> getNodePairs(boolean sort) {
         ArrayList<Pair<Node,Node>> chunkSet = new ArrayList<Pair<Node,Node>>();
+        if (incomplete) return chunkSet;
         Node lastN = null;
         for (Node n : this.nodes) {
@@ -70,5 +71,5 @@
      */
     public Way(Way clone) {
-            cloneFrom(clone);
+        cloneFrom(clone);
     }
 
@@ -95,4 +96,5 @@
 
     @Override public String toString() {
+        if (incomplete) return "{Way id="+id+" version="+version+" (incomplete)}";
         return "{Way id="+id+" version="+version+" nodes="+Arrays.toString(nodes.toArray())+"}";
     }
@@ -103,5 +105,5 @@
 
     public int compareTo(OsmPrimitive o) {
-        if(o instanceof Relation)
+        if (o instanceof Relation)
             return 1;
         return o instanceof Way ? Long.valueOf(id).compareTo(o.id) : -1;
@@ -132,24 +134,22 @@
     }
 
-    public void removeNode(Node n)
-    {
-        Boolean closed = (lastNode() == n && firstNode() == n);
+    public void removeNode(Node n) {
+        if (incomplete) return;
+        boolean closed = (lastNode() == n && firstNode() == n);
         int i;
-        while((i = nodes.indexOf(n)) >= 0)
+        while ((i = nodes.indexOf(n)) >= 0)
             nodes.remove(i);
         i = nodes.size();
-        if(closed && i > 2) // close again
+        if (closed && i > 2) // close again
             addNode(firstNode());
         // prevent closed ways with less than 3 different nodes
-        else if(i >= 2 && i <= 3 && nodes.get(0) == nodes.get(i-1))
+        else if (i >= 2 && i <= 3 && nodes.get(0) == nodes.get(i-1))
             nodes.remove(i-1);
     }
 
-    public void removeNodes(Collection<? extends OsmPrimitive> selection)
-    {
-       for(OsmPrimitive p : selection)
-       {
-           if(p instanceof Node)
-           {
+    public void removeNodes(Collection<? extends OsmPrimitive> selection) {
+        if (incomplete) return;
+        for(OsmPrimitive p : selection) {
+           if (p instanceof Node) {
                removeNode((Node)p);
            }
@@ -157,29 +157,33 @@
     }
 
-    public void addNode(Node n)
-    {
+    public void addNode(Node n) {
+        if (incomplete) return;
         clearCached();
         nodes.add(n);
     }
 
-    public void addNode(int offs, Node n)
-    {
+    public void addNode(int offs, Node n) {
+        if (incomplete) return;
         clearCached();
         nodes.add(offs, n);
     }
 
-    public Boolean isClosed() {
+    public boolean isClosed() {
+        if (incomplete) return false;
         return nodes.size() >= 3 && lastNode() == firstNode();
     }
 
     public Node lastNode() {
+        if (incomplete) return null;
         return nodes.get(nodes.size()-1);
     }
 
     public Node firstNode() {
+        if (incomplete) return null;
         return nodes.get(0);
     }
 
     public boolean isFirstLastNode(Node n) {
+        if (incomplete) return false; 
         return n == firstNode() || n == lastNode();
     }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java	(revision 1597)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java	(revision 1598)
@@ -382,5 +382,5 @@
             Node n2 = null;
             RelationMember m = em;
-            while (true) {
+            while (m != null) {
                 if (m.member instanceof Way) {
                     n1 = ((Way) m.member).lastNode();
@@ -394,5 +394,5 @@
             if (i<clone.members.size()-1) {
                 m = clone.members.get(i+1);
-                while (true) {
+                while (m != null) {
                     if (m.member instanceof Way) {
                         n2 = ((Way) (m.member)).firstNode();
