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 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/AddressEditContainer.java	(revision 24091)
@@ -77,15 +77,15 @@
 	
 	/** The unresolved addresses list. */
-	private List<AddressNode> unresolvedAddresses = new ArrayList<AddressNode>(100);
+	private List<OSMAddress> unresolvedAddresses = new ArrayList<OSMAddress>(100);
 	
 	/** The incomplete addresses list. */
-	private List<AddressNode> incompleteAddresses = new ArrayList<AddressNode>(100);
+	private List<OSMAddress> incompleteAddresses = new ArrayList<OSMAddress>(100);
 	
 	/** The shadow copy to assemble the street dict during update. */
 	private HashMap<String, StreetNode> shadowStreetDict = new HashMap<String, StreetNode>(100);
 	/** The shadow copy to assemble the unresolved addresses during update. */
-	private List<AddressNode> shadowUnresolvedAddresses = new ArrayList<AddressNode>(100);
+	private List<OSMAddress> shadowUnresolvedAddresses = new ArrayList<OSMAddress>(100);
 	/** The shadow copy to assemble the incomplete addresses during update. */
-	private List<AddressNode> shadowIncompleteAddresses = new ArrayList<AddressNode>(100);
+	private List<OSMAddress> shadowIncompleteAddresses = new ArrayList<OSMAddress>(100);
 	
 	/** The visited nodes cache to increase iteration speed. */
@@ -208,5 +208,5 @@
 		}
 
-		AddressNode aNode = null;
+		OSMAddress aNode = null;
 		// Address nodes are recycled in order to keep instance variables like guessed names
 		aNode = NodeFactory.createNode(n);
@@ -239,5 +239,5 @@
 	 * @param aNode the address node to add and check
 	 */
