Index: src/uk/me/parabola/mkgmap/osmstyle/housenumber/ExtNumbers.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/housenumber/ExtNumbers.java	(revision 3633)
+++ src/uk/me/parabola/mkgmap/osmstyle/housenumber/ExtNumbers.java	(working copy)
@@ -432,11 +432,11 @@
 			if (house.isIgnored())
 				continue;
 			if (house.getSegment() < startInRoad || house.getSegment() >= endInRoad){
-				log.error("internal error, house has wrong segment, road",getRoad(),"house",house,house.getElement().toBrowseURL());
+				log.error("internal error, house has wrong segment, road",getRoad(),"house",house,house.toBrowseURL());
 			}
 			if (Double.isNaN(house.getDistance()) || house.getDistance() > HousenumberGenerator.MAX_DISTANCE_TO_ROAD + 10){
 				if (house.getGroup() == null)
-					log.error("internal error, distance to road too large, road",getRoad(),"house",house,house.getElement().toBrowseURL());
+					log.error("internal error, distance to road too large, road",getRoad(),"house",house,house.toBrowseURL());
 			}
 		}
 	}
@@ -1014,7 +1014,7 @@
 			HousenumberGenerator.findClosestRoadSegment(house, getRoad(), segment,segment+1);
 			if (house.getRoad() == null || house.getSegment() != segment){
 				// should not happen
-				log.error("internal error, house too far from forced segment in road",getRoad(),house,house.getElement().toBrowseURL());
+				log.error("internal error, house too far from forced segment in road",getRoad(),house,house.toBrowseURL());
 				house.setIgnored(true);
 			}
 		}
@@ -1390,7 +1390,7 @@
 					}
 					if (bestMoveMod != null){
 						if (bestMoveOrig.isDuplicate()){
-							log.warn("duplicate number causes problems",streetName,bestMoveOrig.getSign(),bestMoveOrig.getElement().toBrowseURL() );
+							log.warn("duplicate number causes problems",streetName,bestMoveOrig.getSign(),bestMoveOrig.toBrowseURL() );
 						}
 						List<HousenumberMatch> fromHouses, toHouses;
 						ExtNumbers from,to;
Index: src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberElem.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberElem.java	(revision 3633)
+++ src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberElem.java	(working copy)
@@ -5,6 +5,7 @@
 import uk.me.parabola.mkgmap.general.MapRoad;
 import uk.me.parabola.mkgmap.general.ZipCodeInfo;
 import uk.me.parabola.mkgmap.reader.osm.Element;
+import uk.me.parabola.mkgmap.reader.osm.FakeIdGenerator;
 import uk.me.parabola.mkgmap.reader.osm.Node;
 import uk.me.parabola.mkgmap.reader.osm.Way;
 import uk.me.parabola.util.Locatable;
@@ -107,4 +108,12 @@
 			return place + " " + sign;
 		return "?" + " " + sign;
 	}
+	
+	public String toBrowseURL(){
+		if (FakeIdGenerator.isFakeId(element.getId())){
+			return getLocation().toOSMURL();
+		}
+		return element.toBrowseURL();
+	}
+
 }
\ No newline at end of file
Index: src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberGenerator.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberGenerator.java	(revision 3634)
+++ src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberGenerator.java	(working copy)
@@ -669,7 +669,7 @@
 				if (hnr.getName() == null){
 					iter.remove();
 					for (HousenumberMatch house : hnr.getHouses()){
-						log.warn("found no plausible road name for address",house.getElement().toBrowseURL(),", closest road id:",house.getRoad());
+						log.warn("found no plausible road name for address",house.toBrowseURL(),", closest road id:",house.getRoad());
 					}
 				}
 			}
@@ -737,9 +737,9 @@
 			for (HousenumberElem house : houseElems){
 				if (house.getRoad() == null){
 					if (house.getStreet() != null)
-						log.info("found no plausible road for house number element",house.getElement().toBrowseURL(),house.getStreet(),house.getSign());
+						log.info("found no plausible road for house number element",house.toBrowseURL(),house.getStreet(),house.getSign());
 					else 
-						log.info("found no plausible road for house number element",house.getElement().toBrowseURL());
+						log.info("found no plausible road for house number element",house.toBrowseURL());
 				}
 			}
 		}
@@ -1157,7 +1157,7 @@
 					findRoadForInterpolatedHouses(streetName, interpolatedHouses, roadsInCluster);
 				}
 
