Index: src/uk/me/parabola/mkgmap/osmstyle/ConvertedWay.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/ConvertedWay.java	(revision 3233)
+++ src/uk/me/parabola/mkgmap/osmstyle/ConvertedWay.java	(working copy)
@@ -40,6 +40,7 @@
 	private byte mkgmapAccess; 		// bit mask, see ACCESS_TAGS 
 	private final byte routeFlags;	// bit mask, see ROUTING_TAGS
 	private boolean isRoad;
+	private boolean reversed;		// points were reversed
 	
 	
 
@@ -260,4 +261,12 @@
 	public boolean isRoad(){
 		return isRoad;
 	}
+
+	public boolean isReversed() {
+		return reversed;
+	}
+
+	public void setReversed(boolean reversed) {
+		this.reversed = reversed;
+	}
 }
Index: src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java	(revision 3233)
+++ src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java	(working copy)
@@ -272,6 +272,7 @@
 		} else 
 			way.deleteTag("oneway");
 		ConvertedWay cw = new ConvertedWay(lineIndex++, way, foundType);
+		cw.setReversed(wasReversed);
 		if (cw.isRoad()){
 			roads.add(cw);
 			if (wasReversed && cw.isRoundabout())
@@ -456,6 +457,8 @@
 				List<Coord> points = line.getPoints();
 				points.clear();
 				points.addAll(modWay.getPoints());
+				if (modWay.isReversed() != line.isReversed())
+					Collections.reverse(points);
 			}
 		}
 		for (Long wayId: deletedRoads){
Index: src/uk/me/parabola/mkgmap/osmstyle/WrongAngleFixer.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/WrongAngleFixer.java	(revision 3233)
+++ src/uk/me/parabola/mkgmap/osmstyle/WrongAngleFixer.java	(working copy)
@@ -16,6 +16,7 @@
 //import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.IdentityHashMap;
@@ -374,6 +375,7 @@
 			// Step 5: apply the calculated corrections to the ways
 			lastWay = null;
 			boolean lastWayModified = false;
+			ConvertedWay lastConvertedWay = null;
 			for (ConvertedWay cw : convertedWays) {
 				if (!cw.isValid()) 
 					continue;
@@ -387,10 +389,13 @@
 					if (lastWayModified){
 						points.clear();
 						points.addAll(lastWay.getPoints());
+						if (cw.isReversed() != lastConvertedWay.isReversed())
+							Collections.reverse(points);
 					}
 					continue;
 				}
 				lastWay = way;
+				lastConvertedWay = cw;
 				lastWayModified = false;
 				// loop backwards because we may delete points
 				for (int i = points.size() - 1; i >= 0; i--) {
@@ -441,6 +446,7 @@
 		int numWaysDeleted = 0;
 		lastWay = null;
 		boolean lastWayModified = false;
+		ConvertedWay lastConvertedWay = null;
 		for (ConvertedWay cw : convertedWays) {
 			Way way = cw.getWay();
 			if (mode == MODE_LINES && modifiedRoads.containsKey(way.getId()))
@@ -462,10 +468,14 @@
 				if (lastWayModified){
 					points.clear();
 					points.addAll(lastWay.getPoints());
+					if (cw.isReversed() != lastConvertedWay.isReversed())
+						Collections.reverse(points);
+					
 				}
 				continue;
 			}
 			lastWay = way;
+			lastConvertedWay = cw;
 			lastWayModified = false;
 			Coord prev = points.get(points.size() - 1);
 			// loop backwards because we may delete points
@@ -539,12 +549,13 @@
 	 * @param modifiedRoads 
 	 */
 	private void removeObsoletePoints(List<ConvertedWay> convertedWays, HashMap<Long, ConvertedWay> modifiedRoads){
-		Way lastWay = null;
+		ConvertedWay lastConvertedWay = null;
 		int numPointsRemoved = 0;
 		boolean lastWasModified = false;
 		List<Coord> removedInWay = new ArrayList<>();
 		List<Coord> obsoletePoints = new ArrayList<>();
 		List<Coord> modifiedPoints = new ArrayList<>();
+		
 		for (ConvertedWay cw : convertedWays) {
 			if (!cw.isValid())
 				continue;
@@ -551,14 +562,17 @@
 			Way way = cw.getWay();
 			if (mode == MODE_LINES && modifiedRoads.containsKey(way.getId()))
 				continue;
-			if (way.equals(lastWay)) {
+			if (lastConvertedWay != null && way.equals(lastConvertedWay.getWay())) {
 				if (lastWasModified){
-					way.getPoints().clear();
-					way.getPoints().addAll(lastWay.getPoints());
+					List<Coord> points = way.getPoints();
+					points.clear();
+					points.addAll(lastConvertedWay.getPoints());
+					if (cw.isReversed() != lastConvertedWay.isReversed())
+						Collections.reverse(points);
 				}
 				continue;
 			}
-			lastWay = way;
+			lastConvertedWay = cw;
 			lastWasModified = false;
 			List<Coord> points = way.getPoints();
 			modifiedPoints.clear();