-	private void addAndClassifyAddress(AddressNode aNode) {
+	private void addAndClassifyAddress(OSMAddress aNode) {
 		if (!assignAddressToStreet(aNode)) {
 			// Assignment failed: Street is not known (yet) -> add to 'unresolved' list 
@@ -317,6 +317,6 @@
 
 			// Node is an address 
-			if (ne instanceof AddressNode) {
-				AddressNode aNode = (AddressNode) ne;
+			if (ne instanceof OSMAddress) {
+				OSMAddress aNode = (OSMAddress) ne;
 				addAndClassifyAddress(aNode);
 				return true;
@@ -353,5 +353,5 @@
 	 * @return the unresolved addresses
 	 */
-	public List<AddressNode> getUnresolvedAddresses() {
+	public List<OSMAddress> getUnresolvedAddresses() {
 		return unresolvedAddresses;
 	}
@@ -362,5 +362,5 @@
 	 * @return the incomplete addresses
 	 */
-	public List<AddressNode> getIncompleteAddresses() {
+	public List<OSMAddress> getIncompleteAddresses() {
 		return incompleteAddresses;
 	}
@@ -381,5 +381,5 @@
 	 * @return
 	 */
-	public List<AddressNode> getUnresolvedItems() {
+	public List<OSMAddress> getUnresolvedItems() {
 		return unresolvedAddresses;
 	}
@@ -431,5 +431,5 @@
 		int sum = 0;
 				
-		for (AddressNode aNode : getAllAddressesToFix()) {
+		for (OSMAddress aNode : getAllAddressesToFix()) {
 			if (aNode.hasGuesses()) {
 				sum++;
@@ -443,8 +443,8 @@
 	 * @return
 	 */
-	public List<AddressNode> getAllAddressesToFix() {
-		List<AddressNode> all = new ArrayList<AddressNode>(incompleteAddresses);
-
-		for (AddressNode aNode : unresolvedAddresses) {
+	public List<OSMAddress> getAllAddressesToFix() {
+		List<OSMAddress> all = new ArrayList<OSMAddress>(incompleteAddresses);
+
+		for (OSMAddress aNode : unresolvedAddresses) {
 			if (!all.contains(aNode)) {
 				all.add(aNode);
@@ -459,5 +459,5 @@
 	 * @param aNode
 	 */
-	private boolean assignAddressToStreet(AddressNode aNode) {
+	private boolean assignAddressToStreet(OSMAddress aNode) {
 		String streetName = aNode.getStreetName();
 		
@@ -475,6 +475,6 @@
 	 */
 	public void resolveAddresses() {
-		List<AddressNode> resolvedAddresses = new ArrayList<AddressNode>();
-		for (AddressNode node : shadowUnresolvedAddresses) {
+		List<OSMAddress> resolvedAddresses = new ArrayList<OSMAddress>();
+		for (OSMAddress node : shadowUnresolvedAddresses) {
 			if (assignAddressToStreet(node)) {
 				resolvedAddresses.add(node);
@@ -483,5 +483,5 @@
 		
 		/* Remove all resolves nodes from unresolved list */
-		for (AddressNode resolved : resolvedAddresses) {
+		for (OSMAddress resolved : resolvedAddresses) {
 			shadowUnresolvedAddresses.remove(resolved);
 		}
@@ -522,6 +522,6 @@
 
 			// put results from shadow copy into real lists
-			incompleteAddresses = new ArrayList<AddressNode>(shadowIncompleteAddresses);
-			unresolvedAddresses = new ArrayList<AddressNode>(shadowUnresolvedAddresses);
+			incompleteAddresses = new ArrayList<OSMAddress>(shadowIncompleteAddresses);
+			unresolvedAddresses = new ArrayList<OSMAddress>(shadowUnresolvedAddresses);
 			streetDict = new HashMap<String, StreetNode>(shadowStreetDict);
 			// remove temp data
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/AddressFinderThread.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/AddressFinderThread.java	(revision 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/AddressFinderThread.java	(revision 24091)
@@ -37,12 +37,12 @@
  * 
  * The guessing procedure itself is implemented by defining "guessers" using the {@link GuessedValueHandler} 
- * class. A guessed field does not modify the corresponding property of {@link AddressNode} itself, but 
- * adds the guessed value to a shadowed field by calling {@link AddressNode#setGuessedValue(String, String)}.  
+ * class. A guessed field does not modify the corresponding property of {@link OSMAddress} itself, but 
+ * adds the guessed value to a shadowed field by calling {@link OSMAddress#setGuessedValue(String, String)}.  
  */
 public class AddressFinderThread extends PleaseWaitRunnable implements Visitor {
-	private List<AddressNode> addressesToGuess;
+	private List<OSMAddress> addressesToGuess;
 	private List<IProgressMonitorFinishedListener> finishListeners = new ArrayList<IProgressMonitorFinishedListener>();
 	private double minDist;
-	private AddressNode curAddressNode;
+	private OSMAddress curAddressNode;
 	private boolean isRunning = false;	
 	private boolean cancelled;
@@ -51,10 +51,10 @@
 	 * @param nodes
 	 */
-	public AddressFinderThread(List<AddressNode> nodes, String title) {
+	public AddressFinderThread(List<OSMAddress> nodes, String title) {
 		super(title != null ? title : tr("Searching"));
 		setAddressEditContainer(nodes);		
 	}
 
-	public void setAddressEditContainer(List<AddressNode> nodes) {
+	public void setAddressEditContainer(List<OSMAddress> nodes) {
 		if (isRunning) {
 			throw new ConcurrentModificationException();
@@ -63,5 +63,5 @@
 	}
 
-	public List<AddressNode> getAddressesToGuess() {
+	public List<OSMAddress> getAddressesToGuess() {
 		return addressesToGuess;
 	}
@@ -182,6 +182,6 @@
 			
 			
-			List<AddressNode> shadowCopy = new ArrayList<AddressNode>(addressesToGuess);
-			for (AddressNode aNode : shadowCopy) {					
+			List<OSMAddress> shadowCopy = new ArrayList<OSMAddress>(addressesToGuess);
+			for (OSMAddress aNode : shadowCopy) {					
 				minDist = Double.MAX_VALUE;
 				curAddressNode = aNode;
@@ -235,5 +235,5 @@
 	private class GuessStreetValueHandler extends GuessedValueHandler {
 
-		public GuessStreetValueHandler(String tag, AddressNode aNode) {
+		public GuessStreetValueHandler(String tag, OSMAddress aNode) {
 			super(tag, aNode);
 		}
@@ -253,5 +253,5 @@
 		public void visit(Way w) {			
 			if (TagUtils.isStreetSupportingHousenumbers(w)) {
-				AddressNode aNode = getAddressNode();
+				OSMAddress aNode = getAddressNode();
 				double dist = OsmUtils.getMinimumDistanceToWay(aNode.getCoor(), w);
 				if (dist < minDist && dist < getMaxDistance()) {
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/AddressNode.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/AddressNode.java	(revision 24090)
+++ 	(revision )
@@ -1,489 +1,0 @@
-/*
- * This program is free software: you can redistribute it and/or modify it under 
- * the terms of the GNU General Public License as published by the 
- * Free Software Foundation, either version 3 of the License, or 
- * (at your option) any later version. 
- * 
- * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
- * See the GNU General Public License for more details. 
- * 
- * You should have received a copy of the GNU General Public License along with this program. 
- * If not, see <http://www.gnu.org/licenses/>.
- */
-package org.openstreetmap.josm.plugins.fixAddresses;
-
-import java.util.HashMap;
-
-import org.openstreetmap.josm.data.osm.OsmPrimitive;
-
-/**
- * The class AddressNode represents a single address node of OSM. It is a lightweight 
- * wrapper for a OSM node in order to simplify tag handling.
- */
-public class AddressNode extends OSMEntityBase {
-	public static final String MISSING_TAG = "?";
-	
-	/** The dictionary containing guessed values. */
-	private HashMap<String, String> guessedValues = new HashMap<String, String>();
-	/** The dictionary containing indirect values. */
-	private HashMap<String, String> derivedValues = new HashMap<String, String>();
-
-	public AddressNode(OsmPrimitive osmObject) {
-		super(osmObject);
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.openstreetmap.josm.plugins.addressEdit.NodeEntityBase#setOsmObject(org.openstreetmap.josm.data.osm.OsmPrimitive)
-	 */
-	@Override
-	public void setOsmObject(OsmPrimitive osmObject) {
-		super.setOsmObject(osmObject);
-		
-		String streetNameViaRel = OsmUtils.getAssociatedStreet(this.osmObject);
-		if (!StringUtils.isNullOrEmpty(streetNameViaRel)) {
-			setDerivedValue(TagUtils.ADDR_STREET_TAG, streetNameViaRel);
-		}
-	}
-	
-	/**
-	 * Checks if the underlying address node has all tags usually needed to describe an address.
-	 * @return
-	 */
-	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));
-	}
-	
-	/**
-	 * Gets the name of the street associated with this address.
-	 * @return
-	 */
-	public String getStreetName() {
-		return getTagValueWithGuess(TagUtils.ADDR_STREET_TAG);
-	}
-	
-	/**
-	 * Gets the tag value with guess. If the object does not have the given tag, this mehtod looks for
-	 * an appropriate guess. If both, real value and guess, are missing, a question mark is returned.
-	 *
-	 * @param tag the tag
-	 * @return the tag value with guess
-	 */
-	private String getTagValueWithGuess(String tag) {
-		if (StringUtils.isNullOrEmpty(tag)) return MISSING_TAG;
-		if (osmObject == null) return MISSING_TAG;
-		
-		if (!osmObject.hasKey(tag) || StringUtils.isNullOrEmpty(osmObject.get(tag))) {
-			if (!hasDerivedValue(tag)) {
-				// object does not have this tag -> check for guess
-				if (hasGuessedValue(tag)) {
-					return "*" + getGuessedValue(tag);
-				} else {
-					// give up
-					return MISSING_TAG;
-				}
-			} else { // ok, use derived value known via associated relation or way 
-				return getDerivedValue(tag);
-			}
-		} else { // get existing tag value
-			return osmObject.get(tag);			
-		}
-	}
-	
-	/**
-	 * Returns <tt>true</tt>, if this address node has a street name.
-	 * @return
-	 */
-	public boolean hasStreetName() {
-		return TagUtils.hasAddrStreetTag(osmObject);
-	}
-	
-	/**
-	 * Returns the street name guessed by the nearest-neighbour search.
-	 * @return the guessedStreetName
-	 */
-	public String getGuessedStreetName() {
-		return getGuessedValue(TagUtils.ADDR_STREET_TAG);
-	}
-
-	/**
-	 * @param guessedStreetName the guessedStreetName to set
-	 */
-	public void setGuessedStreetName(String guessedStreetName) {
-		setGuessedValue(TagUtils.ADDR_STREET_TAG, guessedStreetName);
-	}
-	
-	/**
-	 * Checks for a guessed street name.
-	 *
-	 * @return true, if this instance has a guessed street name.
-	 */
-	public boolean hasGuessedStreetName() {
-		return hasGuessedValue(TagUtils.ADDR_STREET_TAG);
-	}
-	
-	/**
-	 * @return the guessedPostCode
-	 */
-	public String getGuessedPostCode() {
-		return getGuessedValue(TagUtils.ADDR_POSTCODE_TAG);
-	}
-
-	/**
-	 * @param guessedPostCode the guessedPostCode to set
-	 */
-	public void setGuessedPostCode(String guessedPostCode) {
-		setGuessedValue(TagUtils.ADDR_POSTCODE_TAG, guessedPostCode);
-	}
-	
-	/**
-	 * Checks for a guessed post code.
-	 *
-	 * @return true, if this instance has a guessed post code.
-	 */
-	public boolean hasGuessedPostCode() {
-		return hasGuessedValue(TagUtils.ADDR_POSTCODE_TAG);
-	}
-
-	/**
-	 * @return the guessedCity
-	 */
-	public String getGuessedCity() {
-		return getGuessedValue(TagUtils.ADDR_CITY_TAG);
-	}
-
-	/**
-	 * @param guessedCity the guessedCity to set
-	 */
-	public void setGuessedCity(String guessedCity) {
-		setGuessedValue(TagUtils.ADDR_CITY_TAG, guessedCity);
-	}
-
-	/**
-	 * Checks for a guessed city name.
-	 *
-	 * @return true, if this instance has a guessed city name.
-	 */
-	public boolean hasGuessedCity() {
-		return hasGuessedValue(TagUtils.ADDR_CITY_TAG);
-	}
-
-	/**
-	 * Returns true, if this instance has guesses regarding address tags.
-	 * @return
-	 */
-	public boolean hasGuesses() {
-		return guessedValues.size() > 0; 
-	}
-	
-	/**
-	 * Applies all guessed tags for this node.
-	 */
-	public void applyAllGuesses() {
-		for (String tag : guessedValues.keySet()) {
-			String val = guessedValues.get(tag);
-			if (!StringUtils.isNullOrEmpty(val)) {
-				setOSMTag(tag, val);
-			}
-		}
-	}
-
-	/**
-	 * Gets the name of the post code associated with this address.
-	 * @return
-	 */
-	public String getPostCode() {
-		return getTagValueWithGuess(TagUtils.ADDR_POSTCODE_TAG);
-	}
-	
-	/**
-	 * Checks for post code tag.
-	 *
-	 * @return true, if successful
-	 */
-	public boolean hasPostCode() {
-		return TagUtils.hasAddrPostcodeTag(osmObject);
-	}
-	
-	/**
-	 * Gets the name of the house number associated with this address.
-	 * @return
-	 */
-	public String getHouseNumber() {
-		if (!TagUtils.hasAddrHousenumberTag(osmObject)) {
-			return MISSING_TAG;
-		}
-		return TagUtils.getAddrHousenumberValue(osmObject);
-	}
-	
-	/**
-	 * Gets the name of the city associated with this address.
-	 * @return
-	 */
-	public String getCity() {
-		return getTagValueWithGuess(TagUtils.ADDR_CITY_TAG);
-	}
-	
-	/**
-	 * Checks for city tag.
-	 *
-	 * @return true, if successful
-	 */
-	public boolean hasCity() {
-		return TagUtils.hasAddrCityTag(osmObject);
-	}
-	
-	/**
-	 * Gets the name of the state associated with this address.
-	 * @return
-	 */
-	public String getState() {
-		if (!TagUtils.hasAddrStateTag(osmObject)) {
-			return MISSING_TAG;
-		}
-		return TagUtils.getAddrStateValue(osmObject);
-	}
-
-	/**
-	 * Gets the name of the state associated with this address.
-	 * @return
-	 */
-	public String getCountry() {
-		if (!TagUtils.hasAddrCountryTag(osmObject)) {
-			return MISSING_TAG;
-		}
-		return TagUtils.getAddrCountryValue(osmObject);
-	}
-	
-	/**
-	 * Removes all addresss related tags from the node or way.
-	 */
-	public void removeAllAddressTags() {
-		removeOSMTag(TagUtils.ADDR_CITY_TAG);
-		removeOSMTag(TagUtils.ADDR_COUNTRY_TAG);
-		removeOSMTag(TagUtils.ADDR_POSTCODE_TAG);
-		removeOSMTag(TagUtils.ADDR_HOUSENUMBER_TAG);
-		removeOSMTag(TagUtils.ADDR_STATE_TAG);
-		removeOSMTag(TagUtils.ADDR_STREET_TAG);
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.openstreetmap.josm.plugins.addressEdit.NodeEntityBase#compareTo(org.openstreetmap.josm.plugins.addressEdit.INodeEntity)
-	 */
-	@Override
-	public int compareTo(IOSMEntity o) {
-		if (o == null || !(o instanceof AddressNode)) {
-			return -1;
-		}
-		AddressNode other = (AddressNode) o;
-		
-		int cc = 0;
-		cc = this.getCountry().compareTo(other.getCountry());
-		if ( cc  == 0) {
-			cc = this.getState().compareTo(other.getState());			
-			if (cc  == 0) {
-				cc = this.getCity().compareTo(other.getCity());				
-				if (cc  == 0) {
-					cc = this.getStreetName().compareTo(other.getStreetName());					
-					if (cc  == 0) {
-						if (hasGuessedStreetName()) {							
-							if (other.hasStreetName()) {
-								// Compare guessed name with the real name
-								cc = this.getGuessedStreetName().compareTo(other.getStreetName());
-								if (cc == 0) {
-									cc = this.getHouseNumber().compareTo(other.getHouseNumber());
-								}
-							} else if (other.hasGuessedStreetName()){
-								// Compare guessed name with the guessed name
-								cc = this.getGuessedStreetName().compareTo(other.getGuessedStreetName());
-								if (cc == 0) {
-									cc = this.getHouseNumber().compareTo(other.getHouseNumber());
-								}
-							} // else: give up
-						// No guessed name at all -> just compare the number
-						} else {
-							cc = this.getHouseNumber().compareTo(other.getHouseNumber());
-						}
-					}
-				}
-			}
-		}
-		
-		return cc;
-	}
-	
-	/**
-	 * Applies the street name from the specified street node.
-	 * @param node
-	 */
-	public void assignStreet(StreetNode node) {
-		if (node == null || !node.hasName()) return;
-		
-		if (!node.getName().equals(getStreetName())) {
-			setStreetName(node.getName());			
-			node.addAddress(this);
-			fireEntityChanged(this);
-		}
-	}
-	
-	/**
-	 * Gets the guessed value for the given tag.
-	 * @param tag The tag to get the guessed value for.
-	 * @return
-	 */
-	public String getGuessedValue(String tag) {
-		if (!hasGuessedValue(tag)) {
-			return null;			
-		}
-		return guessedValues.get(tag);
-	}
-	
-	/**
-	 * Check if this instance needs guessed values. This is the case, if the underlying OSM node
-	 * has either no street name, post code or city.
-	 *
-	 * @return true, if this instance needs at least one guessed value.
-	 */
-	public boolean needsGuess() {
-		return 	needsGuessedValue(TagUtils.ADDR_CITY_TAG) ||
-				needsGuessedValue(TagUtils.ADDR_POSTCODE_TAG) ||
-				needsGuessedValue(TagUtils.ADDR_STREET_TAG);
-	}
-	
-	/**
-	 * Check if this instance needs guessed value for a given tag.
-	 * @return true, if successful
-	 */
-	public boolean needsGuessedValue(String tag) {
-		return MISSING_TAG.equals(getTagValueWithGuess(tag));
-	}
-	
-	/**
-	 * Clears all guessed values.
-	 */
-	public void clearAllGuesses() {
-		guessedValues.clear();
-	}
-	
-	/**
-	 * Checks if given tag has a guessed value (tag exists and has a non-empty value).
-	 *
-	 * @param tag the tag
-	 * @return true, if tag has a guessed value.
-	 */
-	private boolean hasGuessedValue(String tag) {
-		return guessedValues.containsKey(tag) && 
-			!StringUtils.isNullOrEmpty(guessedValues.get(tag));
-	}
-	
-	/**
-	 * Sets the guessed value with the given tag.
-	 *
-	 * @param tag the tag to set the guess for
-	 * @param value the value of the guessed tag.
-	 */
-	public void setGuessedValue(String tag, String value) {
-		guessedValues.put(tag, value);
-		fireEntityChanged(this);
-	}
-	
-	/**
-	 * Checks if given tag has a derived value (value is available via a referrer).
-	 *
-	 * @param tag the tag
-	 * @return true, if tag has a derived value.
-	 */
-	private boolean hasDerivedValue(String tag) {
-		return derivedValues.containsKey(tag) && 
-			!StringUtils.isNullOrEmpty(derivedValues.get(tag));
-	}
-	
-	/**
-	 * Gets the derived value for the given tag.
-	 * @param tag The tag to get the derived value for.
-	 * @return
-	 */
-	public String getDerivedValue(String tag) {
-		if (!hasDerivedValue(tag)) {
-			return null;			
-		}
-		return derivedValues.get(tag);
-	}
-		
-	/**
-	 * Sets the value known indirectly via a referrer with the given tag.
-	 *
-	 * @param tag the tag to set the derived value for
-	 * @param value the value of the derived tag.
-	 */
-	public void setDerivedValue(String tag, String value) {
-		derivedValues.put(tag, value);		
-	}	
-	
-	/**
-	 * Sets the street name of the address node.
-	 * @param streetName
-	 */
-	public void setStreetName(String streetName) {
-		if (streetName != null && streetName.length() == 0) return;
-		
-		setOSMTag(TagUtils.ADDR_STREET_TAG, streetName);
-	}
-
-	
-	/**
-	 * Sets the state of the address node.
-	 * @param state
-	 */
-	public void setState(String state) {
-		if (state != null && state.length() == 0) return;
-		
-		setOSMTag(TagUtils.ADDR_STATE_TAG, state);
-	}
-	
-	/**
-	 * Sets the country of the address node.
-	 * @param country
-	 */
-	public void setCountry(String country) {
-		if (country != null && country.length() == 0) return;
-		
-		setOSMTag(TagUtils.ADDR_COUNTRY_TAG, country);
-	}
-	
-	/**
-	 * Sets the post code of the address node.
-	 * @param postCode
-	 */
-	public void setPostCode(String postCode) {
-		if (postCode != null && postCode.length() == 0) return;
-		
-		setOSMTag(TagUtils.ADDR_POSTCODE_TAG, postCode);
-	}
-	
-	@Override
-	public String toString() {
-		return AddressNode.getFormatString(this);
-	}
-
-	public static String getFormatString(AddressNode node) {
-		// TODO: Add further countries here
-		// DE
-		String guessed = node.getGuessedStreetName();
-		String sName = node.getStreetName();
-		if (!StringUtils.isNullOrEmpty(guessed) && MISSING_TAG.equals(sName)) {
-			sName = String.format("(%s)", guessed);
-		}	
-		
-		return String.format("%s %s, %s-%s %s (%s) ", 
-				sName,
-				node.getHouseNumber(),
-				node.getCountry(),
-				node.getPostCode(),
-				node.getCity(),
-				node.getState());
-	}
-}
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/GuessedValueHandler.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/GuessedValueHandler.java	(revision 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/GuessedValueHandler.java	(revision 24091)
@@ -35,5 +35,5 @@
 	protected double minDist;
 	protected String currentValue;
-	private AddressNode aNode;
+	private OSMAddress aNode;
 	private double maxDist = DEFAULT_MAX_DIST;
 	
@@ -45,5 +45,5 @@
 	 * @param maxDist the maximum distance for a node/way to be considered as guessed value.
 	 */
-	public GuessedValueHandler(String tag, AddressNode aNode) {
+	public GuessedValueHandler(String tag, OSMAddress aNode) {
 		this(tag, aNode, DEFAULT_MAX_DIST);
 	}
@@ -56,5 +56,5 @@
 	 * @param maxDist the maximum distance for a node/way to be considered as guessed value.
 	 */
-	public GuessedValueHandler(String tag, AddressNode aNode, double maxDist) {
+	public GuessedValueHandler(String tag, OSMAddress aNode, double maxDist) {
 		super();
 		
@@ -82,5 +82,5 @@
 	 * @return the aNode
 	 */
-	protected AddressNode getAddressNode() {
+	protected OSMAddress getAddressNode() {
 		return aNode;
 	}
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/NodeFactory.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/NodeFactory.java	(revision 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/NodeFactory.java	(revision 24091)
@@ -20,5 +20,5 @@
 
 public class NodeFactory {
-	private static HashMap<String, AddressNode> addressCache = new HashMap<String, AddressNode>();
+	private static HashMap<String, OSMAddress> addressCache = new HashMap<String, OSMAddress>();
 	
 	/**
@@ -27,11 +27,11 @@
 	 * @return
 	 */
-	public static AddressNode createNode(Node node) {
+	public static OSMAddress createNode(Node node) {
 		if (TagUtils.isAddress(node)) {
 			String aid = "" + node.getId();
 			
-			AddressNode aNode = lookup(aid);
+			OSMAddress aNode = lookup(aid);
 			if (aNode == null) {
-				aNode = new AddressNode(node);
+				aNode = new OSMAddress(node);
 				addressCache.put(aid, aNode);
 			} else {
@@ -58,7 +58,7 @@
 			String aid = "" + way.getId();
 			
-			AddressNode aNode = lookup(aid);
+			OSMAddress aNode = lookup(aid);
 			if (aNode == null) {
-				aNode = new AddressNode(way);
+				aNode = new OSMAddress(way);
 				addressCache.put(aid, aNode);
 			} else {
@@ -71,5 +71,5 @@
 	}
 	
-	private static AddressNode lookup(String aid) {				
+	private static OSMAddress lookup(String aid) {				
 		if (addressCache.containsKey(aid)) {
 			return addressCache.get(aid);			
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 24091)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/OSMAddress.java	(revision 24091)
@@ -0,0 +1,489 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under 
+ * the terms of the GNU General Public License as published by the 
+ * Free Software Foundation, either version 3 of the License, or 
+ * (at your option) any later version. 
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+ * See the GNU General Public License for more details. 
+ * 
+ * You should have received a copy of the GNU General Public License along with this program. 
+ * If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.openstreetmap.josm.plugins.fixAddresses;
+
+import java.util.HashMap;
+
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+
+/**
+ * The class OSMAddress represents a single address node of OSM. It is a lightweight 
+ * wrapper for a OSM node in order to simplify tag handling.
+ */
+public class OSMAddress extends OSMEntityBase {
+	public static final String MISSING_TAG = "?";
+	
+	/** The dictionary containing guessed values. */
+	private HashMap<String, String> guessedValues = new HashMap<String, String>();
+	/** The dictionary containing indirect values. */
+	private HashMap<String, String> derivedValues = new HashMap<String, String>();
+
+	public OSMAddress(OsmPrimitive osmObject) {
+		super(osmObject);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.openstreetmap.josm.plugins.addressEdit.NodeEntityBase#setOsmObject(org.openstreetmap.josm.data.osm.OsmPrimitive)
+	 */
+	@Override
+	public void setOsmObject(OsmPrimitive osmObject) {
+		super.setOsmObject(osmObject);
+		
+		String streetNameViaRel = OsmUtils.getAssociatedStreet(this.osmObject);
+		if (!StringUtils.isNullOrEmpty(streetNameViaRel)) {
+			setDerivedValue(TagUtils.ADDR_STREET_TAG, streetNameViaRel);
+		}
+	}
+	
+	/**
+	 * Checks if the underlying address node has all tags usually needed to describe an address.
+	 * @return
+	 */
+	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));
+	}
+	
+	/**
+	 * Gets the name of the street associated with this address.
+	 * @return
+	 */
+	public String getStreetName() {
+		return getTagValueWithGuess(TagUtils.ADDR_STREET_TAG);
+	}
+	
+	/**
+	 * Gets the tag value with guess. If the object does not have the given tag, this mehtod looks for
+	 * an appropriate guess. If both, real value and guess, are missing, a question mark is returned.
+	 *
+	 * @param tag the tag
+	 * @return the tag value with guess
+	 */
+	private String getTagValueWithGuess(String tag) {
+		if (StringUtils.isNullOrEmpty(tag)) return MISSING_TAG;
+		if (osmObject == null) return MISSING_TAG;
+		
+		if (!osmObject.hasKey(tag) || StringUtils.isNullOrEmpty(osmObject.get(tag))) {
+			if (!hasDerivedValue(tag)) {
+				// object does not have this tag -> check for guess
+				if (hasGuessedValue(tag)) {
+					return "*" + getGuessedValue(tag);
+				} else {
+					// give up
+					return MISSING_TAG;
+				}
+			} else { // ok, use derived value known via associated relation or way 
+				return getDerivedValue(tag);
+			}
+		} else { // get existing tag value
+			return osmObject.get(tag);			
+		}
+	}
+	
+	/**
+	 * Returns <tt>true</tt>, if this address node has a street name.
+	 * @return
+	 */
+	public boolean hasStreetName() {
+		return TagUtils.hasAddrStreetTag(osmObject);
+	}
+	
+	/**
+	 * Returns the street name guessed by the nearest-neighbour search.
+	 * @return the guessedStreetName
+	 */
+	public String getGuessedStreetName() {
+		return getGuessedValue(TagUtils.ADDR_STREET_TAG);
+	}
+
+	/**
+	 * @param guessedStreetName the guessedStreetName to set
+	 */
+	public void setGuessedStreetName(String guessedStreetName) {
+		setGuessedValue(TagUtils.ADDR_STREET_TAG, guessedStreetName);
+	}
+	
+	/**
+	 * Checks for a guessed street name.
+	 *
+	 * @return true, if this instance has a guessed street name.
+	 */
+	public boolean hasGuessedStreetName() {
+		return hasGuessedValue(TagUtils.ADDR_STREET_TAG);
+	}
+	
+	/**
+	 * @return the guessedPostCode
+	 */
+	public String getGuessedPostCode() {
+		return getGuessedValue(TagUtils.ADDR_POSTCODE_TAG);
+	}
+
+	/**
+	 * @param guessedPostCode the guessedPostCode to set
+	 */
+	public void setGuessedPostCode(String guessedPostCode) {
+		setGuessedValue(TagUtils.ADDR_POSTCODE_TAG, guessedPostCode);
+	}
+	
+	/**
+	 * Checks for a guessed post code.
+	 *
+	 * @return true, if this instance has a guessed post code.
+	 */
+	public boolean hasGuessedPostCode() {
+		return hasGuessedValue(TagUtils.ADDR_POSTCODE_TAG);
+	}
+
+	/**
+	 * @return the guessedCity
+	 */
+	public String getGuessedCity() {
+		return getGuessedValue(TagUtils.ADDR_CITY_TAG);
+	}
+
+	/**
+	 * @param guessedCity the guessedCity to set
+	 */
+	public void setGuessedCity(String guessedCity) {
+		setGuessedValue(TagUtils.ADDR_CITY_TAG, guessedCity);
+	}
+
+	/**
+	 * Checks for a guessed city name.
+	 *
+	 * @return true, if this instance has a guessed city name.
+	 */
+	public boolean hasGuessedCity() {
+		return hasGuessedValue(TagUtils.ADDR_CITY_TAG);
+	}
+
+	/**
+	 * Returns true, if this instance has guesses regarding address tags.
+	 * @return
+	 */
+	public boolean hasGuesses() {
+		return guessedValues.size() > 0; 
+	}
+	
+	/**
+	 * Applies all guessed tags for this node.
+	 */
+	public void applyAllGuesses() {
+		for (String tag : guessedValues.keySet()) {
+			String val = guessedValues.get(tag);
+			if (!StringUtils.isNullOrEmpty(val)) {
+				setOSMTag(tag, val);
+			}
+		}
+	}
+
+	/**
+	 * Gets the name of the post code associated with this address.
+	 * @return
+	 */
+	public String getPostCode() {
+		return getTagValueWithGuess(TagUtils.ADDR_POSTCODE_TAG);
+	}
+	
+	/**
+	 * Checks for post code tag.
+	 *
+	 * @return true, if successful
+	 */
+	public boolean hasPostCode() {
+		return TagUtils.hasAddrPostcodeTag(osmObject);
+	}
+	
+	/**
+	 * Gets the name of the house number associated with this address.
+	 * @return
+	 */
+	public String getHouseNumber() {
+		if (!TagUtils.hasAddrHousenumberTag(osmObject)) {
+			return MISSING_TAG;
+		}
+		return TagUtils.getAddrHousenumberValue(osmObject);
+	}
+	
+	/**
+	 * Gets the name of the city associated with this address.
+	 * @return
+	 */
+	public String getCity() {
+		return getTagValueWithGuess(TagUtils.ADDR_CITY_TAG);
+	}
+	
+	/**
+	 * Checks for city tag.
+	 *
+	 * @return true, if successful
+	 */
+	public boolean hasCity() {
+		return TagUtils.hasAddrCityTag(osmObject);
+	}
+	
+	/**
+	 * Gets the name of the state associated with this address.
+	 * @return
+	 */
+	public String getState() {
+		if (!TagUtils.hasAddrStateTag(osmObject)) {
+			return MISSING_TAG;
+		}
+		return TagUtils.getAddrStateValue(osmObject);
+	}
+
+	/**
+	 * Gets the name of the state associated with this address.
+	 * @return
+	 */
+	public String getCountry() {
+		if (!TagUtils.hasAddrCountryTag(osmObject)) {
+			return MISSING_TAG;
+		}
+		return TagUtils.getAddrCountryValue(osmObject);
+	}
+	
+	/**
+	 * Removes all addresss related tags from the node or way.
+	 */
+	public void removeAllAddressTags() {
+		removeOSMTag(TagUtils.ADDR_CITY_TAG);
+		removeOSMTag(TagUtils.ADDR_COUNTRY_TAG);
+		removeOSMTag(TagUtils.ADDR_POSTCODE_TAG);
+		removeOSMTag(TagUtils.ADDR_HOUSENUMBER_TAG);
+		removeOSMTag(TagUtils.ADDR_STATE_TAG);
+		removeOSMTag(TagUtils.ADDR_STREET_TAG);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.openstreetmap.josm.plugins.addressEdit.NodeEntityBase#compareTo(org.openstreetmap.josm.plugins.addressEdit.INodeEntity)
+	 */
+	@Override
+	public int compareTo(IOSMEntity o) {
+		if (o == null || !(o instanceof OSMAddress)) {
+			return -1;
+		}
+		OSMAddress other = (OSMAddress) o;
+		
+		int cc = 0;
+		cc = this.getCountry().compareTo(other.getCountry());
+		if ( cc  == 0) {
+			cc = this.getState().compareTo(other.getState());			
+			if (cc  == 0) {
+				cc = this.getCity().compareTo(other.getCity());				
+				if (cc  == 0) {
+					cc = this.getStreetName().compareTo(other.getStreetName());					
+					if (cc  == 0) {
+						if (hasGuessedStreetName()) {							
+							if (other.hasStreetName()) {
+								// Compare guessed name with the real name
+								cc = this.getGuessedStreetName().compareTo(other.getStreetName());
+								if (cc == 0) {
+									cc = this.getHouseNumber().compareTo(other.getHouseNumber());
+								}
+							} else if (other.hasGuessedStreetName()){
+								// Compare guessed name with the guessed name
+								cc = this.getGuessedStreetName().compareTo(other.getGuessedStreetName());
+								if (cc == 0) {
+									cc = this.getHouseNumber().compareTo(other.getHouseNumber());
+								}
+							} // else: give up
+						// No guessed name at all -> just compare the number
+						} else {
+							cc = this.getHouseNumber().compareTo(other.getHouseNumber());
+						}
+					}
+				}
+			}
+		}
+		
+		return cc;
+	}
+	
+	/**
+	 * Applies the street name from the specified street node.
+	 * @param node
+	 */
+	public void assignStreet(StreetNode node) {
+		if (node == null || !node.hasName()) return;
+		
+		if (!node.getName().equals(getStreetName())) {
+			setStreetName(node.getName());			
+			node.addAddress(this);
+			fireEntityChanged(this);
+		}
+	}
+	
+	/**
+	 * Gets the guessed value for the given tag.
+	 * @param tag The tag to get the guessed value for.
+	 * @return
+	 */
+	public String getGuessedValue(String tag) {
+		if (!hasGuessedValue(tag)) {
+			return null;			
+		}
+		return guessedValues.get(tag);
+	}
+	
+	/**
+	 * Check if this instance needs guessed values. This is the case, if the underlying OSM node
+	 * has either no street name, post code or city.
+	 *
+	 * @return true, if this instance needs at least one guessed value.
+	 */
+	public boolean needsGuess() {
+		return 	needsGuessedValue(TagUtils.ADDR_CITY_TAG) ||
+				needsGuessedValue(TagUtils.ADDR_POSTCODE_TAG) ||
+				needsGuessedValue(TagUtils.ADDR_STREET_TAG);
+	}
+	
+	/**
+	 * Check if this instance needs guessed value for a given tag.
+	 * @return true, if successful
+	 */
+	public boolean needsGuessedValue(String tag) {
+		return MISSING_TAG.equals(getTagValueWithGuess(tag));
+	}
+	
+	/**
+	 * Clears all guessed values.
+	 */
+	public void clearAllGuesses() {
+		guessedValues.clear();
+	}
+	
+	/**
+	 * Checks if given tag has a guessed value (tag exists and has a non-empty value).
+	 *
+	 * @param tag the tag
+	 * @return true, if tag has a guessed value.
+	 */
+	private boolean hasGuessedValue(String tag) {
+		return guessedValues.containsKey(tag) && 
+			!StringUtils.isNullOrEmpty(guessedValues.get(tag));
+	}
+	
+	/**
+	 * Sets the guessed value with the given tag.
+	 *
+	 * @param tag the tag to set the guess for
+	 * @param value the value of the guessed tag.
+	 */
+	public void setGuessedValue(String tag, String value) {
+		guessedValues.put(tag, value);
+		fireEntityChanged(this);
+	}
+	
+	/**
+	 * Checks if given tag has a derived value (value is available via a referrer).
+	 *
+	 * @param tag the tag
+	 * @return true, if tag has a derived value.
+	 */
+	private boolean hasDerivedValue(String tag) {
+		return derivedValues.containsKey(tag) && 
+			!StringUtils.isNullOrEmpty(derivedValues.get(tag));
+	}
+	
+	/**
+	 * Gets the derived value for the given tag.
+	 * @param tag The tag to get the derived value for.
+	 * @return
+	 */
+	public String getDerivedValue(String tag) {
+		if (!hasDerivedValue(tag)) {
+			return null;			
+		}
+		return derivedValues.get(tag);
+	}
+		
+	/**
+	 * Sets the value known indirectly via a referrer with the given tag.
+	 *
+	 * @param tag the tag to set the derived value for
+	 * @param value the value of the derived tag.
+	 */
+	public void setDerivedValue(String tag, String value) {
+		derivedValues.put(tag, value);		
+	}	
+	
+	/**
+	 * Sets the street name of the address node.
+	 * @param streetName
+	 */
+	public void setStreetName(String streetName) {
+		if (streetName != null && streetName.length() == 0) return;
+		
+		setOSMTag(TagUtils.ADDR_STREET_TAG, streetName);
+	}
+
+	
+	/**
+	 * Sets the state of the address node.
+	 * @param state
+	 */
+	public void setState(String state) {
+		if (state != null && state.length() == 0) return;
+		
+		setOSMTag(TagUtils.ADDR_STATE_TAG, state);
+	}
+	
+	/**
+	 * Sets the country of the address node.
+	 * @param country
+	 */
+	public void setCountry(String country) {
+		if (country != null && country.length() == 0) return;
+		
+		setOSMTag(TagUtils.ADDR_COUNTRY_TAG, country);
+	}
+	
+	/**
+	 * Sets the post code of the address node.
+	 * @param postCode
+	 */
+	public void setPostCode(String postCode) {
+		if (postCode != null && postCode.length() == 0) return;
+		
+		setOSMTag(TagUtils.ADDR_POSTCODE_TAG, postCode);
+	}
+	
+	@Override
+	public String toString() {
+		return OSMAddress.getFormatString(this);
+	}
+
+	public static String getFormatString(OSMAddress node) {
+		// TODO: Add further countries here
+		// DE
+		String guessed = node.getGuessedStreetName();
+		String sName = node.getStreetName();
+		if (!StringUtils.isNullOrEmpty(guessed) && MISSING_TAG.equals(sName)) {
+			sName = String.format("(%s)", guessed);
+		}	
+		
+		return String.format("%s %s, %s-%s %s (%s) ", 
+				sName,
+				node.getHouseNumber(),
+				node.getCountry(),
+				node.getPostCode(),
+				node.getCity(),
+				node.getState());
+	}
+}
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/SelectIncompleteAddressesAction.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/SelectIncompleteAddressesAction.java	(revision 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/SelectIncompleteAddressesAction.java	(revision 24091)
@@ -42,5 +42,5 @@
 			List<OsmPrimitive> osms = new ArrayList<OsmPrimitive>();
 			
-			for (AddressNode aNode : addressEditContainer.getIncompleteAddresses()) {
+			for (OSMAddress aNode : addressEditContainer.getIncompleteAddresses()) {
 				osms.add(aNode.getOsmObject());
 			}
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/StreetNode.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/StreetNode.java	(revision 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/StreetNode.java	(revision 24091)
@@ -28,5 +28,5 @@
 public class StreetNode extends OSMEntityBase {
 	private List<IOSMEntity> children;
-	private List<AddressNode> addresses;
+	private List<OSMAddress> addresses;
 			
 	/**
@@ -58,5 +58,5 @@
 	}
 	
-	public void addAddress(AddressNode aNode) {
+	public void addAddress(OSMAddress aNode) {
 		lazyCreateAddresses();
 		addresses.add(aNode);		
@@ -65,5 +65,5 @@
 	private void lazyCreateAddresses() {
 		if (addresses == null) {
-			addresses = new ArrayList<AddressNode>();
+			addresses = new ArrayList<OSMAddress>();
 		}
 	}
@@ -73,9 +73,9 @@
 	}
 	
-	public List<AddressNode> getAddresses() {
+	public List<OSMAddress> getAddresses() {
 		return addresses;
 	}
 	
-	public void setAddresses(List<AddressNode> addresses) {
+	public void setAddresses(List<OSMAddress> addresses) {
 		this.addresses = addresses;
 	}
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AddressEditDialog.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AddressEditDialog.java	(revision 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AddressEditDialog.java	(revision 24091)
@@ -50,5 +50,5 @@
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.plugins.fixAddresses.AddressEditContainer;
-import org.openstreetmap.josm.plugins.fixAddresses.AddressNode;
+import org.openstreetmap.josm.plugins.fixAddresses.OSMAddress;
 import org.openstreetmap.josm.plugins.fixAddresses.IAddressEditContainerListener;
 import org.openstreetmap.josm.plugins.fixAddresses.IOSMEntity;
@@ -275,5 +275,5 @@
 			// show addresses as blue marker
 			if (sNode.hasAddresses()) {
-				for (AddressNode aNode : sNode.getAddresses()) {
+				for (OSMAddress aNode : sNode.getAddresses()) {
 					Color markerCol = Color.BLUE;
 					if (!aNode.isComplete()) {
@@ -285,7 +285,7 @@
 		} 
 		
-		List<AddressNode> unrAddresses = ev.getSelectedUnresolvedAddresses();
+		List<OSMAddress> unrAddresses = ev.getSelectedUnresolvedAddresses();
 		if (unrAddresses != null) {
-			for (AddressNode aNode : unrAddresses) {					
+			for (OSMAddress aNode : unrAddresses) {					
 				mapViewer.addMapMarker(new MapMarkerDot(Color.ORANGE, aNode.getCoor().lat(), aNode.getCoor().lon()));
 			}
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AddressEditModel.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AddressEditModel.java	(revision 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AddressEditModel.java	(revision 24091)
@@ -22,5 +22,5 @@
 import javax.swing.tree.TreeNode;
 
-import org.openstreetmap.josm.plugins.fixAddresses.AddressNode;
+import org.openstreetmap.josm.plugins.fixAddresses.OSMAddress;
 import org.openstreetmap.josm.plugins.fixAddresses.IOSMEntity;
 import org.openstreetmap.josm.plugins.fixAddresses.StreetNode;
@@ -28,6 +28,6 @@
 public class AddressEditModel {
 	private List<StreetNode> streets;
-	private List<AddressNode> unresolvedAddresses;
-	private List<AddressNode> incompleteAddresses = new ArrayList<AddressNode>();
+	private List<OSMAddress> unresolvedAddresses;
+	private List<OSMAddress> incompleteAddresses = new ArrayList<OSMAddress>();
 	private DefaultMutableTreeNode streetRoot;
 	private DefaultMutableTreeNode unresolvedRoot;
@@ -39,5 +39,5 @@
 	 */
 	public AddressEditModel(List<StreetNode> streets,
-			List<AddressNode> unresolvedAddresses) {
+			List<OSMAddress> unresolvedAddresses) {
 		super();
 		this.streets = streets;
@@ -66,5 +66,5 @@
 					treeStreetNode.add(addressNode);
 					
-					for (AddressNode addr : sNode.getAddresses()) {
+					for (OSMAddress addr : sNode.getAddresses()) {
 						addressNode.add(new DefaultMutableTreeNode(addr));
 						if (!addr.isComplete()) {
@@ -90,5 +90,5 @@
 			unresolvedRoot = new DefaultMutableTreeNode();
 			
-			for (AddressNode addr : unresolvedAddresses) {
+			for (OSMAddress addr : unresolvedAddresses) {
 				// Add address nodes				
 				unresolvedRoot.add(new DefaultMutableTreeNode(addr));
@@ -109,5 +109,5 @@
 			incompleteRoot = new DefaultMutableTreeNode();
 			
-			for (AddressNode addr : incompleteAddresses) {
+			for (OSMAddress addr : incompleteAddresses) {
 				// Add address nodes				
 				incompleteRoot.add(new DefaultMutableTreeNode(addr));
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 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AddressEditSelectionEvent.java	(revision 24091)
@@ -21,5 +21,5 @@
 
 import org.openstreetmap.josm.plugins.fixAddresses.AddressEditContainer;
-import org.openstreetmap.josm.plugins.fixAddresses.AddressNode;
+import org.openstreetmap.josm.plugins.fixAddresses.OSMAddress;
 import org.openstreetmap.josm.plugins.fixAddresses.StreetNode;
 
@@ -89,5 +89,5 @@
 	 * @return
 	 */
-	public List<AddressNode> getSelectedUnresolvedAddresses() {
+	public List<OSMAddress> getSelectedUnresolvedAddresses() {
 		if (unresolvedAddressTable != null && 
 				addressContainer != null && 
@@ -96,5 +96,5 @@
 			int[] selRows = unresolvedAddressTable.getSelectedRows();
 			
-			List<AddressNode> nodes = new ArrayList<AddressNode>();
+			List<OSMAddress> nodes = new ArrayList<OSMAddress>();
 			for (int i = 0; i < selRows.length; i++) {
 				if (selRows[i] >= 0 && selRows[i] < addressContainer.getNumberOfUnresolvedAddresses()) {
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/ApplyAllGuessesAction.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/ApplyAllGuessesAction.java	(revision 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/ApplyAllGuessesAction.java	(revision 24091)
@@ -25,5 +25,5 @@
 
 import org.openstreetmap.josm.plugins.fixAddresses.AddressEditContainer;
-import org.openstreetmap.josm.plugins.fixAddresses.AddressNode;
+import org.openstreetmap.josm.plugins.fixAddresses.OSMAddress;
 import org.openstreetmap.josm.plugins.fixAddresses.IOSMEntity;
 
@@ -46,5 +46,5 @@
 		if (ev == null || ev.getSelectedUnresolvedAddresses() == null) return;
 		// fix SELECTED items only
-		List<AddressNode> addrToFix = ev.getSelectedUnresolvedAddresses();
+		List<OSMAddress> addrToFix = ev.getSelectedUnresolvedAddresses();
 		applyGuesses(addrToFix);
 	}
@@ -55,8 +55,8 @@
 	}
 
-	private void applyGuesses(List<AddressNode> addrToFix) {
+	private void applyGuesses(List<OSMAddress> addrToFix) {
 		beginTransaction(tr("Applied guessed values"));
-		List<AddressNode> addrToFixShadow = new ArrayList<AddressNode>(addrToFix);
-		for (AddressNode aNode : addrToFixShadow) {
+		List<OSMAddress> addrToFixShadow = new ArrayList<OSMAddress>(addrToFix);
+		for (OSMAddress aNode : addrToFixShadow) {
 			beginObjectTransaction(aNode);
 			aNode.applyAllGuesses();
@@ -75,5 +75,5 @@
 		if (container == null || container.getUnresolvedAddresses() == null) return;
 		
-		List<AddressNode> addrToFix = container.getUnresolvedAddresses();
+		List<OSMAddress> addrToFix = container.getUnresolvedAddresses();
 		applyGuesses(addrToFix);		
 	}
@@ -88,8 +88,8 @@
 				int row = table.rowAtPoint(p);
 				IOSMEntity node = model.getEntityOfRow(row);
-				if (node instanceof AddressNode) {
+				if (node instanceof OSMAddress) {
 					beginTransaction(tr("Applied guessed values for ") + node.getOsmObject());
 					beginObjectTransaction(node);
-					AddressNode aNode = (AddressNode) node;
+					OSMAddress aNode = (OSMAddress) node;
 					if (aNode.hasGuessedStreetName()) {
 						aNode.applyAllGuesses();
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AssignAddressToStreetAction.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AssignAddressToStreetAction.java	(revision 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AssignAddressToStreetAction.java	(revision 24091)
@@ -17,5 +17,5 @@
 
 import org.openstreetmap.josm.plugins.fixAddresses.AddressEditContainer;
-import org.openstreetmap.josm.plugins.fixAddresses.AddressNode;
+import org.openstreetmap.josm.plugins.fixAddresses.OSMAddress;
 import org.openstreetmap.josm.plugins.fixAddresses.StreetNode;
 
@@ -46,5 +46,5 @@
 		if (streetNode != null && ev.getSelectedUnresolvedAddresses() != null) {
 			beginTransaction(tr("Set street name") + " '" + streetNode.getName() + "'");
-			for (AddressNode addrNode : ev.getSelectedUnresolvedAddresses()) {
+			for (OSMAddress addrNode : ev.getSelectedUnresolvedAddresses()) {
 				beginObjectTransaction(addrNode);
 				addrNode.assignStreet(streetNode);
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/GuessAddressDataAction.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/GuessAddressDataAction.java	(revision 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/GuessAddressDataAction.java	(revision 24091)
@@ -21,5 +21,5 @@
 import org.openstreetmap.josm.plugins.fixAddresses.AddressEditContainer;
 import org.openstreetmap.josm.plugins.fixAddresses.AddressFinderThread;
-import org.openstreetmap.josm.plugins.fixAddresses.AddressNode;
+import org.openstreetmap.josm.plugins.fixAddresses.OSMAddress;
 import org.openstreetmap.josm.plugins.fixAddresses.IProgressMonitorFinishedListener;
 
@@ -80,5 +80,5 @@
 	 * @param addrNodes
 	 */
-	private void internalGuessAddresses(List<AddressNode> nodes) {
+	private void internalGuessAddresses(List<OSMAddress> nodes) {
 		AddressFinderThread aft = new AddressFinderThread(nodes, tr("Guess street names"));
 		aft.addFinishListener(this);
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/IncompleteAddressesTableModel.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/IncompleteAddressesTableModel.java	(revision 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/IncompleteAddressesTableModel.java	(revision 24091)
@@ -17,5 +17,5 @@
 
 import org.openstreetmap.josm.plugins.fixAddresses.AddressEditContainer;
-import org.openstreetmap.josm.plugins.fixAddresses.AddressNode;
+import org.openstreetmap.josm.plugins.fixAddresses.OSMAddress;
 import org.openstreetmap.josm.plugins.fixAddresses.IOSMEntity;
 
@@ -60,5 +60,5 @@
 	@Override
 	public Object getValueAt(int row, int column) {		
-		AddressNode aNode = (AddressNode) getEntityOfRow(row);
+		OSMAddress aNode = (OSMAddress) getEntityOfRow(row);
 		
 		if (aNode == null) {
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/RemoveAddressTagsAction.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/RemoveAddressTagsAction.java	(revision 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/RemoveAddressTagsAction.java	(revision 24091)
@@ -17,5 +17,5 @@
 
 import org.openstreetmap.josm.plugins.fixAddresses.AddressEditContainer;
-import org.openstreetmap.josm.plugins.fixAddresses.AddressNode;
+import org.openstreetmap.josm.plugins.fixAddresses.OSMAddress;
 
 @SuppressWarnings("serial")
@@ -29,5 +29,5 @@
 	public void addressEditActionPerformed(AddressEditSelectionEvent ev) {
 		beginTransaction(tr("Remove address tags"));
-		for (AddressNode aNode : ev.getSelectedUnresolvedAddresses()) {
+		for (OSMAddress aNode : ev.getSelectedUnresolvedAddresses()) {
 			beginObjectTransaction(aNode);
 			aNode.removeAllAddressTags();
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/SelectAddressesInMapAction.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/SelectAddressesInMapAction.java	(revision 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/SelectAddressesInMapAction.java	(revision 24091)
@@ -36,5 +36,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.plugins.fixAddresses.AddressEditContainer;
-import org.openstreetmap.josm.plugins.fixAddresses.AddressNode;
+import org.openstreetmap.josm.plugins.fixAddresses.OSMAddress;
 
 /**
@@ -87,10 +87,10 @@
 	 * @param addrToSel
 	 */
-	private void internalSelectAddresses(List<AddressNode> addrToSel) {
+	private void internalSelectAddresses(List<OSMAddress> addrToSel) {
 		if (addrToSel == null) return;
 		
 		List<OsmPrimitive> sel = new ArrayList<OsmPrimitive>();
 		
-		for (AddressNode aNode : addrToSel) {
+		for (OSMAddress aNode : addrToSel) {
 			sel.add(aNode.getOsmObject());
 		}
Index: applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/UnresolvedAddressesTableModel.java
===================================================================
--- applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/UnresolvedAddressesTableModel.java	(revision 24090)
+++ applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/UnresolvedAddressesTableModel.java	(revision 24091)
@@ -32,5 +32,5 @@
 
 import org.openstreetmap.josm.plugins.fixAddresses.AddressEditContainer;
-import org.openstreetmap.josm.plugins.fixAddresses.AddressNode;
+import org.openstreetmap.josm.plugins.fixAddresses.OSMAddress;
 import org.openstreetmap.josm.plugins.fixAddresses.IOSMEntity;
 import org.openstreetmap.josm.plugins.fixAddresses.StringUtils;
@@ -96,5 +96,5 @@
 	@Override
 	public Object getValueAt(int row, int column) {
-		AddressNode aNode = (AddressNode) getEntityOfRow(row);
+		OSMAddress aNode = (OSMAddress) getEntityOfRow(row);
 		
 		if (aNode == null) {
