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;
 };
 
