diff --git a/modules/mol/alg/pymod/superpose.py b/modules/mol/alg/pymod/superpose.py
index c748ae6e3526688e96ecb066cead4559ab54d5a4..20298737afe5e0236841dd1a4175acaa7b43c64d 100644
--- a/modules/mol/alg/pymod/superpose.py
+++ b/modules/mol/alg/pymod/superpose.py
@@ -190,19 +190,26 @@ def _MatchResidueByAln(ent_a, ent_b, atoms, alnmethod):
   atmset = ParseAtomNames(atoms)
   ## iterate chains
   for i in range(0, n_chains):
+    ## fetch chains (peptide-linking residues only)
     chain_a = ent_a.chains[i]
     chain_b = ent_b.chains[i]
+    chain_view_a = chain_a.Select('protein=true')
+    chain_view_b = chain_b.Select('protein=true')
+    if chain_view_a.chain_count == 0 or chain_view_b.chain_count == 0:
+      # skip empty chains
+      continue
     ## fetch residues
-    s_a = ''.join([r.one_letter_code
-                   for r in chain_a.Select('protein=True').residues])
-    s_b = ''.join([r.one_letter_code
-                   for r in chain_b.Select('protein=True').residues])
+    s_a = ''.join([r.one_letter_code for r in chain_view_a.residues])
+    s_b = ''.join([r.one_letter_code for r in chain_view_b.residues])
     ## create sequence from residue lists & alignment
     seq_a = ost.seq.CreateSequence(chain_a.name, s_a)
     seq_b = ost.seq.CreateSequence(chain_b.name, s_b)
     aln_a_b = alnmethod(seq_a, seq_b, ost.seq.alg.BLOSUM62)
+    if not aln_a_b:
+      # skip failed alignments
+      continue
     ## evaluate alignment
-    max_aln_res = 0
+    max_aln_res = -1
     for a in range(0, len(aln_a_b)):
       aln = aln_a_b[a]
       aln_res_len = 0
@@ -218,13 +225,13 @@ def _MatchResidueByAln(ent_a, ent_b, atoms, alnmethod):
 
     aln = aln_a_b[max_aln_idx]
     ## bind chain to alignment
-    aln.AttachView(0, chain_a.Select('protein=True'))
-    aln.AttachView(1, chain_b.Select('protein=True'))
+    aln.AttachView(0, chain_view_a)
+    aln.AttachView(1, chain_view_b)
     ## select residues (only replacement edges)
     for i in max_matches:
       r_a = aln.GetResidue(0,i)
       r_b = aln.GetResidue(1,i)
-      result_a,result_b=_fetch_atoms(r_a, r_b, result_a, result_b, atmset)
+      result_a, result_b = _fetch_atoms(r_a, r_b, result_a, result_b, atmset)
   result_a.AddAllInclusiveBonds()
   result_b.AddAllInclusiveBonds()
   return result_a, result_b