RNG-53: Deprecate class "SamplerBase".
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterExponentialSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterExponentialSampler.java
index c3b2387..7927d35 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterExponentialSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterExponentialSampler.java
@@ -20,6 +20,8 @@
 
 /**
  * Sampling from an <a href="http://mathworld.wolfram.com/ExponentialDistribution.html">exponential distribution</a>.
+ *
+ * @since 1.0
  */
 public class AhrensDieterExponentialSampler
     extends SamplerBase
@@ -39,6 +41,8 @@
     private static final double[] EXPONENTIAL_SA_QI = new double[16];
     /** The mean of this distribution. */
     private final double mean;
+    /** Underlying source of randomness. */
+    private final UniformRandomProvider rng;
 
     /**
      * Initialize tables.
@@ -63,7 +67,8 @@
      */
     public AhrensDieterExponentialSampler(UniformRandomProvider rng,
                                           double mean) {
-        super(rng);
+        super(null);
+        this.rng = rng;
         this.mean = mean;
     }
 
@@ -72,7 +77,7 @@
     public double sample() {
         // Step 1:
         double a = 0;
-        double u = nextDouble();
+        double u = rng.nextDouble();
 
         // Step 2 and 3:
         while (u < 0.5) {
@@ -90,13 +95,13 @@
 
         // Step 6:
         int i = 0; // Should be 1, be we iterate before it in while using 0.
-        double u2 = nextDouble();
+        double u2 = rng.nextDouble();
         double umin = u2;
 
         // Step 7 and 8:
         do {
             ++i;
-            u2 = nextDouble();
+            u2 = rng.nextDouble();
 
             if (u2 < umin) {
                 umin = u2;
@@ -111,6 +116,6 @@
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return "Ahrens-Dieter Exponential deviate [" + super.toString() + "]";
+        return "Ahrens-Dieter Exponential deviate [" + rng.toString() + "]";
     }
 }
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.java
index cbe327c..d34902d 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/AhrensDieterMarsagliaTsangGammaSampler.java
@@ -38,6 +38,8 @@
  *   </blockquote>
  *  </li>
  * </ul>
+ *
+ * @since 1.0
  */
 public class AhrensDieterMarsagliaTsangGammaSampler
     extends SamplerBase
@@ -58,6 +60,8 @@
     private final double cOptim;
     /** Gaussian sampling. */
     private final NormalizedGaussianSampler gaussian;
+    /** Underlying source of randomness. */
+    private final UniformRandomProvider rng;
 
     /**
      * @param rng Generator of uniformly distributed random numbers.
@@ -67,7 +71,8 @@
     public AhrensDieterMarsagliaTsangGammaSampler(UniformRandomProvider rng,
                                                   double alpha,
                                                   double theta) {
-        super(rng);
+        super(null);
+        this.rng = rng;
         this.alpha = alpha;
         this.theta = theta;
         gaussian = new ZigguratNormalizedGaussianSampler(rng);
@@ -85,14 +90,14 @@
 
             while (true) {
                 // Step 1:
-                final double u = nextDouble();
+                final double u = rng.nextDouble();
                 final double p = bGSOptim * u;
 
                 if (p <= 1) {
                     // Step 2:
 
                     final double x = Math.pow(p, oneOverTheta);
-                    final double u2 = nextDouble();
+                    final double u2 = rng.nextDouble();
 
                     if (u2 > Math.exp(-x)) {
                         // Reject.
@@ -104,7 +109,7 @@
                     // Step 3:
 
                     final double x = -Math.log((bGSOptim - p) * oneOverTheta);
-                    final double u2 = nextDouble();
+                    final double u2 = rng.nextDouble();
 
                     if (u2 > Math.pow(x, theta - 1)) {
                         // Reject.
@@ -125,7 +130,7 @@
                 }
 
                 final double x2 = x * x;
-                final double u = nextDouble();
+                final double u = rng.nextDouble();
 
                 // Squeeze.
                 if (u < 1 - 0.0331 * x2 * x2) {
@@ -142,6 +147,6 @@
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return "Ahrens-Dieter-Marsaglia-Tsang Gamma deviate [" + super.toString() + "]";
+        return "Ahrens-Dieter-Marsaglia-Tsang Gamma deviate [" + rng.toString() + "]";
     }
 }
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerGaussianSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerGaussianSampler.java
index 489cda3..acddb03 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerGaussianSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerGaussianSampler.java
@@ -22,7 +22,9 @@
  * <a href="https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform">
  * Box-Muller algorithm</a> for sampling from a Gaussian distribution.
  *
- * @deprecated since v1.1. Please use {@link BoxMullerNormalizedGaussianSampler}
+ * @since 1.0
+ *
+ * @deprecated Since v1.1. Please use {@link BoxMullerNormalizedGaussianSampler}
  * and {@link GaussianSampler} instead.
  */
 @Deprecated
@@ -35,6 +37,8 @@
     private final double mean;
     /** standardDeviation. */
     private final double standardDeviation;
+    /** Underlying source of randomness. */
+    private final UniformRandomProvider rng;
 
     /**
      * @param rng Generator of uniformly distributed random numbers.
@@ -44,7 +48,8 @@
     public BoxMullerGaussianSampler(UniformRandomProvider rng,
                                     double mean,
                                     double standardDeviation) {
-        super(rng);
+        super(null);
+        this.rng = rng;
         this.mean = mean;
         this.standardDeviation = standardDeviation;
     }
@@ -56,8 +61,8 @@
         if (Double.isNaN(nextGaussian)) {
             // Generate a pair of Gaussian numbers.
 
-            final double x = nextDouble();
-            final double y = nextDouble();
+            final double x = rng.nextDouble();
+            final double y = rng.nextDouble();
             final double alpha = 2 * Math.PI * x;
             final double r = Math.sqrt(-2 * Math.log(y));
 
@@ -81,6 +86,6 @@
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return "Box-Muller Gaussian deviate [" + super.toString() + "]";
+        return "Box-Muller Gaussian deviate [" + rng.toString() + "]";
     }
 }
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerLogNormalSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerLogNormalSampler.java
index 4be25fd..34953ad 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerLogNormalSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerLogNormalSampler.java
@@ -27,7 +27,11 @@
  */
 @Deprecated
 public class BoxMullerLogNormalSampler
-    extends LogNormalSampler {
+    extends SamplerBase
+    implements ContinuousSampler {
+    /** Delegate. */
+    private final ContinuousSampler sampler;
+
     /**
      * @param rng Generator of uniformly distributed random numbers.
      * @param scale Scale of the log-normal distribution.
@@ -36,7 +40,20 @@
     public BoxMullerLogNormalSampler(UniformRandomProvider rng,
                                      double scale,
                                      double shape) {
-        super(new BoxMullerNormalizedGaussianSampler(rng),
-              scale, shape);
+        super(null);
+        sampler = new LogNormalSampler(new BoxMullerNormalizedGaussianSampler(rng),
+                                       scale, shape);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public double sample() {
+        return sampler.sample();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return sampler.toString();
     }
 }
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerNormalizedGaussianSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerNormalizedGaussianSampler.java
index 43882fb..78a6b74 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerNormalizedGaussianSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/BoxMullerNormalizedGaussianSampler.java
@@ -26,16 +26,17 @@
  * @since 1.1
  */
 public class BoxMullerNormalizedGaussianSampler
-    extends SamplerBase
     implements NormalizedGaussianSampler {
     /** Next gaussian. */
     private double nextGaussian = Double.NaN;
+    /** Underlying source of randomness. */
+    private final UniformRandomProvider rng;
 
     /**
      * @param rng Generator of uniformly distributed random numbers.
      */
     public BoxMullerNormalizedGaussianSampler(UniformRandomProvider rng) {
-        super(rng);
+        this.rng = rng;
     }
 
     /** {@inheritDoc} */
@@ -45,8 +46,8 @@
         if (Double.isNaN(nextGaussian)) {
             // Generate a pair of Gaussian numbers.
 
-            final double x = nextDouble();
-            final double y = nextDouble();
+            final double x = rng.nextDouble();
+            final double y = rng.nextDouble();
             final double alpha = 2 * Math.PI * x;
             final double r = Math.sqrt(-2 * Math.log(y));
 
@@ -70,6 +71,6 @@
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return "Box-Muller normalized Gaussian deviate [" + super.toString() + "]";
+        return "Box-Muller normalized Gaussian deviate [" + rng.toString() + "]";
     }
 }
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java
index 1b4249a..ccee2c5 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java
@@ -38,6 +38,8 @@
     private final double alphaShape;
     /** Second shape parameter. */
     private final double betaShape;
+    /** Underlying source of randomness. */
+    private final UniformRandomProvider rng;
 
     /**
      * Creates a sampler instance.
@@ -49,7 +51,8 @@
     public ChengBetaSampler(UniformRandomProvider rng,
                             double alpha,
                             double beta) {
-        super(rng);
+        super(null);
+        this.rng = rng;
         alphaShape = alpha;
         betaShape = beta;
     }
@@ -70,7 +73,7 @@
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return "Cheng Beta deviate [" + super.toString() + "]";
+        return "Cheng Beta deviate [" + rng.toString() + "]";
     }
 
     /**
@@ -91,8 +94,8 @@
         double w;
         double t;
         do {
-            final double u1 = nextDouble();
-            final double u2 = nextDouble();
+            final double u1 = rng.nextDouble();
+            final double u2 = rng.nextDouble();
             final double v = beta * (Math.log(u1) - Math.log1p(-u1));
             w = a * Math.exp(v);
             final double z = u1 * u1 * u2;
@@ -131,8 +134,8 @@
 
         double w;
         while (true) {
-            final double u1 = nextDouble();
-            final double u2 = nextDouble();
+            final double u1 = rng.nextDouble();
+            final double u2 = rng.nextDouble();
             final double y = u1 * u2;
             final double z = u1 * y;
             if (u1 < 0.5) {
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSampler.java
index 4b59e99..57b7488 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSampler.java
@@ -28,6 +28,8 @@
     private final double lo;
     /** Higher bound. */
     private final double hi;
+    /** Underlying source of randomness. */
+    private final UniformRandomProvider rng;
 
     /**
      * @param rng Generator of uniformly distributed random numbers.
@@ -37,7 +39,8 @@
     public ContinuousUniformSampler(UniformRandomProvider rng,
                                     double lo,
                                     double hi) {
-        super(rng);
+        super(null);
+        this.rng = rng;
         this.lo = lo;
         this.hi = hi;
     }
@@ -45,13 +48,13 @@
     /** {@inheritDoc} */
     @Override
     public double sample() {
-        final double u = nextDouble();
+        final double u = rng.nextDouble();
         return u * hi + (1 - u) * lo;
     }
 
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return "Uniform deviate [" + super.toString() + "]";
+        return "Uniform deviate [" + rng.toString() + "]";
     }
 }
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/DiscreteUniformSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/DiscreteUniformSampler.java
index 5ee69be..6ff5ec7 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/DiscreteUniformSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/DiscreteUniformSampler.java
@@ -29,6 +29,8 @@
     private final int lower;
     /** Upper bound. */
     private final int upper;
+    /** Underlying source of randomness. */
+    private final UniformRandomProvider rng;
 
     /**
      * @param rng Generator of uniformly distributed random numbers.
@@ -39,7 +41,8 @@
     public DiscreteUniformSampler(UniformRandomProvider rng,
                                   int lower,
                                   int upper) {
-        super(rng);
+        super(null);
+        this.rng = rng;
         if (lower > upper) {
             throw new IllegalArgumentException(lower  + " > " + upper);
         }
@@ -57,7 +60,7 @@
             // than 2^31); as it covers more than half the integer range,
             // we use a simple rejection method.
             while (true) {
-                final int r = nextInt();
+                final int r = rng.nextInt();
                 if (r >= lower &&
                     r <= upper) {
                     return r;
@@ -65,13 +68,13 @@
             }
         } else {
             // We can shift the range and directly generate a positive int.
-            return lower + nextInt(max);
+            return lower + rng.nextInt(max);
         }
     }
 
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return "Uniform deviate [" + super.toString() + "]";
+        return "Uniform deviate [" + rng.toString() + "]";
     }
 }
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.java
index c95bcec..ccaa138 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformContinuousSampler.java
@@ -50,12 +50,16 @@
  * // Generate random deviate.
  * double random = chiSquareSampler.sample();
  * </code></pre>
+ *
+ * @since 1.0
  */
 public class InverseTransformContinuousSampler
     extends SamplerBase
     implements ContinuousSampler {
     /** Inverse cumulative probability function. */
     private final ContinuousInverseCumulativeProbabilityFunction function;
+    /** Underlying source of randomness. */
+    private final UniformRandomProvider rng;
 
     /**
      * @param rng Generator of uniformly distributed random numbers.
@@ -63,19 +67,20 @@
      */
     public InverseTransformContinuousSampler(UniformRandomProvider rng,
                                              ContinuousInverseCumulativeProbabilityFunction function) {
-        super(rng);
+        super(null);
+        this.rng = rng;
         this.function = function;
     }
 
     /** {@inheritDoc} */
     @Override
     public double sample() {
-        return function.inverseCumulativeProbability(nextDouble());
+        return function.inverseCumulativeProbability(rng.nextDouble());
     }
 
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return function.toString() + " (inverse method) [" + super.toString() + "]";
+        return function.toString() + " (inverse method) [" + rng.toString() + "]";
     }
 }
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.java
index 4b5b0e7..5c43b58 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformDiscreteSampler.java
@@ -50,12 +50,16 @@
  * // Generate random deviate.
  * int random = binomialSampler.sample();
  * </code></pre>
+ *
+ * @since 1.0
  */
 public class InverseTransformDiscreteSampler
     extends SamplerBase
     implements DiscreteSampler {
     /** Inverse cumulative probability function. */
     private final DiscreteInverseCumulativeProbabilityFunction function;
+    /** Underlying source of randomness. */
+    private final UniformRandomProvider rng;
 
     /**
      * @param rng Generator of uniformly distributed random numbers.
@@ -63,19 +67,20 @@
      */
     public InverseTransformDiscreteSampler(UniformRandomProvider rng,
                                            DiscreteInverseCumulativeProbabilityFunction function) {
-        super(rng);
+        super(null);
+        this.rng = rng;
         this.function = function;
     }
 
     /** {@inheritDoc} */
     @Override
     public int sample() {
-        return function.inverseCumulativeProbability(nextDouble());
+        return function.inverseCumulativeProbability(rng.nextDouble());
     }
 
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return function.toString() + " (inverse method) [" + super.toString() + "]";
+        return function.toString() + " (inverse method) [" + rng.toString() + "]";
     }
 }
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.java
index 93be592..15a1c90 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/InverseTransformParetoSampler.java
@@ -28,6 +28,8 @@
     private final double scale;
     /** Shape. */
     private final double shape;
