Index: src/RandomNumbers/Makefile.am
===================================================================
--- src/RandomNumbers/Makefile.am	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/Makefile.am	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -10,6 +10,8 @@
 RANDOMSOURCE = \
 	RandomNumberDistribution_Encapsulation.cpp \
+	RandomNumberDistribution_Parameters.cpp \
 	RandomNumberDistributionFactory.cpp \
 	RandomNumberEngine_Encapsulation.cpp \
+	RandomNumberEngine_Parameters.cpp \
 	RandomNumberEngineFactory.cpp \
 	RandomNumberGenerator.cpp \
@@ -20,8 +22,10 @@
 RANDOMHEADER = \
 	RandomNumberDistribution.hpp \
+	RandomNumberDistribution_Parameters.hpp \
 	RandomNumberDistribution_Encapsulation.hpp \
 	RandomNumberDistributionFactory.hpp \
 	RandomNumberEngine.hpp \
 	RandomNumberEngine_Encapsulation.hpp \
+	RandomNumberEngine_Parameters.hpp \
 	RandomNumberEngineFactory.hpp \
 	RandomNumberGenerator.hpp \
Index: src/RandomNumbers/RandomNumberDistribution.hpp
===================================================================
--- src/RandomNumbers/RandomNumberDistribution.hpp	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/RandomNumberDistribution.hpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -16,4 +16,5 @@
 class RandomNumberDistributionFactoryTest;
 class RandomNumberGenerator;
+class RandomNumberDistribution_Parameters;
 
 /** Abstract base class for a random number distribution.
@@ -37,5 +38,11 @@
 
 public:
-  /** Getter for smallest value the engine produces.
+  /** Getter for the whole set of possible parameters.
+   *
+   * @return filled instance of RandomNumberDistribution_Parameters
+   */
+  virtual RandomNumberDistribution_Parameters* getParameterSet() const=0;
+
+  /** Getter for smallest value the uniform_... engines produces.
    *
    * @return smallest value
@@ -43,5 +50,5 @@
   virtual double min() const=0;
 
-  /** Getter for largest value the engine produces.
+  /** Getter for largest value the uniform_... engines produces.
    *
    * @return largest value
@@ -56,6 +63,61 @@
   virtual double p() const=0;
 
+  /** Getter for binomial_distribution's parameter t.
+   *
+   * @return t
+   */
+  virtual double t() const=0;
+
+  /** Getter for cauchy_distribution parameter median.
+   *
+   * @return median
+   */
+  virtual double median() const=0;
+
+  /** Getter for cauchy_distribution parameter sigma.
+   *
+   * @return sigma
+   */
+  virtual double sigma() const=0;
+
+  /** Getter for gamma_distribution parameter alpha.
+   *
+   * @return alpha
+   */
+  virtual double alpha() const=0;
+
+  /** Getter for poisson_distribution's parameter mean.
+   *
+   * @return mean
+   */
+  virtual double mean() const=0;
+
+  /** Getter for triangle_distribution parameter a.
+   *
+   * @return a
+   */
+  virtual double a() const=0;
+
+  /** Getter for triangle_distribution parameter b.
+   *
+   * @return b
+   */
+  virtual double b() const=0;
+
+  /** Getter for triangle_distribution parameter c.
+   *
+   * @return c
+   */
+  virtual double c() const=0;
+
+  /** Getter for exponential_distribution parameter lambda.
+   *
+   * @return lambda
+   */
+  virtual double lambda() const=0;
+
   /** Getter for the type name of the internal distribution.
    *
+   * @return name of distribution
    */
   virtual std::string name()=0;
Index: src/RandomNumbers/RandomNumberDistributionFactory.cpp
===================================================================
--- src/RandomNumbers/RandomNumberDistributionFactory.cpp	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/RandomNumberDistributionFactory.cpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -42,4 +42,5 @@
 
 #include "RandomNumberDistribution_Encapsulation.hpp"
+#include "RandomNumberDistribution_Parameters.hpp"
 
 #include "RandomNumberDistributionFactory.hpp"
@@ -47,5 +48,5 @@
 // has to be included BEFORE PrototypeFactory_impl.hpp!
 #include "RandomNumberDistributionFactory.def"
-#include "CodePatterns/PrototypeFactory_impl.hpp"
+#include "CodePatterns/ManipulablePrototypeFactory_impl.hpp"
 
 RandomNumberDistributionFactory::RandomNumberDistributionFactory()
@@ -60,5 +61,5 @@
 
 CONSTRUCT_SINGLETON(RandomNumberDistributionFactory)
-CONSTRUCT_PROTOTYPEFACTORY(RandomNumberDistribution)
+CONSTRUCT_MANIPULABLEPROTOTYPEFACTORY(RandomNumberDistribution, RandomNumberDistribution_Parameters)
 
 #include "RandomNumberDistributionFactory.undef"
Index: src/RandomNumbers/RandomNumberDistributionFactory.def
===================================================================
--- src/RandomNumbers/RandomNumberDistributionFactory.def	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/RandomNumberDistributionFactory.def	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -25,4 +25,5 @@
 #define FactoryNAME RandomNumberDistributionFactory
 #define Abstract_Interface_Class RandomNumberDistribution
+#define Abstract_Parameter_Class RandomNumberDistribution_Parameters
 #define Abstract_Encapsulation_Class RandomNumberDistribution_Encapsulation
 #define type_name_space boost::
Index: src/RandomNumbers/RandomNumberDistributionFactory.hpp
===================================================================
--- src/RandomNumbers/RandomNumberDistributionFactory.hpp	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/RandomNumberDistributionFactory.hpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -21,10 +21,12 @@
 #include "RandomNumberDistributionFactory.undef"
 
-#include "CodePatterns/PrototypeFactory.hpp"
+#include "CodePatterns/ManipulablePrototypeFactory.hpp"
 
 #include <map>
 
 class RandomNumberDistribution;
+class RandomNumberDistribution_Parameters;
 class RandomNumberDistributionFactoryUnitTest;
