diff --git a/modules/gui/src/data_viewer/data_viewer_panel_base.cc b/modules/gui/src/data_viewer/data_viewer_panel_base.cc
index c89f27655663dfb8c6b6becb455d5ef39756b8ac..205012c1321d161599fdada91b6d16d3b8caf974 100644
--- a/modules/gui/src/data_viewer/data_viewer_panel_base.cc
+++ b/modules/gui/src/data_viewer/data_viewer_panel_base.cc
@@ -1071,7 +1071,11 @@ void DataViewerPanelBase::draw_pixel_values(QPainter& painter)
         unsigned char rgb = (rv>130.0) ? 0 : 255;
         painter.setPen(QColor(rgb,rgb,rgb));
         int string_h=painter.fontMetrics().height();
+#if (QT_VERSION < QT_VERSION_CHECK(5,11,0))
+        int string_w=painter.fontMetrics().width(value_string);
+#else
         int string_w=painter.fontMetrics().horizontalAdvance(value_string);
+#endif
         painter.drawText(p.x() - string_w/2, p.y() + string_h/2, value_string);
       }
     }
@@ -1087,7 +1091,11 @@ void DataViewerPanelBase::draw_pixel_values(QPainter& painter)
         unsigned char rgb = (rv>130.0) ? 0 : 255;
         painter.setPen(QColor(rgb,rgb,rgb));
         int string_h=painter.fontMetrics().height();
+#if (QT_VERSION < QT_VERSION_CHECK(5,11,0))
+        int string_w=painter.fontMetrics().width(value_string);
+#else
         int string_w=painter.fontMetrics().horizontalAdvance(value_string);
+#endif
         painter.drawText(p.x() - string_w/2, p.y() + string_h/2, value_string);
       }
     }
diff --git a/modules/gui/src/python_shell/python_shell_widget.cc b/modules/gui/src/python_shell/python_shell_widget.cc
index 040ee6b1f91772de9003ceabc15d76c9dbc7e2b0..a7d4ae61a85787962391a82aeb6f63185c1084e1 100644
--- a/modules/gui/src/python_shell/python_shell_widget.cc
+++ b/modules/gui/src/python_shell/python_shell_widget.cc
@@ -76,7 +76,11 @@ PythonShellWidget::PythonShellWidget(QWidget* parent):
   setUndoRedoEnabled(false);
   setFont(QFont("Courier",font().pointSize()+2));
   QFontMetrics metrics(font());
+#if (QT_VERSION < QT_VERSION_CHECK(5,11,0))
+  setTabStopWidth(2*metrics.width(" "));
+#else
   setTabStopDistance(2*metrics.horizontalAdvance(" "));
+#endif
   setMaximumBlockCount(1000000);
 
   textCursor().block().setUserState(BLOCKTYPE_ACTIVE);
@@ -534,7 +538,11 @@ void PythonShellWidget::OnExecuteStateEntered()
 void PythonShellWidget::SetTabWidth(int width) {
   tab_width_=width;
   QFontMetrics metrics(font());
+#if (QT_VERSION < QT_VERSION_CHECK(5,11,0))
+  setTabStopWidth(tab_width_*metrics.width(" "));
+#else
   setTabStopDistance(tab_width_*metrics.horizontalAdvance(" "));
+#endif
 }
 
 
