Index: src/Potentials/Specifics/FourBodyPotential_Torsion.cpp
===================================================================
--- src/Potentials/Specifics/FourBodyPotential_Torsion.cpp	(revision 6029a669c919139fdd1b0addd74222bb7f5b554d)
+++ src/Potentials/Specifics/FourBodyPotential_Torsion.cpp	(revision 0932c2cf081d696ef9cc91e7a5183c13064994e0)
@@ -51,8 +51,10 @@
 #include "Potentials/InternalCoordinates/FourBody_TorsionAngle.hpp"
 #include "Potentials/ParticleTypeCheckers.hpp"
+#include "RandomNumbers/RandomNumberGeneratorFactory.hpp"
+#include "RandomNumbers/RandomNumberGenerator.hpp"
 
 class Fragment;
 
-// static definitions
+// static definitions1
 const FourBodyPotential_Torsion::ParameterNames_t
 FourBodyPotential_Torsion::ParameterNames =
@@ -254,6 +256,9 @@
     const TrainingData &data)
 {
-  params[FourBodyPotential_Torsion::spring_constant] = 2.*rand()/(double)RAND_MAX;
-  params[FourBodyPotential_Torsion::equilibrium_distance] = -.5+1.*rand()/(double)RAND_MAX;
-}
-
+  RandomNumberGenerator &random = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
+  const double rng_min = random.min();
+  const double rng_max = random.max();
+  params[FourBodyPotential_Torsion::spring_constant] = 2.*(random()/(rng_max-rng_min));
+  params[FourBodyPotential_Torsion::equilibrium_distance] = 2.*(random()/(rng_max-rng_min));
+}
+
Index: src/Potentials/Specifics/ManyBodyPotential_Tersoff.cpp
===================================================================
--- src/Potentials/Specifics/ManyBodyPotential_Tersoff.cpp	(revision 6029a669c919139fdd1b0addd74222bb7f5b554d)
+++ src/Potentials/Specifics/ManyBodyPotential_Tersoff.cpp	(revision 0932c2cf081d696ef9cc91e7a5183c13064994e0)
@@ -54,4 +54,6 @@
 #include "Potentials/InternalCoordinates/OneBody_Constant.hpp"
 #include "Potentials/ParticleTypeCheckers.hpp"
+#include "RandomNumbers/RandomNumberGeneratorFactory.hpp"
+#include "RandomNumbers/RandomNumberGenerator.hpp"
 
 class Fragment;