+class CommandSetRandomNumbersDistributionAction;
 
 /** This is the abstract factory class for random number distributions.
@@ -39,8 +41,9 @@
 class RandomNumberDistributionFactory :
   public Singleton<RandomNumberDistributionFactory>,
-  public PrototypeFactory<RandomNumberDistribution>
+  public ManipulablePrototypeFactory<RandomNumberDistribution, RandomNumberDistribution_Parameters>
 {
   friend class Singleton<RandomNumberDistributionFactory>;
   friend class RandomNumberDistributionFactoryTest;
+  friend class CommandSetRandomNumbersDistributionAction;
 
 protected:
Index: src/RandomNumbers/RandomNumberDistributionFactory.undef
===================================================================
--- src/RandomNumbers/RandomNumberDistributionFactory.undef	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/RandomNumberDistributionFactory.undef	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -5,4 +5,5 @@
 #undef FactoryNAME
 #undef Abstract_Interface_Class
+#undef Abstract_Parameter_Class
 #undef Abstract_Encapsulation_Class
 #undef type_name_space
Index: src/RandomNumbers/RandomNumberDistribution_Encapsulation.cpp
===================================================================
--- src/RandomNumbers/RandomNumberDistribution_Encapsulation.cpp	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/RandomNumberDistribution_Encapsulation.cpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -24,4 +24,83 @@
 #include "RandomNumberDistribution_Encapsulation.hpp"
 
+/* =========  manipulatedclone() ================ */
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::uniform_smallint<> >::
+RandomNumberDistribution_Encapsulation (const RandomNumberDistribution_Parameters&_params) :
+  distribution_type(_params.min, _params.max)
+{}
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::uniform_int<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
+  distribution_type(_params.min, _params.max)
+{}
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::uniform_real<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
+  distribution_type(_params.min, _params.max)
+{}
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::bernoulli_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
+  distribution_type(_params.p)
+{}
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::binomial_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
+  distribution_type((int)_params.t, _params.p)
+{}
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::cauchy_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
+  distribution_type(_params.median, _params.sigma)
+{}
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::gamma_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
+  distribution_type(_params.alpha)
+{}
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::poisson_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
+  distribution_type(_params.mean)
+{}
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::geometric_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
+  distribution_type(_params.p)
+{}
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::triangle_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
+  distribution_type(_params.a, _params.b, _params.c)
+{}
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::exponential_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
+  distribution_type(_params.lambda)
+{}
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::normal_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
+  distribution_type(_params.mean, _params.sigma)
+{}
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::lognormal_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
+  distribution_type(_params.mean, _params.sigma)
+{}
 
 /* ===============  min() ======================= */
Index: src/RandomNumbers/RandomNumberDistribution_Encapsulation.hpp
===================================================================
--- src/RandomNumbers/RandomNumberDistribution_Encapsulation.hpp	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/RandomNumberDistribution_Encapsulation.hpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -37,6 +37,8 @@
 #include <boost/random/uniform_smallint.hpp>
 
-#include "CodePatterns/Clone.hpp"
+#include "CodePatterns/ManipulableClone.hpp"
 #include "RandomNumberDistribution.hpp"
+
+#include "RandomNumberDistribution_Parameters.hpp"
 
 class RandomNumberDistributionFactory;
@@ -52,5 +54,5 @@
 class RandomNumberDistribution_Encapsulation :
   public RandomNumberDistribution,
-  public Clone<RandomNumberDistribution>
+  public ManipulableClone<RandomNumberDistribution, RandomNumberDistribution_Parameters>
 {
     /**
@@ -61,21 +63,29 @@
 
 public:
-
-  /** Getter for smallest value the engine produces.
+  /** Getter for the whole set of possible parameters.
+   *
+   * @return filled instance of RandomNumberDistribution_Parameters
+   */
+  RandomNumberDistribution_Parameters* getParameterSet() const
+  {
+    RandomNumberDistribution_Parameters *params = new RandomNumberDistribution_Parameters();
+    params->getParameters(this);
+    return params;
+  }
+
+  /** Getter for smallest value the uniform_... engines produces.
    *
    * @return smallest value
    */
   double min() const {
-    ASSERT(0, "min() not implemented for "+name());
-    return -1.;
-  }
-
-  /** Getter for largest value the engine produces.
+    return RandomNumberDistribution_Parameters::noset_value;
+  }
+
+  /** Getter for largest value the uniform_... engines produces.
    *
    * @return largest value
    */
   double max() const {
-    ASSERT(0, "max() not implemented for "+name());
-    return -1.;
+    return RandomNumberDistribution_Parameters::noset_value;
   }
 
@@ -85,6 +95,5 @@
    */
   double p() const {
-    ASSERT(0, "p() not implemented for "+name());
-    return -1.;
+    return RandomNumberDistribution_Parameters::noset_value;
   }
 
@@ -94,6 +103,5 @@
    */
   double t() const {
-    ASSERT(0, "t() not implemented for "+name());
-    return -1.;
+    return RandomNumberDistribution_Parameters::noset_value;
   }
 
@@ -103,6 +111,5 @@
    */
   double median() const {
-    ASSERT(0, "median() not implemented for "+name());
-    return -1.;
+    return RandomNumberDistribution_Parameters::noset_value;
   }
 
@@ -112,6 +119,5 @@
    */
   double sigma() const {
-    ASSERT(0, "sigma() not implemented for "+name());
-    return -1.;
+    return RandomNumberDistribution_Parameters::noset_value;
   }
 
@@ -121,6 +127,5 @@
    */
   double alpha() const {
-    ASSERT(0, "alpha() not implemented for "+name());
-    return -1.;
+    return RandomNumberDistribution_Parameters::noset_value;
   }
 
@@ -130,6 +135,5 @@
    */
   double mean() const {
-    ASSERT(0, "mean() not implemented for "+name());
-    return -1.;
+    return RandomNumberDistribution_Parameters::noset_value;
   }
 
@@ -139,6 +143,5 @@
    */
   double a() const {
-    ASSERT(0, "a() not implemented for "+name());
-    return -1.;
+    return RandomNumberDistribution_Parameters::noset_value;
   }
 
@@ -148,6 +151,5 @@
    */
   double b() const {
-    ASSERT(0, "b() not implemented for "+name());
-    return -1.;
+    return RandomNumberDistribution_Parameters::noset_value;
   }
 
@@ -157,6 +159,5 @@
    */
   double c() const {
-    ASSERT(0, "c() not implemented for "+name());
-    return -1.;
+    return RandomNumberDistribution_Parameters::noset_value;
   }
 
@@ -166,6 +167,5 @@
    */
   double lambda() const {
-    ASSERT(0, "lambda() not implemented for "+name());
-    return -1.;
+    return RandomNumberDistribution_Parameters::noset_value;
   }
 
@@ -193,6 +193,23 @@
   RandomNumberDistribution* clone() const {
     RandomNumberDistribution* MyClone = NULL;
-    MyClone = new RandomNumberDistribution_Encapsulation<distribution>();
+    RandomNumberDistribution_Parameters *params = getParameterSet();
+    MyClone = new RandomNumberDistribution_Encapsulation<distribution>(*params);
+    delete params;
     return MyClone;
+  }
+
+  /** Clones and manipulates the current instance.
+   *
+   * Implementation of ManipulableClone pattern.
+   *
+   * @param _params set of parameters to instantiate manipulated clone with
+   * @return interface reference to cloned&manipulated instance
+   */
+  ManipulableClone<RandomNumberDistribution, RandomNumberDistribution_Parameters>*
+  manipulatedclone(const RandomNumberDistribution_Parameters&_params) const
+  {
+    RandomNumberDistribution_Encapsulation<distribution>* newproto =
+    new RandomNumberDistribution_Encapsulation<distribution>(_params);
+    return newproto;
   }
 
@@ -205,4 +222,13 @@
   {}
 
+  /** Constructor that instantiates a specific random number generator and
+   * distribution.
+   *
+   * @param _params set of parameters to instantiate manipulated clone with
+   * @param _distribution_type instance of the desired distribution
+   */
+  RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params)
+  {}
+
   /** Destructor of the class.
    *
@@ -216,4 +242,58 @@
 // template member functions for the desired cases.
 
+/* =========  manipulatedclone() ================ */
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::uniform_smallint<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::uniform_int<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::uniform_real<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::bernoulli_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::binomial_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::cauchy_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::gamma_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::poisson_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::geometric_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::triangle_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::exponential_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::normal_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
+
+template <>
+RandomNumberDistribution_Encapsulation< boost::lognormal_distribution<> >::
+RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
+
 /* ===============  min() ======================= */
 
