Index: src/uk/me/parabola/imgfmt/app/BitWriter.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/BitWriter.java	(revision 4593)
+++ src/uk/me/parabola/imgfmt/app/BitWriter.java	(working copy)
@@ -182,7 +182,7 @@
 
 	private void debugPrint(int b, int i) {
 		if (log.isDebugEnabled())
-			log.debug("after put", i, "of", b, " bufsize=", bufsize, ", len=",
+			log.debug("after put", i, "of", b, "bufsize=", bufsize, ", len=",
 					buflen, ", pos=", bitoff);
 	}
 
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/imgfmt/app/net/RoadNetwork.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/net/RoadNetwork.java	(revision 4593)
+++ src/uk/me/parabola/imgfmt/app/net/RoadNetwork.java	(working copy)
@@ -502,7 +502,8 @@
 		}
 		List<RouteArc> fromArcs = fn.getDirectArcsTo(firstViaNode, grr.getFromWayId()); 
 		if (fromArcs.isEmpty()){
-			log.error(sourceDesc, "can't locate arc from 'from' node ",fromId,"to 'via' node",firstViaId,"on way",grr.getFromWayId());
+			log.error(sourceDesc, "can't locate arc from 'from' node", fromId, "to 'via' node", firstViaId, "on way",
+					grr.getFromWayId());
 			return 0;
 		}
 		
@@ -564,7 +565,8 @@
 			toArcs = angleMap.get(bestAngle);
 		}
 		if (toArcs.isEmpty()){
-			log.error(sourceDesc, "can't locate arc from 'via' node ",lastViaId,"to 'to' node",toId,"on way",grr.getToWayId());
+			log.error(sourceDesc, "can't locate arc from 'via' node", lastViaId, "to 'to' node", toId, "on way",
+					grr.getToWayId());
 			return 0;
 		}
 		
@@ -691,7 +693,7 @@
 
 		// double check
 		if (indexes[0] != arcLists.get(0).size())
-			log.error(sourceDesc, " failed to generate all possible paths");
+			log.error(sourceDesc, "failed to generate all possible paths");
 		log.info(sourceDesc, "added",added,"route restriction(s) to img file");
 		return added;
 	}
Index: src/uk/me/parabola/imgfmt/app/trergn/LinePreparer.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/trergn/LinePreparer.java	(revision 4593)
+++ src/uk/me/parabola/imgfmt/app/trergn/LinePreparer.java	(working copy)
@@ -114,7 +114,7 @@
 		}
 		if (xBase != xBestBase || yBestBase != yBase && log.isInfoEnabled()) {
 			if (bsSimple.getLength() > bsBest.getLength())
-				log.info("optimizer reduced bit stream byte length from",bsSimple.getLength(),"->",bsBest.getLength(),"(" + (bsSimple.getLength()-bsBest.getLength()), " byte(s)) for",polyline.getClass().getSimpleName(),"with",polyline.getPoints().size(),"points");
+				log.info("optimizer reduced bit stream byte length from",bsSimple.getLength(),"->",bsBest.getLength(),"(" + (bsSimple.getLength()-bsBest.getLength()), "byte(s)) for",polyline.getClass().getSimpleName(),"with",polyline.getPoints().size(),"points");
 			else 
 				log.info("optimizer only reduced bit stream bit length from",bsSimple.getBitPosition(),"->",bsBest.getBitPosition(),"bits for",polyline.getClass().getSimpleName(),"with",polyline.getPoints().size(),"points, using original bit stream");
 		}
Index: src/uk/me/parabola/imgfmt/app/trergn/RGNFile.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/trergn/RGNFile.java	(revision 4593)
+++ src/uk/me/parabola/imgfmt/app/trergn/RGNFile.java	(working copy)
@@ -179,7 +179,7 @@
 				throw new IllegalStateException("Polygon offset too large: " + off);
 
 			if (log.isDebugEnabled())
-				log.debug("setting polygon offset to ", off, " @", polygonPtrOff);
+				log.debug("setting polygon offset to", off, "@", polygonPtrOff);
 			position(polygonPtrOff);
 			getWriter().put2u((int) off);
 			position(currPos);
