Index: /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMaxaxleload.java
===================================================================
--- /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMaxaxleload.java	(revision 20242)
+++ /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMaxaxleload.java	(revision 20243)
@@ -2,4 +2,6 @@
 
 import static org.openstreetmap.josm.plugins.graphview.core.property.VehiclePropertyTypes.AXLELOAD;
+
+import org.openstreetmap.josm.plugins.graphview.core.util.ValueStringParser;
 
 public class RoadMaxaxleload extends RoadValueLimit {
@@ -7,3 +9,7 @@
 		super("maxaxleload", AXLELOAD, LimitType.MAXIMUM);
 	}
+	@Override
+	protected Float parse(String valueString) {
+		return ValueStringParser.parseWeight(valueString);
+	}
 }
Index: /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMaxheight.java
===================================================================
--- /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMaxheight.java	(revision 20242)
+++ /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMaxheight.java	(revision 20243)
@@ -2,4 +2,6 @@
 
 import static org.openstreetmap.josm.plugins.graphview.core.property.VehiclePropertyTypes.HEIGHT;
+
+import org.openstreetmap.josm.plugins.graphview.core.util.ValueStringParser;
 
 public class RoadMaxheight extends RoadValueLimit {
@@ -7,3 +9,7 @@
 		super("maxheight", HEIGHT, LimitType.MAXIMUM);
 	}
+	@Override
+	protected Float parse(String valueString) {
+		return ValueStringParser.parseMeasure(valueString);
+	}
 }
Index: /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMaxlength.java
===================================================================
--- /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMaxlength.java	(revision 20242)
+++ /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMaxlength.java	(revision 20243)
@@ -2,4 +2,6 @@
 
 import static org.openstreetmap.josm.plugins.graphview.core.property.VehiclePropertyTypes.LENGTH;
+
+import org.openstreetmap.josm.plugins.graphview.core.util.ValueStringParser;
 
 public class RoadMaxlength extends RoadValueLimit {
@@ -7,3 +9,7 @@
 		super("maxlength", LENGTH, LimitType.MAXIMUM);
 	}
+	@Override
+	protected Float parse(String valueString) {
+		return ValueStringParser.parseMeasure(valueString);
+	}
 }
Index: /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMaxweight.java
===================================================================
--- /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMaxweight.java	(revision 20242)
+++ /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMaxweight.java	(revision 20243)
@@ -2,4 +2,6 @@
 
 import static org.openstreetmap.josm.plugins.graphview.core.property.VehiclePropertyTypes.WEIGHT;
+
+import org.openstreetmap.josm.plugins.graphview.core.util.ValueStringParser;
 
 public class RoadMaxweight extends RoadValueLimit {
@@ -7,3 +9,7 @@
 		super("maxweight", WEIGHT, LimitType.MAXIMUM);
 	}
+	@Override
+	protected Float parse(String valueString) {
+		return ValueStringParser.parseWeight(valueString);
+	}
 }
Index: /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMaxwidth.java
===================================================================
--- /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMaxwidth.java	(revision 20242)
+++ /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMaxwidth.java	(revision 20243)
@@ -2,4 +2,6 @@
 
 import static org.openstreetmap.josm.plugins.graphview.core.property.VehiclePropertyTypes.WIDTH;
+
+import org.openstreetmap.josm.plugins.graphview.core.util.ValueStringParser;
 
 public class RoadMaxwidth extends RoadValueLimit {
@@ -7,3 +9,7 @@
 		super("maxwidth", WIDTH, LimitType.MAXIMUM);
 	}
+	@Override
+	protected Float parse(String valueString) {
+		return ValueStringParser.parseMeasure(valueString);
+	}
 }
Index: /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMinspeed.java
===================================================================
--- /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMinspeed.java	(revision 20242)
+++ /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadMinspeed.java	(revision 20243)
@@ -2,4 +2,6 @@
 
 import static org.openstreetmap.josm.plugins.graphview.core.property.VehiclePropertyTypes.SPEED;
+
+import org.openstreetmap.josm.plugins.graphview.core.util.ValueStringParser;
 
 public class RoadMinspeed extends RoadValueLimit {
@@ -7,3 +9,7 @@
 		super("minspeed", SPEED, LimitType.MINIMUM);
 	}
+	@Override
+	protected Float parse(String valueString) {
+		return ValueStringParser.parseSpeed(valueString);
+	}
 }
Index: /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadValueLimit.java
===================================================================
--- /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadValueLimit.java	(revision 20242)
+++ /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadValueLimit.java	(revision 20243)
@@ -34,4 +34,6 @@
 	}
 
