Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/AddressEditContainer.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/AddressEditContainer.java	(revision 23980)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/AddressEditContainer.java	(revision 23981)
@@ -72,4 +72,5 @@
 public class AddressEditContainer implements Visitor, DataSetListener, IAddressEditContainerListener {
 	
+	private Collection<? extends OsmPrimitive> workingSet;
 	/** The street dictionary collecting all streets to a set of unique street names. */
 	private HashMap<String, StreetNode> streetDict = new HashMap<String, StreetNode>(100);
@@ -106,4 +107,15 @@
 
 	/**
+	 * Gets the working set used by the container. This can by either the complete or just
+	 * a subset of the current data layer.
+	 *
+	 * @return the workingSet
+	 */
+	protected Collection<? extends OsmPrimitive> getWorkingSet() {
+		return workingSet;
+	}
+
+
+	/**
 	 * Adds a change listener.
 	 * @param listener
@@ -146,5 +158,5 @@
 	 *
 	 * @param n the n
-	 * @return true, if successful
+	 * @return true, if node has been visited
 	 */
 	private boolean hasBeenVisited(Node n) {
@@ -161,4 +173,10 @@
 	}
 	
+	/**
+	 * Checks a way for been visited.
+	 *
+	 * @param w the w to check
+	 * @return true, if way has been visited
+	 */
 	private boolean hasBeenVisited(Way w) {
 		return visitedWays.contains(w);
@@ -180,16 +198,5 @@
 		if (aNode != null) {
 			addAndClassifyAddress(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);
 	}
@@ -234,8 +241,6 @@
 	private void createNodeFromWay(Way w) {
 		INodeEntity ne = NodeFactory.createNodeFromWay(w);
-
 		
 		if (!processNode(ne, w)) {
-
 			// Look also into nodes for addresses (unlikely, but at least they
 			// get marked as visited).
@@ -249,5 +254,5 @@
 				}
 			}
-		}
+		} // else: node has been processed, no need to look deeper
 	}
 
@@ -456,8 +461,14 @@
 	
 	/**
-	 * Rebuilds the street and address lists using the current data set. 
+	 * Rebuilds the street and address lists using the data set given
+	 * in  {@link AddressEditContainer#attachToDataSet(Collection)} or the 
+	 * full data set of the current data layer {@link Main#getCurrentDataSet()}. 
 	 */
 	public void invalidate() {
-		invalidate(Main.main.getCurrentDataSet().allPrimitives());
+		if (workingSet != null) {
+			invalidate(workingSet);
+		} else {
+			invalidate(Main.main.getCurrentDataSet().allPrimitives());
+		}
 	}
 	
@@ -507,20 +518,31 @@
 	
 	/**
-	 * Connects the listener to the data set and revisits the data. This method should
+	 * Connects the listener to the given data set and revisits the data. This method should
 	 * be called immediately after an edit session finished.
 	 * 
+	 * If the given data set is not null, calls of {@link AddressEditContainer#invalidate()} will
+	 * only consider the data given within this set. This can be useful to keep out unimportant
+	 * areas. However, a side-effect could be that some streets are not included and leads to
+	 * false alarms regarding unresolved addresses.
+	 * 
+	 * Calling {@link AddressEditContainer#detachFromDataSet()} drops the explicit data set and uses
+	 * the full data set on subsequent updates.<p>
+	 * 
+	 * <b>Example</b><br>
 	 * <code>
+	 * attachToDataSet(osmDataSetToWorkOn); // osmDataSetToWorkOn = selected items<br>
+	 * //... launch dialog or whatever<br>
 	 * detachFromDataSet();
-	 * //... launch dialog or whatever
-	 * attachToDataSet();
 	 * </code>
-	 */
-	public void attachToDataSet(Collection<? extends OsmPrimitive> dataToExamine) {		
-		Main.main.getCurrentDataSet().addDataSetListener(this);
-		if (dataToExamine != null && dataToExamine.size() > 0) {
-			invalidate(dataToExamine); // use given data set (usually the current selection)
+	 *
+	 * @param osmDataToWorkOn the data to examine
+	 */
+	public void attachToDataSet(Collection<? extends OsmPrimitive> osmDataToWorkOn) {
+		if (osmDataToWorkOn != null && !osmDataToWorkOn.isEmpty()) {			
+			workingSet = new ArrayList<OsmPrimitive>(osmDataToWorkOn);
 		} else {
-			invalidate(); // use current data set
-		}
+			detachFromDataSet(); // drop old stuff, if present
+		}
+		invalidate(); // start our investigation...
 	}
 	
@@ -531,5 +553,9 @@
 	 */
 	public void detachFromDataSet() {
-		Main.main.getCurrentDataSet().removeDataSetListener(this);
+		//Main.main.getCurrentDataSet().removeDataSetListener(this);		
+		if (workingSet != null) {
+			workingSet.clear();
+			workingSet = null;
+		}
 	}
 
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/FixUnresolvedStreetsAction.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/FixUnresolvedStreetsAction.java	(revision 23980)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/FixUnresolvedStreetsAction.java	(revision 23981)
@@ -48,9 +48,6 @@
 	@Override
 	public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
-		/* this changes the dialog contents, so we do nothing here
+		/* remember new selection for actionPerformed */
 		this.newSelection = newSelection;
-		if (addressEditContainer != null) {
-			addressEditContainer.invalidate(newSelection);
-		}*/
 	}
 