Index: src/uk/me/parabola/imgfmt/app/trergn/Subdivision.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/trergn/Subdivision.java	(revision 4593)
+++ src/uk/me/parabola/imgfmt/app/trergn/Subdivision.java	(working copy)
@@ -128,7 +128,7 @@
 			w = 0x7fff;
 		}
 		if (w < 0) { // think can get this from empty/unbounded maps
-			log.error("Subdivision neg width ", w, "min=", area.getMinLong(), "mid=", longitude, "max=", area.getMaxLong(), "shift=", shift, "mask=", mask, "@", getCenter().toOSMURL());
+			log.error("Subdivision neg width", w, "min=", area.getMinLong(), "mid=", longitude, "max=", area.getMaxLong(), "shift=", shift, "mask=", mask, "@", getCenter().toOSMURL());
 			w = 0x7fff;
 		}
 
@@ -137,7 +137,8 @@
 			h = 0xffff;
 		}
 		if (h < 0) { // think can get this from empty/unbounded maps
-			log.error("Subdivision neg height ", h, "min=", area.getMinLat(), "mid=", latitude, "max=", area.getMaxLat(), "shift=", shift, "mask=", mask, "@", getCenter().toOSMURL());
+			log.error("Subdivision neg height", h, "min=", area.getMinLat(), "mid=", latitude, "max=", area.getMaxLat(),
+					"shift=", shift, "mask=", mask, "@", getCenter().toOSMURL());
 			h = 0xffff;
 		}
 
Index: src/uk/me/parabola/imgfmt/sys/Directory.java
===================================================================
--- src/uk/me/parabola/imgfmt/sys/Directory.java	(revision 4593)
+++ src/uk/me/parabola/imgfmt/sys/Directory.java	(working copy)
@@ -149,7 +149,7 @@
 			Dirent ent = (Dirent) dir;
 
 			if (!ent.isSpecial()) {
-				log.debug("wrting ", dir.getFullName(), " at ", chan.position());
+				log.debug("writing", dir.getFullName(), "at", chan.position());
 				log.debug("ent size", ent.getSize());
 				ent.sync(chan);
 			}
Index: src/uk/me/parabola/mkgmap/build/MapArea.java
===================================================================
--- src/uk/me/parabola/mkgmap/build/MapArea.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/build/MapArea.java	(working copy)
@@ -202,12 +202,12 @@
 					if (e.getMinResolution() <= areaResolution)
 						log.debug("line. locn=", e.getPoints().get(0).toOSMURL(),
 							 " type=", uk.me.parabola.mkgmap.reader.osm.GType.formatType(e.getType()),
-							 " name=", e.getName(), " min=", e.getMinResolution(), " max=", e.getMaxResolution());
+							 " name=", e.getName(), "min=", e.getMinResolution(), "max=", e.getMaxResolution());
 				for (MapShape e : this.shapes)
 					if (e.getMinResolution() <= areaResolution)
 						log.debug("shape. locn=", e.getPoints().get(0).toOSMURL(),
 							 " type=", uk.me.parabola.mkgmap.reader.osm.GType.formatType(e.getType()),
-							 " name=", e.getName(), " min=", e.getMinResolution(), " max=", e.getMaxResolution(),
+							 " name=", e.getName(), "min=", e.getMinResolution(), "max=", e.getMaxResolution(),
 							 " full=", e.getFullArea(),
 							 " calc=", uk.me.parabola.mkgmap.filters.ShapeMergeFilter.calcAreaSizeTestVal(e.getPoints()));
 				// the main culprits are lots of bits of sea and coastline in an overview map (res 12)
Index: src/uk/me/parabola/mkgmap/build/MapBuilder.java
===================================================================
--- src/uk/me/parabola/mkgmap/build/MapBuilder.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/build/MapBuilder.java	(working copy)
@@ -789,7 +789,7 @@
 					Subdivision parent = srcDivPair.getSubdiv();
 					Subdivision div = makeSubdivision(map, parent, area, zoom);
 					if (log.isDebugEnabled())
-						log.debug("ADD parent-subdiv", parent, srcDivPair.getSource(), ", z=", zoom, " new=", div);
+						log.debug("ADD parent-subdiv", parent, srcDivPair.getSource(), ", z=", zoom, "new=", div);
 					nextList.add(new SourceSubdiv(area, div));
 				}
 				if (!nextList.isEmpty()) {
Index: src/uk/me/parabola/mkgmap/build/MapSplitter.java
===================================================================
--- src/uk/me/parabola/mkgmap/build/MapSplitter.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/build/MapSplitter.java	(working copy)
@@ -102,7 +102,7 @@
 		MapArea[] origArea = {ma};
 		MapArea[] areas = splitMaxSize(ma);
 		if (areas == null) {
-			log.warn("initial split returned null for ",ma);
+			log.warn("initial split returned null for", ma);
 			return origArea;
 		}
 
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)
@@ -37,7 +37,6 @@
 import uk.me.parabola.imgfmt.app.Coord;
 import uk.me.parabola.log.Logger;
 import uk.me.parabola.mkgmap.general.MapPoint;
