Index: src/Potentials/Specifics/ManyBodyPotential_Tersoff.cpp
===================================================================
--- src/Potentials/Specifics/ManyBodyPotential_Tersoff.cpp	(revision d52819ede14972f2bbcf4abdb80e0a368502cc11)
+++ src/Potentials/Specifics/ManyBodyPotential_Tersoff.cpp	(revision 775dd1aa628462c5a79c38c46bfea677334fad29)
@@ -79,6 +79,5 @@
 
 ManyBodyPotential_Tersoff::ManyBodyPotential_Tersoff(
-    const ParticleTypes_t &_ParticleTypes,
-    boost::function< std::vector<arguments_t>(const argument_t &, const double)> &_triplefunction
+    const ParticleTypes_t &_ParticleTypes
     ) :
     SerializablePotential(_ParticleTypes),
@@ -90,5 +89,5 @@
     chi(1.),
     omega(1.),
-    triplefunction(_triplefunction)
+    triplefunction(&Helpers::NoOp_Triplefunction)
 {
   // have some decent defaults for parameter_derivative checking
@@ -122,6 +121,5 @@
     const double &_d,
     const double &_h,
-    const double &_offset,
-    boost::function< std::vector<arguments_t>(const argument_t &, const double)> &_triplefunction) :
+    const double &_offset) :
   SerializablePotential(_ParticleTypes),
   params(parameters_t(MAXPARAMS, 0.)),
@@ -132,5 +130,5 @@
   chi(_chi),
   omega(_mu),
-  triplefunction(_triplefunction)
+  triplefunction(&Helpers::NoOp_Triplefunction)
 {
 //  Info info(__func__);
Index: src/Potentials/Specifics/ManyBodyPotential_Tersoff.hpp
===================================================================
--- src/Potentials/Specifics/ManyBodyPotential_Tersoff.hpp	(revision d52819ede14972f2bbcf4abdb80e0a368502cc11)
+++ src/Potentials/Specifics/ManyBodyPotential_Tersoff.hpp	(revision 775dd1aa628462c5a79c38c46bfea677334fad29)
@@ -47,11 +47,8 @@
   /** Constructor for class ManyBodyPotential_Tersoff.
    *
-   * @param _triplefunction function that returns a list of triples (i.e. the
-   *        two remaining distances) to a given pair of points (contained as
-   *        indices within the argument)
+   * \param _ParticleTypes particle types for this potential
    */
   ManyBodyPotential_Tersoff(
-      const ParticleTypes_t &_ParticleTypes,
-      boost::function< std::vector<arguments_t>(const argument_t &, const double)> &_triplefunction
+      const ParticleTypes_t &_ParticleTypes
       );
 
@@ -95,6 +92,5 @@
       const double &_d,
       const double &_h,
-      const double &_offset,
-      boost::function< std::vector<arguments_t>(const argument_t &, const double)> &_triplefunction);
+      const double &_offset);
 
   /** Destructor of class ManyBodyPotential_Tersoff.
@@ -187,4 +183,17 @@
    */
   FunctionModel::extractor_t getFragmentSpecificExtractor(const charges_t &charges) const;
+
+  /** Sets the magic triple function that we use for getting angle distances.
+   *
+   * @param _triplefunction function that returns a list of triples (i.e. the
+   *        two remaining distances) to a given pair of points (contained as
+   *        indices within the argument)
+   */
+  void setTriplefunction(
+      boost::function< std::vector<arguments_t>(const argument_t &, const double)> &_triplefunction
+      )
+  {
+    triplefunction = _triplefunction;
+  }
 
 private:
@@ -337,5 +346,5 @@
 private:
   //!> bound function that obtains the triples for the internal coordinationb summation.
-  const boost::function< std::vector< arguments_t >(const argument_t &, const double)> &triplefunction;
+  boost::function< std::vector< arguments_t >(const argument_t &, const double)> triplefunction;
 
   //!> static definitions of the parameter name for this potential
Index: src/Potentials/Specifics/SaturationPotential.cpp
===================================================================
--- src/Potentials/Specifics/SaturationPotential.cpp	(revision d52819ede14972f2bbcf4abdb80e0a368502cc11)
+++ src/Potentials/Specifics/SaturationPotential.cpp	(revision 775dd1aa628462c5a79c38c46bfea677334fad29)
@@ -70,13 +70,9 @@
 
 SaturationPotential::SaturationPotential(
-    const ParticleTypes_t &_ParticleTypes,
-    const double _saturation_cutoff,
-    boost::function< std::vector<arguments_t>(const argument_t &, const double)> &_triplefunction) :
+    const ParticleTypes_t &_ParticleTypes) :
   SerializablePotential(_ParticleTypes),
   morse(_ParticleTypes),
   angle(symmetrizeTypes(_ParticleTypes)),