+    /** Underlying source of randomness. */
+    private final UniformRandomProvider rng;
 
     /**
      * @param rng Generator of uniformly distributed random numbers.
@@ -37,7 +39,8 @@
     public InverseTransformParetoSampler(UniformRandomProvider rng,
                                          double scale,
                                          double shape) {
-        super(rng);
+        super(null);
+        this.rng = rng;
         this.scale = scale;
         this.shape = shape;
     }
@@ -45,12 +48,12 @@
     /** {@inheritDoc} */
     @Override
     public double sample() {
-        return scale / Math.pow(nextDouble(), 1 / shape);
+        return scale / Math.pow(rng.nextDouble(), 1 / shape);
     }
 
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return "[Inverse method for Pareto distribution " + super.toString() + "]";
+        return "[Inverse method for Pareto distribution " + rng.toString() + "]";
     }
 }
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java
index a729686..6a70113 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java
@@ -32,10 +32,11 @@
  *  </li>
  * </ul>
  *
+ * @since 1.1
+ *
  * This sampler is suitable for {@code mean >= 40}.
  */
 public class LargeMeanPoissonSampler
-    extends SamplerBase
     implements DiscreteSampler {
 
     /** Class to compute {@code log(n!)}. This has no cached values. */
@@ -46,6 +47,8 @@
         NO_CACHE_FACTORIAL_LOG = FactorialLog.create();
     }
 
