Index: src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java	(revision 4722)
+++ src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java	(working copy)
@@ -234,16 +234,14 @@
 		// undocumented option - usually used for debugging only
 		mergeRoads = !props.getProperty("no-mergeroads", false);
 		allowReverseMerge = props.getProperty("allow-reverse-merge", false);
-		if (allowReverseMerge) {
-			final String typesOption = "line-types-with-direction";
-			String typeList = props.getProperty(typesOption, "");
-			if (typeList.isEmpty())
-				typeList = style.getOption(typesOption);
-			List<String> types = CommandArgs.stringToList(typeList, typesOption);
-			for (String type :types) {
-				if (!type.isEmpty()) {
-					lineTypesWithDirection.add(Integer.decode(type));
-				}
+		final String typesOption = "line-types-with-direction";
+		String typeList = props.getProperty(typesOption, "");
+		if (typeList.isEmpty())
+			typeList = style.getOption(typesOption);
+		List<String> types = CommandArgs.stringToList(typeList, typesOption);
+		for (String type :types) {
+			if (!type.isEmpty()) {
+				lineTypesWithDirection.add(Integer.decode(type));
 			}
 		}
 		routable = props.containsKey("route");
@@ -342,6 +340,7 @@
 			}
 			
 			boolean wasReversed = false;
+			boolean hasDirection = false;
 			String oneWay = way.getTag(TK_ONEWAY);
 			if (oneWay != null){
 				if("-1".equals(oneWay)) {
@@ -351,11 +350,13 @@
 					way.reverse();
 					wasReversed = true;
 					way.addTag(TK_ONEWAY, "yes");
+					hasDirection = true; // will get ignored if not road
 				}
 				if (way.tagIsLikeYes(TK_ONEWAY)) {
 					way.addTag(TK_ONEWAY, "yes");
 					if (foundType.isRoad() && hasSkipDeadEndCheckNode(way))
 						way.addTag("mkgmap:dead-end-check", "false");
+					hasDirection = true; // will get ignored if not road
 				} else { 
 					way.deleteTag(TK_ONEWAY);
 				}
@@ -363,13 +364,17 @@
 			ConvertedWay cw = new ConvertedWay(way, foundType);
 			cw.setReversed(wasReversed);
 
-			if (cw.isOneway() || way.tagIsLikeYes(TKM_HAS_DIRECTION)
-					|| lineTypesWithDirection.contains(foundType.getType()))
-				cw.setHasDirection(true);
-			if (way.tagIsLikeNo(TKM_HAS_DIRECTION)) 
-				cw.setHasDirection(false);
-			
-			if (cw.isRoad()){
+			if (way.tagIsLikeYes(TKM_HAS_DIRECTION))
+				hasDirection = true;
+			else if (way.tagIsLikeNo(TKM_HAS_DIRECTION))
+				hasDirection = false;
+			else if (lineTypesWithDirection.contains(foundType.getType()))
+				hasDirection = true;
+			else if (!cw.isRoad()) // ignore oneway setting
+				hasDirection = false;
+			cw.setHasDirection(hasDirection);
+
+			if (cw.isRoad()) {
 				if (way.getId() == lastRoadId) {
 					for (int i = roads.size() - 1; i >= 0; i--) {
 						ConvertedWay prevRoad = roads.get(i);
@@ -1275,8 +1280,7 @@
 			line.setType(replType);
 		line.setPoints(points);
 
-		if (cw.isOneway() || cw.hasDirection())
-			line.setDirection(true);
+		line.setDirection(cw.hasDirection());
 
 		clipper.clipLine(line, lineAdder);
 	}
@@ -1883,7 +1887,7 @@
 		if (cw.isOneway()) {
 			road.setOneway();
 		}
-		road.setDirection(cw.isOneway() || cw.hasDirection());
+		road.setDirection(cw.hasDirection());
 
 		road.setAccess(cw.getAccess());
 		
Index: test/resources/rules/or-at-end.test
===================================================================
--- test/resources/rules/or-at-end.test	(revision 4722)
+++ test/resources/rules/or-at-end.test	(working copy)
@@ -2,13 +2,13 @@
 WAY
 highway=tertiary
 name=b
-oneway=1
+oneway=yes
 cycleway=opposite
 
 WAY 2
 highway=tertiary
 name=b
-oneway=1
+oneway=yes
 cycleway=opposite_lane
 
 
@@ -17,7 +17,7 @@
 	& oneway=*
 	& (cycleway=opposite | cycleway=opposite_lane | cycleway=opposite_track )
 	{ set name='a${name}' }
-	[0x2 ]
+	[0x2 road_class=1]
 
 
 <finalize>
@@ -24,7 +24,7 @@
 highway=* {name '${name}' }
 
 <<<results>>>
-WAY 1: Line 0x2, labels=[ab, null, null, null], res=24-24 oneway (1/1),(2/2),
-WAY 2: Line 0x2, labels=[ab, null, null, null], res=24-24 oneway (1/1),(2/2),
+WAY 1: Road 0x2, labels=[ab, null, null, null], res=24-24 oneway (1/1),(2/2), road class=1 speed=0
+WAY 2: Road 0x2, labels=[ab, null, null, null], res=24-24 oneway (1/1),(2/2), road class=1 speed=0
 
 