Index: src/RandomNumbers/RandomNumberDistribution_Parameters.cpp
===================================================================
--- src/RandomNumbers/RandomNumberDistribution_Parameters.cpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
+++ src/RandomNumbers/RandomNumberDistribution_Parameters.cpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -0,0 +1,241 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * RandomNumberDistribution_Parameters.cpp
+ *
+ *  Created on: Jan 6, 2011
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include <iostream>
+#include <boost/tokenizer.hpp>
+#include <string>
+#include <map>
+
+#include "CodePatterns/Assert.hpp"
+#include "CodePatterns/Log.hpp"
+#include "CodePatterns/Verbose.hpp"
+
+#include "RandomNumberDistribution_Parameters.hpp"
+
+#include "RandomNumberDistribution.hpp"
+
+RandomNumberDistribution_Parameters::ParamNames RandomNumberDistribution_Parameters::params;
+const double RandomNumberDistribution_Parameters::noset_value = -1.;
+
+RandomNumberDistribution_Parameters::RandomNumberDistribution_Parameters() :
+  min(noset_value),
+  max(noset_value),
+  p(noset_value),
+  t(noset_value),
+  median(noset_value),
+  sigma(noset_value),
+  alpha(noset_value),
+  mean(noset_value),
+  a(noset_value),
+  b(noset_value),
+  c(noset_value),
+  lambda(noset_value)
+{
+  // if param names map not yet filled, do so
+  if (params.begin() == params.end()) {
+    params["min"] = param_min;
+    params["max"] = param_max;
+    params["p"] = param_p;
+    params["t"] = param_t;
+    params["median"] = param_median;
+    params["sigma"] = param_sigma;
+    params["alpha"] = param_alpha;
+    params["mean"] = param_mean;
+    params["a"] = param_a;
+    params["b"] = param_b;
+    params["c"] = param_c;
+    params["lambda"] = param_lambda;
+  }
+}
+
+RandomNumberDistribution_Parameters::RandomNumberDistribution_Parameters(
+    const RandomNumberDistribution_Parameters &_ref)
+{
+  // check self assignment
+  if (&_ref != this) {
+    min = _ref.min;
+    max = _ref.max;
+    p = _ref.p;
+    p = _ref.t;
+    median = _ref.median;
+    sigma = _ref.sigma;
+    alpha = _ref.alpha;
+    mean = _ref.mean;
+    a = _ref.a;
+    b = _ref.b;
+    c = _ref.c;
+    lambda = _ref.lambda;
+  }
+}
+
+RandomNumberDistribution_Parameters::~RandomNumberDistribution_Parameters()
+{}
+
+void RandomNumberDistribution_Parameters::getParameters(const RandomNumberDistribution* const _distribution)
+{
+  min = _distribution->min();
+  max = _distribution->max();
+  p = _distribution->p();
+  t = _distribution->t();
+  median = _distribution->median();
+  sigma = _distribution->sigma();
+  alpha = _distribution->alpha();
+  mean = _distribution->mean();
+  a = _distribution->a();
+  b = _distribution->b();
+  c = _distribution->c();
+  lambda = _distribution->lambda();
+}
+
+void RandomNumberDistribution_Parameters::update(const RandomNumberDistribution_Parameters &_params)
+{
+  min = _params.min != noset_value ? _params.min : min;
+  max = _params.max != noset_value ? _params.max : max;
+  p = _params.p != noset_value ? _params.p : p;
+  p = _params.t != noset_value ? _params.t : t;
+  median = _params.median != noset_value ? _params.median : median;
+  sigma = _params.sigma != noset_value ? _params.sigma : sigma;
+  alpha = _params.alpha != noset_value ? _params.alpha : alpha;
+  mean = _params.mean != noset_value ? _params.mean : mean;
+  a = _params.a != noset_value ? _params.a : a;
+  b = _params.b != noset_value ? _params.b : b;
+  c = _params.c != noset_value ? _params.c : c;
+  lambda = _params.lambda != noset_value ? _params.lambda : lambda;
+}
+
+bool RandomNumberDistribution_Parameters::isDefault() const
+{
+  bool status = true;
+  status = status && (min == noset_value);
+  status = status && (max == noset_value);
+  status = status && (p == noset_value);
+  status = status && (t == noset_value);
+  status = status && (median == noset_value);
+  status = status && (sigma == noset_value);
+  status = status && (alpha == noset_value);
+  status = status && (mean == noset_value);
+  status = status && (a == noset_value);
+  status = status && (b == noset_value);
+  status = status && (c == noset_value);
+  status = status && (lambda == noset_value);
+  return status;
+}
+
+std::ostream & operator << (std::ostream& ost, const RandomNumberDistribution_Parameters &params)
+{
+  std::ostringstream output;
+  output << "min=" << params.min << ";";
+  output << "max=" << params.max << ";";
+  output << "p=" << params.p << ";";
+  output << "t=" << params.t << ";";
+  output << "median=" << params.median << ";";
+  output << "sigma=" << params.sigma << ";";
+  output << "alpha=" << params.alpha << ";";
+  output << "mean=" << params.mean << ";";
+  output << "a=" << params.a << ";";
+  output << "b=" << params.b << ";";
+  output << "c=" << params.c << ";";
+  output << "lambda=" << params.lambda << ";" << std::endl;
+  ost << output.str();
+  return ost;
+}
+
+// TODO: These should throw exceptions such that invalid user entry can be detected.
+std::istream & operator >> (std::istream& ist, RandomNumberDistribution_Parameters &params)
+{
+  typedef boost::tokenizer<boost::char_separator<char> >
+      tokenizer;
+  boost::char_separator<char> semicolonsep(";");
+  boost::char_separator<char> equalitysep("=");
+  std::string line;
+  double tmp;
+  std::getline( ist, line );
+  //DoLog(0) && (Log() << Verbose(0) << "INFO: full line of parameters is '" << line << "'" << std::endl);
+  tokenizer tokens(line, semicolonsep);
+  ASSERT(tokens.begin() != tokens.end(),
+      "operator<< on RandomNumberDistribution_Parameters - empty string, need at least ';'!");
+  for (tokenizer::iterator tok_iter = tokens.begin();
+        tok_iter != tokens.end(); ++tok_iter) {
+    tokenizer paramtokens(*tok_iter, equalitysep);
+    if (paramtokens.begin() != paramtokens.end()) {
+      tokenizer::iterator tok_paramiter = paramtokens.begin();
+      tokenizer::iterator tok_valueiter = tok_paramiter;
+      tokenizer::iterator tok_checkiter = ++tok_valueiter;
+      ASSERT(tok_valueiter == params.end(),
+          "operator<< on RandomNumberDistribution_Parameters - missing value before ';'!");
+      ++tok_checkiter;
+      ASSERT(tok_checkiter == params.end(),
+          "operator<< on RandomNumberDistribution_Parameters - still tokens before ';'!");
+      DoLog(0) && (Log() << Verbose(0) << "INFO: Token pair is " << *tok_paramiter << "," << *tok_valueiter << std::endl);
+      std::stringstream value(*tok_valueiter);
+      value >> tmp;
+      if ((RandomNumberDistribution_Parameters::params.count(*tok_paramiter) != 0)
+          && (tmp != RandomNumberDistribution_Parameters::noset_value)) {
+        switch (RandomNumberDistribution_Parameters::params[*tok_paramiter]) {
+          case (RandomNumberDistribution_Parameters::param_min):
+              params.min = tmp;
+              break;
+          case (RandomNumberDistribution_Parameters::param_max):
+              params.max = tmp;
+              break;
+          case (RandomNumberDistribution_Parameters::param_p):
+              params.p = tmp;
+              break;
+          case (RandomNumberDistribution_Parameters::param_t):
+              params.t = tmp;
+              break;
+          case (RandomNumberDistribution_Parameters::param_median):
+              params.median = tmp;
+              break;
+          case (RandomNumberDistribution_Parameters::param_sigma):
+              params.sigma = tmp;
+              break;
+          case (RandomNumberDistribution_Parameters::param_alpha):
+              params.alpha = tmp;
+              break;
+          case (RandomNumberDistribution_Parameters::param_mean):
+              params.mean = tmp;
+              break;
+          case (RandomNumberDistribution_Parameters::param_a):
+              params.a = tmp;
+              break;
+          case (RandomNumberDistribution_Parameters::param_b):
+              params.b = tmp;
+              break;
+          case (RandomNumberDistribution_Parameters::param_c):
+              params.c = tmp;
+              break;
+          case (RandomNumberDistribution_Parameters::param_lambda):
+              params.lambda = tmp;
+              break;
+          default:
+              std::cerr << "This is weird, we cannot get here!" << std::endl;
+        }
+        DoLog(1) && (Log() << Verbose(1) << "ACCEPT: Value for token " << *tok_paramiter << " set." << std::endl);
+      } else {
+        DoLog(1) && (Log() << Verbose(1) << "REJECT: Value for token " << *tok_paramiter << " not specified." << std::endl);
+      }
+    } else {
+      ist.setstate(std::ios::eofbit);
+    }
+  }
+  return ist;
+}
Index: src/RandomNumbers/RandomNumberDistribution_Parameters.hpp
===================================================================
--- src/RandomNumbers/RandomNumberDistribution_Parameters.hpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
+++ src/RandomNumbers/RandomNumberDistribution_Parameters.hpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -0,0 +1,108 @@
+/*
+ * RandomNumberDistribution_Parameters.hpp
+ *
+ *  Created on: Jan 6, 2011
+ *      Author: heber
+ */
+
+#ifndef RANDOMNUMBERDISTRIBUTION_PARAMETERS_HPP_
+#define RANDOMNUMBERDISTRIBUTION_PARAMETERS_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <iosfwd>
+#include <map>
+
+class RandomNumberDistribution;
+
+struct RandomNumberDistribution_Parameters
+{
+  /** Constructor of class RandomNumberDistribution_Parameters.
+   *
+   *  @note sets all values to  noset_value.
+   */
+  RandomNumberDistribution_Parameters();
+
+  /** Copy constructor of class RandomNumberDistribution_Parameters.
+   *
+   *
+   *  @param _ref reference to instance to copy
+   */
+  RandomNumberDistribution_Parameters(const RandomNumberDistribution_Parameters &_ref);
+
+  /** Destructor of class RandomNumberDistribution_Parameters.
+   *
+   */
+  ~RandomNumberDistribution_Parameters();
+
+  enum ParamList {
+    param_min,
+    param_max,
+    param_p,
+    param_t,
+    param_median,
+    param_sigma,
+    param_alpha,
+    param_mean,
+    param_a,
+    param_b,
+    param_c,
+    param_lambda
+  };
+
+  /** This value is chosen such that no parameter can have it as a sensible
+   * value.
+   */
+  static const double noset_value;
+
+  /** Fills the structure from the parameters obtained from \a _distribution.
+   *
+   * @param _distribution
+   */
+  void getParameters(const RandomNumberDistribution* const _distribution);
+
+  /** Merges this parameter set with another, where other has priority.
+   *
+   * @note we ignore entries in \a _params with noset_value.
+   *
+   * @param _params other parameter set to update with
+   */
+  void update(const RandomNumberDistribution_Parameters &_params);
+
+  /** Checks whether all parameters are set to noset_value values.
+   *
+   * noset_value
+   *
+   * @return true - all are equal noset_value,
+   *         false - at least is not equal noset_value
+   */
+  bool isDefault() const;
+
+  double min;   //!< minimum of distribution
+  double max;   //!< minimum of distribution
+  double p;   //!< probability of distribution
+  double t;   //!< parameter t of distribution
+  double median;   //!< median of distribution
+  double sigma;   //!< sigma width of distribution
+  double alpha;   //!< parameter alpha of distribution
+  double mean;   //!< mean of distribution
+  double a;   //!< triangle parameter a
+  double b;   //!< triangle parameter b
+  double c;   //!< triangle parameter c
+  double lambda;   //!< exponential decay parameter of distribution
+
+  typedef std::map<
+      std::string,
+      ParamList
+      > ParamNames;
+
+  static ParamNames params;
+};
+
+std::ostream & operator << (std::ostream& ost, const RandomNumberDistribution_Parameters &params);
+std::istream & operator >> (std::istream& ist, RandomNumberDistribution_Parameters &params);
+
+#endif /* RANDOMNUMBERDISTRIBUTION_PARAMETERS_HPP_ */
Index: src/RandomNumbers/RandomNumberEngine.hpp
===================================================================
--- src/RandomNumbers/RandomNumberEngine.hpp	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/RandomNumberEngine.hpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -16,4 +16,5 @@
 class RandomNumberEngineFactoryTest;
 class RandomNumberGenerator;