@@ -713,19 +715,22 @@
     const TrainingData &data)
 {
+  RandomNumberGenerator &random = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
+  const double rng_min = random.min();
+  const double rng_max = random.max();
 //  params[ManyBodyPotential_Tersoff::R] = 1./AtomicLengthToAngstroem;
 //  params[ManyBodyPotential_Tersoff::S] = 2./AtomicLengthToAngstroem;
-  params[ManyBodyPotential_Tersoff::A] = 1e+4*rand()/(double)RAND_MAX;//1.393600e+03;
-  params[ManyBodyPotential_Tersoff::B] = 1e+4*rand()/(double)RAND_MAX;//3.467000e+02;
-  params[ManyBodyPotential_Tersoff::lambda] = 1e+1*rand()/(double)RAND_MAX;//3.487900e+00;
-  params[ManyBodyPotential_Tersoff::mu] = 1e+1*rand()/(double)RAND_MAX;//2.211900e+00;
+  params[ManyBodyPotential_Tersoff::A] = 1e+4*(random()/(rng_max-rng_min));//1.393600e+03;
+  params[ManyBodyPotential_Tersoff::B] = 1e+4*(random()/(rng_max-rng_min));//3.467000e+02;
+  params[ManyBodyPotential_Tersoff::lambda] = 1e+1*(random()/(rng_max-rng_min));//3.487900e+00;
+  params[ManyBodyPotential_Tersoff::mu] = 1e+1*(random()/(rng_max-rng_min));//2.211900e+00;
   //  params[ManyBodyPotential_Tersoff::lambda3] = 0.;
   //  params[ManyBodyPotential_Tersoff::alpha] = 0.;
-  params[ManyBodyPotential_Tersoff::beta] = 1e-1*rand()/(double)RAND_MAX;//1.572400e-07;
+  params[ManyBodyPotential_Tersoff::beta] = 1e-1*(random()/(rng_max-rng_min));//1.572400e-07;
   //  params[ManyBodyPotential_Tersoff::chi] = 1.;
   //  params[ManyBodyPotential_Tersoff::omega] = 1.;
-  params[ManyBodyPotential_Tersoff::n] = 1e+1*rand()/(double)RAND_MAX;//7.275100e-01;
-  params[ManyBodyPotential_Tersoff::c] = 1e+1*rand()/(double)RAND_MAX;//3.804900e+04;
-  params[ManyBodyPotential_Tersoff::d] = 1e+1*rand()/(double)RAND_MAX;//4.384000e+00;
-  params[ManyBodyPotential_Tersoff::h] = 1e+1*rand()/(double)RAND_MAX;//-5.705800e-01;
-}
-
+  params[ManyBodyPotential_Tersoff::n] = 1e+1*(random()/(rng_max-rng_min));//7.275100e-01;
+  params[ManyBodyPotential_Tersoff::c] = 1e+1*(random()/(rng_max-rng_min));//3.804900e+04;
+  params[ManyBodyPotential_Tersoff::d] = 1e+1*(random()/(rng_max-rng_min));//4.384000e+00;
+  params[ManyBodyPotential_Tersoff::h] = 1e+1*(random()/(rng_max-rng_min));//-5.705800e-01;
+}
+
Index: src/Potentials/Specifics/PairPotential_Harmonic.cpp
===================================================================
--- src/Potentials/Specifics/PairPotential_Harmonic.cpp	(revision 6029a669c919139fdd1b0addd74222bb7f5b554d)
+++ src/Potentials/Specifics/PairPotential_Harmonic.cpp	(revision 0932c2cf081d696ef9cc91e7a5183c13064994e0)
@@ -52,4 +52,6 @@
 #include "Potentials/InternalCoordinates/TwoBody_Length.hpp"
 #include "Potentials/ParticleTypeCheckers.hpp"
+#include "RandomNumbers/RandomNumberGeneratorFactory.hpp"
+#include "RandomNumbers/RandomNumberGenerator.hpp"
 
 class Fragment;
@@ -213,6 +215,9 @@
     const TrainingData &data)
 {
-  params[PairPotential_Harmonic::equilibrium_distance] = 3e+0*rand()/(double)RAND_MAX + .5;// 1.;
-  params[PairPotential_Harmonic::spring_constant] = 1e+0*rand()/(double)RAND_MAX;// 0.2;
-}
-
+  RandomNumberGenerator &random = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
+  const double rng_min = random.min();
+  const double rng_max = random.max();
+  params[PairPotential_Harmonic::equilibrium_distance] = 3e+0*(random()/(rng_max-rng_min)) + .5;// 1.;
+  params[PairPotential_Harmonic::spring_constant] = 1e+0*(random()/(rng_max-rng_min));// 0.2;
+}
+
Index: src/Potentials/Specifics/PairPotential_LennardJones.cpp
===================================================================
--- src/Potentials/Specifics/PairPotential_LennardJones.cpp	(revision 6029a669c919139fdd1b0addd74222bb7f5b554d)
+++ src/Potentials/Specifics/PairPotential_LennardJones.cpp	(revision 0932c2cf081d696ef9cc91e7a5183c13064994e0)
@@ -52,4 +52,6 @@
 #include "Potentials/InternalCoordinates/TwoBody_Length.hpp"
 #include "Potentials/ParticleTypeCheckers.hpp"
+#include "RandomNumbers/RandomNumberGeneratorFactory.hpp"
+#include "RandomNumbers/RandomNumberGenerator.hpp"
 
 class Fragment;
