Index: applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/UnitMode.java
===================================================================
--- applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/UnitMode.java	(revision 23769)
+++ applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/UnitMode.java	(revision 23769)
@@ -0,0 +1,7 @@
+package org.openstreetmap.josm.plugins.elevation;
+
+public enum UnitMode {
+	NotSelected,
+	Metric,
+	Imperial
+}
Index: applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/WayPointHelper.java
===================================================================
--- applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/WayPointHelper.java	(revision 23764)
+++ applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/WayPointHelper.java	(revision 23769)
@@ -19,4 +19,5 @@
 import java.util.GregorianCalendar;
 import java.util.List;
+import java.util.Locale;
 
 import org.openstreetmap.josm.data.gpx.WayPoint;
@@ -27,11 +28,30 @@
  */
 public class WayPointHelper {
+	public static double METER_TO_FEET = 3.280948;
+	
+	/* Countries which use the imperial system instead of the metric system. */
+	private static String IMPERIAL_SYSTEM_COUNTRIES[] = {
+		"en_US", 	/* USA */
+		"en_CA",	/* Canada */
+		"en_GB",	/* Great Britain */
+		"en_AU",	/* Australia */
+		"en_NZ",	/* New Zealand */
+//		"de_DE",	/* for testing only */
+		"en_ZA"	/* South Africa */
+	};
+	
 	/**
 	 * The name of the elevation height of a way point.
 	 */
 	public static final String HEIGHT_ATTRIBUTE = "ele";
-
+	
+	private static UnitMode unitMode = UnitMode.NotSelected;
+		
 	private static GeoidCorrectionKind geoidKind = GeoidCorrectionKind.None;
 
+	/**
+	 * Gets the current mode of GEOID correction.
+	 * @return
+	 */
 	public static GeoidCorrectionKind getGeoidKind() {
 		return geoidKind;
@@ -41,7 +61,51 @@
 		WayPointHelper.geoidKind = geoidKind;
 	}
-
-	/**
-	 * Gets the elevation (Z coordinate) of a JOSM way point.
+	
+	/**
+	 * Gets the current unit mode (metric or imperial).
+	 * @return
+	 */
+	public static UnitMode getUnitMode() {
+		//TODO: Use this until /JOSM/src/org/openstreetmap/josm/gui/NavigatableComponent.java 
+		// has a an appropriate method 
+		
+		// unit mode already determined?
+		if (unitMode != UnitMode.NotSelected) {
+			return unitMode;
+		}
+		
+		// Set default
+		unitMode = UnitMode.Metric;
+		
+		// Check if user could prefer imperial system 
+		Locale l = Locale.getDefault();		
+		for (int i = 0; i < IMPERIAL_SYSTEM_COUNTRIES.length; i++) {
+			String ctry = l.toString();
+			if (IMPERIAL_SYSTEM_COUNTRIES[i].equals(ctry)) {
+				unitMode = UnitMode.Imperial;
+			}
+		}
+		
+		return unitMode;
+	}
+	
+	/**
+	 * Gets the unit string for elevation ("m" or "ft").
+	 * @return
+	 */
+	public static String getUnit() {		
+		switch (getUnitMode()) {
+		case Metric:
+			return "m";
+		case Imperial:
+			return "ft";
+		default:
+			throw new RuntimeException("Invalid or unsupported unit mode: " + unitMode);
+		}
+	}
+	
+	/**
+	 * Gets the elevation (Z coordinate) of a GPX way point in meter or feet (for
+	 * US, UK, ZA, AU, NZ and CA). 
 	 * 
 	 * @param wpt
@@ -51,4 +115,32 @@
 	 */
 	public static double getElevation(WayPoint wpt) {
+		double ele = getInternalElevation(wpt);
+
+		if (getUnitMode() == UnitMode.Imperial) {
+				// translate to feet
+				return ele * METER_TO_FEET;
+		}	
+		
+		return ele;
+	}
+	
+	/**
+	 * Gets the elevation string for a given elevation, e. g "300m" or "800ft".
+	 * @param elevation
+	 * @return
+	 */
+	public static String getElevationText(int elevation) {
+		return String.format("%d %s", elevation, getUnit());
+	}
+
+	/**
+	 * Gets the elevation (Z coordinate) of a GPX way point.
+	 * 
+	 * @param wpt
+	 *            The way point instance.
+	 * @return The x coordinate or 0, if the given way point is null or contains
+	 *         not height attribute.
+	 */
+	private static double getInternalElevation(WayPoint wpt) {
 		if (wpt != null) {
 			if (!wpt.attr.containsKey(HEIGHT_ATTRIBUTE)) {
Index: applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/DefaultElevationProfileRenderer.java
===================================================================
--- applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/DefaultElevationProfileRenderer.java	(revision 23764)
+++ applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/DefaultElevationProfileRenderer.java	(revision 23769)
@@ -194,5 +194,5 @@
 
 		if (kind == ElevationWayPointKind.ElevationLevelGain) {
-			drawLabelWithTriangle(String.format("%dm", ele), pnt.x, pnt.y
+			drawLabelWithTriangle(WayPointHelper.getElevationText(ele), pnt.x, pnt.y
 					+ g.getFontMetrics().getHeight(), g, c, 8, 
 					getColorForWaypoint(profile, wpt, ElevationWayPointKind.ElevationGain),
@@ -201,6 +201,6 @@
 		
 		if (kind == ElevationWayPointKind.ElevationLevelLoss) {
-			drawLabelWithTriangle(String.format("%dm", ele), pnt.x, pnt.y
-					+ g.getFontMetrics().getHeight(), g, c, 8, 
+			drawLabelWithTriangle(WayPointHelper.getElevationText(ele), 
+					pnt.x, pnt.y+ g.getFontMetrics().getHeight(), g, c, 8, 
 					getColorForWaypoint(profile, wpt, ElevationWayPointKind.ElevationLoss),
 					TriangleDir.Down);
@@ -214,5 +214,5 @@
 			drawLabel(String.format("%02d:%02d", hour, min), pnt.x, pnt.y
 					- g.getFontMetrics().getHeight() - 5, g);
-			drawLabel(String.format("%dm", eleH), pnt.x, pnt.y
+			drawLabel(WayPointHelper.getElevationText(eleH), pnt.x, pnt.y
 					+ g.getFontMetrics().getHeight() + 5, g);
 		}
@@ -262,5 +262,5 @@
 				DefaultElevationProfileRenderer.TRIANGLE_BASESIZE);
 
-		drawLabel(String.format("%dm", eleH), pnt.x, pnt.y
+		drawLabel(WayPointHelper.getElevationText(eleH), pnt.x, pnt.y
 				+ g.getFontMetrics().getHeight(), g, c);
 	}
Index: applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileDialog.java
===================================================================
--- applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileDialog.java	(revision 23764)
+++ applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileDialog.java	(revision 23769)
@@ -292,11 +292,11 @@
 			// Show elevation data
 			minHeightLabel.setText(
-					NavigatableComponent.getSystemOfMeasurement().getDistText(profile.getMinHeight()));
+					WayPointHelper.getElevationText(profile.getMinHeight()));
 			maxHeightLabel.setText(
-					NavigatableComponent.getSystemOfMeasurement().getDistText(profile.getMaxHeight()));
+					WayPointHelper.getElevationText(profile.getMaxHeight()));
 			avrgHeightLabel.setText(
-					NavigatableComponent.getSystemOfMeasurement().getDistText(profile.getAverageHeight()));
+					WayPointHelper.getElevationText(profile.getAverageHeight()));
 			elevationGainLabel.setText(
-					NavigatableComponent.getSystemOfMeasurement().getDistText(profile.getGain()));
+					WayPointHelper.getElevationText(profile.getGain()));
 			}
 			
Index: applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfilePanel.java
===================================================================
--- applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfilePanel.java	(revision 23764)
+++ applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfilePanel.java	(revision 23769)
@@ -231,8 +231,8 @@
 	 * @param g The graphics context.
 	 * @return The resulting rectangle of the drawn string.
-	 */
+	 
 	private void drawHCenteredString(String s, int x, int y, Graphics g) {
 		drawAlignedString(s, x, y, TextAlignment.Centered, g);
-	}
+	}*/
 
 	/**
@@ -269,5 +269,5 @@
 			// check bounds
 			if (yLine <= getPlotBottom() && yLine >= getPlotTop()) {
-				String txt = String.format("%dm", i);
+				String txt = WayPointHelper.getElevationText(i);
 				
 				Rectangle r = drawAlignedString(txt, getPlotHCenter(), yLine - 2,