+class RandomNumberEngine_Parameters;
 
 /** Abstract base class for a random number engine.
@@ -37,4 +38,10 @@
 
 public:
+  /** Getter for the whole set of possible parameters.
+   *
+   * @return filled instance of RandomNumberEngine_Parameters
+   */
+  virtual RandomNumberEngine_Parameters* getParameterSet() const=0;
+
   /** Set the generator's seed.
    *
Index: src/RandomNumbers/RandomNumberEngineFactory.cpp
===================================================================
--- src/RandomNumbers/RandomNumberEngineFactory.cpp	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/RandomNumberEngineFactory.cpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -40,4 +40,5 @@
 
 #include "RandomNumberEngine_Encapsulation.hpp"
+#include "RandomNumberEngine_Parameters.hpp"
 
 #include "RandomNumberEngineFactory.hpp"
@@ -45,5 +46,5 @@
 // has to be included BEFORE PrototypeFactory_impl.hpp!
 #include "RandomNumberEngineFactory.def"
-#include "CodePatterns/PrototypeFactory_impl.hpp"
+#include "CodePatterns/ManipulablePrototypeFactory_impl.hpp"
 
 RandomNumberEngineFactory::RandomNumberEngineFactory()
@@ -58,5 +59,5 @@
 
 CONSTRUCT_SINGLETON(RandomNumberEngineFactory)
-CONSTRUCT_PROTOTYPEFACTORY(RandomNumberEngine)
+CONSTRUCT_MANIPULABLEPROTOTYPEFACTORY(RandomNumberEngine, RandomNumberEngine_Parameters)
 
 #include "RandomNumberEngineFactory.undef"
Index: src/RandomNumbers/RandomNumberEngineFactory.def
===================================================================
--- src/RandomNumbers/RandomNumberEngineFactory.def	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/RandomNumberEngineFactory.def	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -39,4 +39,5 @@
 #define FactoryNAME RandomNumberEngineFactory
 #define Abstract_Interface_Class RandomNumberEngine
+#define Abstract_Parameter_Class RandomNumberEngine_Parameters
 #define Abstract_Encapsulation_Class RandomNumberEngine_Encapsulation
 #define type_name_space boost::
Index: src/RandomNumbers/RandomNumberEngineFactory.hpp
===================================================================
--- src/RandomNumbers/RandomNumberEngineFactory.hpp	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/RandomNumberEngineFactory.hpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -21,9 +21,10 @@
 #include "RandomNumberEngineFactory.undef"
 
-#include "CodePatterns/PrototypeFactory.hpp"
+#include "CodePatterns/ManipulablePrototypeFactory.hpp"
 
 #include <map>
 
 class RandomNumberEngine;
+class RandomNumberEngine_Parameters;
 class RandomNumberEngineFactoryUnitTest;
 class CommandSetRandomNumbersEngineAction;
@@ -40,5 +41,5 @@
 class RandomNumberEngineFactory :
   public Singleton<RandomNumberEngineFactory>,
-  public PrototypeFactory<RandomNumberEngine>
+  public ManipulablePrototypeFactory<RandomNumberEngine,RandomNumberEngine_Parameters>
 {
   friend class Singleton<RandomNumberEngineFactory>;
Index: src/RandomNumbers/RandomNumberEngineFactory.undef
===================================================================
--- src/RandomNumbers/RandomNumberEngineFactory.undef	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/RandomNumberEngineFactory.undef	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -7,4 +7,5 @@
 #undef FactoryNAME
 #undef Abstract_Interface_Class
+#undef Abstract_Parameter_Class
 #undef Abstract_Encapsulation_Class
 #undef type_name_space
Index: src/RandomNumbers/RandomNumberEngine_Encapsulation.hpp
===================================================================
--- src/RandomNumbers/RandomNumberEngine_Encapsulation.hpp	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/RandomNumberEngine_Encapsulation.hpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -31,8 +31,10 @@
 #include <boost/random/xor_combine.hpp>
 
-#include "CodePatterns/Clone.hpp"
+#include "CodePatterns/ManipulableClone.hpp"
 #include "RandomNumberEngine.hpp"
 
 class RandomNumberEngineFactory;
+
+#include "RandomNumberEngine_Parameters.hpp"
 
 /** Template class that encapsulates the random number engines from
@@ -46,5 +48,5 @@
 class RandomNumberEngine_Encapsulation :
   public RandomNumberEngine,
-  public Clone<RandomNumberEngine>
+  public ManipulableClone<RandomNumberEngine, RandomNumberEngine_Parameters>
 {
     /**
@@ -55,4 +57,15 @@
 
 public:
+  /** Getter for the whole set of possible parameters.
+   *
+   * @return filled instance of RandomNumberEngine_Parameters
+   */
+    RandomNumberEngine_Parameters* getParameterSet() const
+  {
+    RandomNumberEngine_Parameters *params = new RandomNumberEngine_Parameters();
+    params->getParameters(this);
+    return params;
+  }
+
   /** Set the engine's seed.
    *
@@ -110,7 +123,23 @@
    */
   RandomNumberEngine* clone() const {
-    RandomNumberEngine* MyClone = NULL;
+    RandomNumberEngine_Parameters *params = getParameterSet();
+    RandomNumberEngine* MyClone = new RandomNumberEngine_Encapsulation<engine>(*params);
+    //MyClone->seed(getseed());
+    return MyClone;
+  }
+
+  /** Clones and manipulates the current instance.
+   *
+   * Implementation of ManipulableClone pattern.
+   *
+   * @param _params set of parameters to instantiate manipulated clone with
+   * @return interface reference to cloned&manipulated instance
+   */
+  ManipulableClone<RandomNumberEngine, RandomNumberEngine_Parameters>*
+  manipulatedclone(const RandomNumberEngine_Parameters &_params) const {
+    RandomNumberEngine_Encapsulation<engine>* MyClone = NULL;
     MyClone = new RandomNumberEngine_Encapsulation<engine>();
-    MyClone->seed(getseed());
+    MyClone->value_seed = _params.seed;
+    MyClone->seed(_params.seed);
     return MyClone;
   }
