diff --git a/modules/mol/alg/pymod/export_svd_superpose.cc b/modules/mol/alg/pymod/export_svd_superpose.cc
index 9c4087021f959a7906384d77dda7e6ca9a104541..d5f942fe756731899f62c9d3ffd0d5a570355040 100644
--- a/modules/mol/alg/pymod/export_svd_superpose.cc
+++ b/modules/mol/alg/pymod/export_svd_superpose.cc
@@ -36,6 +36,8 @@ 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;
+  SuperpositionResult (*sup3)(const mol::EntityView&,const mol::EntityView&, int, Real, bool) = IterativeSuperposeSVD;
+  SuperpositionResult (*sup4)(const std::vector<geom::Vec3>&,const std::vector<geom::Vec3>&, int, Real) = IterativeSuperposeSVD;
   class_<SuperpositionResult>("SuperpositionResult", init<>())
     .def_readwrite("ncycles", &SuperpositionResult::ncycles)
     .def_readwrite("rmsd", &SuperpositionResult::rmsd)
@@ -51,7 +53,8 @@ void export_svdSuperPose()
   def("SuperposeAtoms", &SuperposeAtoms,(arg("apply_transform")=true));
   def("SuperposeSVD", sup1, (arg("apply_transform")=true));
   def("SuperposeSVD", sup2, (arg("apply_transform")=true));
-  def("IterativeSuperposeSVD", &IterativeSuperposeSVD,(arg("max_iterations")=5, arg("distance_threshold")=3.0,arg("apply_transform")=true));
+  def("IterativeSuperposeSVD", sup3,(arg("max_iterations")=5, arg("distance_threshold")=3.0,arg("apply_transform")=true));
+  def("IterativeSuperposeSVD", sup4,(arg("max_iterations")=5, arg("distance_threshold")=3.0));
   def("CalculateRMSD", &CalculateRMSD, (arg("transformation")=geom::Mat4()));
 }
 
diff --git a/modules/mol/alg/src/svd_superpose.cc b/modules/mol/alg/src/svd_superpose.cc
index 38dd51202d87327646b1989f996b8bf8166d4bc7..c5279eb35a62e6ed8f079db85c795bcb31a667c6 100644
--- a/modules/mol/alg/src/svd_superpose.cc
+++ b/modules/mol/alg/src/svd_superpose.cc
@@ -498,5 +498,16 @@ SuperpositionResult IterativeSuperposeSVD(const mol::EntityView& ev,
   return result;
 }
 
+SuperpositionResult DLLEXPORT_OST_MOL_ALG IterativeSuperposeSVD(const std::vector<geom::Vec3>& pl1,
+                                                                const std::vector<geom::Vec3>& pl2,
+                                                                int max_cycles,
+                                                                Real distance_threshold){
+
+  MeanSquareMinimizer msm = MeanSquareMinimizer::FromPointLists(pl1, pl2);
+  SuperpositionResult result = msm.IterativeMinimize(max_cycles, distance_threshold);
+  result.rmsd = calc_rmsd_for_point_lists(pl1, pl2, result.transformation);
+  return result;
+}
+
 
 }}} //ns
diff --git a/modules/mol/alg/src/svd_superpose.hh b/modules/mol/alg/src/svd_superpose.hh
index bdbaf505de02ef8ab6928f268ba9fd63de0d74ee..28ee7a0d4fea5312de3937416f6af63e6410a870 100644
--- a/modules/mol/alg/src/svd_superpose.hh
+++ b/modules/mol/alg/src/svd_superpose.hh
@@ -102,6 +102,14 @@ SuperpositionResult DLLEXPORT_OST_MOL_ALG IterativeSuperposeSVD(const mol::Entit
                                                                 Real distance_threshold,
                                                                 bool apply_transform);
 
+/// \brief iterative superposition of two point lists
+SuperpositionResult DLLEXPORT_OST_MOL_ALG IterativeSuperposeSVD(const std::vector<geom::Vec3>& pl1,
+                                                                const std::vector<geom::Vec3>& pl2,
+                                                                int max_cycles,
+                                                                Real distance_threshold);
+
+
+
 /// \brief calculates RMSD for two entity view 
 Real DLLEXPORT_OST_MOL_ALG CalculateRMSD(const mol::EntityView& ev1,
                                          const mol::EntityView& ev2,