+	protected abstract Float parse(String valueString);
+
 	public <N, W, R, M> Float evaluateW(W way, boolean forward,
 			AccessParameters accessParameters, DataSource<N, W, R, M> dataSource) {
@@ -49,5 +51,5 @@
 		String valueString = tags.getValue(keyName);
 		if (valueString != null) {
-			Float value = ValueStringParser.parseOsmDecimal(valueString, false);
+			Float value = parse(valueString);
 			return value;
 		} else {
Index: /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadWidth.java
===================================================================
--- /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadWidth.java	(revision 20242)
+++ /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/RoadWidth.java	(revision 20243)
@@ -2,4 +2,6 @@
 
 import static org.openstreetmap.josm.plugins.graphview.core.property.VehiclePropertyTypes.WIDTH;
+
+import org.openstreetmap.josm.plugins.graphview.core.util.ValueStringParser;
 
 public class RoadWidth extends RoadValueLimit {
@@ -7,3 +9,7 @@
 		super("width", WIDTH, LimitType.MAXIMUM);
 	}
+	@Override
+	protected Float parse(String valueString) {
+		return ValueStringParser.parseMeasure(valueString);
+	}
 }
Index: /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/util/ValueStringParser.java
===================================================================
--- /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/util/ValueStringParser.java	(revision 20242)
+++ /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/util/ValueStringParser.java	(revision 20243)
@@ -71,7 +71,7 @@
 		/* try numeric speed (implied km/h) */
 
-		Float maxspeed = parseOsmDecimal(value, false);
-		if (maxspeed != null) {
-			return maxspeed;
+		Float speed = parseOsmDecimal(value, false);
+		if (speed != null) {
+			return speed;
 		}
 
@@ -102,4 +102,102 @@
 	}
 
+	private static final Pattern M_PATTERN = Pattern.compile("^([\\d\\.]+)\\s*m$");
+	private static final Pattern KM_PATTERN = Pattern.compile("^([\\d\\.]+)\\s*km$");
+	private static final Pattern MI_PATTERN = Pattern.compile("^([\\d\\.]+)\\s*mi$");
+	private static final Pattern FEET_INCHES_PATTERN = Pattern.compile("^([\\d]+)'\\s*([\\d]+)\"");
+
+	private static final double M_PER_MI = 1609.344;
+	private static final double M_PER_INCH = 0.0254f;
+
+	/**
+	 * parses a measure value given e.g. for the "width" or "length" key.
+	 *
+	 * @return  measure in m; null if value had syntax errors
+	 */
+	public static final Float parseMeasure(String value) {
+
+		/* try numeric measure (implied m) */
+
+		Float measure = parseOsmDecimal(value, false);
+		if (measure != null) {
+			return measure;
+		}
+
+		/* try m measure */
+
+		Matcher mMatcher = M_PATTERN.matcher(value);
+		if (mMatcher.matches()) {
+			String mString = mMatcher.group(1);
+			return parseOsmDecimal(mString, false);
+		}
+
+		/* try km measure */
+
+		Matcher kmMatcher = KM_PATTERN.matcher(value);
+		if (kmMatcher.matches()) {
+			String kmString = kmMatcher.group(1);
+			float km = parseOsmDecimal(kmString, false);
+			return 1000 * km;
+		}
+
+		/* try mi measure */
+
+		Matcher miMatcher = MI_PATTERN.matcher(value);
+		if (miMatcher.matches()) {
+			String miString = miMatcher.group(1);
+			float mi = parseOsmDecimal(miString, false);
+			return (float)(M_PER_MI * mi);
+		}
+
+		/* try feet/inches measure */
+
+		Matcher feetInchesMatcher = FEET_INCHES_PATTERN.matcher(value);
+		if (feetInchesMatcher.matches()) {
+			String feetString = feetInchesMatcher.group(1);
+			String inchesString = feetInchesMatcher.group(2);
+			try {
+				int feet = Integer.parseInt(feetString);
+				int inches = Integer.parseInt(inchesString);
+				if (feet >= 0 && inches >= 0 && inches < 12) {
+					return (float)(M_PER_INCH * (12 * feet + inches));
+				}
+			} catch (NumberFormatException nfe) {}
+		}
+
+		/* all possibilities failed */
+
+		return null;
+	}
+
+	private static final Pattern T_PATTERN = Pattern.compile("^([\\d\\.]+)\\s*t$");
+
+	/**
+	 * parses a weight value given e.g. for the "maxweight" or "maxaxleload" key.
+	 *
+	 * @return  weight in t; null if value had syntax errors
+	 */
+	public static Float parseWeight(String value) {
+
+		/* try numeric weight (implied t) */
+
+		Float weight = parseOsmDecimal(value, false);
+		if (weight != null) {
+			return weight;
+		}
+
+		/* try t weight */
+
+		Matcher tMatcher = T_PATTERN.matcher(value);
+		if (tMatcher.matches()) {
+			String tString = tMatcher.group(1);
+			return parseOsmDecimal(tString, false);
+		}
+
+		/* all possibilities failed */
+
+		return null;
+
+	}
+
 	private static final Pattern INCLINE_PATTERN = Pattern.compile("^(\\-?\\d+(?:\\.\\d+)?)\\s*%$");
 
@@ -119,3 +217,4 @@
 		return null;
 	}
+
 }
