Index: src/RandomNumbers/RandomNumberDistribution.hpp
===================================================================
--- src/RandomNumbers/RandomNumberDistribution.hpp	(revision 15911c97898d09d69931fb955bf4db5cea2b7dc1)
+++ src/RandomNumbers/RandomNumberDistribution.hpp	(revision 081e5d776b34e30d39d3d2bd6b9706066bba6950)
@@ -37,4 +37,23 @@
 
 public:
+  /** Getter for smallest value the engine produces.
+   *
+   * @return smallest value
+   */
+  virtual double min() const=0;
+
+  /** Getter for largest value the engine produces.
+   *
+   * @return largest value
+   */
+  virtual double max() const=0;
+
+
+  /** Getter for bernoulli_distribution probability p.
+   *
+   * @return p
+   */
+  virtual double p() const=0;
+
   /** Getter for the type name of the internal distribution.
    *
Index: src/RandomNumbers/RandomNumberDistributionFactory.def
===================================================================
--- src/RandomNumbers/RandomNumberDistributionFactory.def	(revision 15911c97898d09d69931fb955bf4db5cea2b7dc1)
+++ src/RandomNumbers/RandomNumberDistributionFactory.def	(revision 081e5d776b34e30d39d3d2bd6b9706066bba6950)
@@ -7,7 +7,5 @@
 #define type_seq \
 (uniform_smallint)\
-(uniform_int)
-
-/*
+(uniform_int)\
 (uniform_01)\
 (uniform_real)\
@@ -21,8 +19,8 @@
 (exponential_distribution)\
 (normal_distribution)\
-(lognormal_distribution)\
+(lognormal_distribution)
+/*
 (uniform_on_sphere)
 */
-
 #define FactoryNAME RandomNumberDistributionFactory
 #define Abstract_Interface_Class RandomNumberDistribution