@@ -125,4 +154,12 @@
   {}
 
+  /** Constructor that instantiates a specific random number generator and
+   * distribution.
+   * @param _engine_type instance of the desired engine
+   */
+  RandomNumberEngine_Encapsulation(const RandomNumberEngine_Parameters &_params) :
+    value_seed(_params.seed)
+  {}
+
   /** Destructor of the class.
    *
Index: src/RandomNumbers/RandomNumberEngine_Parameters.cpp
===================================================================
--- src/RandomNumbers/RandomNumberEngine_Parameters.cpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
+++ src/RandomNumbers/RandomNumberEngine_Parameters.cpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -0,0 +1,131 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * RandomNumberEngine_Parameters.cpp
+ *
+ *  Created on: Jan 6, 2011
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include <iostream>
+#include <boost/tokenizer.hpp>
+#include <string>
+#include <map>
+
+#include "CodePatterns/Assert.hpp"
+#include "CodePatterns/Log.hpp"
+#include "CodePatterns/Verbose.hpp"
+
+#include "RandomNumberEngine_Parameters.hpp"
+
+#include "RandomNumberEngine.hpp"
+
+RandomNumberEngine_Parameters::ParamNames RandomNumberEngine_Parameters::params;
+const double RandomNumberEngine_Parameters::noset_value = -1.;
+
+RandomNumberEngine_Parameters::RandomNumberEngine_Parameters() :
+  seed(noset_value)
+{
+  // if param names map not yet filled, do so
+  if (params.begin() == params.end()) {
+    params["seed"] = param_seed;
+  }
+}
+
+RandomNumberEngine_Parameters::RandomNumberEngine_Parameters(
+    const RandomNumberEngine_Parameters &_ref)
+{
+  // check self assignment
+  if (&_ref != this) {
+    seed = _ref.seed;
+  }
+}
+
+RandomNumberEngine_Parameters::~RandomNumberEngine_Parameters()
+{}
+
+void RandomNumberEngine_Parameters::getParameters(const RandomNumberEngine* const _engine)
+{
+  seed = _engine->getseed();
+}
+
+void RandomNumberEngine_Parameters::update(const RandomNumberEngine_Parameters &_params)
+{
+  seed = _params.seed != noset_value ? _params.seed : seed;
+}
+
+bool RandomNumberEngine_Parameters::isDefault() const
+{
+  bool status = true;
+  status = status && (seed == noset_value);
+  return status;
+}
+
+std::ostream & operator << (std::ostream& ost, const RandomNumberEngine_Parameters &params)
+{
+  std::ostringstream output;
+  output << "seed=" << params.seed << ";";
+  ost << output.str();
+  return ost;
+}
+
+// TODO: These should throw exceptions such that invalid user entry can be detected.
+std::istream & operator >> (std::istream& ist, RandomNumberEngine_Parameters &params)
+{
+  typedef boost::tokenizer<boost::char_separator<char> >
+      tokenizer;
+  boost::char_separator<char> semicolonsep(";");
+  boost::char_separator<char> equalitysep("=");
+  std::string line;
+  double tmp;
+  std::getline( ist, line );
+  //DoLog(0) && (Log() << Verbose(0) << "INFO: full line of parameters is '" << line << "'" << std::endl);
+  tokenizer tokens(line, semicolonsep);
+  ASSERT(tokens.begin() != tokens.end(),
+      "operator<< on RandomNumberEngine_Parameters - empty string, need at least ';'!");
+  for (tokenizer::iterator tok_iter = tokens.begin();
+        tok_iter != tokens.end(); ++tok_iter) {
+    tokenizer paramtokens(*tok_iter, equalitysep);
+    if (paramtokens.begin() != paramtokens.end()) {
+      tokenizer::iterator tok_paramiter = paramtokens.begin();
+      tokenizer::iterator tok_valueiter = tok_paramiter;
+      tokenizer::iterator tok_checkiter = ++tok_valueiter;
+      ASSERT(tok_valueiter == params.end(),
+          "operator<< on RandomNumberEngine_Parameters - missing value before ';'!");
+      ++tok_checkiter;
+      ASSERT(tok_checkiter == params.end(),
+          "operator<< on RandomNumberEngine_Parameters - still tokens before ';'!");
+      DoLog(0) && (Log() << Verbose(0) << "INFO: Token pair is " << *tok_paramiter << "," << *tok_valueiter << std::endl);
+      std::stringstream value(*tok_valueiter);
+      value >> tmp;
+      if ((RandomNumberEngine_Parameters::params.count(*tok_paramiter) != 0)
+          && (tmp != RandomNumberEngine_Parameters::noset_value)) {
+        switch (RandomNumberEngine_Parameters::params[*tok_paramiter]) {
+          case (RandomNumberEngine_Parameters::param_seed):
+              params.seed = tmp;
+              break;
+          default:
+              std::cerr << "This is weird, we cannot get here!" << std::endl;
+        }
+        DoLog(1) && (Log() << Verbose(1) << "ACCEPT: Value for token " << *tok_paramiter << " set." << std::endl);
+      } else {
+        DoLog(1) && (Log() << Verbose(1) << "REJECT: Value for token " << *tok_paramiter << " not specified." << std::endl);
+      }
+    } else {
+      ist.setstate(std::ios::eofbit);
+    }
+  }
+  return ist;
+}
Index: src/RandomNumbers/RandomNumberEngine_Parameters.hpp
===================================================================
--- src/RandomNumbers/RandomNumberEngine_Parameters.hpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
+++ src/RandomNumbers/RandomNumberEngine_Parameters.hpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -0,0 +1,88 @@
+/*
+ * RandomNumberEngine_Parameters.hpp
+ *
+ *  Created on: Jan 6, 2011
+ *      Author: heber
+ */
+
+#ifndef RANDOMNUMBERENGINE_PARAMETERS_HPP_
+#define RANDOMNUMBERENGINE_PARAMETERS_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <iosfwd>
+#include <map>
+
+class RandomNumberEngine;
+
+struct RandomNumberEngine_Parameters
+{
+  /** Constructor of class RandomNumberEngine_Parameters.
+   *
+   *  @note sets all values to  noset_value.
+   */
+  RandomNumberEngine_Parameters();
+
+  /** Copy constructor of class RandomNumberEngine_Parameters.
+   *
+   *
+   *  @param _ref reference to instance to copy
+   */
+  RandomNumberEngine_Parameters(const RandomNumberEngine_Parameters &_ref);
+
+  /** Destructor of class RandomNumberEngine_Parameters.
+   *
+   */
+  ~RandomNumberEngine_Parameters();
+
+  enum ParamList {
+    param_seed,
+  };
+
+  /** This value is chosen such that no parameter can have it as a sensible
+   * value.
+   */
+  static const double noset_value;
+
+  /** Fills the structure from the parameters obtained from \a engine.
+   *
+   * @param _engine
+   */
+  void getParameters(const RandomNumberEngine* const _engine);
+
+  /** Merges this parameter set with another, where other has priority.
+   *
+   * @note we ignore entries in \a _params with noset_value.
+   *
+   * @param _params other parameter set to update with
+   */
+  void update(const RandomNumberEngine_Parameters &_params);
+
+  /** Checks whether all parameters are set to noset_value values.
+   *
+   * noset_value
+   *
+   * @return true - all are equal noset_value,
+   *         false - at least is not equal noset_value
+   */
+  bool isDefault() const;
+
+
+  int seed; //!< seed of random number engine
+
+  typedef std::map<
+      std::string,
+      ParamList
+      > ParamNames;
+
+  static ParamNames params;
+};
+
+std::ostream & operator << (std::ostream& ost, const RandomNumberEngine_Parameters &params);
+std::istream & operator >> (std::istream& ist, RandomNumberEngine_Parameters &params);
+
+
+#endif /* RANDOMNUMBERENGINE_PARAMETERS_HPP_ */
Index: src/RandomNumbers/RandomNumberGeneratorFactory.def
===================================================================
--- src/RandomNumbers/RandomNumberGeneratorFactory.def	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/RandomNumberGeneratorFactory.def	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -27,5 +27,6 @@
  */
 #define engine_seq \