Index: /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/plugin/preferences/VehiclePropertyStringParser.java
===================================================================
--- /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/plugin/preferences/VehiclePropertyStringParser.java	(revision 20242)
+++ /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/plugin/preferences/VehiclePropertyStringParser.java	(revision 20243)
@@ -15,8 +15,8 @@
  */
 public final class VehiclePropertyStringParser {
-	
+
 	/** prevents instantiation */
 	private VehiclePropertyStringParser() { }
-	
+
 	/**
 	 * Exception class for syntax errors in property value Strings,
@@ -29,9 +29,10 @@
 		}
 	}
-	
+
 	public static final String ERROR_WEIGHT =
-		"Weights must be given as positive decimal numbers without unit.";
+		"Weights must be given as positive decimal numbers with unit \"t\" or without unit.";
 	public static final String ERROR_LENGTH =
-		"Lengths must be given as positive decimal numbers without unit.";
+		"Lengths must be given as positive decimal numbers with unit \"m\", \"km\", \"mi\"" +
+		" or without unit.\nAlternatively, the format FEET' INCHES\" can be used.";
 	public static final String ERROR_SPEED =
 		"Speeds should be given as numbers without unit or "
@@ -43,8 +44,8 @@
 	public static final String ERROR_SURFACE =
 		"Surface values must not contain any of the following characters: ',' '{' '}' '=' '|";
-	
+
 	private static final List<Character> FORBIDDEN_SURFACE_CHARS =
 		Arrays.asList(',', '{', '}', '=', '|');
-	
+
 	/**
 	 * returns the value represented by the propertyValueString
@@ -62,11 +63,11 @@
 			VehiclePropertyType<V> propertyType, String propertyValueString)
 	throws PropertyValueSyntaxException {
-		
+
 		assert propertyType != null && propertyValueString != null;
-		
+
 		if (propertyType == VehiclePropertyTypes.AXLELOAD
 				|| propertyType == VehiclePropertyTypes.WEIGHT) {
-			
-			Float value = ValueStringParser.parseOsmDecimal(propertyValueString, false);
+
+			Float value = ValueStringParser.parseWeight(propertyValueString);
 			if (value != null && propertyType.isValidValue(value)) {
 				@SuppressWarnings("unchecked") //V must be float because of propertyType condition
@@ -76,10 +77,10 @@
 				throw new PropertyValueSyntaxException(ERROR_WEIGHT);
 			}
-			
+
 		} else if (propertyType == VehiclePropertyTypes.HEIGHT
 				|| propertyType == VehiclePropertyTypes.LENGTH
 				|| propertyType == VehiclePropertyTypes.WIDTH) {
-			
-			Float value = ValueStringParser.parseOsmDecimal(propertyValueString, false);
+
+			Float value = ValueStringParser.parseMeasure(propertyValueString);
 			if (value != null && propertyType.isValidValue(value)) {
 				@SuppressWarnings("unchecked") //V must be float because of propertyType condition
@@ -89,7 +90,7 @@
 				throw new PropertyValueSyntaxException(ERROR_LENGTH);
 			}
-			
+
 		} else if (propertyType == VehiclePropertyTypes.SPEED) {
-			
+
 			Float value = ValueStringParser.parseSpeed(propertyValueString);
 			if (value != null && propertyType.isValidValue(value)) {
@@ -100,8 +101,8 @@
 				throw new PropertyValueSyntaxException(ERROR_SPEED);
 			}
-			
+
 		} else if (propertyType == VehiclePropertyTypes.MAX_INCLINE_DOWN
 				|| propertyType == VehiclePropertyTypes.MAX_INCLINE_UP) {
-			
+
 			Float value = ValueStringParser.parseIncline(propertyValueString);
 			if (value != null && propertyType.isValidValue(value)) {
@@ -112,7 +113,7 @@
 				throw new PropertyValueSyntaxException(ERROR_INCLINE);
 			}
-			
+
 		} else if (propertyType == VehiclePropertyTypes.MAX_TRACKTYPE) {
-			
+
 			try {
 				int value = Integer.parseInt(propertyValueString);
@@ -123,9 +124,9 @@
 				}
 			} catch (NumberFormatException e) {}
-			
+
 			throw new PropertyValueSyntaxException(ERROR_TRACKTYPE);
-			
+
 		} else if (propertyType == VehiclePropertyTypes.SURFACE_BLACKLIST) {
-			
+
 			String[] surfaces = propertyValueString.split(";\\s*");
 			Collection<String> surfaceBlacklist = new ArrayList<String>(surfaces.length);
@@ -138,14 +139,14 @@
 				surfaceBlacklist.add(surface);
 			}
-			
+
 			@SuppressWarnings("unchecked") //V must be Collection because of propertyType condition
 			V result = (V)surfaceBlacklist;
 			return result;
-			
+
 		} else {
 			throw new InvalidParameterException("unknown property type: " + propertyType);
 		}
-		
+
 	}
-	
+
 }
