Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1308)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1309)
@@ -172,5 +172,5 @@
             if(n.eastNorth.north() < miny) miny = n.eastNorth.north();
         }
-        
+
         if ((minx > maxEN.east()) ||
             (miny > maxEN.north()) ||
@@ -471,5 +471,5 @@
         // draw multipolygon relations including their ways
         // other relations are only drawn when selected
-        
+
         // we are in the "draw selected" phase
         // TODO: is it necessary to check for r.selected?
@@ -486,5 +486,5 @@
             return;
         }
-        
+
         if (drawMultipolygon && r.keys != null && "multipolygon".equals(r.keys.get("type")))
         {
@@ -492,5 +492,5 @@
             return;
         }
-        
+
         if (drawRestriction && r.keys != null && "restriction".equals(r.keys.get("type")))
         {
@@ -498,10 +498,10 @@
             return;
         }
-        
+
         if(r.selected)
             drawSelectedRelation(r);
     }
 
-    
+
     // this current experimental implementation will only work for standard restrictions:
     // from(Way) / via(Node) / to(Way)
@@ -509,5 +509,5 @@
         if(restrictionDebug)
             System.out.println("Restriction: " + r.keys.get("name") + " restriction " + r.keys.get("restriction"));
-     
+
         r.clearErrors();
 
@@ -521,6 +521,6 @@
             if(restrictionDebug)
                 System.out.println("member " + m.member + " selected " + r.selected);
-            
-            if(m.member == null) 
+
+            if(m.member == null)
                 r.putError(tr("Empty member in relation."), true);
             else if(m.member.deleted)
@@ -529,7 +529,5 @@
             else if(m.member.incomplete)
             {
-                // TODO: What to do with incomplete members?
-                //incomplete = true;
-                r.putError(tr("incomplete member {0}" + " with role {1}", m.member, m.role), true);
+                return;
             }
             else
@@ -550,5 +548,5 @@
                     else if("from".equals(m.role)) {
                         if(fromWay != null)
-                            r.putError(tr("more than one from way found - ignored."), true);
+                            r.putError(tr("More than one \"from\" way found."), true);
                         else {
                             fromWay = w;
@@ -556,5 +554,5 @@
                     } else if("to".equals(m.role)) {
                         if(toWay != null)
-                            r.putError(tr("more than one to way found - ignored."), true);
+                            r.putError(tr("More than one \"to\" way found."), true);
                         else {
                             toWay = w;
@@ -562,5 +560,5 @@
                     }
                     else
-                        r.putError(tr("unknown role {0} - ignored", m.role), true);
+                        r.putError(tr("Unknown role {0}.", m.role), true);
                 }
                 else if(m.member instanceof Node)
@@ -569,26 +567,26 @@
                     if("via".equals(m.role))
                         if(via != null)
-                            System.out.println("more than one via found - ignored");
+                            System.out.println("More than one \"via\" found.");
                         else {
                             via = n;
                         }
                     else
-                        r.putError(tr("unknown role {0} - ignored", m.role), true);
+                        r.putError(tr("Unknown role ''{0}''.", m.role), true);
                 }
                 else
-                    r.putError(tr("unknown instanceof member - ignored"), true);
-            }
-        }
-        
+                    r.putError(tr("Unknown member type for ''{0}''.", m.member.getName()), true);
+            }
+        }
+
         if (fromWay == null) {
-            r.putError(tr("no from way found"), true);
+            r.putError(tr("No \"from\" way found."), true);
             return;
         }
         if (toWay == null) {
-            r.putError(tr("no to way found"), true);
+            r.putError(tr("No \"to\" way found."), true);
             return;
         }
         if (via == null) {
-            r.putError(tr("no via node found"), true);
+            r.putError(tr("No \"via\" node found."), true);
             return;
         }
@@ -596,5 +594,5 @@
         // check if "from" way starts or ends at via
         if(fromWay.nodes.get(0) != via && fromWay.nodes.get(fromWay.nodes.size()-1) != via) {
-            r.putError(tr("from way doesn't start or end at a via node"), true);
+            r.putError(tr("The \"from\" way doesn't start or end at a \"via\" node."), true);
             return;
         }
