diff --git a/modules/mol/alg/pymod/export_svd_superpose.cc b/modules/mol/alg/pymod/export_svd_superpose.cc
index 435744e523ee0ac57c9fac79de5c9804d1d39c7f..3acdc6f6b7d0bef234d00cde96a0e14b76b02a91 100644
--- a/modules/mol/alg/pymod/export_svd_superpose.cc
+++ b/modules/mol/alg/pymod/export_svd_superpose.cc
@@ -30,6 +30,8 @@ using namespace ost::mol::alg;
 
 void export_svdSuperPose()
 {
+  SuperpositionResult (*sup1)(const mol::EntityView&,const mol::EntityView&,bool) = SuperposeSVD;
+  SuperpositionResult (*sup2)(const std::vector<geom::Vec3>&,const std::vector<geom::Vec3>& ) = SuperposeSVD;
   class_<SuperpositionResult>("SuperpositionResult", init<>())
     .def_readwrite("ncycles", &SuperpositionResult::ncycles)
     .def_readwrite("rmsd", &SuperpositionResult::rmsd)
@@ -41,7 +43,8 @@ void export_svdSuperPose()
                &SuperpositionResult::entity_view2)
   ;
   def("SuperposeAtoms", &SuperposeAtoms,(arg("apply_transform")=true));
-  def("SuperposeSVD", &SuperposeSVD, (arg("apply_transform")=true));
+  def("SuperposeSVD", sup1);
+  def("SuperposeSVD", sup2);
   def("CalculateRMSD", &CalculateRMSD, (arg("transformation")=geom::Mat4()));
   def("IterativeSuperposition", &IterativeSuperposition, (arg("ncycles")=200,
                                                           arg("dist_thres")=4.0,
diff --git a/modules/mol/alg/src/svd_superpose.cc b/modules/mol/alg/src/svd_superpose.cc
index 2f770167f236fa5c1a7dc02aef7016c77823fc90..191871a9c888eca76ef2672def7d08e71281523c 100644
--- a/modules/mol/alg/src/svd_superpose.cc
+++ b/modules/mol/alg/src/svd_superpose.cc
@@ -131,6 +131,8 @@ public:
                                   ERVecX Vec);
   SuperpositionResult Run(const mol::AtomViewList& atoms1,          
                           const mol::AtomViewList& atoms2);
+  SuperpositionResult Run(const std::vector<geom::Vec3>& pl1,
+                          const std::vector<geom::Vec3>& pl2);
   SuperpositionResult DoSuperposition();
   EIGEN_MAKE_ALIGNED_OPERATOR_NEW //needed only if *fixed* sized matrices are
                                     //members of classes  
@@ -295,6 +297,12 @@ SuperpositionResult SuperposerSVD::Run(const mol::AtomViewList& atoms1,
   return impl_->Run(atoms1, atoms2);
 }
 
+SuperpositionResult SuperposerSVD::Run(const std::vector<geom::Vec3>& pl1,
+                                       const std::vector<geom::Vec3>& pl2)
+{
+  return impl_->Run(pl1,pl2);
+}
+  
 SuperpositionResult SuperposerSVDImpl::Run(const mol::AtomViewList& atoms1,
                                            const mol::AtomViewList& atoms2)
 {
@@ -315,6 +323,15 @@ SuperpositionResult SuperposerSVDImpl::Run(const mol::AtomViewList& atoms1,
   return this->DoSuperposition();
 }
 
+SuperpositionResult SuperposerSVDImpl::Run(const std::vector<geom::Vec3>& pl1,
+                                           const std::vector<geom::Vec3>& pl2)
+{
+  for (unsigned int counter=0; counter<pl1.size();++counter) {
+    atoms1_.row(counter)=ERVec3(SuperposerSVDImpl::Vec3ToEigenVec(pl1[counter]));
+    atoms2_.row(counter)=ERVec3(SuperposerSVDImpl::Vec3ToEigenVec(pl2[counter]));
+  }
+  return this->DoSuperposition();
+}
 
 
 SuperpositionResult SuperposeAtoms(const mol::AtomViewList& atoms1,
@@ -370,6 +387,24 @@ SuperpositionResult SuperposeSVD(const mol::EntityView& ev1,
   return res;
 }
 
+SuperpositionResult SuperposeSVD(const std::vector<geom::Vec3>& pl1,
+                                 const std::vector<geom::Vec3>& pl2)
+{
+  if (pl1.size()!=pl2.size()){
+    throw std::runtime_error("pointlist lengths not equal");
+  }
+  if ((pl1.size()<3)){
+    throw std::runtime_error("three or more points required");
+  }
+  SuperposerSVD sp(pl1.size(), true);
+  SuperpositionResult res=sp.Run(pl1, pl2);
+  res.entity_view1=EntityView();
+  res.entity_view2=EntityView();
+  res.ncycles=1;
+  res.rmsd=0.0;
+  return res;
+}
+
 SuperpositionResult IterativeSuperposition(mol::EntityView& ev1,
                                            mol::EntityView& ev2,
                                            int ncycles,
diff --git a/modules/mol/alg/src/svd_superpose.hh b/modules/mol/alg/src/svd_superpose.hh
index 80f0762785df0d71bbd90a588c14ed79f30f37e1..1b3f5e29a156cb77b4f62437e86e3124a38d17ca 100644
--- a/modules/mol/alg/src/svd_superpose.hh
+++ b/modules/mol/alg/src/svd_superpose.hh
@@ -59,6 +59,9 @@ public:
   SuperpositionResult Run(const mol::AtomViewList& atoms1,
                           const mol::AtomViewList& atoms2);
 
+  SuperpositionResult Run(const std::vector<geom::Vec3>& pl1,
+                          const std::vector<geom::Vec3>& pl2);
+
 private:
   SuperposerSVDImpl* impl_;
 };
@@ -72,6 +75,10 @@ SuperpositionResult DLLEXPORT_OST_MOL_ALG SuperposeSVD(const mol::EntityView& ev
                                                     const mol::EntityView& ev2,
                                                     bool apply_transform);
 
+/// \brief superposes two pointlists
+SuperpositionResult DLLEXPORT_OST_MOL_ALG SuperposeSVD(const std::vector<geom::Vec3>& pl1,
+                                                       const std::vector<geom::Vec3>& pl2);
+
 /// \brief iterative superposition
 SuperpositionResult DLLEXPORT_OST_MOL_ALG IterativeSuperposition(mol::EntityView& ev1,
                                                     mol::EntityView& ev2,