-import uk.me.parabola.mkgmap.reader.osm.FakeIdGenerator;
 import uk.me.parabola.mkgmap.reader.osm.GType;
 import uk.me.parabola.mkgmap.reader.osm.Node;
 import uk.me.parabola.util.EnhancedProperties;
@@ -401,7 +400,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 +428,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/StyledConverter.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java	(working copy)
@@ -953,7 +953,7 @@
 		log.info("Found", numRoads, "roads",
 				numDriveOnLeftRoads, "in drive-on-left country,",
 				numDriveOnRightRoads, "in drive-on-right country, and",
-				numDriveOnSideUnknown, " with unknown country");
+				numDriveOnSideUnknown, "with unknown country");
 		if (numDriveOnLeftRoads> 0 &&  numDriveOnRightRoads > 0)
 			log.error("Attention: Tile contains both drive-on-left (" + numDriveOnLeftRoads + 
 					") and drive-on-right roads (" + numDriveOnRightRoads + ")");
Index: src/uk/me/parabola/mkgmap/osmstyle/TypeReader.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/TypeReader.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/osmstyle/TypeReader.java	(working copy)
@@ -107,7 +107,7 @@
 			if(gt.getRoadClass() < 0 || gt.getRoadClass() > 4)
 				log.error("road class value", gt.getRoadClass(), "not in the range 0-4 in style file lines, line " + ts.getLinenumber());
 			if(gt.getRoadSpeed() < 0 || gt.getRoadSpeed() > 7)
-				log.error("road speed value ", gt.getRoadSpeed(), "not in the range 0-7 in style file lines, line " + ts.getLinenumber());
+				log.error("road speed value", gt.getRoadSpeed(), "not in the range 0-7 in style file lines, line " + ts.getLinenumber());
 		}
 		if (performChecks){
 			boolean fromOverlays = false;
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);
@@ -497,7 +497,7 @@
 				if (log.isInfoEnabled())
 					log.info("  Way " + way.getTag("name") + " (" + way.toBrowseURL() + ") has less than 2 points - deleting it");
 				if (!cw.isRoad() && !waysThatMapToOnePoint.contains(way.getId())) {
-					log.warn("non-routable way ", way.getId(), "was removed");
+					log.warn("non-routable way", way.getId(), "was removed");
 				}
 				
 				if (cw.isRoad())
