Index: src/uk/me/parabola/imgfmt/app/net/RoadDef.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/net/RoadDef.java	(revision 4593)
+++ src/uk/me/parabola/imgfmt/app/net/RoadDef.java	(working copy)
@@ -36,8 +36,8 @@
 import uk.me.parabola.imgfmt.app.trergn.Polyline;
 import uk.me.parabola.log.Logger;
 import uk.me.parabola.mkgmap.general.CityInfo;
-import uk.me.parabola.mkgmap.general.MapLine;
 import uk.me.parabola.mkgmap.general.ZipCodeInfo;
+import uk.me.parabola.mkgmap.reader.osm.FakeIdGenerator;
 
 /**
  * A road definition.  This ties together all segments of a single road
@@ -186,8 +186,11 @@
 
 	// for diagnostic purposes
 	public String toString() {
+		if (FakeIdGenerator.isFakeId(id))
+			return "(generated way)";
+
 		// assumes id is an OSM id
-		return "(" + "http://www.openstreetmap.org/browse/way/" + id + ")";
+		return "(" + "http://www.openstreetmap.org/way/" + id + ")";
 	}
 
 	public String getName() {
@@ -202,7 +205,6 @@
 		return id;
 	}
 
-
 	/**
 	 * This is for writing to NET1.
 	 * @param writer A writer that is positioned within NET1.
Index: src/uk/me/parabola/mkgmap/osmstyle/NearbyPoiHandler.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/NearbyPoiHandler.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/osmstyle/NearbyPoiHandler.java	(working copy)
@@ -401,7 +401,7 @@
 		for (MapPoint mp : biggestCloud) {
 			if (mp != bestPoint) {
 				double dist = mp.getLocation().getDisplayedCoord().distance(bestPoint.getLocation().getDisplayedCoord());
-				log.info(String.format("Removed nearby (<= %d m)", (long) Math.ceil(dist)), getLogInfo(mp));
+				log.info(String.format("Removed", getLogInfo(mp), "nearby (<= %d m)", (long) Math.ceil(dist)), getLogInfo(bestPoint));
 			}
 		}
 	}
@@ -429,12 +429,8 @@
 		sb.append('"');
 		Node n = data.get(mp);
 		if (n != null) {
-			sb.append(" for element ");
-			if (FakeIdGenerator.isFakeId(n.getId())) {
-				sb.append("generated from ").append(n.getOrigElement()).append(' ').append(n.getOriginalId());
-			} else {
-				sb.append(n.toBrowseURL()).append(" at ").append(n.getLocation().toOSMURL());
-			}
+			sb.append(" for ");
+			sb.append(n.toString());
 		}
 		return sb.toString();
 	}
Index: src/uk/me/parabola/mkgmap/osmstyle/WrongAngleFixer.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/WrongAngleFixer.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/osmstyle/WrongAngleFixer.java	(working copy)
@@ -422,7 +422,7 @@
 					Coord p = points.get(i);
 					if (p.isToRemove()) {
 						if (pass >= maxPass - 1) {
-							log.warn("removed point in last pass. Way", way.getBasicLogInformation(), p.toDegreeString());
+							log.warn("removed point in last pass.", way.getBasicLogInformation(), p.toDegreeString());
 						}
 						points.remove(i);
 						anotherPassRequired = true;
@@ -446,7 +446,7 @@
 					}
 					p = replacement;
 					if (pass >= maxPass - 1) {
-						log.warn("changed point in last pass. Way", way.getBasicLogInformation(), p.toDegreeString());
+						log.warn("changed point in last pass.", way.getBasicLogInformation(), p.toDegreeString());
 					}
 					// replace point in way
 					points.set(i, p);
Index: src/uk/me/parabola/mkgmap/reader/osm/Element.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/Element.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/reader/osm/Element.java	(working copy)
@@ -312,7 +312,11 @@
 	}
 
 	public String toBrowseURL() {
-		return "http://www.openstreetmap.org/" + kind() + "/" + id;
+		if (FakeIdGenerator.isFakeId(originalId))
+			return "generated " + kind();
+
+		return "http://www.openstreetmap.org/" + (FakeIdGenerator.isFakeId(id) ? getOrigElement() : kind()) + "/" + originalId;
+		
 	}
 
 	/**
@@ -332,7 +336,7 @@
 			name = "";
 		else
 			name += " ";
-		return name + "(OSM id " + getId() + ")";
+		return name + "(OSM id " + originalId + ")";
 	}
 	
 	/**
@@ -346,7 +350,15 @@
 	 */
 	public String getBasicLogInformation() {
 		String className = getClass().getSimpleName();
-		return ("GeneralRelation".equals(className)) ? "Relation" : className 
-				+ (FakeIdGenerator.isFakeId(getId()) ? " generated from " + getOrigElement(): "") + " " +  originalId;
+		if ("GeneralRelation".equals(className))
+			className = "Relation";
+		if (FakeIdGenerator.isFakeId(originalId))
+			return "generated " + className;
+		
+		return className + (FakeIdGenerator.isFakeId(id) ? " generated from " + getOrigElement() : "") + " " + originalId;
 	}
+	
+	public String toString() {
+		return getBasicLogInformation();
+	}
 }
Index: src/uk/me/parabola/mkgmap/reader/osm/Node.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/Node.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/reader/osm/Node.java	(working copy)
@@ -37,7 +37,7 @@
 	}
 
 	public String toString() {
-		return "NODE: " + getId() + " @ " + location.toDegreeString();
+		return super.toString() + " @ " + (location == null ? "unknown" : location.toDegreeString());
 	}
 
 	@Override
Index: src/uk/me/parabola/mkgmap/reader/osm/Relation.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/Relation.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/reader/osm/Relation.java	(working copy)
@@ -41,10 +41,6 @@
 		return "relation";
 	}
 	
-	public String toString() {
-		return "RELATION: " + getId();
-	}
-
 	/**
 	 * Used in MultipolygonRelation.
 	 * @param tagsIncomplete
Index: src/uk/me/parabola/mkgmap/reader/osm/Way.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/Way.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/reader/osm/Way.java	(working copy)
@@ -170,21 +170,29 @@
 
 	/**
 	 * A simple representation of this way.
-	 * @return A string with the name and start point
+	 * @return A string with the name, start point and end point
 	 */
 	public String toString() {
+		StringBuilder sb = new StringBuilder(super.toString());
+		if (getName() != null) {
+			sb.append(' ');
+			sb.append(getName());
+		}
 		if (points.isEmpty())
-			return "Way: empty";
-
-		Coord coord = points.get(0);
-		StringBuilder sb = new StringBuilder();
-		sb.append("WAY: ").append(getId()).append(" ");
-		sb.append(getName());
-		sb.append('(');
-		sb.append(Utils.toDegrees(coord.getLatitude()));
-		sb.append('/');
-		sb.append(Utils.toDegrees(coord.getLongitude()));
-		sb.append(')');
+			sb.append(" empty");
+		else {
+			Coord coord = getFirstPoint();
+			if (hasEqualEndPoints()) {
+				sb.append(" starting and ending at ");
+				sb.append(coord.toDegreeString());
+			}
+			else {
+				sb.append(" starting at ");
+				sb.append(coord.toDegreeString());
+				sb.append(" and ending at ");
+				sb.append(getLastPoint().toDegreeString());
+			}
+		}
 		sb.append(' ');
 		sb.append(toTagString());
 		return sb.toString();
