diff --git a/modules/seq/alg/pymod/__init__.py b/modules/seq/alg/pymod/__init__.py
index f97771723b2f0fc1f15954cd22ec1e487197176e..3be1b5845184ad08c6284694a9410427909888dd 100644
--- a/modules/seq/alg/pymod/__init__.py
+++ b/modules/seq/alg/pymod/__init__.py
@@ -100,10 +100,17 @@ def AlignToSEQRES(chain, seqres, try_resnum_first=False, validate=True):
     return seq.CreateAlignment()
   if try_resnum_first:
     aln_seq = seq.CreateSequence('atoms', '-'*len(seqres))
+    aligned_resnums = set()
     for r1 in residues:
+      if r1.number.num in aligned_resnums:
+        LogWarning('Residue numbers must be unique. Already observed %i, ' \
+                   'cannot align %s anymore.'%(r1.number.num, r1.qualified_name))
+        try_resnum_first = False
+        break
       if r1.number.num <= len(seqres) and r1.number.num > 0:
         if IsEqual(seqres[r1.number.num - 1], r1.one_letter_code):
           aln_seq[r1.number.num - 1] = r1.one_letter_code
+          aligned_resnums.add(r1.number.num)
         else:
           LogWarning('Sequence mismatch: chain has "' + r1.one_letter_code +
                      '", while SEQRES is "' + seqres[r1.number.num - 1] +