@@ -222,6 +224,9 @@
     const TrainingData &data)
 {
-  params[PairPotential_LennardJones::epsilon] = 1e-2*rand()/(double)RAND_MAX;
-  params[PairPotential_LennardJones::sigma] = (3.+10.*rand()/(double)RAND_MAX);// 0.5;
-}
-
+  RandomNumberGenerator &random = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
+  const double rng_min = random.min();
+  const double rng_max = random.max();
+  params[PairPotential_LennardJones::epsilon] = 1e-2*(random()/(rng_max-rng_min));
+  params[PairPotential_LennardJones::sigma] = (3.+10.*(random()/(rng_max-rng_min)));// 0.5;
+}
+
Index: src/Potentials/Specifics/PairPotential_Morse.cpp
===================================================================
--- src/Potentials/Specifics/PairPotential_Morse.cpp	(revision 6029a669c919139fdd1b0addd74222bb7f5b554d)
+++ src/Potentials/Specifics/PairPotential_Morse.cpp	(revision 0932c2cf081d696ef9cc91e7a5183c13064994e0)
@@ -53,4 +53,6 @@
 #include "Potentials/InternalCoordinates/TwoBody_Length.hpp"
 #include "Potentials/ParticleTypeCheckers.hpp"
+#include "RandomNumbers/RandomNumberGeneratorFactory.hpp"
+#include "RandomNumbers/RandomNumberGenerator.hpp"
 
 class Fragment;
@@ -242,7 +244,10 @@
     const TrainingData &data)
 {
-  params[PairPotential_Morse::dissociation_energy] = 1e+0*rand()/(double)RAND_MAX;// 0.5;
-  params[PairPotential_Morse::spring_constant] = 1e+0*rand()/(double)RAND_MAX;// 1.;
-  params[PairPotential_Morse::equilibrium_distance] =  3e+0*rand()/(double)RAND_MAX;//2.9;
-}
-
+  RandomNumberGenerator &random = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
+  const double rng_min = random.min();
+  const double rng_max = random.max();
+  params[PairPotential_Morse::dissociation_energy] = 1e+0*(random()/(rng_max-rng_min));// 0.5;
+  params[PairPotential_Morse::spring_constant] = 1e+0*(random()/(rng_max-rng_min));// 1.;
+  params[PairPotential_Morse::equilibrium_distance] =  3e+0*(random()/(rng_max-rng_min));//2.9;
+}
+
Index: src/Potentials/Specifics/ThreeBodyPotential_Angle.cpp
===================================================================
--- src/Potentials/Specifics/ThreeBodyPotential_Angle.cpp	(revision 6029a669c919139fdd1b0addd74222bb7f5b554d)
+++ src/Potentials/Specifics/ThreeBodyPotential_Angle.cpp	(revision 0932c2cf081d696ef9cc91e7a5183c13064994e0)
@@ -52,4 +52,6 @@
 #include "Potentials/InternalCoordinates/ThreeBody_Angle.hpp"
 #include "Potentials/ParticleTypeCheckers.hpp"
+#include "RandomNumbers/RandomNumberGeneratorFactory.hpp"
+#include "RandomNumbers/RandomNumberGenerator.hpp"
 
 class Fragment;
@@ -240,6 +242,9 @@
     const TrainingData &data)
 {
-  params[ThreeBodyPotential_Angle::spring_constant] = 1e+0*rand()/(double)RAND_MAX;// 0.2;
-  params[ThreeBodyPotential_Angle::equilibrium_distance] = -0.3;//2e+0*rand()/(double)RAND_MAX - 1.;// 1.;
-}
-
+  RandomNumberGenerator &random = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
+  const double rng_min = random.min();
+  const double rng_max = random.max();
+  params[ThreeBodyPotential_Angle::spring_constant] = 1e+0*(random()/(rng_max-rng_min));// 0.2;
+  params[ThreeBodyPotential_Angle::equilibrium_distance] = -0.3;//2e+0*(random()/(rng_max-rng_min)) - 1.;// 1.;
+}
+
Index: src/Potentials/Specifics/unittests/Makefile.am
===================================================================
--- src/Potentials/Specifics/unittests/Makefile.am	(revision 6029a669c919139fdd1b0addd74222bb7f5b554d)
+++ src/Potentials/Specifics/unittests/Makefile.am	(revision 0932c2cf081d696ef9cc91e7a5183c13064994e0)
@@ -41,4 +41,5 @@
 	../libMolecuilderFragmentation.la \
 	../libMolecuilderFunctionApproximation.la \