@@ -685,8 +685,8 @@
 					continue;
 				}
 				if (log.isDebugEnabled()) {
-					log.debug("removing obsolete point on almost straight segment in way ", way.toBrowseURL(), "at",
-							cm.toOSMURL());
+					log.debug("removing obsolete point on almost straight segment in", way.getBasicLogInformation(), "at",
+							cm.toDegreeString());
 				}
 				if (DEBUG_PATH != null) {
 					obsoletePoints.add(cm);
Index: src/uk/me/parabola/mkgmap/osmstyle/eval/ValueOp.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/eval/ValueOp.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/osmstyle/eval/ValueOp.java	(working copy)
@@ -16,8 +16,6 @@
  */
 package uk.me.parabola.mkgmap.osmstyle.eval;
 
-import java.util.EnumMap;
-
 import uk.me.parabola.mkgmap.reader.osm.Element;
 
 /**
Index: src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberGenerator.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberGenerator.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberGenerator.java	(working copy)
@@ -1303,7 +1303,7 @@
 			}
 			if (markFarDup) {
 				if (log.isDebugEnabled())
-					log.debug("keeping duplicate numbers assigned to different roads in cluster ", streetName, house1,house2);
+					log.debug("keeping duplicate numbers assigned to different roads in cluster", streetName, house1, house2);
 				house1.setFarDuplicate(true);
 				house2.setFarDuplicate(true);
 				continue;
@@ -1331,7 +1331,7 @@
 				}
 			} else {
 				if (log.isDebugEnabled())
-					log.debug("keeping duplicate numbers assigned to different roads in cluster ", streetName, house1,house2);
+					log.debug("keeping duplicate numbers assigned to different roads in cluster", streetName, house1, house2);
 				house1.setFarDuplicate(true);
 				house2.setFarDuplicate(true);
 			}
Index: src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberIvl.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberIvl.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberIvl.java	(working copy)
@@ -296,7 +296,7 @@
 			if (source.getRoad() != dest.getRoad())
 				log.info("moving",streetName,dest.getSign(),dest.toBrowseURL(),"from road",dest.getRoad(),"to road",source.getRoad());
 			else 
-				log.info("moving",streetName,dest.getSign(),dest.toBrowseURL(),"from segment",dest.getSegment(),"to ",source.getSegment(),"in road",source.getRoad());
+				log.info("moving",streetName,dest.getSign(),dest.toBrowseURL(),"from segment",dest.getSegment(),"to", source.getSegment(),"in road",source.getRoad());
 		}
 		dest.setRoad(source.getRoad());
 		dest.setSegment(source.getSegment());
Index: src/uk/me/parabola/mkgmap/reader/hgt/HGTList.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/hgt/HGTList.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/reader/hgt/HGTList.java	(working copy)
@@ -99,7 +99,7 @@
 					continue;
 				Matcher m = hgtPattern.matcher(strLine);
 				if (!m.matches()) {
-					log.error("don't know how to handle ", strLine);
+					log.error("don't know how to handle", strLine);
 					continue;
 				}
 				try {
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)
@@ -64,13 +64,13 @@
 			String squashed = Label.squashSpaces(val);
 			if (!val.equals(squashed)) {
 				if (log.isInfoEnabled())
-					log.info(this.toBrowseURL(),"obsolete blanks removed from tag", key, " '" + val + "' -> '" + squashed + "'");
+					log.info(this.toBrowseURL(),"obsolete blanks removed from tag", key, "'" + val + "' -> '" + squashed + "'");
 				val = squashed;
 			}
 			squashed = Label.squashDel(val);
 			if (!val.equals(squashed)) {
 				if (log.isInfoEnabled())
-					log.info(this.toBrowseURL(),"DEL character (0x7f) removed from tag", key, " '" + val + "' -> '" + squashed + "'");
+					log.info(this.toBrowseURL(),"DEL character (0x7f) removed from tag", key, "'" + val + "' -> '" + squashed + "'");
 				val = squashed;
 			}
 		}
@@ -312,6 +312,9 @@
 	}
 
 	public String toBrowseURL() {
+		if (FakeIdGenerator.isFakeId(id))
+			return getBasicLogInformation();
+
 		return "http://www.openstreetmap.org/" + kind() + "/" + id;
 	}
 
@@ -323,7 +326,7 @@
 		// Can be implemented in subclasses
 		throw new UnsupportedOperationException("unsupported element copy");
 	}
-	
+
 	public String getDebugName() {
 		String name = getName();
 		if(name == null)
@@ -332,9 +335,9 @@
 			name = "";
 		else
 			name += " ";
-		return name + "(OSM id " + getId() + ")";
+		return name + "(OSM id " + originalId + ")";
 	}
-	
+
 	/**
 	 * Calculate a short string to be used in log messages or style functions
 	 * echo or echotags.
@@ -346,7 +349,16 @@
 	 */
 	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;
 	}
+
+	@Override
+	public String toString() {
+		return getBasicLogInformation();
+	}
 }
Index: src/uk/me/parabola/mkgmap/reader/osm/LinkDestinationHook.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/LinkDestinationHook.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/reader/osm/LinkDestinationHook.java	(working copy)
@@ -176,7 +176,7 @@
 			if (log.isDebugEnabled() && !standardTagKey.equals(destSourceTagKey)) {
 				String msg = destSourceTagKey.startsWith(destinationLanes)
 						? "as destination tag because there is one lane information only." : "as destination tag.";
-				log.debug("Use", destSourceTagKey, msg, "Way ", w.getId(), w.toTagString());
+				log.debug("Use", destSourceTagKey, msg, "Way", w.getId(), w.toTagString());
 			}
 		}
 	}
Index: src/uk/me/parabola/mkgmap/reader/osm/MultiPolygonRelation.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/MultiPolygonRelation.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/reader/osm/MultiPolygonRelation.java	(working copy)
@@ -127,7 +127,7 @@
 				log.debug(" ", role, el.toBrowseURL(), el.toTagString());
 			}
 			if (roleMap.containsKey(el.getId()) )
