diff --git a/src/simutrans/builder/brueckenbauer.cc b/src/simutrans/builder/brueckenbauer.cc
index e782f1224..0134ee9df 100644
--- a/src/simutrans/builder/brueckenbauer.cc
+++ b/src/simutrans/builder/brueckenbauer.cc
@@ -300,6 +300,10 @@ bool bridge_builder_t::is_monorail_junction(koord3d pos, player_t *player, const
 	if(  grund_t *gr2 = welt->lookup( pos )  ) {
 		if(  gr2->get_typ() == grund_t::monorailboden  ) {
 			// now check if our way
+			if(  desc->get_waytype()==powerline_wt && gr2->get_leitung()  ) {
+				// powerline does not have waytype, we find them!
+				return true;
+			}
 			if(  weg_t *w = gr2->get_weg_nr(0)  ) {
 				if(  !player_t::check_owner(w->get_owner(),player)  ) {
 					// not our way
diff --git a/src/simutrans/builder/wegbauer.cc b/src/simutrans/builder/wegbauer.cc
index fb6be3f9e..871f74428 100644
--- a/src/simutrans/builder/wegbauer.cc
+++ b/src/simutrans/builder/wegbauer.cc
@@ -582,7 +582,7 @@ bool way_builder_t::is_allowed_step(const grund_t *from, const grund_t *to, sint
 	// universal check for elevated things ...
 	if(bautyp&elevated_flag) {
 		if(  is_upperlayer  ) {
-			if(  (to->get_typ() != grund_t::monorailboden ||  to->get_weg_nr(0)->get_desc()->get_wtyp()!=desc->get_wtyp()  ||  !check_owner(to->obj_bei(0)->get_owner(),player_builder) )  ||  (from->get_typ() != grund_t::monorailboden ||  from->get_weg_nr(0)->get_desc()->get_wtyp()!=desc->get_wtyp()  ||  !check_owner(from->obj_bei(0)->get_owner(),player_builder) )  ) {
+			if( (to->get_typ() != grund_t::monorailboden || !to->get_weg_nr(0) || to->get_weg_nr(0)->get_desc()->get_wtyp()!=desc->get_wtyp() || !check_owner(to->obj_bei(0)->get_owner(),player_builder) ) || (from->get_typ() != grund_t::monorailboden || !from->get_weg_nr(0) || from->get_weg_nr(0)->get_desc()->get_wtyp()!=desc->get_wtyp() || !check_owner(from->obj_bei(0)->get_owner(),player_builder) ) ) {
 				return false;
 			}
 		}
diff --git a/src/simutrans/tool/simtool.cc b/src/simutrans/tool/simtool.cc
index 460151b24..8e34d9f2d 100644
--- a/src/simutrans/tool/simtool.cc
+++ b/src/simutrans/tool/simtool.cc
@@ -530,6 +530,17 @@ DBG_MESSAGE("tool_remover_intern()","at (%s)", pos.get_str());
 	// check whether powerline related stuff should be removed, and if there is any to remove
 	if (  (type == obj_t::leitung  ||  type == obj_t::pumpe  ||  type == obj_t::senke  ||  type == obj_t::undefined)
 	       &&  lt != NULL  &&  lt->get_removal_error(player) == NULL) {
+		if(gr->get_typ()==grund_t::monorailboden&&!gr->get_weg_nr(0)) {
+			lt->cleanup(player);
+			delete lt;
+			gr->obj_loesche_alle(player);
+			gr->mark_image_dirty();
+			if (!gr->get_flag(grund_t::is_kartenboden)) {
+				welt->access(gr->get_pos().get_2d())->boden_entfernen(gr);
+				delete gr;
+			}
+			return true;
+		}
 		if(  gr->ist_bruecke()  ) {
 			bruecke_t* br = gr->find<bruecke_t>();
 			if(  br == NULL  ) {
@@ -3701,7 +3712,7 @@ const char *tool_wayremover_t::do_work( player_t *player, const koord3d &start,
 					lt->cleanup(player);
 					delete lt;
 					// delete tunnel ground too, if empty
-					if (gr->get_typ()==grund_t::tunnelboden) {
+					if (gr->get_typ()==grund_t::tunnelboden||(gr->get_typ()==grund_t::monorailboden&&!gr->get_weg_nr(0))) {
 						gr->obj_loesche_alle(player);
 						gr->mark_image_dirty();
 						if (!gr->get_flag(grund_t::is_kartenboden)) {
diff --git a/src/simutrans/world/simplan.cc b/src/simutrans/world/simplan.cc
index 6915aa64f..fb0fec39b 100644
--- a/src/simutrans/world/simplan.cc
+++ b/src/simutrans/world/simplan.cc
@@ -482,7 +482,11 @@ void planquadrat_t::display_obj(const sint16 xpos, const sint16 ypos, const sint
 	}
 	else {
 		// clip everything at the next tile above
-		if(  i < ground_size  ) {
+		if(  (i >= ground_size)  ||  !gr0->obj_bei(0) || gr0->obj_bei(0)->get_typ()==obj_t::way || gr0->obj_bei(0)->get_typ()==obj_t::gebaeude || gr0->get_leitung()  ) {
+			// no tree
+			gr0->display_obj_all( xpos, ypos, raster_tile_width, is_global  CLIP_NUM_PAR );
+		}
+		else {
 
 			clip_dimension p_cr = display_get_clip_wh( CLIP_NUM_VAR );
 
@@ -510,9 +514,6 @@ void planquadrat_t::display_obj(const sint16 xpos, const sint16 ypos, const sint
 			gr0->display_obj_all( xpos, ypos, raster_tile_width, is_global  CLIP_NUM_PAR );
 			display_pop_clip_wh(CLIP_NUM_VAR);
 		}
-		else {
-			gr0->display_obj_all( xpos, ypos, raster_tile_width, is_global  CLIP_NUM_PAR );
-		}
 	}
 	// above ground drawing height
 	for( ; i < ground_size; i++ ) {
