diff --git a/modules/mol/alg/pymod/chain_mapping.py b/modules/mol/alg/pymod/chain_mapping.py
index dec705c52aa752150c5bd08aff373f39f03d8e74..ce0034a5fdd3beaf2a5b0584350989689bad988c 100644
--- a/modules/mol/alg/pymod/chain_mapping.py
+++ b/modules/mol/alg/pymod/chain_mapping.py
@@ -1183,36 +1183,36 @@ class ChainMapper:
         mapping = None
 
         if strategy.startswith("greedy"):
-          # get transforms of any mdl chain onto any trg chain in same chem
-          # group that fulfills gdtts threshold
-          initial_transforms = list()
-          initial_mappings = list()
-          for trg_pos, trg_chains, mdl_pos, mdl_chains in zip(trg_group_pos,
-                                                              self.chem_groups,
-                                                              mdl_group_pos,
-                                                              chem_mapping):
-              for t_pos, t in zip(trg_pos, trg_chains):
-                  for m_pos, m in zip(mdl_pos, mdl_chains):
-                      if len(t_pos) >= 3 and len(m_pos) >= 3:
-                          transform = _GetSuperposition(m_pos, t_pos,
-                                                        False).transformation
-                          initial_transforms.append(transform)
-                          initial_mappings.append((t,m))
-
-          if strategy == "greedy_single":
-              mapping = _SingleRigidRMSD(initial_transforms,
-                                         initial_mappings,
-                                         self.chem_groups,
-                                         chem_mapping,
-                                         trg_group_pos,
-                                         mdl_group_pos)
-
-
-          elif strategy == "greedy_iterative":
-              mapping = _IterativeRigidRMSD(initial_transforms,
-                                            initial_mappings,
-                                            self.chem_groups, chem_mapping,
-                                            trg_group_pos, mdl_group_pos)
+            # get transforms of any mdl chain onto any trg chain in same chem
+            # group that fulfills gdtts threshold
+            initial_transforms = list()
+            initial_mappings = list()
+            for trg_pos, trg_chains, mdl_pos, mdl_chains in zip(trg_group_pos,
+                                                                self.chem_groups,
+                                                                mdl_group_pos,
+                                                                chem_mapping):
+                for t_pos, t in zip(trg_pos, trg_chains):
+                    for m_pos, m in zip(mdl_pos, mdl_chains):
+                        if len(t_pos) >= 3 and len(m_pos) >= 3:
+                            transform = _GetSuperposition(m_pos, t_pos,
+                                                          False).transformation
+                            initial_transforms.append(transform)
+                            initial_mappings.append((t,m))
+
+            if strategy == "greedy_single":
+                mapping = _SingleRigidRMSD(initial_transforms,
+                                           initial_mappings,
+                                           self.chem_groups,
+                                           chem_mapping,
+                                           trg_group_pos,
+                                           mdl_group_pos)
+
+
+            elif strategy == "greedy_iterative":
+                mapping = _IterativeRigidRMSD(initial_transforms,
+                                              initial_mappings,
+                                              self.chem_groups, chem_mapping,
+                                              trg_group_pos, mdl_group_pos)
         elif strategy == "naive":
             mapping = _NaiveRMSD(self.chem_groups, chem_mapping,
                                  trg_group_pos, mdl_group_pos,
@@ -3155,7 +3155,7 @@ def _NaiveRMSD(chem_groups, chem_mapping, trg_group_pos, mdl_group_pos,
         for m_pos, m in zip(mdl_pos, mdl_chains):
             mdl_pos_dict[m] = m_pos
         
-    best_mapping = dict()
+    best_mapping = [[None]*len(x) for x in chem_groups]
     best_rmsd = float("inf")
 
     for mapping in _ChainMappings(chem_groups, chem_mapping, n_max_naive):
@@ -3166,10 +3166,11 @@ def _NaiveRMSD(chem_groups, chem_mapping, trg_group_pos, mdl_group_pos,
                 if trg_ch is not None and mdl_ch is not None:
                     trg_pos.extend(trg_pos_dict[trg_ch])
                     mdl_pos.extend(mdl_pos_dict[mdl_ch])
-        superpose_res = mol.alg.SuperposeSVD(mdl_pos, trg_pos)
-        if superpose_res.rmsd < best_rmsd:
-            best_rmsd = superpose_res.rmsd
-            best_mapping = mapping
+        if len(mdl_pos) >= 3:
+            superpose_res = mol.alg.SuperposeSVD(mdl_pos, trg_pos)
+            if superpose_res.rmsd < best_rmsd:
+                best_rmsd = superpose_res.rmsd
+                best_mapping = mapping
 
     # this is stupid...
     tmp = dict()