diff --git a/modules/mol/alg/pymod/chain_mapping.py b/modules/mol/alg/pymod/chain_mapping.py
index dd3ba5b5c9b63a7686deff3d9e70c2ab358a3ee5..db28156de9cf09d06c2b839fa7767c2f3c24151f 100644
--- a/modules/mol/alg/pymod/chain_mapping.py
+++ b/modules/mol/alg/pymod/chain_mapping.py
@@ -1193,6 +1193,11 @@ class ChainMapper:
                 substructure_chem_groups.append(substructure_chem_group)
                 substructure_chem_mapping.append(mapping)
 
+        # early stopping if no mdl chain can be mapped to substructure
+        n_mapped_mdl_chains = sum([len(m) for m in substructure_chem_mapping])
+        if n_mapped_mdl_chains == 0:
+            return list()
+
         # strip the reference sequence in alignments to only contain
         # sequence from substructure
         substructure_ref_mdl_alns = dict()
@@ -1233,6 +1238,7 @@ class ChainMapper:
             # chain_mapping and alns as input for lDDT computation
             lddt_chain_mapping = dict()
             lddt_alns = dict()
+            n_res_aln = 0
             for ref_chem_group, mdl_chem_group in zip(substructure_chem_groups,
                                                       mapping):
                 for ref_ch, mdl_ch in zip(ref_chem_group, mdl_chem_group):
@@ -1241,6 +1247,12 @@ class ChainMapper:
                         lddt_chain_mapping[mdl_ch] = ref_ch
                         aln = substructure_ref_mdl_alns[(ref_ch, mdl_ch)]
                         lddt_alns[mdl_ch] = aln
+                        tmp = [int(c[0] != '-' and c[1] != '-') for c in aln]
+                        n_res_aln += sum(tmp)
+            # don't compute lDDT if no single residue in mdl and ref is aligned
+            if n_res_aln == 0:
+                continue
+
             lDDT, _ = lddt_scorer.lDDT(mdl, thresholds=thresholds,
                                        chain_mapping=lddt_chain_mapping,
                                        residue_mapping = lddt_alns,
@@ -3282,6 +3294,8 @@ def _ChainMappings(ref_chains, mdl_chains, n_max=None):
     # reference
     iterators = list()
     for ref, mdl in zip(ref_chains, mdl_chains):
+        if len(ref) == 0:
+            raise RuntimeError("Expext at least one chain in ref chem group")
         if len(ref) == len(mdl):
             iterators.append(_RefEqualGenerator(ref, mdl))
         elif len(ref) < len(mdl):