diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index 31c0eccad5..5723f3d478 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -3364,8 +3364,11 @@ static void TrainController(Train *v, Vehicle *nomove)
 						}
 
 						/* If we would reverse but are currently in a PBS block and
-						 * reversing of stuck trains is disabled, don't reverse. */
-						if (_settings_game.pf.wait_for_pbs_path == 255 && UpdateSignalsOnSegment(v->tile, enterdir, v->owner) == SIGSEG_PBS) {
+						 * reversing of stuck trains is disabled, don't reverse.
+						 * This does not apply if the reason for reversing is a one-way
+						 * signal blocking us, because a train would then be stuck forever. */
+						if (_settings_game.pf.wait_for_pbs_path == 255 && !HasOnewaySignalBlockingTrackdir(gp.new_tile, i) &&
+								UpdateSignalsOnSegment(v->tile, enterdir, v->owner) == SIGSEG_PBS) {
 							v->wait_counter = 0;
 							return;
 						}