Index: src/RandomNumbers/RandomNumberDistribution_Encapsulation.cpp
===================================================================
--- src/RandomNumbers/RandomNumberDistribution_Encapsulation.cpp	(revision 081e5d776b34e30d39d3d2bd6b9706066bba6950)
+++ src/RandomNumbers/RandomNumberDistribution_Encapsulation.cpp	(revision 081e5d776b34e30d39d3d2bd6b9706066bba6950)
@@ -0,0 +1,203 @@
+/*
+ * 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.
+ */
+
+/*
+ * \file RandomNumberDistribution_Encapsulation_impl.hpp
+ *
+ * Herein we place specializations of specific functions for specific distributions.
+ *
+ *  Created on: Jan 5, 2011
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "RandomNumberDistribution_Encapsulation.hpp"
+
+
+/* ===============  min() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_smallint<> >::min() const
+{
+	return distribution_type.min();
+}
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_int<> >::min() const
+{
+	return distribution_type.min();
+}
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_01<> >::min() const
+{
+	return distribution_type.min();
+}
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_real<> >::min() const
+{
+	return distribution_type.min();
+}
+
+
+
+/* ===============  max() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_smallint<> >::max() const
+{
+  return distribution_type.max();
+}
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_int<> >::max() const
+{
+  return distribution_type.max();
+}
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_01<> >::max() const
+{
+  return distribution_type.max();
+}
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_real<> >::max() const
+{
+  return distribution_type.max();
+}
+
+
+/* ===============  p() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::bernoulli_distribution<> >::p() const
+{
+  return distribution_type.p();
+}
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::binomial_distribution<> >::p() const
+{
+  return distribution_type.p();
+}
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::geometric_distribution<> >::p() const
+{
+  return distribution_type.p();
+}
+
+
+/* ===============  t() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::binomial_distribution<> >::t() const
+{
+  return distribution_type.t();
+}
+
+/* ===============  median() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::cauchy_distribution<> >::median() const
+{
+  return distribution_type.median();
+}
+
+/* ===============  sigma() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::cauchy_distribution<> >::sigma() const
+{
+  return distribution_type.sigma();
+}
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::normal_distribution<> >::sigma() const
+{
+  return distribution_type.sigma();
+}
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::lognormal_distribution<> >::sigma() const
+{
+  return distribution_type.sigma();
+}
+
+/* ===============  alpha() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::gamma_distribution<> >::alpha() const
+{
+  return distribution_type.alpha();
+}
+
+
+/* ===============  mean() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::poisson_distribution<> >::mean() const
+{
+  return distribution_type.mean();
+}
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::normal_distribution<> >::mean() const
+{
+  return distribution_type.mean();
+}
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::lognormal_distribution<> >::mean() const
+{
+  return distribution_type.mean();
+}
+
+/* ===============  a() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::triangle_distribution<> >::a() const
+{
+  return distribution_type.a();
+}
+
+
+/* ===============  b() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::triangle_distribution<> >::b() const
+{
+  return distribution_type.b();
+}
+
+
+/* ===============  c() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::triangle_distribution<> >::c() const
+{
+  return distribution_type.c();
+}
+
+
+/* ===============  lambda() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::exponential_distribution<> >::lambda() const
+{
+  return distribution_type.lambda();
+}
+
+
Index: src/RandomNumbers/RandomNumberDistribution_Encapsulation.hpp
===================================================================
--- src/RandomNumbers/RandomNumberDistribution_Encapsulation.hpp	(revision 15911c97898d09d69931fb955bf4db5cea2b7dc1)
+++ src/RandomNumbers/RandomNumberDistribution_Encapsulation.hpp	(revision 081e5d776b34e30d39d3d2bd6b9706066bba6950)
@@ -13,4 +13,6 @@
 #include <config.h>
 #endif
+
+#include "CodePatterns/Assert.hpp"
 
 #include <typeinfo>
@@ -60,4 +62,112 @@
 public:
 
+  /** Getter for smallest value the engine produces.
+   *
+   * @return smallest value
+   */
+  double min() const {
+    ASSERT(0, "min() not implemented for "+name());
+    return -1.;
+  }
+
+  /** Getter for largest value the engine produces.
+   *
+   * @return largest value
+   */
+  double max() const {
+    ASSERT(0, "max() not implemented for "+name());
+    return -1.;
+  }
+
+  /** Getter for bernoulli_distribution's probability p.
+   *
+   * @return p
+   */
+  double p() const {
+    ASSERT(0, "p() not implemented for "+name());
+    return -1.;
+  }
+
+  /** Getter for binomial_distribution's parameter t.
+   *
+   * @return t
+   */
+  double t() const {
+    ASSERT(0, "t() not implemented for "+name());
+    return -1.;
+  }
+
+  /** Getter for cauchy_distribution parameter median.
+   *
+   * @return median
+   */
+  double median() const {
+    ASSERT(0, "median() not implemented for "+name());
+    return -1.;
+  }
+
+  /** Getter for cauchy_distribution parameter sigma.
+   *
+   * @return sigma
+   */
+  double sigma() const {
+    ASSERT(0, "sigma() not implemented for "+name());
+    return -1.;
+  }
+
+  /** Getter for gamma_distribution parameter alpha.
+   *
+   * @return alpha
+   */
+  double alpha() const {
+    ASSERT(0, "alpha() not implemented for "+name());
+    return -1.;
+  }
+
+  /** Getter for poisson_distribution's parameter mean.
+   *
+   * @return mean
+   */
+  double mean() const {
+    ASSERT(0, "mean() not implemented for "+name());
+    return -1.;
+  }
+
+  /** Getter for triangle_distribution parameter a.
+   *
+   * @return a
+   */
+  double a() const {
+    ASSERT(0, "a() not implemented for "+name());
+    return -1.;
+  }
+
+  /** Getter for triangle_distribution parameter b.
+   *
+   * @return b
+   */
+  double b() const {
+    ASSERT(0, "b() not implemented for "+name());
+    return -1.;
+  }
+
+  /** Getter for triangle_distribution parameter c.
+   *
+   * @return c
+   */
+  double c() const {
+    ASSERT(0, "c() not implemented for "+name());
+    return -1.;
+  }
+
+  /** Getter for exponential_distribution parameter lambda.
+   *
+   * @return lambda
+   */
+  double lambda() const {
+    ASSERT(0, "lambda() not implemented for "+name());
+    return -1.;
+  }
+
   /** Getter for the type name of the internal distribution.
    *
@@ -103,3 +213,103 @@
 };
 
+// the following definitions prevents the compiler from instantiating the above
+// template member functions for the desired cases.
+
+/* ===============  min() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_smallint<> >::min() const;
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_int<> >::min() const;
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_01<> >::min() const;
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_real<> >::min() const;
+
+
+/* ===============  max() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_smallint<> >::max() const;
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_int<> >::max() const;
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_01<> >::max() const;
+template <>
+double RandomNumberDistribution_Encapsulation< boost::uniform_real<> >::max() const;
+
+
+/* ===============  p() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::bernoulli_distribution<> >::p() const;
+template <>
+double RandomNumberDistribution_Encapsulation< boost::binomial_distribution<> >::p() const;
+template <>
+double RandomNumberDistribution_Encapsulation< boost::geometric_distribution<> >::p() const;
+
+
+/* ===============  t() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::binomial_distribution<> >::t() const;
+
+
+/* ===============  median() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::cauchy_distribution<> >::median() const;
+
+
+/* ===============  sigma() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::cauchy_distribution<> >::sigma() const;
+template <>
+double RandomNumberDistribution_Encapsulation< boost::normal_distribution<> >::sigma() const;
+template <>
+double RandomNumberDistribution_Encapsulation< boost::lognormal_distribution<> >::sigma() const;
+
+
+/* ===============  alpha() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::gamma_distribution<> >::alpha() const;
+
+
+/* ===============  mean() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::poisson_distribution<> >::mean() const;
+template <>
+double RandomNumberDistribution_Encapsulation< boost::normal_distribution<> >::mean() const;
+template <>
+double RandomNumberDistribution_Encapsulation< boost::lognormal_distribution<> >::mean() const;
+
+
+/* ===============  a() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::triangle_distribution<> >::a() const;
+
+
+/* ===============  b() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::triangle_distribution<> >::b() const;
+
+
+/* ===============  c() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::triangle_distribution<> >::c() const;
+
+
+/* ===============  lambda() ======================= */
+
+template <>
+double RandomNumberDistribution_Encapsulation< boost::exponential_distribution<> >::lambda() const;
+
+
+
 #endif /* RANDOMNUMBERDISTRIBUTION_ENCAPSULATION_HPP_ */
