diff --git a/src/simutrans/builder/wegbauer.cc b/src/simutrans/builder/wegbauer.cc
index 3dde5bc5d..28933c576 100644
--- a/src/simutrans/builder/wegbauer.cc
+++ b/src/simutrans/builder/wegbauer.cc
@@ -847,17 +847,6 @@ bool way_builder_t::is_allowed_step(const grund_t *from, const grund_t *to, sint
 			// roads are checked in check_crossing
 			// if no way there: check for right ground type, otherwise check owner
 			ok = sch==NULL  ?  (!fundament  &&  !to->is_water())  :  check_owner(sch->get_owner(),player_builder);
-			// tram track allowed in road tunnels, but only along existing roads / tracks
-			if(from!=to) {
-				if(from->ist_tunnel()) {
-					const ribi_t::ribi ribi = from->get_weg_ribi_unmasked(road_wt)  |  from->get_weg_ribi_unmasked(track_wt)  |  ribi_t::doubles(ribi_type(from->get_grund_hang()));
-					ok = ok && ((ribi & ribi_type(zv))==ribi_type(zv));
-				}
-				if(to->ist_tunnel()) {
-					const ribi_t::ribi ribi = to->get_weg_ribi_unmasked(road_wt)  |  to->get_weg_ribi_unmasked(track_wt)  |  ribi_t::doubles(ribi_type(to->get_grund_hang()));
-					ok = ok && ((ribi & ribi_type(-zv))==ribi_type(-zv));
-				}
-			}
 			if(ok) {
 				// calculate costs
 				*costs += sch ? s.way_count_straight : s.way_count_no_way;
diff --git a/src/simutrans/tool/simtool.cc b/src/simutrans/tool/simtool.cc
index d1204139c..c132b1078 100644
--- a/src/simutrans/tool/simtool.cc
+++ b/src/simutrans/tool/simtool.cc
@@ -2668,7 +2668,7 @@ uint8 tool_build_way_t::is_valid_pos( player_t *player, const koord3d &pos, cons
 	grund_t *gr=welt->lookup(pos);
 	if(  gr  &&  slope_t::is_way(gr->get_weg_hang())  ) {
 		// ignore tunnel tiles (except road tunnel for tram track building ..)
-		if(  gr->get_typ() == grund_t::tunnelboden  &&  !gr->ist_karten_boden()  && !(desc->is_tram()  && gr->hat_weg(road_wt)) ) {
+		if(  gr->get_typ() == grund_t::tunnelboden  &&  !gr->ist_karten_boden()  && !(desc->is_tram()  && !gr->hat_weg(water_wt)) ) {
 			return 0;
 		}
 		bool const elevated = desc->get_styp() == type_elevated  &&  desc->get_wtyp() != air_wt;
diff --git a/src/simutrans/vehicle/rail_vehicle.cc b/src/simutrans/vehicle/rail_vehicle.cc
index 690119139..ba1044169 100644
--- a/src/simutrans/vehicle/rail_vehicle.cc
+++ b/src/simutrans/vehicle/rail_vehicle.cc
@@ -435,7 +435,7 @@ skip_choose:
 
 		// now we are in a step and can use the route search array
 		route_t target_rt;
-		const int richtung = ribi_type(get_pos(), pos_next); // to avoid confusion at diagonals
+		const int richtung = ribi_type(cnv->get_route()->at(start_block),cnv->get_route()->at(start_block+1)); // to avoid confusion at diagonals
 		if(  !target_rt.find_route( welt, cnv->get_route()->at(start_block), this, speed_to_kmh(cnv->get_min_top_speed()), richtung, welt->get_settings().get_max_choose_route_steps() )  ) {
 			// nothing empty or not route with less than get_max_choose_route_steps() tiles
 			target_halt = halthandle_t();