+	../libMolecuilderRandomNumbers.la \
 	$(top_builddir)/LinearAlgebra/src/LinearAlgebra/libLinearAlgebra.la \
 	${CodePatterns_LIBS} \
Index: src/Potentials/unittests/Makefile.am
===================================================================
--- src/Potentials/unittests/Makefile.am	(revision 6029a669c919139fdd1b0addd74222bb7f5b554d)
+++ src/Potentials/unittests/Makefile.am	(revision 0932c2cf081d696ef9cc91e7a5183c13064994e0)
@@ -37,4 +37,5 @@
 	../libMolecuilderFunctionApproximation.la \
 	../libMolecuilderFragmentation_getFromKeysetStub.la \
+	../libMolecuilderRandomNumbers.la \
 	$(top_builddir)/LinearAlgebra/src/LinearAlgebra/libLinearAlgebra.la \
 	${CodePatterns_LIBS} \
Index: src/RandomNumbers/RandomNumberEngine_Encapsulation.hpp
===================================================================
--- src/RandomNumbers/RandomNumberEngine_Encapsulation.hpp	(revision 6029a669c919139fdd1b0addd74222bb7f5b554d)
+++ src/RandomNumbers/RandomNumberEngine_Encapsulation.hpp	(revision 0932c2cf081d696ef9cc91e7a5183c13064994e0)
@@ -126,5 +126,5 @@
     RandomNumberEngine* MyClone = new RandomNumberEngine_Encapsulation<engine>(*params);
     delete params;
-    //MyClone->seed(getseed());
+    MyClone->seed(getseed());
     return MyClone;
   }
Index: src/documentation/constructs/potentials.dox
===================================================================
--- src/documentation/constructs/potentials.dox	(revision 6029a669c919139fdd1b0addd74222bb7f5b554d)
+++ src/documentation/constructs/potentials.dox	(revision 0932c2cf081d696ef9cc91e7a5183c13064994e0)
@@ -132,7 +132,15 @@
  *
  *  As we always start from random initial parameters (within a certain sensible
- *  range at least), the non-linear fit does not always converge. For this case
- *  the FragmentationFitPotentialAction has the option "take-best-of" to allow
- *  for multiple fits where the best (in terms of l2 error) is taken eventually.
+ *  range at least), the non-linear fit does not always converge. Note that the
+ *  random values are drawn from the defined distribution and the uniform distributionm
+ *  engine is obtained from the currently set, see \ref randomnumbers. Hence, you
+ *  can manipulate both in order to get different results or to set the seed such that
+ *  some "randomly" drawn value always work well (e.g. for testing). 
+ *  
+ *  In any case, For this case the FragmentationFitPotentialAction has the option 
+ *  "take-best-of" to allow for multiple fits where the best (in terms of l2 error) 
+ *  is taken eventually. Furthermore, you can use the "set-threshold" option to
+ *  stop restarting the fit procedure first when the L2 error has dropped below the
+ *  given threshold.
  *
  * \section potentials-howto-add Howto add new potentials
@@ -145,4 +153,6 @@
  *  -# Add the potential name as case to PotentialFactory such that it knows
  *     how to instantiate your new potential when requested.
+ *  -# Remember to use the the RandomNumberGenerator for getting random starting
+ *     values!
  *
  * PotentialTypes.def contains a boost::preprocessor sequence of all