diff --git a/modules/gui/src/sequence_viewer/sequence_table_view.cc b/modules/gui/src/sequence_viewer/sequence_table_view.cc
index c72842704ecc71c4bc161bc27681ffb71c4058d2..95aa637cd4fc8995736fb2646f641721dacbb4f9 100644
--- a/modules/gui/src/sequence_viewer/sequence_table_view.cc
+++ b/modules/gui/src/sequence_viewer/sequence_table_view.cc
@@ -477,7 +477,11 @@ void SequenceTableView::keyPressEvent(QKeyEvent* event)
 }
 
 int SequenceTableView::sizeHintForColumn(int column) const {
-  return this->fontMetrics().horizontalAdvance('W');
+#if (QT_VERSION < QT_VERSION_CHECK(5,11,0))
+    return this->fontMetrics().width('W');
+#else
+    return this->fontMetrics().horizontalAdvance('W');
+#endif
 }
 
 int SequenceTableView::sizeHintForRow(int row) const {
diff --git a/modules/mol/alg/pymod/dockq.py b/modules/mol/alg/pymod/dockq.py
index c22ca78d21746de90900b2a1f539d931c8cc65a8..126c8f57519472b8cb74ccaa45e5b0719c9043f8 100644
--- a/modules/mol/alg/pymod/dockq.py
+++ b/modules/mol/alg/pymod/dockq.py
@@ -1,5 +1,6 @@
 from ost import geom
 from ost import mol
+from ost import seq
 
 def _PreprocessStructures(mdl, ref, mdl_ch1, mdl_ch2, ref_ch1, ref_ch2,
                           ch1_aln = None, ch2_aln = None):
@@ -15,7 +16,56 @@ def _PreprocessStructures(mdl, ref, mdl_ch1, mdl_ch2, ref_ch1, ref_ch2,
     ref_residues_1 = list()
     ref_residues_2 = list()
 
-    if ch1_aln is None and ch2_aln is None:
+    if ch1_aln is not None and ch2_aln is not None:
+        # there are potentially already views attached to the alns but
+        # we go for *mdl* and *ref* here
+        if ch1_aln.GetCount() != 2 or ch2_aln.GetCount() != 2:
+            raise RuntimeError("Expect exactly two sequences in provided alns!")
+
+        tmp = ch1_aln.GetSequence(0)
+        ref_s1 = seq.CreateSequence(tmp.GetName(), str(tmp))
+        ref_s1.SetOffset(tmp.GetOffset())
+        ref_s1.AttachView(ref.Select(f"cname={ref_ch1}"))
+        tmp = ch1_aln.GetSequence(1)
+        mdl_s1 = seq.CreateSequence(tmp.GetName(), str(tmp))
+        mdl_s1.SetOffset(tmp.GetOffset())
+        mdl_s1.AttachView(mdl.Select(f"cname={mdl_ch1}"))
+        new_ch1_aln = seq.CreateAlignment(ref_s1, mdl_s1)
+        for col in new_ch1_aln:
+            if col[0] != '-' and col[1] != '-':
+                ref_r = col.GetResidue(0)
+                mdl_r = col.GetResidue(1)
+                if not (ref_r.IsValid() and ref_r.one_letter_code == col[0]):
+                    raise RuntimeError("DockQ: mismatch between provided "
+                                       "alignments and ATOMSEQ in structures")
+                if not (mdl_r.IsValid() and mdl_r.one_letter_code == col[1]):
+                    raise RuntimeError("DockQ: mismatch between provided "
+                                       "alignments and ATOMSEQ in structures")
+                ref_residues_1.append(ref_r)
+                mdl_residues_1.append(mdl_r)
+
+        tmp = ch2_aln.GetSequence(0)
+        ref_s2 = seq.CreateSequence(tmp.GetName(), str(tmp))
+        ref_s2.SetOffset(tmp.GetOffset())
+        ref_s2.AttachView(ref.Select(f"cname={ref_ch2}"))
+        tmp = ch2_aln.GetSequence(1)
+        mdl_s2 = seq.CreateSequence(tmp.GetName(), str(tmp))
+        mdl_s2.SetOffset(tmp.GetOffset())
+        mdl_s2.AttachView(mdl.Select(f"cname={mdl_ch2}"))
+        new_ch2_aln = seq.CreateAlignment(ref_s2, mdl_s2)
+        for col in new_ch2_aln:
+            if col[0] != '-' and col[1] != '-':
+                ref_r = col.GetResidue(0)
+                mdl_r = col.GetResidue(1)
+                if not (ref_r.IsValid() and ref_r.one_letter_code == col[0]):
+                    raise RuntimeError("DockQ: mismatch between provided "
+                                       "alignments and ATOMSEQ in structures")
+                if not (mdl_r.IsValid() and mdl_r.one_letter_code == col[1]):
+                    raise RuntimeError("DockQ: mismatch between provided "
+                                       "alignments and ATOMSEQ in structures")
+                ref_residues_2.append(ref_r)
+                mdl_residues_2.append(mdl_r)
+    else:
         # go by residue numbers
         for mdl_r in mdl.Select(f"cname={mdl_ch1}").residues:
             ref_r = ref.FindResidue(ref_ch1, mdl_r.GetNumber())
@@ -27,8 +77,6 @@ def _PreprocessStructures(mdl, ref, mdl_ch1, mdl_ch2, ref_ch1, ref_ch2,
             if ref_r.IsValid():
                 mdl_residues_2.append(mdl_r)
                 ref_residues_2.append(ref_r)
-    else:
-        raise NotImplementedError("No aln mapping implemented yet")
 
     new_mdl = mdl.handle.CreateEmptyView()
     new_ref = ref.handle.CreateEmptyView()
diff --git a/modules/mol/alg/pymod/scoring.py b/modules/mol/alg/pymod/scoring.py
index 1cb97530eadd1f90f30a31b25df4405c798cf7b2..a2fd44555d11563032e9152e0ad61b42245f445a 100644
--- a/modules/mol/alg/pymod/scoring.py
+++ b/modules/mol/alg/pymod/scoring.py
@@ -878,28 +878,43 @@ class Scorer:
         nonmapped_interface_counts = list()
 
         flat_mapping = self.mapping.GetFlatMapping()
+        pep_seqs = set([s.GetName() for s in self.chain_mapper.polypep_seqs])
         for trg_int in self.qs_scorer.qsent1.interacting_chains:
             trg_ch1 = trg_int[0]
             trg_ch2 = trg_int[1]
-            if trg_ch1 in flat_mapping and trg_ch2 in flat_mapping:
-                mdl_ch1 = flat_mapping[trg_ch1]
-                mdl_ch2 = flat_mapping[trg_ch2]
-                res = dockq.DockQ(self.model, self.target, mdl_ch1, mdl_ch2,
-                                  trg_ch1, trg_ch2)
-                if res["nnat"] > 0:
-                    self._dockq_interfaces.append((trg_ch1, trg_ch2,
-                                                   mdl_ch1, mdl_ch2))
-                    self._dockq_native_contacts.append(res["nnat"])
-                    self._dockq_scores.append(res["DockQ"])
-            else:
-                # interface which is not covered by mdl... let's run DockQ with
-                # trg as trg/mdl in order to get the native contacts out
-                res = dockq.DockQ(self.target, self.target,
-                                  trg_ch1, trg_ch2, trg_ch1, trg_ch2)
-                if res["nnat"] > 0:
-                    self._dockq_nonmapped_interfaces.append((trg_ch1,
-                                                             trg_ch2))
-                    self._dockq_nonmapped_interfaces_counts.append(res["nnat"])
+            if trg_ch1 in pep_seqs and trg_ch2 in pep_seqs:
+                if trg_ch1 in flat_mapping and trg_ch2 in flat_mapping:
+                    mdl_ch1 = flat_mapping[trg_ch1]
+                    mdl_ch2 = flat_mapping[trg_ch2]
+                    aln1 = self.mapping.alns[(trg_ch1, mdl_ch1)]
+                    aln2 = self.mapping.alns[(trg_ch2, mdl_ch2)]
+                    # we're operating on the model/target from the MappingResult
+                    # as their ATOMSEQ corresponds to the alignments above.
+                    # Residues that do not contain all atoms required for
+                    # ChainMapper (e.g. N, CA, C, CB) are removed which triggers
+                    # a mismatch error in DockQ
+                    model = self.mapping.model
+                    target = self.mapping.target
+                    res = dockq.DockQ(model, target, mdl_ch1, mdl_ch2,
+                                      trg_ch1, trg_ch2, ch1_aln=aln1,
+                                      ch2_aln=aln2)
+                    if res["nnat"] > 0:
+                        self._dockq_interfaces.append((trg_ch1, trg_ch2,
+                                                       mdl_ch1, mdl_ch2))
+                        self._dockq_native_contacts.append(res["nnat"])
+                        self._dockq_scores.append(res["DockQ"])
+                else:
+                    # interface which is not covered by mdl... let's run DockQ
+                    # with trg as trg/mdl in order to get the native contacts
+                    # out
+                    # no need to pass alns as the residue numbers match for sure
+                    res = dockq.DockQ(self.target, self.target,
+                                      trg_ch1, trg_ch2, trg_ch1, trg_ch2)
+                    nnat = res["nnat"]
+                    if nnat > 0:
+                        self._dockq_nonmapped_interfaces.append((trg_ch1,
+                                                                 trg_ch2))
+                        self._dockq_nonmapped_interfaces_counts.append(nnat)
 
         # there are 4 types of combined scores
         # - simple average