@@ -606,5 +604,5 @@
 
         // find the "direct" nodes before the via node
-        Node fromNode = null;        
+        Node fromNode = null;
         try
         {
@@ -617,5 +615,5 @@
             }
         } catch (IndexOutOfBoundsException ioobe) {
-            System.out.println("from must contain at least 2 nodes");
+            r.putError(tr("The \"{0}\" way must contain at least 2 nodes.", "from"), true);
         }
 
@@ -634,10 +632,10 @@
             }
         } catch (IndexOutOfBoundsException ioobe) {
-            System.out.println("to must contain at least 2 nodes");
-        }
-        
+            r.putError(tr("The \"{0}\" way must contain at least 2 nodes.", "to"), true);
+        }
+
         Point pFrom = nc.getPoint(fromNode.eastNorth);
         Point pVia = nc.getPoint(via.eastNorth);
-        
+
         if(restrictionDebug) {
             Point pTo = nc.getPoint(toNode.eastNorth);
@@ -660,5 +658,5 @@
         double dx = (pFrom.x >= pVia.x) ? (pFrom.x - pVia.x) : (pVia.x - pFrom.x);
         double dy = (pFrom.y >= pVia.y) ? (pFrom.y - pVia.y) : (pVia.y - pFrom.y);
-        
+
         double fromAngle;
         if(dx == 0.0) {
@@ -671,5 +669,5 @@
         double vx = distanceFromVia * Math.cos(fromAngle);
         double vy = distanceFromVia * Math.sin(fromAngle);
-        
+
         if(pFrom.x < pVia.x) vx = -vx;
         if(pFrom.y < pVia.y) vy = -vy;
@@ -677,5 +675,5 @@
         if(restrictionDebug)
             System.out.println("vx " + vx + " vy " + vy);
-        
+
         // go a few pixels away from the way (in a right angle)
         // (calculate the vx2/vy2 vector with the specified length and the direction 90degrees away from the first segment of the "from" way)
@@ -725,13 +723,13 @@
             iconAngle = 270-fromAngleDeg;
         }
-        
+
         IconElemStyle nodeStyle = (IconElemStyle)getPrimitiveStyle(r);
-        
+
         if (nodeStyle == null) {
-            r.putError(tr("Style for restriction {0} not found", r.keys.get("restriction")), true);
-            return;
-        }
-
-        // rotate icon with direction last node in from to 
+            r.putError(tr("Style for restriction {0} not found.", r.keys.get("restriction")), true);
+            return;
+        }
+
+        // rotate icon with direction last node in from to
         if(restrictionDebug)
             System.out.println("Deg1 " + fromAngleDeg + " Deg2 " + (fromAngleDeg + 180) + " Icon " + iconAngle);
@@ -761,5 +759,5 @@
         for (RelationMember m : r.members)
         {
-            if(m.member == null) 
+            if(m.member == null)
                 r.putError(tr("Empty member in relation."), true);
             else if(m.member.deleted)
@@ -869,7 +867,7 @@
                                 --contains;
                         }
-                        if(contains == 0) return 1; 
-                        if(contains == p.npoints) return 0; 
-                        return 2; 
+                        if(contains == 0) return 1;
+                        if(contains == p.npoints) return 0;
+                        return 2;
                     }
                     public void addInner(Polygon p)
@@ -1037,5 +1035,5 @@
     {
         Polygon polygon = getPolygon(w);
-        
+
         // set the opacity (alpha) level of the filled polygon
         g.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), fillAlpha));
@@ -1186,5 +1184,5 @@
         boolean profiler = Main.pref.getBoolean("mappaint.profiler",false);
         profilerOmitDraw = Main.pref.getBoolean("mappaint.profiler.omitdraw",false);
-        
+
         useStyleCache = Main.pref.getBoolean("mappaint.cache",true);
         fillAreas = Main.pref.getInteger("mappaint.fillareas", 100000);
@@ -1196,5 +1194,5 @@
         LatLon ll2 = nc.getLatLon(100,0);
         dist = ll1.greatCircleDistance(ll2);
-        
+
         long profilerStart = java.lang.System.currentTimeMillis();
         long profilerLast = profilerStart;
