Index: /applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/GuessAddressRunnable.java
===================================================================
--- /applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/GuessAddressRunnable.java	(revision 24118)
+++ /applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/GuessAddressRunnable.java	(revision 24119)
@@ -207,5 +207,5 @@
 
 				// visit osm data
-				for (OsmPrimitive osmPrimitive : Main.main.getCurrentDataSet().getWays()) {
+				for (OsmPrimitive osmPrimitive : Main.main.getCurrentDataSet().allPrimitives()) {
 					if (cancelled) {
 						break;
@@ -214,10 +214,8 @@
 					// guess values 
 					for (int i = 0; i < guessers.length; i++) {
-						if (!guessers[i].needsGuess()) continue;
-						
 						osmPrimitive.visit(guessers[i]);
 						
 						if (guessers[i].currentValue == null && i == 0) {
-							System.err.println("Guess #" + i + " failed for " + aNode);
+							//System.err.println("Guess #" + i + " failed for " + aNode);
 						}
 					}
@@ -236,5 +234,5 @@
 
 		public GuessStreetValueHandler(String tag, OSMAddress aNode) {
-			super(tag, aNode);
+			super(tag, aNode, 200.0);
 		}
 
@@ -255,8 +253,12 @@
 				OSMAddress aNode = getAddressNode();
 				double dist = OsmUtils.getMinimumDistanceToWay(aNode.getCoor(), w);
+				
 				if (dist < minDist && dist < getMaxDistance()) {
+					//System.out.println(String.format("New guess %s: %4.2f m", TagUtils.getNameValue(w), dist));
 					minDist = dist;
 					currentValue = TagUtils.getNameValue(w);				
 					aNode.setGuessedValue(getTag(), currentValue);
+				} else {
+					//System.out.println(String.format("Skipped %s: %4.2f m", TagUtils.getNameValue(w), dist));
 				}
 			}
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 24118)
+++ /applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/OsmUtils.java	(revision 24119)
@@ -138,4 +138,5 @@
 					applyDerivedValue(address, w, TagUtils.ADDR_COUNTRY_TAG);
 					applyDerivedValue(address, w, TagUtils.ADDR_STREET_TAG);
+					applyDerivedValue(address, w, TagUtils.ADDR_STATE_TAG);
 					return true;
 				}
Index: /applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/TagUtils.java
===================================================================
--- /applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/TagUtils.java	(revision 24118)
+++ /applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/TagUtils.java	(revision 24119)
@@ -1907,10 +1907,9 @@
 		String hwType = getHighwayValue(w);
 				
-		return 	HIGHWAY_RESIDENTIAL_VALUE.equals(hwType) ||
-				HIGHWAY_SECONDARY_VALUE.equals(hwType) ||
-				HIGHWAY_TERTIARY_VALUE.equals(hwType) ||
-				HIGHWAY_SERVICE_VALUE.equals(hwType) ||
-				HIGHWAY_LIVING_STREET_VALUE.equals(hwType) ||
-				HIGHWAY_UNCLASSIFIED_VALUE.equals(hwType);
+		return 	!(TagUtils.HIGHWAY_MOTORWAY_LINK_VALUE.equals(hwType) ||
+				TagUtils.HIGHWAY_MOTORWAY_VALUE.equals(hwType) ||
+				TagUtils.HIGHWAY_FOOTWAY_VALUE.equals(hwType) ||
+				TagUtils.HIGHWAY_TRACK_VALUE.equals(hwType) 
+				);
 	}
 	
