diff --git a/modules/mol/alg/pymod/ligand_scoring.py b/modules/mol/alg/pymod/ligand_scoring.py
index 4d8bac4363f43225785f1c5fcaba683f5de03fad..4c7ebdf546ec6f8dc0a1b7ce029c7308d709ad8d 100644
--- a/modules/mol/alg/pymod/ligand_scoring.py
+++ b/modules/mol/alg/pymod/ligand_scoring.py
@@ -880,6 +880,7 @@ class LigandScorer:
 
         # First only consider top coverage matches.
         min_coverage = np.max(coverage)
+        i = mat1.size + 1
         while min_coverage > 0 and not np.all(np.isnan(mat1)):
             LogVerbose("Looking for matches with coverage >= %s" % min_coverage)
             min_mat1 = LigandScorer._nanmin_nowarn(mat1, coverage < min_coverage)
@@ -909,8 +910,14 @@ class LigandScorer:
 
                 # Recompute min
                 min_mat1 = LigandScorer._nanmin_nowarn(mat1, coverage < min_coverage)
+                if i < 0:
+                    raise Exception("Ligand scoring bug: hit appatent infinite loop!")
+                i -= 1
             # Recompute min_coverage
             min_coverage = np.max(coverage)
+            if i < 0:
+                raise Exception("Ligand scoring bug: hit appatent infinite loop!")
+            i -= 1
         return assignments
 
     @staticmethod