@@ -1221,5 +1219,5 @@
         minEN = nc.getEastNorth(0,nc.getHeight()-1);
         maxEN = nc.getEastNorth(nc.getWidth()-1,0);
-        
+
 
         selectedCall = false;
Index: /trunk/src/org/openstreetmap/josm/data/projection/Epsg4326.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/Epsg4326.java	(revision 1308)
+++ /trunk/src/org/openstreetmap/josm/data/projection/Epsg4326.java	(revision 1309)
@@ -24,4 +24,8 @@
     }
 
+    public String toCode() {
+        return "EPSG:4326";
+    }
+
     public String getCacheDirectoryName() {
         return "epsg4326";
Index: /trunk/src/org/openstreetmap/josm/data/projection/Lambert.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/Lambert.java	(revision 1308)
+++ /trunk/src/org/openstreetmap/josm/data/projection/Lambert.java	(revision 1309)
@@ -122,11 +122,11 @@
             } else if (layoutZone != currentZone) {
                 if ((currentZone < layoutZone && Math.abs(zoneLimits[currentZone] - lt) > cMaxOverlappingZones)
-                        || (currentZone > layoutZone && Math.abs(zoneLimits[layoutZone] - lt) > cMaxOverlappingZones)) {
+                || (currentZone > layoutZone && Math.abs(zoneLimits[layoutZone] - lt) > cMaxOverlappingZones)) {
                     JOptionPane.showMessageDialog(Main.parent,
-                                    tr("IMPORTANT : data positioned far away from\n"
-                                            + "the current Lambert zone limits.\n"
-                                            + "Do not upload any data after this message.\n"
-                                            + "Undo your last action, Save your work \n"
-                                            + "and Start a new layer on the new zone."));
+                    tr("IMPORTANT : data positioned far away from\n"
+                    + "the current Lambert zone limits.\n"
+                    + "Do not upload any data after this message.\n"
+                    + "Undo your last action, save your work\n"
+                    + "and start a new layer on the new zone."));
                     layoutZone = -1;
                     dontDisplayErrors = true;
@@ -157,4 +157,8 @@
     @Override public String toString() {
         return tr("Lambert Zone (France)");
+    }
+
+    public String toCode() {
+        return "EPSG::"+(27571+currentZone);
     }
 
Index: /trunk/src/org/openstreetmap/josm/data/projection/LambertEST.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/LambertEST.java	(revision 1308)
+++ /trunk/src/org/openstreetmap/josm/data/projection/LambertEST.java	(revision 1309)
@@ -97,4 +97,8 @@
     }
 
+    public String toCode() {
+        return "EPSG:3301";
+    }
+
     public String getCacheDirectoryName() {
         return "lambertest";
Index: /trunk/src/org/openstreetmap/josm/data/projection/Mercator.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/Mercator.java	(revision 1308)
+++ /trunk/src/org/openstreetmap/josm/data/projection/Mercator.java	(revision 1309)
@@ -37,4 +37,8 @@
     }
 
+    public String toCode() {
+        return "EPSG:3785"; /* TODO: Check if that is correct */
+    }
+
     public String getCacheDirectoryName() {
         return "mercator";
Index: /trunk/src/org/openstreetmap/josm/data/projection/Projection.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/Projection.java	(revision 1308)
+++ /trunk/src/org/openstreetmap/josm/data/projection/Projection.java	(revision 1309)
@@ -58,4 +58,9 @@
 
     /**
+     * Return projection code.
+     */
+    String toCode();
+
+    /**
      * Get a filename compatible string (for the cache directory)
      */
Index: /trunk/src/org/openstreetmap/josm/gui/layer/GeoImageLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/GeoImageLayer.java	(revision 1308)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/GeoImageLayer.java	(revision 1309)
@@ -501,5 +501,5 @@
 
         while (true) {
-            int answer = JOptionPane.showConfirmDialog(Main.parent, p, tr("Syncronize Time with GPS Unit"), JOptionPane.OK_CANCEL_OPTION);
+            int answer = JOptionPane.showConfirmDialog(Main.parent, p, tr("Synchronize Time with GPS Unit"), JOptionPane.OK_CANCEL_OPTION);
             if (answer != JOptionPane.OK_OPTION || gpsText.getText().equals(""))
                 return;
