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 24120)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/AddressEditContainer.java	(revision 24129)
@@ -422,4 +422,13 @@
 	public int getNumberOfUnresolvedAddresses() {
 		return unresolvedAddresses != null ? unresolvedAddresses.size() : 0;
+	}
+	
+	/**
+	 * Gets the number of invalid (unresolved and/or incomplete) addresses.
+	 *
+	 * @return the number of invalid addresses
+	 */
+	public int getNumberOfInvalidAddresses() {
+		return getNumberOfIncompleteAddresses() + getNumberOfUnresolvedAddresses();
 	}
 	
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/OSMAddress.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/OSMAddress.java	(revision 24120)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/OSMAddress.java	(revision 24129)
@@ -24,4 +24,7 @@
 public class OSMAddress extends OSMEntityBase {
 	public static final String MISSING_TAG = "?";
+	public static final String INTERPOLATION_TAG = "...";
+	
+	private boolean isPartOfInterpolation;
 	
 	/** The dictionary containing guessed values. */
@@ -41,5 +44,5 @@
 		super.setOsmObject(osmObject);
 		
-		OsmUtils.getValuesFromAddressInterpolation(this);
+		isPartOfInterpolation = OsmUtils.getValuesFromAddressInterpolation(this);
 		
 		String streetNameViaRel = OsmUtils.getAssociatedStreet(this.osmObject);
@@ -54,8 +57,10 @@
 	 */
 	public boolean isComplete() {
-		return 	TagUtils.hasAddrCityTag(osmObject) && TagUtils.hasAddrCountryTag(osmObject) &&
-				TagUtils.hasAddrHousenumberTag(osmObject) && TagUtils.hasAddrPostcodeTag(osmObject) &&
-				TagUtils.hasAddrStateTag(osmObject) && 
-				(TagUtils.hasAddrStreetTag(osmObject) || hasDerivedValue(TagUtils.ADDR_STREET_TAG));
+		return 	hasCity() && 
+				hasHouseNumber() &&
+			 	hasPostCode() && 
+				hasCity() && 
+				hasState() &&
+				hasStreetName();
 	}
 	
@@ -218,9 +223,31 @@
 	public String getHouseNumber() {
 		if (!TagUtils.hasAddrHousenumberTag(osmObject)) {
-			return MISSING_TAG;
+			if (!isPartOfInterpolation) {
+				return MISSING_TAG;
+			} else {
+				return INTERPOLATION_TAG;
+			}
 		}
 		return TagUtils.getAddrHousenumberValue(osmObject);
 	}
 	
+	/**
+	 * Checks for house number.
+	 *
+	 * @return true, if successful
+	 */
+	public boolean hasHouseNumber() {
+		return TagUtils.hasAddrHousenumberTag(osmObject) || isPartOfInterpolation;
+	}
+		
+	/**
+	 * Checks if this address is part of a address interpolation.
+	 *
+	 * @return true, if is part of interpolation
+	 */
+	protected boolean isPartOfInterpolation() {
+		return isPartOfInterpolation;
+	}
+
 	/**
 	 * Gets the name of the city associated with this address.
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/OsmUtils.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/OsmUtils.java	(revision 24120)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/OsmUtils.java	(revision 24129)
@@ -133,5 +133,6 @@
 			if (osm instanceof Way) {
 				Way w = (Way) osm;
-				if (TagUtils.hasAddrInterpolationTag(w)) {					
+				if (TagUtils.hasAddrInterpolationTag(w)) {
+					System.out.println("Found interpolation for " + address);
 					applyDerivedValue(address, w, TagUtils.ADDR_POSTCODE_TAG);
 					applyDerivedValue(address, w, TagUtils.ADDR_CITY_TAG);
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AddressEditSelectionEvent.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AddressEditSelectionEvent.java	(revision 24120)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AddressEditSelectionEvent.java	(revision 24129)
@@ -34,4 +34,7 @@
 	private AddressEditContainer addressContainer;
 	
+	private List<OSMAddress> unresolvedCache;
+	private List<OSMAddress> incompleteCache;
+	
 	/**
 	 * Creates a new 'AddressEditSelectionEvent'.
@@ -100,4 +103,56 @@
 	
 	/**
+	 * Checks for addresses.
+	 *
+	 * @return true, if successful
+	 */
+	public boolean hasAddresses() {
+		return hasIncompleteAddresses() || hasUnresolvedAddresses();
+	}
+	
+	/**
+	 * Checks for incomplete addresses.
+	 *
+	 * @return true, if successful
+	 */
+	public boolean hasIncompleteAddresses() {
+		return getSelectedIncompleteAddresses() != null;
+	}
+	
+	/**
+	 * Checks for unresolved addresses.
+	 *
+	 * @return true, if successful
+	 */
+	public boolean hasUnresolvedAddresses() {
+		return getSelectedUnresolvedAddresses() != null;
+	}
+	
+	/**
+	 * Checks for addresses with guesses.
+	 *
+	 * @return true, if successful
+	 */
+	public boolean hasAddressesWithGuesses() {
+		if (hasIncompleteAddresses()) {
+			for (OSMAddress addr : getSelectedIncompleteAddresses()) {
+				if (addr.hasGuesses()) {
+					return true;
+				}
+			}
+		}
+		
+		if (hasUnresolvedAddresses()) {
+			for (OSMAddress addr : getSelectedUnresolvedAddresses()) {
+				if (addr.hasGuesses()) {
+					return true;
+				}
+			}
+		}
+		
+		return false;
+	}
+	
+	/**
 	 * Gets the list containing the selected items of the 'unresolved addresses ' table.
 	 * @return
@@ -106,17 +161,18 @@
 		if (unresolvedAddressTable != null && 
 				addressContainer != null && 
-				addressContainer.getUnresolvedAddresses() != null) {
+				unresolvedCache == null) {
 			
 			int[] selRows = unresolvedAddressTable.getSelectedRows();
 			
-			List<OSMAddress> nodes = new ArrayList<OSMAddress>();
+			unresolvedCache = new ArrayList<OSMAddress>();
 			for (int i = 0; i < selRows.length; i++) {
 				if (selRows[i] >= 0 && selRows[i] < addressContainer.getNumberOfUnresolvedAddresses()) {
-					nodes.add(addressContainer.getUnresolvedAddresses().get(selRows[i]));
-				}
-			}
-			return nodes;
-		}
-		return null;
+					unresolvedCache.add(addressContainer.getUnresolvedAddresses().get(selRows[i]));
+				}
+			}
+			return unresolvedCache;
+		} else {
+			return unresolvedCache;
+		}
 	}
 	
@@ -129,17 +185,18 @@
 		if (incompleteAddressTable != null && 
 				addressContainer != null && 
-				addressContainer.getUnresolvedAddresses() != null) {
+				incompleteCache == null) {
 			
 			int[] selRows = incompleteAddressTable.getSelectedRows();
 			
-			List<OSMAddress> nodes = new ArrayList<OSMAddress>();
+			incompleteCache = new ArrayList<OSMAddress>();
 			for (int i = 0; i < selRows.length; i++) {
 				if (selRows[i] >= 0 && selRows[i] < addressContainer.getNumberOfIncompleteAddresses()) {
-					nodes.add(addressContainer.getIncompleteAddresses().get(selRows[i]));
-				}
-			}
-			return nodes;
-		}
-		return null;
+					incompleteCache.add(addressContainer.getIncompleteAddresses().get(selRows[i]));
+				}
+			}
+			return incompleteCache;
+		} else {
+			return incompleteCache; // equals null, if no data is present
+		}
 	}
 }
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/IncompleteAddressesDialog.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/IncompleteAddressesDialog.java	(revision 24120)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/IncompleteAddressesDialog.java	(revision 24129)
@@ -41,4 +41,6 @@
 import org.openstreetmap.josm.plugins.fixAddresses.IOSMEntity;
 import org.openstreetmap.josm.plugins.fixAddresses.gui.actions.AbstractAddressEditAction;
+import org.openstreetmap.josm.plugins.fixAddresses.gui.actions.ApplyAllGuessesAction;
+import org.openstreetmap.josm.plugins.fixAddresses.gui.actions.RemoveAddressTagsAction;
 import org.openstreetmap.josm.plugins.fixAddresses.gui.actions.SelectAddressesInMapAction;
 
@@ -47,12 +49,14 @@
 	private static final String FIXED_DIALOG_TITLE = tr("Incomplete Addresses");
 
-
 	private AddressEditContainer container;
 
-	
 	private SelectAddressesInMapAction selectAction = new SelectAddressesInMapAction();
+	private ApplyAllGuessesAction applyGuessesAction = new ApplyAllGuessesAction();
+	private RemoveAddressTagsAction removeTagsAction = new RemoveAddressTagsAction();
 	
 	private AbstractAddressEditAction[] actions = new AbstractAddressEditAction[]{
-			selectAction
+			selectAction,
+			applyGuessesAction,
+			removeTagsAction
 	};
 
@@ -79,8 +83,10 @@
 		this.add(p);
 		
-		JPanel buttonPanel = getButtonPanel(5);
+		JPanel buttonPanel = getButtonPanel(actions.length);
 		
-		SideButton sb = new SideButton(selectAction);
-		buttonPanel.add(sb);
+		for (int i = 0; i < actions.length; i++) {
+			SideButton sb = new SideButton(actions[i]);
+			buttonPanel.add(sb);
+		}
 		
 		this.add(buttonPanel, BorderLayout.SOUTH);
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/ApplyAllGuessesAction.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/ApplyAllGuessesAction.java	(revision 24120)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/ApplyAllGuessesAction.java	(revision 24129)
@@ -93,6 +93,5 @@
 	@Override
 	protected void updateEnabledState(AddressEditSelectionEvent event) {
-		setEnabled(event.getSelectedIncompleteAddresses() != null ||
-				event.getSelectedIncompleteAddresses() != null);
+		setEnabled(event.hasAddressesWithGuesses());
 	}
 
@@ -102,5 +101,5 @@
 	@Override
 	public void addressEditActionPerformed(AddressEditContainer container) {
-		if (container == null || container.getUnresolvedAddresses() == null) return;
+		if (container == null || container.getNumberOfIncompleteAddresses() == 0) return;
 		
 		List<OSMAddress> addrToFix = container.getUnresolvedAddresses();
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/AssignAddressToStreetAction.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/AssignAddressToStreetAction.java	(revision 24120)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/AssignAddressToStreetAction.java	(revision 24129)
@@ -62,5 +62,5 @@
 	@Override
 	public void updateEnabledState(AddressEditSelectionEvent ev) {
-		setEnabled(ev.getSelectedStreet() != null && ev.getSelectedUnresolvedAddresses() != null);
+		setEnabled(ev.getSelectedStreet() != null && ev.hasUnresolvedAddresses());
 	}
 
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/GuessAddressDataAction.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/GuessAddressDataAction.java	(revision 24120)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/GuessAddressDataAction.java	(revision 24129)
@@ -61,7 +61,7 @@
 	public void addressEditActionPerformed(AddressEditContainer container) {
 		if (container == null) return;
-		if (container.getUnresolvedAddresses() == null) return;
+		if (container.getNumberOfUnresolvedAddresses() == 0) return;
 				
-		internalGuessAddresses(container.getIncompleteAddresses());
+		internalGuessAddresses(container.getAllAddressesToFix());
 	}
 
@@ -73,6 +73,7 @@
 		if (ev == null || ev.getSelectedUnresolvedAddresses() == null) return;
 		
-		// guess tags for selected addresses only
-		internalGuessAddresses(ev.getSelectedUnresolvedAddresses());		
+		// guess tags for selected addresses only				
+		internalGuessAddresses(ev.getSelectedIncompleteAddresses());
+		internalGuessAddresses(ev.getSelectedUnresolvedAddresses());
 	}
 	
@@ -82,4 +83,6 @@
 	 */
 	private void internalGuessAddresses(List<OSMAddress> nodes) {
+		if (nodes == null) return;
+		
 		GuessAddressRunnable aft = new GuessAddressRunnable(nodes, tr("Guess street names"));
 		aft.addFinishListener(this);
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/RemoveAddressTagsAction.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/RemoveAddressTagsAction.java	(revision 24120)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/RemoveAddressTagsAction.java	(revision 24129)
@@ -30,10 +30,20 @@
 	public void addressEditActionPerformed(AddressEditSelectionEvent ev) {
 		beginTransaction(tr("Remove address tags"));
-		for (OSMAddress aNode : ev.getSelectedUnresolvedAddresses()) {
-			beginObjectTransaction(aNode);
-			aNode.removeAllAddressTags();
-			finishObjectTransaction(aNode);
+		if (ev.hasUnresolvedAddresses()) {
+			for (OSMAddress aNode : ev.getSelectedUnresolvedAddresses()) {
+				beginObjectTransaction(aNode);
+				aNode.removeAllAddressTags();
+				finishObjectTransaction(aNode);
+			}
 		}
-		finishTransaction();		
+
+		if (ev.hasIncompleteAddresses()) {
+			for (OSMAddress aNode : ev.getSelectedIncompleteAddresses()) {
+				beginObjectTransaction(aNode);
+				aNode.removeAllAddressTags();
+				finishObjectTransaction(aNode);
+			}
+			finishTransaction();		
+		}
 	}
 
@@ -54,5 +64,5 @@
 		}
 		
-		setEnabled(event.getSelectedUnresolvedAddresses() != null);
+		setEnabled(event.hasAddresses());
 	}
 
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/SelectAddressesInMapAction.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/SelectAddressesInMapAction.java	(revision 24120)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/SelectAddressesInMapAction.java	(revision 24129)
@@ -50,5 +50,5 @@
 	public SelectAddressesInMapAction() {
 		// we simply use the existing icon :-|
-		super(tr("Select in map"), "selectall", "Selects selected addresses in the map");
+		super(tr("Select"), "selectall", "Selects selected addresses in the map");
 	}
 
@@ -60,7 +60,7 @@
 		if (ev == null) return;
 		
-		if (ev.getSelectedUnresolvedAddresses() != null) {
+		if (ev.hasUnresolvedAddresses()) {
 			internalSelectAddresses(ev.getSelectedUnresolvedAddresses());
-		} else if (ev.getSelectedIncompleteAddresses() != null) {
+		} else if (ev.hasIncompleteAddresses()) {
 			internalSelectAddresses(ev.getSelectedIncompleteAddresses());
 		}
@@ -85,5 +85,5 @@
 	@Override
 	protected void updateEnabledState(AddressEditSelectionEvent event) {
-		setEnabled(event != null && (event.getSelectedUnresolvedAddresses() != null || event.getSelectedIncompleteAddresses() != null));
+		setEnabled(event != null && event.hasAddresses());
 	}
 