Index: src/RandomNumbers/RandomNumberEngine.hpp
===================================================================
--- src/RandomNumbers/RandomNumberEngine.hpp	(revision 15911c97898d09d69931fb955bf4db5cea2b7dc1)
+++ src/RandomNumbers/RandomNumberEngine.hpp	(revision 081e5d776b34e30d39d3d2bd6b9706066bba6950)
@@ -43,4 +43,16 @@
   virtual void seed(unsigned int _seed)=0;
 
+  /** Getter for smallest value the engine produces.
+   *
+   * @return smallest value
+   */
+  virtual double min() const=0;
+
+  /** Getter for largest value the engine produces.
+   *
+   * @return largest value
+   */
+  virtual double max() const=0;
+
   /** Getter for the type name of the internal engine.
    *
Index: src/RandomNumbers/RandomNumberEngineFactory.def
===================================================================
--- src/RandomNumbers/RandomNumberEngineFactory.def	(revision 15911c97898d09d69931fb955bf4db5cea2b7dc1)
+++ src/RandomNumbers/RandomNumberEngineFactory.def	(revision 081e5d776b34e30d39d3d2bd6b9706066bba6950)
@@ -6,7 +6,5 @@
  */
 #define engine_seq \
-(minstd_rand0)
-
-/*
+(minstd_rand0)\
 (minstd_rand)\
 (rand48)\
@@ -17,9 +15,7 @@
 (mt11213b)\
 (mt19937)
-*/
+
 #define engine_seq_a \