-(minstd_rand0)\
+(minstd_rand0)
+/*
 (minstd_rand)\
 (rand48)\
@@ -36,7 +37,9 @@
 (mt11213b)\
 (mt19937)
+*/
 
 #define engine_seq_a \
-(lagged_fibonacci607)\
+(lagged_fibonacci607)
+/*
 (lagged_fibonacci1279)\
 (lagged_fibonacci2281)\
@@ -55,4 +58,4 @@
 (ranlux64_3_01)\
 (ranlux64_4_01)
-
+*/
 #endif /* RANDOMNUMBERGENERATORFACTORY_DEF_ */
Index: src/RandomNumbers/unittests/RandomNumberDistributionFactoryUnitTest.cpp
===================================================================
--- src/RandomNumbers/unittests/RandomNumberDistributionFactoryUnitTest.cpp	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/unittests/RandomNumberDistributionFactoryUnitTest.cpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -73,4 +73,5 @@
   rndA_1 = NULL;
   rndA_2 = NULL;
+  rndA_3 = NULL;
   RandomNumberDistributionFactory::getInstance();
 }
@@ -81,4 +82,5 @@
   delete rndA_1;
   delete rndA_2;
+  delete rndA_3;
   RandomNumberDistributionFactory::purgeInstance();
 }