+    /** Underlying source of randomness. */
+    private final UniformRandomProvider rng;
     /** Exponential. */
     private final ContinuousSampler exponential;
     /** Gaussian. */
@@ -98,7 +101,7 @@
      */
     public LargeMeanPoissonSampler(UniformRandomProvider rng,
                                    double mean) {
-        super(rng);
+        this.rng = rng;
         if (mean <= 0) {
             throw new IllegalArgumentException(mean + " <= " + 0);
         }
@@ -145,7 +148,7 @@
         double qr = 0;
         double qa = 0;
         while (true) {
-            final double u = nextDouble();
+            final double u = rng.nextDouble();
             if (u <= p1) {
                 final double n = gaussian.sample();
                 x = n * Math.sqrt(lambda + halfDelta) - 0.5d;
@@ -202,6 +205,6 @@
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return "Large Mean Poisson deviate [" + super.toString() + "]";
+        return "Large Mean Poisson deviate [" + rng.toString() + "]";
     }
 }
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/MarsagliaNormalizedGaussianSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/MarsagliaNormalizedGaussianSampler.java
index a20d3be..4b64461 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/MarsagliaNormalizedGaussianSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/MarsagliaNormalizedGaussianSampler.java
@@ -28,16 +28,17 @@
  * @since 1.1
  */
 public class MarsagliaNormalizedGaussianSampler
-    extends SamplerBase
     implements NormalizedGaussianSampler {
     /** Next gaussian. */
     private double nextGaussian = Double.NaN;
+    /** Underlying source of randomness. */
+    private final UniformRandomProvider rng;
 
     /**
      * @param rng Generator of uniformly distributed random numbers.
      */
     public MarsagliaNormalizedGaussianSampler(UniformRandomProvider rng) {
-        super(rng);
+        this.rng = rng;
     }
 
     /** {@inheritDoc} */
@@ -47,8 +48,8 @@
             // Rejection scheme for selecting a pair that lies within the unit circle.
             while (true) {
                 // Generate a pair of numbers within [-1 , 1).
-                final double x = 2 * nextDouble() - 1;
-                final double y = 2 * nextDouble() - 1;
+                final double x = 2 * rng.nextDouble() - 1;
+                final double y = 2 * rng.nextDouble() - 1;
                 final double r2 = x * x + y * y;
 
                 if (r2 < 1 && r2 > 0) {
@@ -79,6 +80,6 @@
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return "Box-Muller (with rejection) normalized Gaussian deviate [" + super.toString() + "]";
+        return "Box-Muller (with rejection) normalized Gaussian deviate [" + rng.toString() + "]";
     }
 }
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
index d0733ba..246d2cf 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java
@@ -35,6 +35,8 @@
  *   </blockquote>
  *  </li>
  * </ul>
+ *
+ * @since 1.0
  */
 public class PoissonSampler
     extends SamplerBase
@@ -52,7 +54,7 @@
      */
     public PoissonSampler(UniformRandomProvider rng,
                           double mean) {
-        super(rng);
+        super(null);
 
         // Delegate all work to specialised samplers.
         // These should check the input arguments.
@@ -70,6 +72,6 @@
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return "Poisson deviate [" + super.toString() + "]";
+        return poissonSampler.toString();
     }
 }
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/RejectionInversionZipfSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/RejectionInversionZipfSampler.java
index d8eafb2..2e25934 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/RejectionInversionZipfSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/RejectionInversionZipfSampler.java
@@ -45,6 +45,8 @@
     private final double hIntegralNumberOfElements;
     /** {@code 2 - hIntegralInverse(hIntegral(2.5) - h(2)}. */
     private final double s;
+    /** Underlying source of randomness. */
+    private final UniformRandomProvider rng;
 
     /**
      * @param rng Generator of uniformly distributed random numbers.
@@ -56,7 +58,8 @@
     public RejectionInversionZipfSampler(UniformRandomProvider rng,
                                          int numberOfElements,
                                          double exponent) {
-        super(rng);
+        super(null);
+        this.rng = rng;
         if (numberOfElements <= 0) {
             throw new IllegalArgumentException("number of elements is not strictly positive: " + numberOfElements);
         }
@@ -102,7 +105,7 @@
         // This explains why the implementation looks slightly different.
 
         while(true) {
-            final double u = hIntegralNumberOfElements + nextDouble() * (hIntegralX1 - hIntegralNumberOfElements);
+            final double u = hIntegralNumberOfElements + rng.nextDouble() * (hIntegralX1 - hIntegralNumberOfElements);
             // u is uniformly distributed in (hIntegralX1, hIntegralNumberOfElements]
 
             double x = hIntegralInverse(u);
@@ -169,7 +172,7 @@
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return "Rejection inversion Zipf deviate [" + super.toString() + "]";
+        return "Rejection inversion Zipf deviate [" + rng.toString() + "]";
     }
 
     /**
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java
index eb74f75..2b1e0a1 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SamplerBase.java
@@ -20,7 +20,12 @@
 
 /**
  * Base class for a sampler.
+ *
+ * @since 1.0
+ *
+ * @deprecated Since version 1.1. Class intended for internal use only.
  */
+@Deprecated
 public class SamplerBase {
     /** RNG. */
     private final UniformRandomProvider rng;
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SmallMeanPoissonSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SmallMeanPoissonSampler.java
index 283594e..170a85b 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SmallMeanPoissonSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/SmallMeanPoissonSampler.java
@@ -29,10 +29,11 @@
  *  </li>
  * </ul>
  *
+ * @since 1.1
+ *
  * This sampler is suitable for {@code mean < 40}.
  */
 public class SmallMeanPoissonSampler
-    extends SamplerBase
     implements DiscreteSampler {
 
     /**
@@ -42,6 +43,8 @@
     private final double p0;
     /** Pre-compute {@code 1000 * mean} as the upper limit of the sample. */
     private final int limit;
+    /** Underlying source of randomness. */
+    private final UniformRandomProvider rng;
 
     /**
      * @param rng  Generator of uniformly distributed random numbers.
@@ -50,7 +53,7 @@
      */
     public SmallMeanPoissonSampler(UniformRandomProvider rng,
                                    double mean) {
-        super(rng);
+        this.rng = rng;
         if (mean <= 0) {
             throw new IllegalArgumentException(mean + " <= " + 0);
         }
@@ -67,7 +70,7 @@
         double r = 1;
 
         while (n < limit) {
-            r *= nextDouble();
+            r *= rng.nextDouble();
             if (r >= p0) {
                 n++;
             } else {
@@ -80,6 +83,6 @@
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return "Small Mean Poisson deviate [" + super.toString() + "]";
+        return "Small Mean Poisson deviate [" + rng.toString() + "]";
     }
 }
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ZigguratNormalizedGaussianSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ZigguratNormalizedGaussianSampler.java
index 3571f3b..b52c926 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ZigguratNormalizedGaussianSampler.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ZigguratNormalizedGaussianSampler.java
@@ -31,7 +31,6 @@
  * @since 1.1
  */
 public class ZigguratNormalizedGaussianSampler
-    extends SamplerBase
     implements NormalizedGaussianSampler {
     /** Start of tail. */
     private static final double R = 3.442619855899;
@@ -53,6 +52,8 @@
     private static final double[] W = new double[LEN];
     /** Auxiliary table. */
     private static final double[] F = new double[LEN];
+    /** Underlying source of randomness. */
+    private final UniformRandomProvider rng;
 
     static {
         // Filling the tables.
@@ -88,13 +89,13 @@
      * @param rng Generator of uniformly distributed random numbers.
      */
     public ZigguratNormalizedGaussianSampler(UniformRandomProvider rng) {
-        super(rng);
+        this.rng = rng;
     }
 
     /** {@inheritDoc} */
     @Override
     public double sample() {
-        final long j = nextLong();
+        final long j = rng.nextLong();
         final int i = (int) (j & LAST);
         if (Math.abs(j) < K[i]) {
             return j * W[i];
@@ -106,7 +107,7 @@
     /** {@inheritDoc} */
     @Override
     public String toString() {
-        return "Ziggurat normalized Gaussian deviate [" + super.toString() + "]";
+        return "Ziggurat normalized Gaussian deviate [" + rng.toString() + "]";
     }
 
     /**
@@ -126,18 +127,18 @@
             if (iz == 0) {
                 // Base strip.
                 do {
-                    y = -Math.log(nextDouble());
-                    x = -Math.log(nextDouble()) * ONE_OVER_R;
+                    y = -Math.log(rng.nextDouble());
+                    x = -Math.log(rng.nextDouble()) * ONE_OVER_R;
                 } while (y + y < x * x);
 
                 final double out = R + x;
                 return hz > 0 ? out : -out;
             } else {
                 // Wedge of other strips.
-                if (F[iz] + nextDouble() * (F[iz - 1] - F[iz]) < gauss(x)) {
+                if (F[iz] + rng.nextDouble() * (F[iz - 1] - F[iz]) < gauss(x)) {
                     return x;
                 } else {
-                    final long hzNew = nextLong();
+                    final long hzNew = rng.nextLong();
                     final int izNew = (int) (hzNew & LAST);
                     if (Math.abs(hzNew) < K[izNew]) {
                         return hzNew * W[izNew];
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 262d7f6..0849bc3 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -73,7 +73,7 @@
 ">
     </release>
 
-    <release version="1.1" date="2018-08-05" description="
+    <release version="1.1" date="2018-08-15" description="
 This is a minor release of Apache Commons RNG, containing a
 few new features and performance improvements.
 
@@ -98,11 +98,16 @@
 to re-run tests that fail and pass the build if they succeed (the test will
 be marked as 'flaky' in the report).
 ">
+      <action dev="erans" type="fix" issue="RNG-53">
+        Class "SamplerBase" has been deprecated.  It was meant for internal use
+        only but, through inheritance, it allows incorrect usage of the sampler
+        classes.
+      </action>
       <action dev="erans" type="update" issue="RNG-50" due-to="Alex D. Herbert">
-	"PoissonSampler": Algorithms for small mean and large mean have
-	been separated into dedicated classes.  Cache precomputation has
-	been disabled as it is only marginally used and is a performance
-	hit for small sampling sets.
+	    "PoissonSampler": Algorithms for small mean and large mean have
+	    been separated into dedicated classes.  Cache precomputation has
+	    been disabled as it is only marginally used and is a performance
+	    hit for small sampling sets.
       </action>
       <action dev="erans" type="add" issue="RNG-37">
         Implementation of the "Ziggurat" algorithm for Gaussian sampling.
@@ -119,10 +124,6 @@
       </action>
       <action dev="erans" type="update" issue="RNG-46">
         Following RNG-43, "BoxMullerLogNormalSampler" has been deprecated.
-        Furthermore, its base class has been removed; although it is a binary
-        incompatibility, it cannot cause any problem that were not already
-        present in code using v1.0 of the library: Calls to the base class
-        would have raised a NPE.
       </action>
       <action dev="erans" type="add" issue="RNG-39">
         "UnitSphereSampler": generate random vectors isotropically located