Index: src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java	(revision 3117)
+++ src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java	(working copy)
@@ -57,6 +57,7 @@
 import uk.me.parabola.mkgmap.reader.osm.Element;
 import uk.me.parabola.mkgmap.reader.osm.FeatureKind;
 import uk.me.parabola.mkgmap.reader.osm.GType;
+import uk.me.parabola.mkgmap.reader.osm.HighwayHooks;
 import uk.me.parabola.mkgmap.reader.osm.Node;
 import uk.me.parabola.mkgmap.reader.osm.OsmConverter;
 import uk.me.parabola.mkgmap.reader.osm.Relation;
@@ -1855,7 +1856,7 @@
 			if (way == null)
 				continue;
 			
-			if (way.getId() == lastId) {
+			if (way.getId() == lastId || way.getId() == lastId + HighwayHooks.CYCLEWAY_ID_OFFSET) {
 				log.debug("Road with identical id:", way.getId());
 				dupIdHighways.add(way);
 				continue;
Index: src/uk/me/parabola/mkgmap/reader/osm/ElementSaver.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/ElementSaver.java	(revision 3117)
+++ src/uk/me/parabola/mkgmap/reader/osm/ElementSaver.java	(working copy)
@@ -74,7 +74,15 @@
 	public static final String MKGMAP_REMOVE_TAG_ALL_KEY = "mkgmap:ALL";
 
 	public ElementSaver(EnhancedProperties args) {
-		if (args.getProperty("preserve-element-order", false)) {
+		boolean needsOrder = false;
+		if(args.getProperty("preserve-element-order", false) ||
+				args.getProperty("make-all-cycleways", false) ||
+				args.getProperty("make-opposite-cycleways", false) ||
+			args.getProperty("make-cycleways", false)){
+			needsOrder = true;
+		}
+		
+		if (needsOrder) {
 			nodeMap = new LinkedHashMap<Long, Node>(5000);
 			wayMap = new LinkedHashMap<Long, Way>(5000);
 			relationMap = new LinkedHashMap<Long, Relation>();
Index: src/uk/me/parabola/mkgmap/reader/osm/HighwayHooks.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/HighwayHooks.java	(revision 3118)
+++ src/uk/me/parabola/mkgmap/reader/osm/HighwayHooks.java	(working copy)
@@ -32,7 +32,7 @@
 public class HighwayHooks extends OsmReadingHooksAdaptor {
 	private static final Logger log = Logger.getLogger(HighwayHooks.class);
 
-	private static final long CYCLEWAY_ID_OFFSET = 0x10000000;
+	public static final long CYCLEWAY_ID_OFFSET = 0x10000000;
 
 	private final List<Way> motorways = new ArrayList<Way>();
 	private final List<Node> exits = new ArrayList<Node>();
