Index: applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/ElevationWayPointKind.java
===================================================================
--- applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/ElevationWayPointKind.java	(revision 23755)
+++ applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/ElevationWayPointKind.java	(revision 23756)
@@ -28,4 +28,5 @@
 	ElevationGain,		// Elevation gain
 	ElevationLoss,		// Elevation loss	
+	ElevationLevel,		// Elevation level (e. g. crossed 300m)
 	FullHour			// Full Hour	
 }
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 23755)
+++ applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/DefaultElevationProfileRenderer.java	(revision 23756)
@@ -87,4 +87,5 @@
 		switch (kind) {
 		case Plain:
+		case ElevationLevel:
 			if (z > profile.getAverageHeight()) {
 				return HIGH_COLOR;
@@ -111,5 +112,5 @@
 		}
 
-		return null;
+		throw new RuntimeException("Unknown way point kind: " + kind);
 	}
 
@@ -185,4 +186,9 @@
 		}
 		
+		if (kind == ElevationWayPointKind.ElevationLevel) {
+			int ele = ((int)Math.rint(WayPointHelper.getElevation(wpt) / 100.0)) * 100;						
+			drawLabel(String.format("%dm", ele), pnt.x, pnt.y + g.getFontMetrics().getHeight(), g, c);
+		}
+		
 		if (kind == ElevationWayPointKind.Highlighted) {
 			int eleH = (int) WayPointHelper.getElevation(wpt);
@@ -190,6 +196,6 @@
 			int min = WayPointHelper.getMinuteOfWayPoint(wpt);
 			drawSphere(g, Color.WHITE, c, pnt.x, pnt.y, BIG_WPT_RADIUS);
-			drawLabel(String.format("%02d:%02d", hour, min), pnt.x, pnt.y - g.getFontMetrics().getHeight(), g);
-			drawLabel(String.format("%dm", eleH), pnt.x, pnt.y + g.getFontMetrics().getHeight(), g);
+			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 + g.getFontMetrics().getHeight() + 5, g);
 		}
 	}
@@ -238,5 +244,5 @@
 				DefaultElevationProfileRenderer.TRIANGLE_BASESIZE);
 
-		drawLabel(String.format("%dm", eleH), pnt.x, pnt.y + g.getFontMetrics().getHeight(), g);
+		drawLabel(String.format("%dm", eleH), pnt.x, pnt.y + g.getFontMetrics().getHeight(), g, c);
 	}
 
@@ -383,4 +389,15 @@
 	 */
 	private void drawLabel(String s, int x, int y, Graphics g) {
+		drawLabel(s, x, y, g, Color.BLACK);
+	}
+	/**
+	 * Draws a label.
+	 * @param s The text to draw.
+	 * @param x The x coordinate of the label.
+	 * @param y The y coordinate of the label.
+	 * @param g The graphics context.
+	 * @param secondGradColor The second color of the gradient.
+	 */
+	private void drawLabel(String s, int x, int y, Graphics g, Color secondGradColor) {
 		Graphics2D g2d = (Graphics2D) g;
 
@@ -392,14 +409,14 @@
 		
 		GradientPaint gradient = new GradientPaint(x, y, Color.WHITE, x, y
-				+ height, Color.BLACK, false);
+				+ height, secondGradColor, false);
 		g2d.setPaint(gradient);		
 
-		Rectangle r = new Rectangle(x - (width / 2) - 5, y - (height / 2) + 1, width, height);
-		g2d.fillRect(r.x, r.y, r.width, r.height);
+		Rectangle r = new Rectangle(x - (width / 2), y - (height / 2), width, height);
+		g2d.fillRoundRect(r.x, r.y, r.width, r.height, ROUND_RECT_RADIUS, ROUND_RECT_RADIUS);
 		
 		g2d.setColor(Color.BLACK);
 		
-		g2d.drawRoundRect(r.x, r.y, r.width, r.height, ROUND_RECT_RADIUS, ROUND_RECT_RADIUS);
-		g2d.drawString(s, x - width / 2, y + (height / 2) - 2);
+		g2d.drawRoundRect(r.x, r.y, r.width, r.height, ROUND_RECT_RADIUS, ROUND_RECT_RADIUS);		
+		g2d.drawString(s, x - (width / 2) + 5, y + (height / 2) - 3);
 	}
 }
Index: applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileLayer.java
===================================================================
--- applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileLayer.java	(revision 23755)
+++ applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileLayer.java	(revision 23756)
@@ -161,10 +161,14 @@
 				int ele = (int) WayPointHelper.getElevation(wpt);
 
-				if (lastWpt != null) {					
+				if (lastWpt != null) {
+					/*
 					int h1 = WayPointHelper.getHourOfWayPoint(wpt);
 					int h2 = WayPointHelper.getHourOfWayPoint(lastWpt);
-					if (h1 != h2) { // hour changed?
+					*/
+					int ele1 = (int)(ele / 100.0);
+					int ele2 = (int)(lastEle / 100.0);
+					if (ele1 != ele2) { // hour changed?
 						renderer.renderWayPoint(g, profile, mv, wpt,
-								ElevationWayPointKind.FullHour);
+								ElevationWayPointKind.ElevationLevel);
 					} else { // check for elevation gain
 						if (ele > lastEle) {
