Index: /applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/AddressEditContainer.java
===================================================================
--- /applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/AddressEditContainer.java	(revision 23886)
+++ /applications/editors/josm/plugins/AddressEdit/src/org/openstreetmap/josm/plugins/addressEdit/AddressEditContainer.java	(revision 23887)
@@ -64,4 +64,6 @@
 	private List<AddressNode> incompleteAddresses = new ArrayList<AddressNode>(100);
 	
+	private HashSet<Node> visitedNodes = new HashSet<Node>();
+	private HashSet<Way> visitedWays = new HashSet<Way>();
 	private HashSet<String> tags = new HashSet<String>();
 	
@@ -100,4 +102,20 @@
 	}
 	
+	private void markNodeAsVisited(Node n) {
+		visitedNodes.add(n);
+	}
+	
+	private boolean hasBeenVisited(Node n) {
+		return visitedNodes.contains(n);
+	}
+	
+	private void markWayAsVisited(Way w) {
+		visitedWays.add(w);
+	}
+	
+	private boolean hasBeenVisited(Way w) {
+		return visitedWays.contains(w);
+	}
+	
 	/* (non-Javadoc)
 	 * @see org.openstreetmap.josm.data.osm.visitor.Visitor#visit(org.openstreetmap.josm.data.osm.Node)
@@ -105,16 +123,32 @@
 	@Override
 	public void visit(Node n) {
+		if (hasBeenVisited(n)) {
+			return;
+		}
+		
 		AddressNode aNode = NodeFactory.createNode(n);
 		
-		if (aNode == null) return;
-		
-		if (!assignAddressToStreet(aNode)) {
-			// Assignment failed: Street is not known (yet) -> add to 'unresolved' list 
-			unresolvedAddresses.add(aNode);
-		}
-		
-		if (!aNode.isComplete()) {
-			incompleteAddresses.add(aNode);
-		}
+		if (aNode != null) {
+			if (!assignAddressToStreet(aNode)) {
+				// Assignment failed: Street is not known (yet) -> add to 'unresolved' list 
+				unresolvedAddresses.add(aNode);
+			}
+
+			if (!aNode.isComplete()) {
+				incompleteAddresses.add(aNode);
+			}
+		} else {
+			// check, if node is referred by a way
+			for (OsmPrimitive osm : n.getReferrers()) {
+				if (osm instanceof Way) {
+					Way w = (Way) osm;
+					if (!hasBeenVisited(w)) {
+						createNodeFromWay(w);
+					}
+				}
+			}
+			
+		}
+		markNodeAsVisited(n);
 	}
 	
@@ -124,6 +158,15 @@
 	@Override
 	public void visit(Way w) {
-		if (w.isIncomplete()) return;
-		
+		// This doesn't matter, we just need the street name 
+		//if (w.isIncomplete()) return;
+		
+		createNodeFromWay(w);
+		/*
+        for (Node n : w.getNodes()) {
+            
+        }*/
+	}
+
+	private void createNodeFromWay(Way w) {
 		StreetSegmentNode newSegment = NodeFactory.createNodeFromWay(w);
 		
@@ -149,4 +192,12 @@
 		}
 		
+		markWayAsVisited(w);
+		
+		// Look also into nodes for addresses (unlikely, but at least they
+		// get marked as visited).
+		for (Node n : w.getNodes()) {
+			visit(n);
+		}
+		
 		for (String key : w.keySet()) {
 			if (!tags.contains(key)) {
@@ -154,8 +205,4 @@
 			}
 		}
-		/*
-        for (Node n : w.getNodes()) {
-            
-        }*/
 	}
 
@@ -289,4 +336,6 @@
 		unresolvedAddresses.clear();
 		incompleteAddresses.clear();
+		visitedNodes.clear();
+		visitedWays.clear();
 	}
 	