-(lagged_fibonacci607)
-
-/*
+(lagged_fibonacci607)\
 (lagged_fibonacci1279)\
 (lagged_fibonacci2281)\
@@ -38,5 +34,4 @@
 (ranlux64_3_01)\
 (ranlux64_4_01)
-*/
 
 #define type_seq engine_seq engine_seq_a
Index: src/RandomNumbers/RandomNumberEngine_Encapsulation.cpp
===================================================================
--- src/RandomNumbers/RandomNumberEngine_Encapsulation.cpp	(revision 081e5d776b34e30d39d3d2bd6b9706066bba6950)
+++ src/RandomNumbers/RandomNumberEngine_Encapsulation.cpp	(revision 081e5d776b34e30d39d3d2bd6b9706066bba6950)
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+
+/*
+ * \file RandomNumberEngine_Encapsulation.cpp
+ *
+ * Herein we place specializations of specific functions for specific engines.
+ *
+ *  Created on: Jan 5, 2011
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "RandomNumberEngine_Encapsulation.hpp"
+
Index: src/RandomNumbers/RandomNumberEngine_Encapsulation.hpp
===================================================================
--- src/RandomNumbers/RandomNumberEngine_Encapsulation.hpp	(revision 15911c97898d09d69931fb955bf4db5cea2b7dc1)
+++ src/RandomNumbers/RandomNumberEngine_Encapsulation.hpp	(revision 081e5d776b34e30d39d3d2bd6b9706066bba6950)
@@ -72,4 +72,20 @@
   }
 
+  /** Getter for smallest value the engine produces.
+   *
+   * @return smallest value
+   */
+  double min() const {
+    return engine_type.min();
+  }
+
+  /** Getter for largest value the engine produces.
+   *
+   * @return largest value
+   */
+  double max() const {
+    return engine_type.max();
+  }
+
   /** Getter for the type name of the internal engine.
    *
Index: src/RandomNumbers/RandomNumberGeneratorFactory.def
===================================================================
--- src/RandomNumbers/RandomNumberGeneratorFactory.def	(revision 15911c97898d09d69931fb955bf4db5cea2b7dc1)
+++ src/RandomNumbers/RandomNumberGeneratorFactory.def	(revision 081e5d776b34e30d39d3d2bd6b9706066bba6950)
@@ -7,7 +7,5 @@
 #define distribution_seq \
 (uniform_smallint)\
-(uniform_int)
-
-/*
+(uniform_int)\
 (uniform_01)\
 (uniform_real)\
@@ -21,15 +19,13 @@
 (exponential_distribution)\
 (normal_distribution)\
-(lognormal_distribution)\
+(lognormal_distribution)
+/*
 (uniform_on_sphere)
 */
-
 /** BOOST_PP_SEQ of all random::boost engine types,
  * see see http://www.boost.org/doc/libs/1_45_0/doc/html/boost_random/reference.html#boost_random.reference.concepts
  */
 #define engine_seq \
-(minstd_rand0)
-
-/*
+(minstd_rand0)\
 (minstd_rand)\
 (rand48)\
@@ -40,9 +36,7 @@
 (mt11213b)\
 (mt19937)
-*/
+
 #define engine_seq_a \
-(lagged_fibonacci607)
-
-/*
+(lagged_fibonacci607)\
 (lagged_fibonacci1279)\
 (lagged_fibonacci2281)\
@@ -61,5 +55,4 @@
 (ranlux64_3_01)\
 (ranlux64_4_01)
-*/
 
 #endif /* RANDOMNUMBERGENERATORFACTORY_DEF_ */
Index: src/RandomNumbers/unittests/Makefile.am
===================================================================
--- src/RandomNumbers/unittests/Makefile.am	(revision 15911c97898d09d69931fb955bf4db5cea2b7dc1)
+++ src/RandomNumbers/unittests/Makefile.am	(revision 081e5d776b34e30d39d3d2bd6b9706066bba6950)
@@ -37,4 +37,6 @@
 	RandomNumberDistributionFactoryUnitTest.cpp \
 	RandomNumberDistributionFactoryUnitTest.hpp \
