diff --git a/src/simutrans/vehicle/rail_vehicle.cc b/src/simutrans/vehicle/rail_vehicle.cc
index 690119139..e5775ec16 100644
--- a/src/simutrans/vehicle/rail_vehicle.cc
+++ b/src/simutrans/vehicle/rail_vehicle.cc
@@ -244,19 +244,25 @@ bool rail_vehicle_t::is_target(const grund_t *gr,const grund_t *prev_gr) const
 					return false;
 				}
 				grund_t *to;
-				if(  !gr->get_neighbour(to,get_waytype(),ribi)  ||  !(to->get_halt()==target_halt)  ||  (to->get_weg(get_waytype())->get_ribi_maske() & ribi_type(dir))!=0  ) {
-					// end of stop: Is it long enough?
-					// end of stop could be also signal!
-					uint16 tiles = cnv->get_tile_length();
-					while(  tiles>1  ) {
-						if(  gr->get_weg(get_waytype())->get_ribi_maske() & ribi  ||  !gr->get_neighbour(to,get_waytype(),ribi_t::backward(ribi))  ||  !(to->get_halt()==target_halt)  ) {
-							return false;
-						}
-						gr = to;
-						tiles --;
+				if(  gr->get_neighbour(to,get_waytype(),ribi)  &&  (to->get_halt()==target_halt)  &&  (to->get_weg(get_waytype())->get_ribi_maske() & ribi_type(dir))==0  ) {
+					// check electrification
+					// end of stop could be also signal, non-electric!
+					schiene_t const* const sch = obj_cast<schiene_t>(to->get_weg(get_waytype()));
+					if(!(((cnv!=NULL ? cnv->needs_electrification() : desc->get_engine_type()==vehicle_desc_t::electric)  &&  !sch->is_electrified())  ||  sch->get_max_speed() == 0  )) {
+						// We can still go forward.
+						return false;
 					}
-					return true;
 				}
+				// end of stop: Is it long enough?
+				uint16 tiles = cnv->get_tile_length();
+				while(  tiles>1  ) {
+					if(  gr->get_weg(get_waytype())->get_ribi_maske() & ribi  ||  !gr->get_neighbour(to,get_waytype(),ribi_t::backward(ribi))  ||  !(to->get_halt()==target_halt)  ) {
+						return false;
+					}
+					gr = to;
+					tiles --;
+				}
+				return true;
 			}
 		}
 	}
