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 29948)
+++ /applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/DefaultElevationProfileRenderer.java	(revision 29949)
@@ -44,5 +44,5 @@
 		IElevationProfileRenderer {
 
-	private static final int ROUND_RECT_RADIUS = 8;
+	private static final int ROUND_RECT_RADIUS = 6;
 	/**
 	 * 
@@ -52,7 +52,7 @@
 	 * 
 	 */
-	private static final int BASIC_WPT_RADIUS = 3;
+	private static final int BASIC_WPT_RADIUS = 1;
 	private static final int REGULAR_WPT_RADIUS = BASIC_WPT_RADIUS * 4;
-	private static final int BIG_WPT_RADIUS = BASIC_WPT_RADIUS * 10;
+	private static final int BIG_WPT_RADIUS = BASIC_WPT_RADIUS * 8;
 
 	// predefined colors
@@ -192,9 +192,9 @@
 
 		Point pnt = mv.getPoint(wpt.getEastNorth());
-		int ele = ((int) Math.rint(ElevationHelper.getElevation(wpt) / 100.0)) * 100;
+		int rad = REGULAR_WPT_RADIUS;
+		int r2 = REGULAR_WPT_RADIUS / 2;
 		
-		int rad = REGULAR_WPT_RADIUS;
 		g.setColor(c);
-		drawSphere(g, Color.WHITE, c, pnt.x, pnt.y, rad);
+		g.fillOval(pnt.x - r2, pnt.y - r2, rad, rad);
 
 		/* Paint full hour label */
@@ -206,16 +206,10 @@
 
 		/* Paint label for elevation levels */
-		if (kind == ElevationWayPointKind.ElevationLevelGain) {
+		if (kind == ElevationWayPointKind.ElevationLevelGain || kind == ElevationWayPointKind.ElevationLevelLoss) {
+		    	int ele = ((int) Math.rint(ElevationHelper.getElevation(wpt) / 100.0)) * 100;
 			drawLabelWithTriangle(ElevationHelper.getElevationText(ele), pnt.x, pnt.y
 					+ g.getFontMetrics().getHeight(), g, c, 8, 
-					getColorForWaypoint(profile, wpt, ElevationWayPointKind.ElevationGainHigh),
+					getColorForWaypoint(profile, wpt, kind),
 					TriangleDir.Up);
-		}
-		
-		if (kind == ElevationWayPointKind.ElevationLevelLoss) {
-			drawLabelWithTriangle(ElevationHelper.getElevationText(ele), 
-					pnt.x, pnt.y+ g.getFontMetrics().getHeight(), g, c, 8, 
-					getColorForWaypoint(profile, wpt, ElevationWayPointKind.ElevationLossHigh),
-					TriangleDir.Down);
 		}
 
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 29948)
+++ /applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileLayer.java	(revision 29949)
@@ -17,4 +17,5 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.Font;
 import java.awt.Graphics2D;
 
@@ -26,4 +27,5 @@
 import org.openstreetmap.josm.data.gpx.WayPoint;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
+import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
@@ -34,4 +36,6 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 
+import sun.java2d.loops.FillRect;
+
 /**
  * Layer class to show additional information on the elevation map, e. g. show
@@ -159,42 +163,53 @@
 	WayPoint lastWpt = null;
 
+
 	renderer.beginRendering();
-	if (profile != null) {			
-	    // paint way points one by one
-	    for (WayPoint wpt : profile.getWayPoints()) {
-		
-
-		if (lastWpt != null) {
-		    // determine way point
-		    ElevationWayPointKind kind = classifyWayPoint(lastWpt, wpt);
-
-		    // render way point
-		    renderer.renderWayPoint(g, profile, mv, wpt, kind);
-		} // else first way point -> is paint later
-
-		// remember some things for next iteration
-		lastWpt = wpt;
-	    }
-
-	    // now we paint special way points in emphasized style 
-
-	    // paint selected way point, if available
-	    if (selWayPoint != null) {
-		renderer.renderWayPoint(g, profile, mv, selWayPoint,
-			ElevationWayPointKind.Highlighted);
-	    }
-
-	    // paint start/end
-	    renderer.renderWayPoint(g, profile, mv, profile.getStartWayPoint(),
-		    ElevationWayPointKind.StartPoint);
-	    renderer.renderWayPoint(g, profile, mv, profile.getEndWayPoint(),
-		    ElevationWayPointKind.EndPoint);
-	    // paint min/max
-	    renderer.renderWayPoint(g, profile, mv, profile.getMaxWayPoint(),
-		    ElevationWayPointKind.MaxElevation);
-	    renderer.renderWayPoint(g, profile, mv, profile.getMinWayPoint(),
-		    ElevationWayPointKind.MinElevation);
-	} 
-
+	if (profile != null) {
+	    // choose smaller font
+	    Font oldFont = g.getFont();
+	    Font lFont = g.getFont().deriveFont(9.0f);
+	    g.setFont(lFont);
+
+	    try {
+		int npts = 0;
+		// paint way points one by one
+		for (WayPoint wpt : profile.getWayPoints()) {
+		    if (lastWpt != null) {
+			// determine way point
+			ElevationWayPointKind kind = classifyWayPoint(lastWpt, wpt);
+
+			// render way point
+			renderer.renderWayPoint(g, profile, mv, wpt, kind);
+			npts++;
+		    } // else first way point -> is paint later
+
+		    // remember some things for next iteration
+		    lastWpt = wpt;
+		}
+
+		System.out.println("Rendered " + npts + ", " + profile.getWayPoints().size());
+		// now we paint special way points in emphasized style 
+
+		// paint start/end
+		renderer.renderWayPoint(g, profile, mv, profile.getStartWayPoint(),
+			ElevationWayPointKind.StartPoint);
+		renderer.renderWayPoint(g, profile, mv, profile.getEndWayPoint(),
+			ElevationWayPointKind.EndPoint);
+		// paint min/max
+		renderer.renderWayPoint(g, profile, mv, profile.getMaxWayPoint(),
+			ElevationWayPointKind.MaxElevation);
+		renderer.renderWayPoint(g, profile, mv, profile.getMinWayPoint(),
+			ElevationWayPointKind.MinElevation);
+
+
+		// paint selected way point, if available
+		if (selWayPoint != null) {
+		    renderer.renderWayPoint(g, profile, mv, selWayPoint,
+			    ElevationWayPointKind.Highlighted);
+		}
+	    } finally {
+		g.setFont(oldFont);
+	    } 
+	}
 	renderer.finishRendering();
     }
@@ -263,4 +278,3 @@
 	}
     }
-
 }
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 29948)
+++ /applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfilePanel.java	(revision 29949)
@@ -58,4 +58,5 @@
 	private List<IElevationProfileSelectionListener> selectionChangedListeners = new ArrayList<IElevationProfileSelectionListener>();
 	private boolean isPainting;
+	private int step = 0;
 
 	/**
@@ -137,6 +138,7 @@
 	    	IElevationProfile profile = model.getCurrentProfile();
 	    
-		if (profile != null && profile.getWayPoints() != null && profile.getWayPoints().size() > this.selectedIndex) {
-			return profile.getWayPoints().get(this.selectedIndex);
+	    	int selWp = this.selectedIndex * step;
+		if (profile != null && profile.getWayPoints() != null && profile.getWayPoints().size() > selWp) {
+			return profile.getWayPoints().get(selWp);
 		} else {
 			return null;			
@@ -410,6 +412,5 @@
 		
 		if (n == 0) return; // nothing to draw
-		// step size
-		int step = profile.getNumberOfWayPoints() / n;
+		step = profile.getNumberOfWayPoints() / n;
 
 		// int y0 = plotArea.y + 1;
@@ -417,6 +418,6 @@
 		Color oldC = g.getColor();
 
-		for (int i = 0; i < n; i += step) {
-			WayPoint wpt = profile.getWayPoints().get(i);
+		for (int i = 0, ip = 0; i < n; i++, ip += step) {
+			WayPoint wpt = profile.getWayPoints().get(ip);
 			int eleVal = (int) ElevationHelper.getElevation(wpt);
 			Color c = renderer.getColorForWaypoint(profile, wpt,