-  energy_offset(0.),
-  triplefunction(_triplefunction),
-  saturation_cutoff(_saturation_cutoff)
+  energy_offset(0.)
 {
   // have some decent defaults for parameter_derivative checking
@@ -95,13 +91,9 @@
     const double _morse_dissociation_energy,
     const double _angle_spring_constant,
-    const double _angle_equilibrium_distance,
-    const double _saturation_cutoff,
-    boost::function< std::vector<arguments_t>(const argument_t &, const double)> &_triplefunction) :
+    const double _angle_equilibrium_distance) :
   SerializablePotential(_ParticleTypes),
   morse(_ParticleTypes),
   angle(symmetrizeTypes(_ParticleTypes)),
-  energy_offset(_all_energy_offset),
-  triplefunction(_triplefunction),
-  saturation_cutoff(_saturation_cutoff)
+  energy_offset(_all_energy_offset)
 {
   ASSERT( _ParticleTypes.size() == (size_t)2,
Index: src/Potentials/Specifics/SaturationPotential.hpp
===================================================================
--- src/Potentials/Specifics/SaturationPotential.hpp	(revision d52819ede14972f2bbcf4abdb80e0a368502cc11)
+++ src/Potentials/Specifics/SaturationPotential.hpp	(revision 775dd1aa628462c5a79c38c46bfea677334fad29)
@@ -50,7 +50,5 @@
 public:
   SaturationPotential(
-      const ParticleTypes_t &_ParticleTypes,
-      const double _saturation_cutoff,
-      boost::function< std::vector<arguments_t>(const argument_t &, const double)> &_triplefunction
+      const ParticleTypes_t &_ParticleTypes
       );
   SaturationPotential(
@@ -61,34 +59,48 @@
       const double _morse_dissociation_energy,
       const double _angle_spring_constant,
-      const double _angle_equilibrium_distance,
+      const double _angle_equilibrium_distance
+      );
+  virtual ~SaturationPotential() {}
+
+  /** Setter for parameters as required by FunctionModel interface.
+   *
+   * \param _params given set of parameters
+   */
+  void setParameters(const parameters_t &_params);
+
+  /** Getter for parameters as required by FunctionModel interface.
+   *
+   * \return set of parameters
+   */
+  parameters_t getParameters() const;
+
+  /** Sets the parameter randomly within the sensible range of each parameter.
+   *
+   * \param data container with training data for guesstimating range
+   */
+  void setParametersToRandomInitialValues(const TrainingData &data);
+
+  /** Getter for the number of parameters of this model function.
+   *
+   * \return number of parameters
+   */
+  size_t getParameterDimension() const
+  { return MAXPARAMS; }
+
+  /** Sets the magic triple function that we use for getting angle distances.
+   *
+   * \param _saturation_cutoff cutoff for the triplefunction
+   * @param _triplefunction function that returns a list of triples (i.e. the
+   *        two remaining distances) to a given pair of points (contained as
+   *        indices within the argument)
+   */
+  void setTriplefunction(
       const double _saturation_cutoff,
       boost::function< std::vector<arguments_t>(const argument_t &, const double)> &_triplefunction
-      );
-  virtual ~SaturationPotential() {}
-
-  /** Setter for parameters as required by FunctionModel interface.
-   *
-   * \param _params given set of parameters
-   */
-  void setParameters(const parameters_t &_params);
-
-  /** Getter for parameters as required by FunctionModel interface.
-   *
-   * \return set of parameters
-   */
-  parameters_t getParameters() const;
-
-  /** Sets the parameter randomly within the sensible range of each parameter.
-   *
-   * \param data container with training data for guesstimating range
-   */
-  void setParametersToRandomInitialValues(const TrainingData &data);
-
-  /** Getter for the number of parameters of this model function.
-   *
-   * \return number of parameters
-   */
-  size_t getParameterDimension() const
-  { return MAXPARAMS; }
+      )
+  {
+    saturation_cutoff = _saturation_cutoff;
+    triplefunction = _triplefunction;
+  }
 
   /** Evaluates the harmonic potential function for the given arguments.
@@ -196,6 +208,6 @@
 
   //!> bound function that obtains the triples for the internal coordinationb summation.
-  const boost::function< std::vector< arguments_t >(const argument_t &, const double)> &triplefunction;
-  const double saturation_cutoff;
+  boost::function< std::vector< arguments_t >(const argument_t &, const double)> triplefunction;
+  double saturation_cutoff;
 
   //!> static definitions of the parameter name for this potential
Index: src/Potentials/Specifics/unittests/ManyBodyPotential_TersoffUnitTest.cpp
===================================================================
--- src/Potentials/Specifics/unittests/ManyBodyPotential_TersoffUnitTest.cpp	(revision d52819ede14972f2bbcf4abdb80e0a368502cc11)
+++ src/Potentials/Specifics/unittests/ManyBodyPotential_TersoffUnitTest.cpp	(revision 775dd1aa628462c5a79c38c46bfea677334fad29)
@@ -281,5 +281,6 @@
         (0)(1)
       ;
-  ManyBodyPotential_Tersoff tersoff(types, fct);
+  ManyBodyPotential_Tersoff tersoff(types);
+  tersoff.setTriplefunction(fct);
   tersoff.setParameters(params);
   const_cast<double &>(tersoff.R) = 1.8;