+	$(srcdir)/../RandomNumberDistribution_Encapsulation.cpp \
+	$(srcdir)/../RandomNumberDistribution_Encapsulation.hpp \
 	$(srcdir)/../RandomNumberDistributionFactory.cpp \
 	$(srcdir)/../RandomNumberDistributionFactory.hpp
@@ -44,4 +46,6 @@
 	RandomNumberEngineFactoryUnitTest.cpp \
 	RandomNumberEngineFactoryUnitTest.hpp \
+	$(srcdir)/../RandomNumberEngine_Encapsulation.cpp \
+	$(srcdir)/../RandomNumberEngine_Encapsulation.hpp \
 	$(srcdir)/../RandomNumberEngineFactory.cpp \
 	$(srcdir)/../RandomNumberEngineFactory.hpp
@@ -51,6 +55,10 @@
 	RandomNumberGeneratorFactoryUnitTest.cpp \
 	RandomNumberGeneratorFactoryUnitTest.hpp \
+	$(srcdir)/../RandomNumberDistribution_Encapsulation.cpp \
+	$(srcdir)/../RandomNumberDistribution_Encapsulation.hpp \
 	$(srcdir)/../RandomNumberDistributionFactory.cpp \
 	$(srcdir)/../RandomNumberDistributionFactory.hpp \
+	$(srcdir)/../RandomNumberEngine_Encapsulation.cpp \
+	$(srcdir)/../RandomNumberEngine_Encapsulation.hpp \
 	$(srcdir)/../RandomNumberEngineFactory.cpp \
 	$(srcdir)/../RandomNumberEngineFactory.hpp \
@@ -63,6 +71,10 @@
 	RandomNumberGeneratorUnitTest.cpp \
 	RandomNumberGeneratorUnitTest.hpp \
+	$(srcdir)/../RandomNumberDistribution_Encapsulation.cpp \
+	$(srcdir)/../RandomNumberDistribution_Encapsulation.hpp \
 	$(srcdir)/../RandomNumberDistributionFactory.cpp \
 	$(srcdir)/../RandomNumberDistributionFactory.hpp \
+	$(srcdir)/../RandomNumberEngine_Encapsulation.cpp \
+	$(srcdir)/../RandomNumberEngine_Encapsulation.hpp \
 	$(srcdir)/../RandomNumberEngineFactory.cpp \
 	$(srcdir)/../RandomNumberEngineFactory.hpp \
Index: src/RandomNumbers/unittests/RandomNumberDistributionFactoryUnitTest.cpp
===================================================================
--- src/RandomNumbers/unittests/RandomNumberDistributionFactoryUnitTest.cpp	(revision 15911c97898d09d69931fb955bf4db5cea2b7dc1)
+++ src/RandomNumbers/unittests/RandomNumberDistributionFactoryUnitTest.cpp	(revision 081e5d776b34e30d39d3d2bd6b9706066bba6950)
@@ -108,4 +108,8 @@
       rndA->name()
   );
+
+  // check min and max of uniform_smallint
+  CPPUNIT_ASSERT_EQUAL( 0., rndA->min() );
+  CPPUNIT_ASSERT_EQUAL( 9., rndA->max() );
 }
 
Index: src/RandomNumbers/unittests/RandomNumberEngineFactoryUnitTest.cpp
===================================================================
--- src/RandomNumbers/unittests/RandomNumberEngineFactoryUnitTest.cpp	(revision 15911c97898d09d69931fb955bf4db5cea2b7dc1)
+++ src/RandomNumbers/unittests/RandomNumberEngineFactoryUnitTest.cpp	(revision 081e5d776b34e30d39d3d2bd6b9706066bba6950)
@@ -112,4 +112,7 @@
       rndA->name()
   );
+
+  // range of minstd_rand0 with c=0 is [1,m)
+  CPPUNIT_ASSERT_EQUAL( 1., rndA->min() );
 }
 