-				log.warn("repeated member with id ", el.getId(), "in multipolygon relation",this.getId(),"is ignored");
+				log.warn("repeated member with id", el.getId(), "in multipolygon relation", this.getId(), "is ignored");
 			else {
 				addElement(role, el);
 				roleMap.put(el.getId(), role);
@@ -1794,14 +1794,14 @@
 		// => log the start and end points
 		
 		for (Way orgWay : fakeWay.getOriginalWays()) {
-			log.log(logLevel, " Way",orgWay.getId(),"is composed of other artificial ways. Details:");
-			log.log(logLevel, "  Start:",orgWay.getFirstPoint().toOSMURL());
+			log.log(logLevel, "Way", orgWay.getId(), "is composed of other artificial ways. Details:");
+			log.log(logLevel, " Start:", orgWay.getFirstPoint().toOSMURL());
 			if (orgWay.hasEqualEndPoints()) {
 				// the way is closed so start and end are equal - log the point in the middle of the way
 				int mid = orgWay.getPoints().size()/2;
-				log.log(logLevel, "  Mid:  ",orgWay.getPoints().get(mid).toOSMURL());
+				log.log(logLevel, " Mid:  ", orgWay.getPoints().get(mid).toOSMURL());
 			} else {
-				log.log(logLevel, "  End:  ",orgWay.getLastPoint().toOSMURL());
+				log.log(logLevel, " End:  ", orgWay.getLastPoint().toOSMURL());
 			}
 		}		
 	}
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)
@@ -36,8 +36,9 @@
 		return location;
 	}
 
+	@Override
 	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)
@@ -40,10 +40,6 @@
 	public String kind() {
 		return "relation";
 	}
-	
-	public String toString() {
-		return "RELATION: " + getId();
-	}
 
 	/**
 	 * Used in MultipolygonRelation.
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)
@@ -21,7 +21,6 @@
 import java.util.Collections;
 import java.util.List;
 
-import uk.me.parabola.imgfmt.Utils;
 import uk.me.parabola.imgfmt.app.Coord;
 import uk.me.parabola.log.Logger;
 import uk.me.parabola.mkgmap.filters.ShapeMergeFilter;
@@ -170,21 +169,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();
Index: src/uk/me/parabola/mkgmap/reader/osm/boundary/BoundaryQuadTree.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/boundary/BoundaryQuadTree.java	(revision 4593)
+++ src/uk/me/parabola/mkgmap/reader/osm/boundary/BoundaryQuadTree.java	(working copy)
@@ -832,7 +832,7 @@
 
 			long dt = System.currentTimeMillis()-t1;
 			if (dt  > 1000){
-				log.info(bboxKey, " : makeDistinct required long time:", dt, "ms");
+				log.info(bboxKey, ": makeDistinct required long time:", dt, "ms");
 			}
 			if (DEBUG)
 				printNodes("end", treePath);
Index: src/uk/me/parabola/util/GpxCreator.java
===================================================================
--- src/uk/me/parabola/util/GpxCreator.java	(revision 4593)
+++ src/uk/me/parabola/util/GpxCreator.java	(working copy)
@@ -113,7 +113,7 @@
 				pw.close();
 			} catch (Exception exp) {
 				// only for debugging so just log
-				log.warn("Could not create gpx file ", fname);
+				log.warn("Could not create gpx file", fname);
 			}
 		}
 	}
@@ -159,7 +159,7 @@
 				pw.close();
 			} catch (Exception exp) {
 				// only for debugging so just log
-				log.warn("Could not create gpx file ", fname);
+				log.warn("Could not create gpx file", fname);
 			}
 		}
 	}
Index: src/uk/me/parabola/util/IsInUtil.java
===================================================================
--- src/uk/me/parabola/util/IsInUtil.java	(revision 4593)
+++ src/uk/me/parabola/util/IsInUtil.java	(working copy)
@@ -315,7 +315,7 @@
 			final int nodeLat = node.getHighPrecLat();
 		final int nodeLon = node.getHighPrecLon();
 		if (log.isDebugEnabled()) {
-			log.debug("node ", node, nodeLon, nodeLat, shape.size(), shape);
+			log.debug("node", node, nodeLon, nodeLat, shape.size(), shape);
 		}
 		int trailLat = 0, trailLon = 0;
 		int lhsCount = 0, rhsCount = 0; // count both, to be sure
