diff --git a/SAS/TMSS/backend/services/scheduling/lib/constraints.py b/SAS/TMSS/backend/services/scheduling/lib/constraints.py
index 5a65a637b02c19b97d9017f2f8176fea7ed9b995..1daf3079ecab7ffe1f77a7e1fb1ac68206a4b7eb 100644
--- a/SAS/TMSS/backend/services/scheduling/lib/constraints.py
+++ b/SAS/TMSS/backend/services/scheduling/lib/constraints.py
@@ -868,7 +868,7 @@ def evaluate_sky_min_elevation_constraint(scheduling_unit: models.SchedulingUnit
                         result.score = 0
                         result.evaluation_timestamp = timestamp
                         result.optimal_start_time = None
-                        # logger.debug("%s min_elevation=%.3f[deg] rise='%s' set='%s'", result, min_elevation.degree, rise_and_set_time['rise'], rise_and_set_time['set'])
+                        logger.debug("%s task_id=%s task_name='%s' station=%s min_elevation=%.3f[deg] rise='%s' set='%s'", result, task.id, task.name, station, min_elevation.degree, rise_and_set_time['rise'], rise_and_set_time['set'])
                         return result
 
     # for min_elevation there is no optimal start time.
@@ -958,18 +958,22 @@ def evaluate_sky_min_distance_constraint(scheduling_unit: models.SchedulingUnitB
                               gridder.grid_time(task_proposed_end_time))
 
         # currently we only check at bounds and center, we probably want to add some more samples in between later on
-        for gridded_timestamp in gridded_timestamps:
-            for pointing in sap_pointings:
-                bodies = tuple(constraints['sky']['min_distance'].keys())
-                distances = coordinates_and_timestamps_to_separation_from_bodies(pointing=pointing,
-                                                                                 timestamps=(gridded_timestamp,),
-                                                                                 bodies=bodies)
-
-                # loop over all bodies and their respective min_distance constraints
-                for body, min_distance in constraints['sky']['min_distance'].items():
+        # loop over all bodies and their respective min_distance constraints
+        for pointing in sap_pointings:
+            for body, min_distance in constraints['sky']['min_distance'].items():
+                for gridded_timestamp in gridded_timestamps:
+                    distances = coordinates_and_timestamps_to_separation_from_bodies(pointing=pointing,
+                                                                                     timestamps=(gridded_timestamp,),
+                                                                                     bodies=[body])
                     actual_distances = distances[body]
                     assert (len(actual_distances) == 1)
                     actual_distance = actual_distances[gridded_timestamp]
+                    logger.debug("min_distance: SUB id=%s task_id=%s task_name='%s' pointing='%s' distance=%.3f[deg] to body=%s %s min_distance=%.3f[deg] at '%s'",
+                                 scheduling_unit.id, target_obs_task.id, target_obs_task.name, pointing, actual_distance.degree, body,
+                                 '<' if actual_distance.rad < min_distance else '>=',
+                                 Angle(min_distance, astropy.units.rad).degree,
+                                 gridded_timestamp)
+
                     if actual_distance.rad < min_distance:
                         # constraint not met. update result, and do early exit.
                         result.score = 0
@@ -977,8 +981,8 @@ def evaluate_sky_min_distance_constraint(scheduling_unit: models.SchedulingUnitB
                         result.optimal_start_time = None
                         logger.debug("%s body=%s actual_distance=%.3f[deg] < min_distance=%.3f[deg]", result, body, actual_distance.degree, Angle(min_distance, astropy.units.rad).degree)
                         return result
-                    # no early exit, so constraint is met for this station and timestamp
-                    # continue with rest of stations & timestamps
+                # no early exit, so constraint is met for this station and timestamp
+                # continue with rest of stations & timestamps
 
         # no early exit, so constraint is met for all stations and timestamps
         result.earliest_possible_start_time = proposed_start_time
@@ -1636,7 +1640,7 @@ def get_missing_stations_for_scheduling_unit(scheduling_unit: models.SchedulingU
 
     return sorted((list(missing_stations)))
 
-def determine_unschedulable_reason_and_mark_unschedulable_if_needed(scheduling_unit: models.SchedulingUnitBlueprint, lower_bound: datetime, upper_bound: datetime, gridder: Gridder, raise_if_interruped: Callable=noop) -> models.SchedulingUnitBlueprint:
+def determine_unschedulable_reason_and_mark_unschedulable_if_needed(scheduling_unit: models.SchedulingUnitBlueprint, lower_bound: datetime, upper_bound: datetime, gridder: Gridder=None, raise_if_interruped: Callable=noop) -> models.SchedulingUnitBlueprint:
     try:
         logger.debug("determine_unschedulable_reason_and_mark_unschedulable_if_needed: scheduling_unit id=%s", scheduling_unit.id)
         if not can_run_within_station_reservations(scheduling_unit):