Index: src/RandomNumbers/unittests/RandomNumberGeneratorFactoryUnitTest.cpp
===================================================================
--- src/RandomNumbers/unittests/RandomNumberGeneratorFactoryUnitTest.cpp	(revision c14c78b2ee8b6b53c94294861301c8b2cdcc1161)
+++ src/RandomNumbers/unittests/RandomNumberGeneratorFactoryUnitTest.cpp	(revision 23d7fff4124bc4e1f444a780def098bb6b68e508)
@@ -75,6 +75,4 @@
 void RandomNumberGeneratorFactoryTest::setUp()
 {
-  rng = NULL;
-
   RandomNumberGeneratorFactory::getInstance();
 }
@@ -82,5 +80,4 @@
 void RandomNumberGeneratorFactoryTest::tearDown()
 {
-  delete rng;
 
   RandomNumberDistributionFactory::purgeInstance();
@@ -92,14 +89,29 @@
 {
   // check one of the engines and distributions
-  rng = RandomNumberGeneratorFactory::getInstance().
+  RandomNumberGenerator& rng = *(RandomNumberGeneratorFactory::getInstance().
       GeneratorPrototypeTable[RandomNumberEngineFactory::minstd_rand0]
-                              [RandomNumberDistributionFactory::uniform_smallint]->clone();
+                              [RandomNumberDistributionFactory::uniform_smallint]);
   CPPUNIT_ASSERT_EQUAL(
       std::string(typeid(boost::minstd_rand0).name()),
-      rng->EngineName()
+      rng.EngineName()
   );
   CPPUNIT_ASSERT_EQUAL(
       std::string(typeid(boost::uniform_smallint<> ).name()),
-      rng->DistributionName()
+      rng.DistributionName()
+  );
+
+  // set types in lower factories
+  RandomNumberEngineFactory::getInstance().setCurrentType(RandomNumberEngineFactory::minstd_rand0);
+  RandomNumberDistributionFactory::getInstance().setCurrentType(RandomNumberDistributionFactory::uniform_int);
+  // ... and check whether generator delivers those set types
+  RandomNumberGenerator &rng_A = RandomNumberGeneratorFactory::getInstance().
+      makeRandomNumberGenerator();
+  CPPUNIT_ASSERT_EQUAL(
+      std::string(typeid(boost::minstd_rand0).name()),
+      rng_A.EngineName()
+  );
+  CPPUNIT_ASSERT_EQUAL(
+      std::string(typeid(boost::uniform_int<> ).name()),
+      rng_A.DistributionName()
   );
 }
Index: src/RandomNumbers/unittests/RandomNumberGeneratorFactoryUnitTest.hpp
===================================================================
--- src/RandomNumbers/unittests/RandomNumberGeneratorFactoryUnitTest.hpp	(revision c14c78b2ee8b6b53c94294861301c8b2cdcc1161)
+++ src/RandomNumbers/unittests/RandomNumberGeneratorFactoryUnitTest.hpp	(revision 23d7fff4124bc4e1f444a780def098bb6b68e508)
@@ -29,7 +29,4 @@
 
   void GeneratorTest();
-
-private:
-  RandomNumberGenerator *rng;
 };
 
Index: src/RandomNumbers/unittests/RandomNumberGeneratorUnitTest.cpp
===================================================================
--- src/RandomNumbers/unittests/RandomNumberGeneratorUnitTest.cpp	(revision c14c78b2ee8b6b53c94294861301c8b2cdcc1161)
+++ src/RandomNumbers/unittests/RandomNumberGeneratorUnitTest.cpp	(revision 23d7fff4124bc4e1f444a780def098bb6b68e508)
@@ -50,22 +50,14 @@
 
 /** We check that the RandomNumberGenerator instance received
- * from the RandomNumberGeneratorFactory is truely a copy and
- * not the prototype instance.
+ * from the RandomNumberGeneratorFactory is truely the prototype
+ * itself.
  */
-void RandomNumberGeneratorTest::PrototypeCopyTest()
+void RandomNumberGeneratorTest::PrototypeNonCopyTest()
 {
-  RandomNumberGenerator *rng1 = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
-  RandomNumberGenerator *rng2 = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
+  RandomNumberGenerator &rng1 = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
+  RandomNumberGenerator &rng2 = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
 
-  double random1_1 = (*rng1)();
-  double random1_2 = (*rng1)();
-  double random2_1 = (*rng2)();
-  double random2_2 = (*rng2)();
-
-  CPPUNIT_ASSERT(random1_1 == random2_1);
-  CPPUNIT_ASSERT(random1_2 == random2_2);
-
-  delete rng1;
-  delete rng2;
+  // compare addresses in memory, have to be the same
+  CPPUNIT_ASSERT( &rng1 == &rng2 );
 }
 
@@ -74,10 +66,9 @@
   // obtain some random values for uniform_smallint
   RandomNumberGeneratorFactory::getInstance().setDistribution("uniform_smallint");
-  RandomNumberGenerator* rng = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
+  RandomNumberGenerator& rng = RandomNumberGeneratorFactory::getInstance().makeRandomNumberGenerator();
   for (size_t i=0; i < 1000; ++i) {
-    const int testint = (*rng)();
+    const int testint = rng();
     CPPUNIT_ASSERT_MESSAGE("randon number from uniform_smallint is out of [0:9]!", testint >= 0);
     CPPUNIT_ASSERT_MESSAGE("randon number from uniform_smallint is out of [0:9]!", testint <= 9);
   }
-  delete rng;
 }
Index: src/RandomNumbers/unittests/RandomNumberGeneratorUnitTest.hpp
===================================================================
--- src/RandomNumbers/unittests/RandomNumberGeneratorUnitTest.hpp	(revision c14c78b2ee8b6b53c94294861301c8b2cdcc1161)
+++ src/RandomNumbers/unittests/RandomNumberGeneratorUnitTest.hpp	(revision 23d7fff4124bc4e1f444a780def098bb6b68e508)
@@ -20,5 +20,5 @@
 {
   CPPUNIT_TEST_SUITE( RandomNumberGeneratorTest );
-  CPPUNIT_TEST ( PrototypeCopyTest );
+  CPPUNIT_TEST ( PrototypeNonCopyTest );
   CPPUNIT_TEST ( Range_uniform_smallint_Test );
   CPPUNIT_TEST_SUITE_END();
@@ -28,5 +28,5 @@
   void tearDown();
 
-  void PrototypeCopyTest();
+  void PrototypeNonCopyTest();
   void Range_uniform_smallint_Test();
 
