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 24219)
+++ /applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/OSMAddress.java	(revision 24220)
@@ -28,5 +28,11 @@
 	public static final String INTERPOLATION_TAG = "x..y";
 	
-	private boolean isPartOfInterpolation;
+	
+	/** True, if address is part of an address interpolation. */ 
+	private boolean isPartOfInterpolation;	
+	/**
+	 * True, if address has derived values from an associated street relation. 
+	 */
+	private boolean isPartOfAssocStreetRel;
 	
 	/** The dictionary containing guessed values. */
@@ -48,10 +54,6 @@
 		super.setOsmObject(osmObject);
 		
-		isPartOfInterpolation = OsmUtils.getValuesFromAddressInterpolation(this);
-		
-		String streetNameViaRel = OsmUtils.getAssociatedStreet(this.osmObject);
-		if (!StringUtils.isNullOrEmpty(streetNameViaRel)) {
-			setDerivedValue(TagUtils.ADDR_STREET_TAG, streetNameViaRel);
-		}
+		isPartOfInterpolation = OsmUtils.getValuesFromAddressInterpolation(this);		
+		isPartOfAssocStreetRel = OsmUtils.getValuesFromRelation(this);
 	}
 	
@@ -116,5 +118,5 @@
 	 */
 	public boolean hasStreetName() {
-		return TagUtils.hasAddrStreetTag(osmObject) || hasDerivedValue(TagUtils.ADDR_STREET_TAG);
+		return hasTag(TagUtils.ADDR_STREET_TAG);
 	}
 	
@@ -282,4 +284,13 @@
 	protected boolean isPartOfInterpolation() {
 		return isPartOfInterpolation;
+	}
+	
+	/**
+	 * Checks if this address is part of an 'associated street' relation.
+	 *
+	 * @return true, if is part of interpolation
+	 */
+	protected boolean isPartOfRelation() {
+		return isPartOfAssocStreetRel;
 	}
 
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 24219)
+++ /applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/OsmUtils.java	(revision 24220)
@@ -100,11 +100,14 @@
 	 * Gets the associated street name via relation of the address node, if present.
 	 *
-	 * @param addrNode the OSM node containing the address.
-	 * @return the associated street or null, if no associated street has been found.
+	 * @param address the address
+	 * @return true, if an associated street has been found.
 	 */
-	public static String getAssociatedStreet(OsmPrimitive addrNode) {
-		if (addrNode == null) {
-			return null;
+	public static boolean getValuesFromRelation(OSMAddress address) {
+		if (address == null) {
+			return false;
 		}
+		
+		boolean hasValuesFromRel = false; /* true, if we applied some address props from the relation */
+		OsmPrimitive addrNode = address.getOsmObject();
 		
 		for (OsmPrimitive osm : addrNode.getReferrers()) {
@@ -118,11 +121,30 @@
 						OsmPrimitive street = rm.getMember();
 						if (TagUtils.hasHighwayTag(street)) {
-							return TagUtils.getNameValue(street);
-						} // TODO: Issue a warning here
+							String streetName = TagUtils.getNameValue(street);
+							if (!StringUtils.isNullOrEmpty(streetName)) {
+								address.setDerivedValue(TagUtils.ADDR_STREET_TAG, streetName);
+								hasValuesFromRel = true;
+								break;
+							}
+						} // TODO: Issue a warning here						
 					}
+				}
+				
+				// Check for other address properties
+				if (TagUtils.hasAddrCityTag(r)) { // city
+					address.setDerivedValue(TagUtils.ADDR_CITY_TAG, TagUtils.getAddrCityValue(r));
+					hasValuesFromRel = true;
+				}
+				if (TagUtils.hasAddrCountryTag(r)) { // country
+					address.setDerivedValue(TagUtils.ADDR_COUNTRY_TAG, TagUtils.getAddrCountryValue(r));
+					hasValuesFromRel = true;
+				}
+				if (TagUtils.hasAddrPostcodeTag(r)) { // postcode
+					address.setDerivedValue(TagUtils.ADDR_POSTCODE_TAG, TagUtils.getAddrPostcodeValue(r));
+					hasValuesFromRel = true;
 				}
 			}
 		}
-		return null;
+		return hasValuesFromRel;
 	}
 	