-				boolean foundDup = false;
+				int dupCount = 0;
 				for (HousenumberMatch house : interpolatedHouses){
 					if (house.getRoad() == null || house.getDistance() > HousenumberIvl.MAX_INTERPOLATION_DISTANCE_TO_ROAD)
 						continue;
@@ -1170,8 +1170,10 @@
 					if (old != null){
 						// forget both or only one ? Which one?
 						house.setIgnored(true);
-						if (old.getLocation().distance(house.getLocation()) > 5){
-							foundDup = true;
+						double distToOld = old.getLocation().distance(house.getLocation()); 
+						if (distToOld > 40){
+							log.info("conflict caused by addr:interpolation way",hivl,"and address element",house.toBrowseURL());
+							dupCount++;
 							if (!ignoreGenOnly){
 								old.setIgnored(true);
 								long ivlId = old.getElement().getOriginalId();
@@ -1182,8 +1184,8 @@
 						}
 					}
 				}
-				if (foundDup){
-					log.warn("addr:interpolation way",hivl,"produces duplicate numbers which are too far from existing nodes, is ignored");
+				if (dupCount > 0){
+					log.warn("addr:interpolation way",hivl,"is ignored, it produces duplicate number(s) too far from existing nodes");
 					badIvls.add(hivl);
 				}
 				else
@@ -1206,7 +1208,7 @@
 				if (house.getRoad() != null && house.isIgnored() == false){
 					HousenumberRoad hnr = road2HousenumberRoadMap.get(house.getRoad());
 					if (hnr == null){
-						log.error("internal error: found no housenumber road for interpolated house",house.getElement().toBrowseURL());
+						log.error("internal error: found no housenumber road for interpolated house",house.toBrowseURL());
 						continue;
 					}
 					hnr.addHouse(house);
@@ -1215,7 +1217,7 @@
 		}
 		if (log.isDebugEnabled()){
 			if (allOK)
-				log.debug("found no problems with interpolated numbers from addr:interpolations ways for roads with name",streetName);
+				log.debug("found no severe problems with interpolated numbers from addr:interpolations ways for roads with name",streetName);
 			else 
 				log.debug("found problems with interpolated numbers from addr:interpolations ways for roads with name",streetName);
 		}
@@ -1290,7 +1292,7 @@
 			
 			if (house.getRoad() == null) {
 				if (house.isIgnored() == false)
-					log.warn("found no plausible road for house number element",house.getElement().toBrowseURL(),"(",streetName,house.getSign(),")");
+					log.warn("found no plausible road for house number element",house.toBrowseURL(),"(",streetName,house.getSign(),")");
 			}
 			if (!house.isIgnored())
 				prev = house;
@@ -1353,7 +1355,7 @@
 				house2.setIgnored(true);
 				if (log.isDebugEnabled()){
 					if (house1.getSign().equals(house2.getSign()))
-						log.debug("duplicate number is ignored",streetName,house2.getSign(),house2.getElement().toBrowseURL() );
+						log.debug("duplicate number is ignored",streetName,house2.getSign(),house2.toBrowseURL() );
 					else 
 						log.info("using",streetName,house1.getSign(), "in favor of",house2.getSign(),"as target for address search");
 				}
@@ -1593,9 +1595,9 @@
 		}
 		if (log.isDebugEnabled()){
 			if (closestMatch.getRoad() != bestMatch.getRoad()){
-				log.debug("check angle: using road",bestMatch.getRoad().getRoadDef().getId(),"instead of",closestMatch.getRoad().getRoadDef().getId(),"for house number",bestMatch.getSign(),bestMatch.getElement().toBrowseURL());
+				log.debug("check angle: using road",bestMatch.getRoad().getRoadDef().getId(),"instead of",closestMatch.getRoad().getRoadDef().getId(),"for house number",bestMatch.getSign(),bestMatch.toBrowseURL());
 			} else if (closestMatch != bestMatch){
-				log.debug("check angle: using road segment",bestMatch.getSegment(),"instead of",closestMatch.getSegment(),"for house number element",bestMatch.getElement().toBrowseURL());
+				log.debug("check angle: using road segment",bestMatch.getSegment(),"instead of",closestMatch.getSegment(),"for house number element",bestMatch.toBrowseURL());
 			}
 		}
 		return bestMatch;
@@ -1880,7 +1882,7 @@
 			}
 			if (bestMatchingName != null){
 				if (house.getStreet().equals(bestMatchingName.getRoad().getStreet()) == false){
-					log.warn("accepting match in spite of different capitalisation" , house.getStreet(),house.getSign(), bestMatchingName.getRoad().getRoadDef(), "house:",house.getElement().toBrowseURL());
+					log.warn("accepting match in spite of different capitalisation" , house.getStreet(),house.getSign(), bestMatchingName.getRoad().getRoadDef(), "house:",house.toBrowseURL());
 					bestMatchingName.setStreet(bestMatchingName.getRoad().getStreet());
 					closest.setStreet(bestMatchingName.getStreet());
 				}
@@ -1902,7 +1904,7 @@
 				best.calcRoadSide();
 			} else {
 				if (log.isDebugEnabled()){
-					log.debug("further checks needed for address", closest.getStreet(), closest.getSign(), closest.getElement().toBrowseURL(), 
+					log.debug("further checks needed for address", closest.getStreet(), closest.getSign(), closest.toBrowseURL(), 
 							formatLen(closest.getDistance()), formatLen(bestMatchingName.getDistance()));
 				}
 
Index: src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberIvl.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberIvl.java	(revision 3633)
+++ src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberIvl.java	(working copy)
@@ -286,9 +286,9 @@
 	private void copyRoadData(HousenumberMatch source, HousenumberMatch dest) {
 		if (log.isInfoEnabled()){
 			if (source.getRoad() != dest.getRoad())
-				log.info("moving",streetName,dest.getSign(),dest.getElement().toBrowseURL(),"from road",dest.getRoad(),"to road",source.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.getElement().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/osmstyle/housenumber/HousenumberMatch.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberMatch.java	(revision 3633)
+++ src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberMatch.java	(working copy)
@@ -20,13 +20,12 @@
 import uk.me.parabola.imgfmt.app.Coord;
 import uk.me.parabola.mkgmap.general.MapRoad;
 import uk.me.parabola.mkgmap.reader.osm.Way;
-import uk.me.parabola.util.Locatable;
 
 /**
  * Stores the matching data between a housenumber and its road.
  * @author WanMil
  */
-public class HousenumberMatch extends HousenumberElem implements Locatable {
+public class HousenumberMatch extends HousenumberElem {
 	private MapRoad road;
 	private HousenumberRoad housenumberRoad;
 	
Index: src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberRoad.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberRoad.java	(revision 3633)
+++ src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberRoad.java	(working copy)
@@ -93,7 +93,7 @@
 				continue;
 			}
 			if (house.getHousenumberRoad() != this || house.getHousenumberRoad().getRoad() != house.getRoad()){
-				log.error("internal error, road links are not correct",house.getElement().toBrowseURL());
+				log.error("internal error, road links are not correct",house.toBrowseURL());
 			}
 			if (house.isLeft()) {
 				leftNumbers.add(house);
@@ -294,7 +294,7 @@
 				if (sameSide && (distBetweenHouses < 100 || distToUsed < 100)){
 					HousenumberMatch obsolete = house1 == usedForCalc ? house2 : house1;
 					if (log.isDebugEnabled())
-						log.debug("house",obsolete,obsolete.getElement().toBrowseURL(),"is close to other element and on the same road side, is ignored");
+						log.debug("house",obsolete,obsolete.toBrowseURL(),"is close to other element and on the same road side, is ignored");
 					toIgnore.add(obsolete);
 					continue;
 				}
@@ -320,7 +320,7 @@
 					}
 					if (wrongSide != null){
 						if (log.isDebugEnabled())
-							log.debug("house",streetName,wrongSide.getSign(),"from",wrongSide.getElement().toBrowseURL(),"seems to be wrong, is ignored");
+							log.debug("house",streetName,wrongSide.getSign(),"from",wrongSide.toBrowseURL(),"seems to be wrong, is ignored");
 						toIgnore.add(wrongSide);
 						continue;
 					}
@@ -395,8 +395,8 @@
 					found[k] = TO_SEARCH - 1 - stillToFind; 
 				}
 				if (log.isDebugEnabled()){
-					log.debug("dup check 1:", streetName, house1, house1.getElement().toBrowseURL());
-					log.debug("dup check 2:", streetName, house2, house2.getElement().toBrowseURL());
+					log.debug("dup check 1:", streetName, house1, house1.toBrowseURL());
+					log.debug("dup check 2:", streetName, house2, house2.toBrowseURL());
 					log.debug("confirmed",Arrays.toString(confirmed),"falsified",Arrays.toString(falsified),"sum-dist",Arrays.toString(sumDist),"sum-dist-same-side",Arrays.toString(sumDistSameSide));
 				}
 				HousenumberMatch bad = null;
@@ -422,7 +422,7 @@
 		} 
 		for (HousenumberMatch house : toIgnore){
 			if (log.isInfoEnabled())
-				log.info("duplicate housenumber",streetName,house.getSign(),"is ignored for road with id",house.getRoad().getRoadDef().getId(),",house:",house.getElement().toBrowseURL());
+				log.info("duplicate housenumber",streetName,house.getSign(),"is ignored for road with id",house.getRoad().getRoadDef().getId(),",house:",house.toBrowseURL());
 			houseNumbers.remove(house);
 		}
 	}
@@ -774,7 +774,7 @@
 					best.calcRoadSide();
 					wrongHouses.add(best);
 				} else {
-					log.warn("found no plausible road for address",house.getStreet(),house,house.getElement().toBrowseURL());
+					log.warn("found no plausible road for address",house.getStreet(),house,house.toBrowseURL());
 				}
 			}
 			
