diff --git a/loop/src/backbone.cc b/loop/src/backbone.cc
index 648be1aa0b3d112620988933318320f3e0691bb6..3108e7f2efe3a962b29c27f40fe48902567ff511 100644
--- a/loop/src/backbone.cc
+++ b/loop/src/backbone.cc
@@ -1,4 +1,5 @@
 #include <promod3/loop/backbone.hh>
+#include <ost/conop/processor.hh>
 
 namespace{
 
@@ -648,6 +649,18 @@ void BackboneList::InsertInto(ost::mol::ChainHandle& chain,
 
   edi.Connect(last.FindAtom("C"),after.FindAtom("N"));
   edi.ReorderResidues(chain);
+
+  // add backbone torsions
+  ost::mol::ResidueHandle r1;
+  ost::mol::ResidueHandle r2 = chain.FindResidue(n_num - 1);
+  ost::mol::ResidueHandle r3 = chain.FindResidue(n_num);
+  for (ost::mol::ResNum r_num = n_num; r_num <= c_num; ++r_num) {
+    // add for r_num
+    r1 = r2;
+    r2 = r3;
+    r3 = chain.FindResidue(r_num + 1);
+    ost::conop::AssignBackboneTorsions(r1, r2, r3);
+  }
 }
 
 
diff --git a/sidechain/pymod/_reconstruct_sidechains.py b/sidechain/pymod/_reconstruct_sidechains.py
index 7ec0a9f86f174d5f01f1bb915187173997afa76b..9b147775d790ac06447fd60a5dd6bc183feb86fb 100644
--- a/sidechain/pymod/_reconstruct_sidechains.py
+++ b/sidechain/pymod/_reconstruct_sidechains.py
@@ -294,8 +294,26 @@ def Reconstruct(ent, keep_sidechains = False, build_disulfids = True,
 
         if rot_id == sidechain.PRO:
             tor = r.GetOmegaTorsion()
+            omega = None
             if tor.IsValid():
-                if abs(tor.GetAngle()) < 1.57:
+                omega = tor.GetAngle()
+            elif i > 0:
+                # fallback computation of omega as in OST-code
+                prev = prot.residues[i-1]
+                if prev.IsValid() and prev.IsPeptideLinking():
+                    ca_prev = prev.FindAtom("CA")
+                    c_prev = prev.FindAtom("C")
+                    n = r.FindAtom("N")
+                    ca = r.FindAtom("CA")
+                    valid = ca_prev.IsValid() and c_prev.IsValid() \
+                            and n.IsValid() and ca.IsValid()
+                    if valid and mol.BondExists(c_prev.handle, n.handle):
+                        omega = geom.DihedralAngle(ca_prev.GetPos(),
+                                                   c_prev.GetPos(),
+                                                   n.GetPos(), ca.GetPos())
+            # omega not set if prev. res. missing
+            if omega is not None:
+                if abs(omega) < 1.57:
                     rot_id = sidechain.CPR
                 else:
                     rot_id = sidechain.TPR