diff --git a/src/BioHelpers_FABER/rmsd.py b/src/BioHelpers_FABER/rmsd.py
index 2a066e356f721825efeba64c7e536f7757a4d5df..5f4281de5486f6f2e2aa50381794861c98ae751e 100644
--- a/src/BioHelpers_FABER/rmsd.py
+++ b/src/BioHelpers_FABER/rmsd.py
@@ -117,10 +117,10 @@ def rmsd_from_rot_tran(
     :return: RMSD like value (:math:`\sqrt{E}`)
     :rtype: float
     """
-    print(trans.shape)
-    print(np.matmul(rot, x).shape, y.shape)
-
-    return 0.0
+    num_vec = x.shape[1]
+    intermediate = np.matmul(rot, x) + trans[:, np.newaxis] + y
+    squared = np.trace(np.matmul(np.transpose(intermediate), intermediate)) / num_vec
+    return np.sqrt(squared)
 
 
 def rmsd(x: np.ndarray, y: np.ndarray) -> float:
@@ -220,9 +220,9 @@ def rmsd_per_residue(file1: str, file2: str) -> list[float]:
             res2_AA = [list(a.get_vector()) for a in res2.get_atoms()]
             res1_AA = np.transpose(np.array(res1_AA))
             res2_AA = np.transpose(np.array(res2_AA))
-            rmsd_from_rot_tran(res1_AA, res2_AA, rot, trans)
+            values.append(rmsd_from_rot_tran(res1_AA, res2_AA, rot, trans))
 
-    return [0.0]
+    return values
 
 
 if __name__ == "__main__":
diff --git a/test_rmsd.py b/test_rmsd.py
index d42a0a51b5e783c9b7a96a07cb3fadc8e58ec1cc..32a194c8491a8e1e6b7facf4292a69b98c5faaf8 100644
--- a/test_rmsd.py
+++ b/test_rmsd.py
@@ -32,7 +32,6 @@ def main():
     rot, tran = sup.get_rotran()
     # rmsd per residue
     print(rmsd.rmsd_per_residue(file1, file2))
-    print("Hallo Welt", val, val2)
 
 
 if __name__ == "__main__":