diff --git a/modules/mol/alg/pymod/qsscore.py b/modules/mol/alg/pymod/qsscore.py
index 866a625704a0f1980a5e6a275114189bfbc7ecf6..9b95f56fbf6c4802fa110b044f183c826e3a7ed1 100644
--- a/modules/mol/alg/pymod/qsscore.py
+++ b/modules/mol/alg/pymod/qsscore.py
@@ -569,22 +569,48 @@ class QSScorer:
         contact_d = self.qsent1.contact_d
         mapped_idx_grid_1 = np.ix_(mapped_indices_1_1, mapped_indices_2_1)
         mapped_idx_grid_2 = np.ix_(mapped_indices_1_2, mapped_indices_2_2)
-        mapped_d1_contacts = d1[mapped_idx_grid_1] < contact_d
-        mapped_d2_contacts = d2[mapped_idx_grid_2] < contact_d
-        assert(mapped_d1_contacts.shape == mapped_d2_contacts.shape)
-        shared_mask = np.logical_and(mapped_d1_contacts, mapped_d2_contacts)
-        shared_mask_d1 = np.full(d1.shape, False, dtype=bool)
-        shared_mask_d1[mapped_idx_grid_1] = shared_mask
-        shared_mask_d2 = np.full(d2.shape, False, dtype=bool)
-        shared_mask_d2[mapped_idx_grid_2] = shared_mask
-
-        # get mapped but nonshared masks
-        mapped_nonshared_mask_d1 = np.full(d1.shape, False, dtype=bool)
-        mapped_nonshared_mask_d1[mapped_idx_grid_1] = \
-        np.logical_and(np.logical_not(shared_mask), mapped_d1_contacts)
-        mapped_nonshared_mask_d2 = np.full(d2.shape, False, dtype=bool)
-        mapped_nonshared_mask_d2[mapped_idx_grid_2] = \
-        np.logical_and(np.logical_not(shared_mask), mapped_d2_contacts)
+
+        if mapped_idx_grid_1[0].shape[0] == 0 or mapped_idx_grid_2[0].shape[0] == 0:
+            # dealing with special cases where we have no mapped residues
+            # we only avoid errors here when using maped_idx_grid_x for indexing
+            # but run the rest of the algorithm anyways which produces some
+            # computational overhead. Thats OK, as this should occur rarely
+            shared_mask_d1 = np.full(d1.shape, False, dtype=bool)
+            shared_mask_d2 = np.full(d2.shape, False, dtype=bool)
+            mapped_nonshared_mask_d1 = np.full(d1.shape, False, dtype=bool)
+            mapped_nonshared_mask_d2 = np.full(d2.shape, False, dtype=bool)
+            if mapped_idx_grid_1[0].shape[0] == 0:
+                # mapped_idx_grid_1 has not a single mapped residue which raises
+                # an error when calling something like d1[mapped_idx_grid_1]
+                mapped_d1_contacts = np.full(d1.shape, False, dtype=bool)
+            else:
+                mapped_d1_contacts = d1[mapped_idx_grid_1] < contact_d
+                mapped_nonshared_mask_d1[mapped_idx_grid_1] = mapped_d1_contacts
+
+            if mapped_idx_grid_2[0].shape[0] == 0:
+                # mapped_idx_grid_2 has not a single mapped residue which raises
+                # an error when calling something like d2[mapped_idx_grid_2]
+                mapped_d2_contacts = np.full(d2.shape, False, dtype=bool)
+            else:
+                mapped_d2_contacts = d2[mapped_idx_grid_2] < contact_d
+                mapped_nonshared_mask_d2[mapped_idx_grid_2] = mapped_d2_contacts
+            shared_mask = np.full(mapped_d1_contacts.shape, False, dtype=bool)
+        else:
+            mapped_d1_contacts = d1[mapped_idx_grid_1] < contact_d
+            mapped_d2_contacts = d2[mapped_idx_grid_2] < contact_d
+            shared_mask = np.logical_and(mapped_d1_contacts, mapped_d2_contacts)
+            shared_mask_d1 = np.full(d1.shape, False, dtype=bool)
+            shared_mask_d1[mapped_idx_grid_1] = shared_mask
+            shared_mask_d2 = np.full(d2.shape, False, dtype=bool)
+            shared_mask_d2[mapped_idx_grid_2] = shared_mask
+
+            # get mapped but nonshared masks
+            mapped_nonshared_mask_d1 = np.full(d1.shape, False, dtype=bool)
+            mapped_nonshared_mask_d1[mapped_idx_grid_1] = \
+            np.logical_and(np.logical_not(shared_mask), mapped_d1_contacts)
+            mapped_nonshared_mask_d2 = np.full(d2.shape, False, dtype=bool)
+            mapped_nonshared_mask_d2[mapped_idx_grid_2] = \
+            np.logical_and(np.logical_not(shared_mask), mapped_d2_contacts)
 
         # contributions from shared contacts
         shared_d1 = d1[shared_mask_d1]