@@ -103,5 +105,5 @@
   // check one of the distributions in the table
   rndA = RandomNumberDistributionFactory::getInstance().
-      PrototypeTable[RandomNumberDistributionFactory::uniform_smallint]->clone();
+      ManipulablePrototypeTable[RandomNumberDistributionFactory::uniform_smallint]->clone();
   CPPUNIT_ASSERT_EQUAL(
       std::string(typeid(boost::uniform_smallint<> ).name()),
@@ -114,2 +116,36 @@
 }
 
+void RandomNumberDistributionFactoryTest::PrototypeManipulationTest()
+{
+  // make unmodified clone
+  rndA_1 = RandomNumberDistributionFactory::getInstance().
+      getProduct(RandomNumberDistributionFactory::uniform_smallint);
+
+  // do something with the prototype
+  RandomNumberDistribution_Parameters *params =
+      rndA_1->getParameterSet();
+  CPPUNIT_ASSERT( 20. != rndA_1->max() );
+  params->max = 20.;
+  RandomNumberDistributionFactory::getInstance().
+      manipulatePrototype(RandomNumberDistributionFactory::uniform_smallint, *params);
+  // ... and check max
+  rndA_2 = RandomNumberDistributionFactory::getInstance().
+      getProduct(RandomNumberDistributionFactory::uniform_smallint);
+  CPPUNIT_ASSERT_EQUAL( 20., rndA_2->max());
+  CPPUNIT_ASSERT( rndA_1->max() != rndA_2->max());
+  // ... and check min (remains the same)
+  CPPUNIT_ASSERT( rndA_1->min() == rndA_2->min());
+
+  // do something with the prototype again
+  params->max = 25.;
+  RandomNumberDistributionFactory::getInstance().
+      manipulatePrototype(std::string("uniform_smallint"), *params);
+  // ... and check
+  rndA_3 = RandomNumberDistributionFactory::getInstance().
+      getProduct(RandomNumberDistributionFactory::uniform_smallint);
+  CPPUNIT_ASSERT_EQUAL( 25., rndA_3->max());
+  CPPUNIT_ASSERT( rndA_1->max() != rndA_3->max());
+  CPPUNIT_ASSERT( rndA_2->max() != rndA_3->max());
+
+  delete params;
+}
Index: src/RandomNumbers/unittests/RandomNumberDistributionFactoryUnitTest.hpp
===================================================================
--- src/RandomNumbers/unittests/RandomNumberDistributionFactoryUnitTest.hpp	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/unittests/RandomNumberDistributionFactoryUnitTest.hpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -23,4 +23,5 @@
   CPPUNIT_TEST_SUITE( RandomNumberDistributionFactoryTest );
   CPPUNIT_TEST ( DistributionTest );
+  CPPUNIT_TEST ( PrototypeManipulationTest );
   CPPUNIT_TEST_SUITE_END();
 
@@ -30,4 +31,5 @@
 
   void DistributionTest();
+  void PrototypeManipulationTest();
 
 private:
@@ -35,4 +37,5 @@
   RandomNumberDistribution * rndA_1;
   RandomNumberDistribution * rndA_2;
+  RandomNumberDistribution * rndA_3;
 };
 
Index: src/RandomNumbers/unittests/RandomNumberEngineFactoryUnitTest.cpp
===================================================================
--- src/RandomNumbers/unittests/RandomNumberEngineFactoryUnitTest.cpp	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/unittests/RandomNumberEngineFactoryUnitTest.cpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -77,4 +77,5 @@
   rndA_1 = NULL;
   rndA_2 = NULL;
+  rndA_3 = NULL;
   RandomNumberEngineFactory::getInstance();
 }
@@ -85,4 +86,5 @@
   delete rndA_1;
   delete rndA_2;
+  delete rndA_3;
   RandomNumberEngineFactory::purgeInstance();
 }
@@ -107,5 +109,5 @@
   // check one of the engines in the table
   rndA = RandomNumberEngineFactory::getInstance().
-      PrototypeTable[RandomNumberEngineFactory::minstd_rand0]->clone();
+      ManipulablePrototypeTable[RandomNumberEngineFactory::minstd_rand0]->clone();
   CPPUNIT_ASSERT_EQUAL(
       std::string(typeid(boost::minstd_rand0).name()),
@@ -117,2 +119,38 @@
 }
 
+void RandomNumberEngineFactoryTest::PrototypeManipulationTest()
+{
+  // make unmodified clone
+  rndA_1 = RandomNumberEngineFactory::getInstance().
+      getProduct(RandomNumberEngineFactory::minstd_rand0);
+
+  // obtain manipulator
+  RandomNumberEngine &prototype = RandomNumberEngineFactory::getInstance().
+      getPrototype(RandomNumberEngineFactory::minstd_rand0);
+
+  // change the prototype directly
+  CPPUNIT_ASSERT ( 0 != prototype.getseed() );
+  prototype.seed(0);
+
+  // check that prototype has indeed been manipulated
+  rndA_2 = RandomNumberEngineFactory::getInstance().
+      getProduct(RandomNumberEngineFactory::minstd_rand0);
+  CPPUNIT_ASSERT_EQUAL( (unsigned int)0, rndA_2->getseed() );
+  CPPUNIT_ASSERT( rndA_2->getseed() != rndA_1->getseed());
+
+  // manipulate prototype
+  RandomNumberEngine_Parameters *params = rndA_1->getParameterSet();
+  CPPUNIT_ASSERT ( rndA_1->getseed() != (unsigned int)3 );
+  params->seed = 3;
+  RandomNumberEngineFactory::getInstance().
+        manipulatePrototype(RandomNumberEngineFactory::minstd_rand0, *params);
+
+  //
+  rndA_3 = RandomNumberEngineFactory::getInstance().
+      getProduct(RandomNumberEngineFactory::minstd_rand0);
+  CPPUNIT_ASSERT_EQUAL( (unsigned int)3, rndA_3->getseed() );
+  CPPUNIT_ASSERT( rndA_3->getseed() != rndA_1->getseed());
+
+  delete params;
+}
+
Index: src/RandomNumbers/unittests/RandomNumberEngineFactoryUnitTest.hpp
===================================================================
--- src/RandomNumbers/unittests/RandomNumberEngineFactoryUnitTest.hpp	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
+++ src/RandomNumbers/unittests/RandomNumberEngineFactoryUnitTest.hpp	(revision 0275ad195a931bec57fdd26321f927b08c267597)
@@ -23,4 +23,5 @@
   CPPUNIT_TEST_SUITE( RandomNumberEngineFactoryTest );
   CPPUNIT_TEST ( EngineTest );
+  CPPUNIT_TEST ( PrototypeManipulationTest );
   CPPUNIT_TEST_SUITE_END();
 
@@ -30,4 +31,5 @@
 
   void EngineTest();
+  void PrototypeManipulationTest();
 
 private:
@@ -35,4 +37,5 @@
   RandomNumberEngine *rndA_1;
   RandomNumberEngine *rndA_2;
+  RandomNumberEngine *rndA_3;
 };
 
