http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/main/java/org/apache/commons/math4/distribution/TriangularDistribution.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/distribution/TriangularDistribution.java
 
b/src/main/java/org/apache/commons/math4/distribution/TriangularDistribution.java
index 072f5c5..4013c47 100644
--- 
a/src/main/java/org/apache/commons/math4/distribution/TriangularDistribution.java
+++ 
b/src/main/java/org/apache/commons/math4/distribution/TriangularDistribution.java
@@ -21,8 +21,6 @@ import 
org.apache.commons.math4.exception.NumberIsTooLargeException;
 import org.apache.commons.math4.exception.NumberIsTooSmallException;
 import org.apache.commons.math4.exception.OutOfRangeException;
 import org.apache.commons.math4.exception.util.LocalizedFormats;
-import org.apache.commons.math4.random.RandomGenerator;
-import org.apache.commons.math4.random.Well19937c;
 import org.apache.commons.math4.util.FastMath;
 
 /**
@@ -35,7 +33,7 @@ import org.apache.commons.math4.util.FastMath;
  */
 public class TriangularDistribution extends AbstractRealDistribution {
     /** Serializable version identifier. */
-    private static final long serialVersionUID = 20120112L;
+    private static final long serialVersionUID = 20160311L;
     /** Lower limit of this distribution (inclusive). */
     private final double a;
     /** Upper limit of this distribution (inclusive). */
@@ -46,31 +44,8 @@ public class TriangularDistribution extends 
AbstractRealDistribution {
     private final double solverAbsoluteAccuracy;
 
     /**
-     * Creates a triangular real distribution using the given lower limit,
-     * upper limit, and mode.
-     * <p>
-     * <b>Note:</b> this constructor will implicitly create an instance of
-     * {@link Well19937c} as random generator to be used for sampling only (see
-     * {@link #sample()} and {@link #sample(int)}). In case no sampling is
-     * needed for the created distribution, it is advised to pass {@code null}
-     * as random generator via the appropriate constructors to avoid the
-     * additional initialisation overhead.
-     *
-     * @param a Lower limit of this distribution (inclusive).
-     * @param b Upper limit of this distribution (inclusive).
-     * @param c Mode of this distribution.
-     * @throws NumberIsTooLargeException if {@code a >= b} or if {@code c > b}.
-     * @throws NumberIsTooSmallException if {@code c < a}.
-     */
-    public TriangularDistribution(double a, double c, double b)
-        throws NumberIsTooLargeException, NumberIsTooSmallException {
-        this(new Well19937c(), a, c, b);
-    }
-
-    /**
-     * Creates a triangular distribution.
+     * Creates a distribution.
      *
-     * @param rng Random number generator.
      * @param a Lower limit of this distribution (inclusive).
      * @param b Upper limit of this distribution (inclusive).
      * @param c Mode of this distribution.
@@ -78,13 +53,11 @@ public class TriangularDistribution extends 
AbstractRealDistribution {
      * @throws NumberIsTooSmallException if {@code c < a}.
      * @since 3.1
      */
-    public TriangularDistribution(RandomGenerator rng,
-                                  double a,
+    public TriangularDistribution(double a,
                                   double c,
                                   double b)
-        throws NumberIsTooLargeException, NumberIsTooSmallException {
-        super(rng);
-
+        throws NumberIsTooLargeException,
+               NumberIsTooSmallException {
         if (a >= b) {
             throw new NumberIsTooLargeException(
                             LocalizedFormats.LOWER_BOUND_NOT_BELOW_UPPER_BOUND,

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/main/java/org/apache/commons/math4/distribution/UniformRealDistribution.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/distribution/UniformRealDistribution.java
 
b/src/main/java/org/apache/commons/math4/distribution/UniformRealDistribution.java
index 704aa97..404cc02 100644
--- 
a/src/main/java/org/apache/commons/math4/distribution/UniformRealDistribution.java
+++ 
b/src/main/java/org/apache/commons/math4/distribution/UniformRealDistribution.java
@@ -20,8 +20,6 @@ package org.apache.commons.math4.distribution;
 import org.apache.commons.math4.exception.NumberIsTooLargeException;
 import org.apache.commons.math4.exception.OutOfRangeException;
 import org.apache.commons.math4.exception.util.LocalizedFormats;
-import org.apache.commons.math4.random.RandomGenerator;
-import org.apache.commons.math4.random.Well19937c;
 import org.apache.commons.math4.rng.UniformRandomProvider;
 
 /**
@@ -34,7 +32,7 @@ import org.apache.commons.math4.rng.UniformRandomProvider;
  */
 public class UniformRealDistribution extends AbstractRealDistribution {
     /** Serializable version identifier. */
-    private static final long serialVersionUID = 20120109L;
+    private static final long serialVersionUID = 20160311L;
     /** Lower bound of this distribution (inclusive). */
     private final double lower;
     /** Upper bound of this distribution (exclusive). */
@@ -43,53 +41,21 @@ public class UniformRealDistribution extends 
AbstractRealDistribution {
     /**
      * Create a standard uniform real distribution with lower bound (inclusive)
      * equal to zero and upper bound (exclusive) equal to one.
-     * <p>
-     * <b>Note:</b> this constructor will implicitly create an instance of
-     * {@link Well19937c} as random generator to be used for sampling only (see
-     * {@link #sample()} and {@link #sample(int)}). In case no sampling is
-     * needed for the created distribution, it is advised to pass {@code null}
-     * as random generator via the appropriate constructors to avoid the
-     * additional initialisation overhead.
      */
     public UniformRealDistribution() {
         this(0, 1);
     }
 
     /**
-     * Create a uniform real distribution using the given lower and upper
-     * bounds.
-     * <p>
-     * <b>Note:</b> this constructor will implicitly create an instance of
-     * {@link Well19937c} as random generator to be used for sampling only (see
-     * {@link #sample()} and {@link #sample(int)}). In case no sampling is
-     * needed for the created distribution, it is advised to pass {@code null}
-     * as random generator via the appropriate constructors to avoid the
-     * additional initialisation overhead.
-     *
-     * @param lower Lower bound of this distribution (inclusive).
-     * @param upper Upper bound of this distribution (exclusive).
-     * @throws NumberIsTooLargeException if {@code lower >= upper}.
-     */
-    public UniformRealDistribution(double lower, double upper)
-        throws NumberIsTooLargeException {
-        this(new Well19937c(), lower, upper);
-    }
-
-    /**
      * Creates a uniform distribution.
      *
-     * @param rng Random number generator.
      * @param lower Lower bound of this distribution (inclusive).
      * @param upper Upper bound of this distribution (exclusive).
      * @throws NumberIsTooLargeException if {@code lower >= upper}.
-     * @since 3.1
      */
-    @Deprecated
-    public UniformRealDistribution(RandomGenerator rng,
-                                   double lower,
+    public UniformRealDistribution(double lower,
                                    double upper)
         throws NumberIsTooLargeException {
-        super(rng);
         if (lower >= upper) {
             throw new NumberIsTooLargeException(
                             LocalizedFormats.LOWER_BOUND_NOT_BELOW_UPPER_BOUND,
@@ -207,7 +173,7 @@ public class UniformRealDistribution extends 
AbstractRealDistribution {
             /** {@inheritDoc} */
             @Override
             public double sample() {
-                final double u = random.nextDouble();
+                final double u = rng.nextDouble();
                 return u * upper + (1 - u) * lower;
             }
         };

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/main/java/org/apache/commons/math4/distribution/WeibullDistribution.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/distribution/WeibullDistribution.java 
b/src/main/java/org/apache/commons/math4/distribution/WeibullDistribution.java
index 893501e..844bf4a 100644
--- 
a/src/main/java/org/apache/commons/math4/distribution/WeibullDistribution.java
+++ 
b/src/main/java/org/apache/commons/math4/distribution/WeibullDistribution.java
@@ -20,8 +20,6 @@ package org.apache.commons.math4.distribution;
 import org.apache.commons.math4.exception.NotStrictlyPositiveException;
 import org.apache.commons.math4.exception.OutOfRangeException;
 import org.apache.commons.math4.exception.util.LocalizedFormats;
-import org.apache.commons.math4.random.RandomGenerator;
-import org.apache.commons.math4.random.Well19937c;
 import org.apache.commons.math4.special.Gamma;
 import org.apache.commons.math4.util.FastMath;
 
@@ -33,7 +31,8 @@ import org.apache.commons.math4.util.FastMath;
  *
  * @see <a href="http://en.wikipedia.org/wiki/Weibull_distribution";>Weibull 
distribution (Wikipedia)</a>
  * @see <a 
href="http://mathworld.wolfram.com/WeibullDistribution.html";>Weibull 
distribution (MathWorld)</a>
- * @since 1.1 (changed to concrete class in 3.0)
+ *
+ * @since 1.1
  */
 public class WeibullDistribution extends AbstractRealDistribution {
     /**
@@ -42,7 +41,7 @@ public class WeibullDistribution extends 
AbstractRealDistribution {
      */
     public static final double DEFAULT_INVERSE_ABSOLUTE_ACCURACY = 1e-9;
     /** Serializable version identifier. */
-    private static final long serialVersionUID = 8589540077390120676L;
+    private static final long serialVersionUID = 20160311L;
     /** The shape parameter. */
     private final double shape;
     /** The scale parameter. */
@@ -59,15 +58,7 @@ public class WeibullDistribution extends 
AbstractRealDistribution {
     private boolean numericalVarianceIsCalculated = false;
 
     /**
-     * Create a Weibull distribution with the given shape and scale and a
-     * location equal to zero.
-     * <p>
-     * <b>Note:</b> this constructor will implicitly create an instance of
-     * {@link Well19937c} as random generator to be used for sampling only (see
-     * {@link #sample()} and {@link #sample(int)}). In case no sampling is
-     * needed for the created distribution, it is advised to pass {@code null}
-     * as random generator via the appropriate constructors to avoid the
-     * additional initialisation overhead.
+     * Creates a distribution.
      *
      * @param alpha Shape parameter.
      * @param beta Scale parameter.
@@ -80,63 +71,19 @@ public class WeibullDistribution extends 
AbstractRealDistribution {
     }
 
     /**
-     * Create a Weibull distribution with the given shape, scale and inverse
-     * cumulative probability accuracy and a location equal to zero.
-     * <p>
-     * <b>Note:</b> this constructor will implicitly create an instance of
-     * {@link Well19937c} as random generator to be used for sampling only (see
-     * {@link #sample()} and {@link #sample(int)}). In case no sampling is
-     * needed for the created distribution, it is advised to pass {@code null}
-     * as random generator via the appropriate constructors to avoid the
-     * additional initialisation overhead.
-     *
-     * @param alpha Shape parameter.
-     * @param beta Scale parameter.
-     * @param inverseCumAccuracy Maximum absolute error in inverse
-     * cumulative probability estimates
-     * (defaults to {@link #DEFAULT_INVERSE_ABSOLUTE_ACCURACY}).
-     * @throws NotStrictlyPositiveException if {@code alpha <= 0} or
-     * {@code beta <= 0}.
-     * @since 2.1
-     */
-    public WeibullDistribution(double alpha, double beta,
-                               double inverseCumAccuracy) {
-        this(new Well19937c(), alpha, beta, inverseCumAccuracy);
-    }
-
-    /**
-     * Creates a Weibull distribution.
-     *
-     * @param rng Random number generator.
-     * @param alpha Shape parameter.
-     * @param beta Scale parameter.
-     * @throws NotStrictlyPositiveException if {@code alpha <= 0} or {@code 
beta <= 0}.
-     * @since 3.3
-     */
-    public WeibullDistribution(RandomGenerator rng, double alpha, double beta)
-        throws NotStrictlyPositiveException {
-        this(rng, alpha, beta, DEFAULT_INVERSE_ABSOLUTE_ACCURACY);
-    }
-
-    /**
-     * Creates a Weibull distribution.
+     * Creates a distribution.
      *
-     * @param rng Random number generator.
      * @param alpha Shape parameter.
      * @param beta Scale parameter.
      * @param inverseCumAccuracy Maximum absolute error in inverse
      * cumulative probability estimates
      * (defaults to {@link #DEFAULT_INVERSE_ABSOLUTE_ACCURACY}).
      * @throws NotStrictlyPositiveException if {@code alpha <= 0} or {@code 
beta <= 0}.
-     * @since 3.1
      */
-    public WeibullDistribution(RandomGenerator rng,
-                               double alpha,
+    public WeibullDistribution(double alpha,
                                double beta,
                                double inverseCumAccuracy)
         throws NotStrictlyPositiveException {
-        super(rng);
-
         if (alpha <= 0) {
             throw new NotStrictlyPositiveException(LocalizedFormats.SHAPE,
                                                    alpha);

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/main/java/org/apache/commons/math4/random/EmpiricalDistribution.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/random/EmpiricalDistribution.java 
b/src/main/java/org/apache/commons/math4/random/EmpiricalDistribution.java
index 6d2722e..926ad09 100644
--- a/src/main/java/org/apache/commons/math4/random/EmpiricalDistribution.java
+++ b/src/main/java/org/apache/commons/math4/random/EmpiricalDistribution.java
@@ -41,6 +41,8 @@ import 
org.apache.commons.math4.exception.NotStrictlyPositiveException;
 import org.apache.commons.math4.exception.util.LocalizedFormats;
 import org.apache.commons.math4.stat.descriptive.StatisticalSummary;
 import org.apache.commons.math4.stat.descriptive.SummaryStatistics;
+import org.apache.commons.math4.rng.UniformRandomProvider;
+import org.apache.commons.math4.rng.RandomSource;
 import org.apache.commons.math4.util.FastMath;
 import org.apache.commons.math4.util.MathUtils;
 
@@ -112,6 +114,7 @@ public class EmpiricalDistribution extends 
AbstractRealDistribution {
     private static final long serialVersionUID = 5729073523949762654L;
 
     /** RandomDataGenerator instance to use in repeated calls to getNext() */
+    @Deprecated
     protected final RandomDataGenerator randomData;
 
     /** List of SummaryStatistics objects characterizing the bins */
@@ -152,8 +155,13 @@ public class EmpiricalDistribution extends 
AbstractRealDistribution {
      * @throws NotStrictlyPositiveException if {@code binCount <= 0}.
      */
     public EmpiricalDistribution(int binCount) {
-        this(binCount, new RandomDataGenerator());
-    }
+        if (binCount <= 0) {
+            throw new NotStrictlyPositiveException(binCount);
+        }
+        this.binCount = binCount;
+        binStats = new ArrayList<SummaryStatistics>();
+        randomData = null; // XXX remove
+     }
 
     /**
      * Creates a new EmpiricalDistribution with the specified bin count using 
the
@@ -164,8 +172,9 @@ public class EmpiricalDistribution extends 
AbstractRealDistribution {
      * @throws NotStrictlyPositiveException if {@code binCount <= 0}.
      * @since 3.0
      */
+    @Deprecated
     public EmpiricalDistribution(int binCount, RandomGenerator generator) {
-        this(binCount, new RandomDataGenerator(generator));
+         this(binCount, new RandomDataGenerator(generator));
     }
 
     /**
@@ -175,8 +184,9 @@ public class EmpiricalDistribution extends 
AbstractRealDistribution {
      * @param generator random data generator (may be null, resulting in 
default JDK generator)
      * @since 3.0
      */
+    @Deprecated
     public EmpiricalDistribution(RandomGenerator generator) {
-        this(DEFAULT_BIN_COUNT, generator);
+         this(DEFAULT_BIN_COUNT, generator);
     }
 
     /**
@@ -187,9 +197,9 @@ public class EmpiricalDistribution extends 
AbstractRealDistribution {
      * @param randomData Random data generator.
      * @throws NotStrictlyPositiveException if {@code binCount <= 0}.
      */
+    @Deprecated
     private EmpiricalDistribution(int binCount,
                                   RandomDataGenerator randomData) {
-        super(randomData.getRandomGenerator());
         if (binCount <= 0) {
             throw new NotStrictlyPositiveException(binCount);
         }
@@ -452,12 +462,11 @@ public class EmpiricalDistribution extends 
AbstractRealDistribution {
      * @return the random value.
      * @throws MathIllegalStateException if the distribution has not been 
loaded
      */
+    @Deprecated
     public double getNextValue() throws MathIllegalStateException {
-
         if (!loaded) {
             throw new 
MathIllegalStateException(LocalizedFormats.DISTRIBUTION_NOT_LOADED);
         }
-
         return sample();
     }
 
@@ -552,7 +561,9 @@ public class EmpiricalDistribution extends 
AbstractRealDistribution {
      *
      * @param seed random generator seed
      * @since 3.0
+     * XXX REMOVE
      */
+    @Deprecated
     public void reSeed(long seed) {
         randomData.reSeed(seed);
     }
@@ -736,10 +747,20 @@ public class EmpiricalDistribution extends 
AbstractRealDistribution {
      * @since 3.1
      */
     @Override
+    @Deprecated
     public void reseedRandomGenerator(long seed) {
         randomData.reSeed(seed);
     }
 
+    /**{@inheritDoc} */
+    @Override
+    public RealDistribution.Sampler createSampler(final UniformRandomProvider 
rng) {
+        if (!loaded) {
+            throw new 
MathIllegalStateException(LocalizedFormats.DISTRIBUTION_NOT_LOADED);
+        }
+        return super.createSampler(rng);
+    }
+
     /**
      * The probability of bin i.
      *
@@ -808,9 +829,8 @@ public class EmpiricalDistribution extends 
AbstractRealDistribution {
         if (bStats.getN() == 1 || bStats.getVariance() == 0) {
             return new ConstantRealDistribution(bStats.getMean());
         } else {
-            return new NormalDistribution(randomData.getRandomGenerator(),
-                bStats.getMean(), bStats.getStandardDeviation(),
-                NormalDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY);
+            return new NormalDistribution(bStats.getMean(), 
bStats.getStandardDeviation(),
+                                          
NormalDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/main/java/org/apache/commons/math4/random/RandomDataGenerator.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/random/RandomDataGenerator.java 
b/src/main/java/org/apache/commons/math4/random/RandomDataGenerator.java
index 7488a5f..d66808d 100644
--- a/src/main/java/org/apache/commons/math4/random/RandomDataGenerator.java
+++ b/src/main/java/org/apache/commons/math4/random/RandomDataGenerator.java
@@ -18,6 +18,9 @@
 package org.apache.commons.math4.random;
 
 import java.io.Serializable;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.io.ObjectInputStream;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.security.NoSuchProviderException;
@@ -46,6 +49,8 @@ import 
org.apache.commons.math4.exception.NotStrictlyPositiveException;
 import org.apache.commons.math4.exception.NumberIsTooLargeException;
 import org.apache.commons.math4.exception.OutOfRangeException;
 import org.apache.commons.math4.exception.util.LocalizedFormats;
+import org.apache.commons.math4.rng.RandomSource;
+import org.apache.commons.math4.rng.UniformRandomProvider;
 import org.apache.commons.math4.util.MathArrays;
 
 /**
@@ -115,8 +120,14 @@ public class RandomDataGenerator implements Serializable {
     private static final long serialVersionUID = -626730818244969716L;
 
     /** underlying random number generator */
+    @Deprecated
     private RandomGenerator rand = null;
 
+    /** Underlying random number generator. */
+    private transient UniformRandomProvider randomProvider = null;
+    /** Underlying source of randomness. */
+    private final RandomSource randomSource;
+
     /** underlying secure random number generator */
     private RandomGenerator secRand = null;
 
@@ -129,6 +140,7 @@ public class RandomDataGenerator implements Serializable {
      * The generator is initialized and seeded on first use.</p>
      */
     public RandomDataGenerator() {
+        randomSource = RandomSource.WELL_19937_C;
     }
 
     /**
@@ -138,8 +150,20 @@ public class RandomDataGenerator implements Serializable {
      * @param rand the source of (non-secure) random data
      * (may be null, resulting in the default generator)
      */
+    @Deprecated
     public RandomDataGenerator(RandomGenerator rand) {
         this.rand = rand;
+        randomSource = RandomSource.WELL_19937_C;
+    }
+
+    /**
+     * Creates a new instance.
+     *
+     * @param source Source of (non-secure) random data.
+     * If {@code null}, {@link RandomSource#WELL_19937_C} will be used.
+     */
+    public RandomDataGenerator(RandomSource source) {
+        randomSource = source == null ? RandomSource.WELL_19937_C : source;
     }
 
     /**
@@ -491,8 +515,7 @@ public class RandomDataGenerator implements Serializable {
      * @throws NotStrictlyPositiveException if {@code mean <= 0}.
      */
     public double nextExponential(double mean) throws 
NotStrictlyPositiveException {
-        return new ExponentialDistribution(getRandomGenerator(), mean,
-                
ExponentialDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).sample();
+        return new ExponentialDistribution(mean, 
ExponentialDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).createSampler(getRandomProvider()).sample();
     }
 
     /**
@@ -518,8 +541,7 @@ public class RandomDataGenerator implements Serializable {
      * {@code scale <= 0}.
      */
     public double nextGamma(double shape, double scale) throws 
NotStrictlyPositiveException {
-        return new GammaDistribution(getRandomGenerator(),shape, scale,
-                GammaDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).sample();
+        return new GammaDistribution(shape, scale, 
GammaDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).createSampler(getRandomProvider()).sample();
     }
 
     /**
@@ -535,8 +557,7 @@ public class RandomDataGenerator implements Serializable {
      * @throws NotPositiveException  if {@code numberOfSuccesses < 0}.
      */
     public int nextHypergeometric(int populationSize, int numberOfSuccesses, 
int sampleSize) throws NotPositiveException, NotStrictlyPositiveException, 
NumberIsTooLargeException {
-        return new 
HypergeometricDistribution(getRandomGenerator(),populationSize,
-                numberOfSuccesses, sampleSize).sample();
+        return new HypergeometricDistribution(getRandomGenerator(), 
populationSize, numberOfSuccesses, sampleSize).sample();
     }
 
     /**
@@ -561,8 +582,7 @@ public class RandomDataGenerator implements Serializable {
      * @throws NotStrictlyPositiveException if {@code df <= 0}
      */
     public double nextT(double df) throws NotStrictlyPositiveException {
-        return new TDistribution(getRandomGenerator(), df,
-                TDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).sample();
+        return new TDistribution(df, 
TDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).createSampler(getRandomProvider()).sample();
     }
 
     /**
@@ -575,8 +595,7 @@ public class RandomDataGenerator implements Serializable {
      * {@code scale <= 0}.
      */
     public double nextWeibull(double shape, double scale) throws 
NotStrictlyPositiveException {
-        return new WeibullDistribution(getRandomGenerator(), shape, scale,
-                
WeibullDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).sample();
+        return new WeibullDistribution(shape, scale, 
WeibullDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).createSampler(getRandomProvider()).sample();
     }
 
     /**
@@ -600,8 +619,7 @@ public class RandomDataGenerator implements Serializable {
      * @return random value sampled from the beta(alpha, beta) distribution
      */
     public double nextBeta(double alpha, double beta) {
-        return new BetaDistribution(getRandomGenerator(), alpha, beta,
-                BetaDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).sample();
+        return new BetaDistribution(alpha, beta, 
BetaDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).createSampler(getRandomProvider()).sample();
     }
 
     /**
@@ -623,8 +641,7 @@ public class RandomDataGenerator implements Serializable {
      * @return random value sampled from the Cauchy(median, scale) distribution
      */
     public double nextCauchy(double median, double scale) {
-        return new CauchyDistribution(getRandomGenerator(), median, scale,
-                CauchyDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).sample();
+        return new CauchyDistribution(median, scale, 
CauchyDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).createSampler(getRandomProvider()).sample();
     }
 
     /**
@@ -634,8 +651,7 @@ public class RandomDataGenerator implements Serializable {
      * @return random value sampled from the ChiSquare(df) distribution
      */
     public double nextChiSquare(double df) {
-        return new ChiSquaredDistribution(getRandomGenerator(), df,
-                
ChiSquaredDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).sample();
+        return new ChiSquaredDistribution(df, 
ChiSquaredDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).createSampler(getRandomProvider()).sample();
     }
 
     /**
@@ -648,8 +664,7 @@ public class RandomDataGenerator implements Serializable {
      * {@code numeratorDf <= 0} or {@code denominatorDf <= 0}.
      */
     public double nextF(double numeratorDf, double denominatorDf) throws 
NotStrictlyPositiveException {
-        return new FDistribution(getRandomGenerator(), numeratorDf, 
denominatorDf,
-                FDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).sample();
+        return new FDistribution(numeratorDf, denominatorDf, 
FDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).createSampler(getRandomProvider()).sample();
     }
 
     /**
@@ -830,7 +845,8 @@ public class RandomDataGenerator implements Serializable {
      * @param seed the seed value to use
      */
     public void reSeed(long seed) {
-       getRandomGenerator().setSeed(seed);
+        randomProvider = RandomSource.create(randomSource, seed);
+        getRandomGenerator().setSeed(seed);
     }
 
     /**
@@ -861,7 +877,7 @@ public class RandomDataGenerator implements Serializable {
      * {@code System.currentTimeMillis() + System.identityHashCode(this))}.
      */
     public void reSeed() {
-        getRandomGenerator().setSeed(System.currentTimeMillis() + 
System.identityHashCode(this));
+        reSeed(System.currentTimeMillis() + System.identityHashCode(this));
     }
 
     /**
@@ -896,6 +912,7 @@ public class RandomDataGenerator implements Serializable {
      * @return the Random used to generate random data
      * @since 3.2
      */
+    @Deprecated
     public RandomGenerator getRandomGenerator() {
         if (rand == null) {
             initRan();
@@ -904,9 +921,23 @@ public class RandomDataGenerator implements Serializable {
     }
 
     /**
+     * @return the generator used to generate non-secure random data.
+     *
+     * XXX TODO: method cannot be "private" because of its use in 
"ValueServer" in "DIGEST_MODE".
+     * "ValueServer" should be fixed to not use the internals of another class!
+     */
+    UniformRandomProvider getRandomProvider() {
+        if (randomProvider == null) {
+            randomProvider = RandomSource.create(randomSource);
+        }
+        return randomProvider;
+    }
+
+    /**
      * Sets the default generator to a {@link Well19937c} generator seeded with
      * {@code System.currentTimeMillis() + System.identityHashCode(this))}.
      */
+    @Deprecated
     private void initRan() {
         rand = new Well19937c(System.currentTimeMillis() + 
System.identityHashCode(this));
     }
@@ -928,4 +959,42 @@ public class RandomDataGenerator implements Serializable {
         }
         return secRand;
     }
+
+    /**
+     * @param out Output stream.
+     * @throws IOException if an error occurs.
+     */
+    private void writeObject(ObjectOutputStream out)
+        throws IOException {
+        // Write non-transient fields.
+        out.defaultWriteObject();
+
+        if (randomProvider != null) {
+            // Save state of "randomProvider".
+            out.writeObject(RandomSource.saveState(randomProvider));
+        } else {
+            out.writeObject(null);
+        }
+   }
+
+    /**
+     * @param in Input stream.
+     * @throws IOException if an error occurs.
+     * @throws ClassNotFoundException if an error occurs.
+     */
+    private void readObject(ObjectInputStream in)
+        throws IOException,
+               ClassNotFoundException {
+        // Read non-transient fields.
+        in.defaultReadObject();
+
+        // Read "randomProvider" state (can be null).
+        final Object state = in.readObject();
+        if (state != null) {
+            // Recreate "randomProvider" from serialized info.
+            randomProvider = RandomSource.create(randomSource);
+            // And restore its state.
+            RandomSource.restoreState(randomProvider, (RandomSource.State) 
state);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/main/java/org/apache/commons/math4/random/ValueServer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math4/random/ValueServer.java 
b/src/main/java/org/apache/commons/math4/random/ValueServer.java
index de9118a..9e32035 100644
--- a/src/main/java/org/apache/commons/math4/random/ValueServer.java
+++ b/src/main/java/org/apache/commons/math4/random/ValueServer.java
@@ -202,7 +202,7 @@ public class ValueServer {
      * @throws ZeroException if URL contains no data
      */
     public void computeDistribution(int binCount) throws 
NullArgumentException, IOException, ZeroException {
-        empiricalDistribution = new EmpiricalDistribution(binCount, 
randomData.getRandomGenerator());
+        empiricalDistribution = new EmpiricalDistribution(binCount);
         empiricalDistribution.load(valuesFileURL);
         mu = empiricalDistribution.getSampleStats().getMean();
         sigma = empiricalDistribution.getSampleStats().getStandardDeviation();
@@ -372,7 +372,7 @@ public class ValueServer {
             (empiricalDistribution.getBinStats().size() == 0)) {
             throw new 
MathIllegalStateException(LocalizedFormats.DIGEST_NOT_INITIALIZED);
         }
-        return empiricalDistribution.getNextValue();
+        return 
empiricalDistribution.createSampler(randomData.getRandomProvider()).sample();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/main/java/org/apache/commons/math4/stat/inference/ChiSquareTest.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/stat/inference/ChiSquareTest.java 
b/src/main/java/org/apache/commons/math4/stat/inference/ChiSquareTest.java
index fead59e..add6c01 100644
--- a/src/main/java/org/apache/commons/math4/stat/inference/ChiSquareTest.java
+++ b/src/main/java/org/apache/commons/math4/stat/inference/ChiSquareTest.java
@@ -157,7 +157,7 @@ public class ChiSquareTest {
 
         // pass a null rng to avoid unneeded overhead as we will not sample 
from this distribution
         final ChiSquaredDistribution distribution =
-            new ChiSquaredDistribution(null, expected.length - 1.0);
+            new ChiSquaredDistribution(expected.length - 1.0);
         return 1.0 - distribution.cumulativeProbability(chiSquare(expected, 
observed));
     }
 
@@ -510,7 +510,7 @@ public class ChiSquareTest {
 
         // pass a null rng to avoid unneeded overhead as we will not sample 
from this distribution
         final ChiSquaredDistribution distribution =
-                new ChiSquaredDistribution(null, (double) observed1.length - 
1);
+                new ChiSquaredDistribution((double) observed1.length - 1);
         return 1 - distribution.cumulativeProbability(
                 chiSquareDataSetsComparison(observed1, observed2));
 

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/main/java/org/apache/commons/math4/stat/inference/GTest.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math4/stat/inference/GTest.java 
b/src/main/java/org/apache/commons/math4/stat/inference/GTest.java
index 2495804..0ee009d 100644
--- a/src/main/java/org/apache/commons/math4/stat/inference/GTest.java
+++ b/src/main/java/org/apache/commons/math4/stat/inference/GTest.java
@@ -154,7 +154,7 @@ public class GTest {
 
         // pass a null rng to avoid unneeded overhead as we will not sample 
from this distribution
         final ChiSquaredDistribution distribution =
-                new ChiSquaredDistribution(null, expected.length - 1.0);
+                new ChiSquaredDistribution(expected.length - 1.0);
         return 1.0 - distribution.cumulativeProbability(g(expected, observed));
     }
 
@@ -185,7 +185,7 @@ public class GTest {
 
         // pass a null rng to avoid unneeded overhead as we will not sample 
from this distribution
         final ChiSquaredDistribution distribution =
-                new ChiSquaredDistribution(null, expected.length - 2.0);
+                new ChiSquaredDistribution(expected.length - 2.0);
         return 1.0 - distribution.cumulativeProbability(g(expected, observed));
     }
 
@@ -475,7 +475,7 @@ public class GTest {
 
         // pass a null rng to avoid unneeded overhead as we will not sample 
from this distribution
         final ChiSquaredDistribution distribution =
-                new ChiSquaredDistribution(null, (double) observed1.length - 
1);
+                new ChiSquaredDistribution((double) observed1.length - 1);
         return 1 - distribution.cumulativeProbability(
                 gDataSetsComparison(observed1, observed2));
     }

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/main/java/org/apache/commons/math4/stat/inference/KolmogorovSmirnovTest.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/stat/inference/KolmogorovSmirnovTest.java
 
b/src/main/java/org/apache/commons/math4/stat/inference/KolmogorovSmirnovTest.java
index 04296a3..b75de0e 100644
--- 
a/src/main/java/org/apache/commons/math4/stat/inference/KolmogorovSmirnovTest.java
+++ 
b/src/main/java/org/apache/commons/math4/stat/inference/KolmogorovSmirnovTest.java
@@ -23,6 +23,7 @@ import java.util.HashSet;
 
 import org.apache.commons.math4.distribution.EnumeratedRealDistribution;
 import org.apache.commons.math4.distribution.RealDistribution;
+import org.apache.commons.math4.distribution.AbstractRealDistribution;
 import org.apache.commons.math4.distribution.UniformRealDistribution;
 import org.apache.commons.math4.exception.InsufficientDataException;
 import org.apache.commons.math4.exception.MathArithmeticException;
@@ -39,9 +40,8 @@ import org.apache.commons.math4.linear.Array2DRowFieldMatrix;
 import org.apache.commons.math4.linear.FieldMatrix;
 import org.apache.commons.math4.linear.MatrixUtils;
 import org.apache.commons.math4.linear.RealMatrix;
-import org.apache.commons.math4.random.JDKRandomGenerator;
-import org.apache.commons.math4.random.RandomGenerator;
-import org.apache.commons.math4.random.Well19937c;
+import org.apache.commons.math4.rng.RandomSource;
+import org.apache.commons.math4.rng.UniformRandomProvider;
 import org.apache.commons.math4.util.CombinatoricsUtils;
 import org.apache.commons.math4.util.FastMath;
 import org.apache.commons.math4.util.MathArrays;
@@ -145,14 +145,14 @@ public class KolmogorovSmirnovTest {
     @Deprecated
     protected static final int MONTE_CARLO_ITERATIONS = 1000000;
 
-    /** Random data generator used by {@link #monteCarloP(double, int, int, 
boolean, int)} */
-    private final RandomGenerator rng;
+    @Deprecated
+    private final UniformRandomProvider rng;
 
     /**
      * Construct a KolmogorovSmirnovTest instance with a default random data 
generator.
      */
     public KolmogorovSmirnovTest() {
-        rng = new Well19937c();
+        rng = RandomSource.create(RandomSource.WELL_19937_C);
     }
 
     /**
@@ -163,8 +163,9 @@ public class KolmogorovSmirnovTest {
      * @param rng random data generator used by {@link #monteCarloP(double, 
int, int, boolean, int)}
      */
     @Deprecated
-    public KolmogorovSmirnovTest(RandomGenerator rng) {
-        this.rng = rng;
+    public KolmogorovSmirnovTest(RandomSource source,
+                                 long seed) {
+        rng = RandomSource.create(source, seed);
     }
 
     /**
@@ -419,7 +420,7 @@ public class KolmogorovSmirnovTest {
         final double[] combined = new double[xLength + yLength];
         System.arraycopy(x, 0, combined, 0, xLength);
         System.arraycopy(y, 0, combined, xLength, yLength);
-        final EnumeratedRealDistribution dist = new 
EnumeratedRealDistribution(rng, combined);
+        final RealDistribution.Sampler sampler = new 
EnumeratedRealDistribution(combined).createSampler(rng);
         final long d = integralKolmogorovSmirnovStatistic(x, y);
         int greaterCount = 0;
         int equalCount = 0;
@@ -427,8 +428,8 @@ public class KolmogorovSmirnovTest {
         double[] curY;
         long curD;
         for (int i = 0; i < iterations; i++) {
-            curX = dist.sample(xLength);
-            curY = dist.sample(yLength);
+            curX = AbstractRealDistribution.sample(xLength, sampler);
+            curY = AbstractRealDistribution.sample(yLength, sampler);
             curD = integralKolmogorovSmirnovStatistic(curX, curY);
             if (curD > d) {
                 greaterCount++;
@@ -1041,7 +1042,7 @@ public class KolmogorovSmirnovTest {
      * @param numberOfTrueValues number of {@code true} values the boolean 
array should finally have
      * @param rng random data generator
      */
-    static void fillBooleanArrayRandomlyWithFixedNumberTrueValues(final 
boolean[] b, final int numberOfTrueValues, final RandomGenerator rng) {
+    private static void 
fillBooleanArrayRandomlyWithFixedNumberTrueValues(final boolean[] b, final int 
numberOfTrueValues, final UniformRandomProvider rng) {
         Arrays.fill(b, true);
         for (int k = numberOfTrueValues; k < b.length; k++) {
             final int r = rng.nextInt(k + 1);
@@ -1154,16 +1155,16 @@ public class KolmogorovSmirnovTest {
 
        // Add jitter using a fixed seed (so same arguments always give same 
results),
        // low-initialization-overhead generator
-       final RealDistribution dist =
-               new UniformRealDistribution(new JDKRandomGenerator(100), 
-minDelta, minDelta);
+       final RealDistribution.Sampler sampler =
+           new UniformRealDistribution(-minDelta, 
minDelta).createSampler(RandomSource.create(RandomSource.JDK, 100));
 
        // It is theoretically possible that jitter does not break ties, so 
repeat
        // until all ties are gone.  Bound the loop and throw MIE if bound is 
exceeded.
        int ct = 0;
        boolean ties = true;
        do {
-           jitter(x, dist);
-           jitter(y, dist);
+           jitter(x, sampler);
+           jitter(y, sampler);
            ties = hasTies(x, y);
            ct++;
        } while (ties && ct < 1000);
@@ -1202,13 +1203,16 @@ public class KolmogorovSmirnovTest {
      * values are overwritten with the result of applying jitter.</p>
      *
      * @param data input/output data array - entries overwritten by the method
-     * @param dist probability distribution to sample for jitter values
+     * @param sampler probability distribution to sample for jitter values
      * @throws NullPointerException if either of the parameters is null
      */
-    private static void jitter(double[] data, RealDistribution dist) {
+    private static void jitter(double[] data, RealDistribution.Sampler 
sampler) {
         for (int i = 0; i < data.length; i++) {
-            data[i] += dist.sample();
+            final double d = sampler.sample();
+            System.out.println("d=" + d); // XXX
+            data[i] += d;
         }
+        System.out.println(); // XXX
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/main/java/org/apache/commons/math4/stat/inference/MannWhitneyUTest.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/stat/inference/MannWhitneyUTest.java 
b/src/main/java/org/apache/commons/math4/stat/inference/MannWhitneyUTest.java
index 3fa34a3..4452816 100644
--- 
a/src/main/java/org/apache/commons/math4/stat/inference/MannWhitneyUTest.java
+++ 
b/src/main/java/org/apache/commons/math4/stat/inference/MannWhitneyUTest.java
@@ -182,7 +182,7 @@ public class MannWhitneyUTest {
 
         // No try-catch or advertised exception because args are valid
         // pass a null rng to avoid unneeded overhead as we will not sample 
from this distribution
-        final NormalDistribution standardNormal = new NormalDistribution(null, 
0, 1);
+        final NormalDistribution standardNormal = new NormalDistribution(0, 1);
 
         return 2 * standardNormal.cumulativeProbability(z);
     }

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/main/java/org/apache/commons/math4/stat/inference/OneWayAnova.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/stat/inference/OneWayAnova.java 
b/src/main/java/org/apache/commons/math4/stat/inference/OneWayAnova.java
index 90f4e96..1befaa2 100644
--- a/src/main/java/org/apache/commons/math4/stat/inference/OneWayAnova.java
+++ b/src/main/java/org/apache/commons/math4/stat/inference/OneWayAnova.java
@@ -127,7 +127,7 @@ public class OneWayAnova {
         final AnovaStats a = anovaStats(categoryData);
         // No try-catch or advertised exception because args are valid
         // pass a null rng to avoid unneeded overhead as we will not sample 
from this distribution
-        final FDistribution fdist = new FDistribution(null, a.dfbg, a.dfwg);
+        final FDistribution fdist = new FDistribution(a.dfbg, a.dfwg);
         return 1.0 - fdist.cumulativeProbability(a.F);
 
     }
@@ -169,7 +169,7 @@ public class OneWayAnova {
 
         final AnovaStats a = anovaStats(categoryData, allowOneElementData);
         // pass a null rng to avoid unneeded overhead as we will not sample 
from this distribution
-        final FDistribution fdist = new FDistribution(null, a.dfbg, a.dfwg);
+        final FDistribution fdist = new FDistribution(a.dfbg, a.dfwg);
         return 1.0 - fdist.cumulativeProbability(a.F);
 
     }

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/main/java/org/apache/commons/math4/stat/inference/TTest.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math4/stat/inference/TTest.java 
b/src/main/java/org/apache/commons/math4/stat/inference/TTest.java
index 2168099..577ac29 100644
--- a/src/main/java/org/apache/commons/math4/stat/inference/TTest.java
+++ b/src/main/java/org/apache/commons/math4/stat/inference/TTest.java
@@ -1058,7 +1058,7 @@ public class TTest {
 
         final double t = FastMath.abs(t(m, mu, v, n));
         // pass a null rng to avoid unneeded overhead as we will not sample 
from this distribution
-        final TDistribution distribution = new TDistribution(null, n - 1);
+        final TDistribution distribution = new TDistribution(n - 1);
         return 2.0 * distribution.cumulativeProbability(-t);
 
     }
@@ -1088,7 +1088,7 @@ public class TTest {
         final double t = FastMath.abs(t(m1, m2, v1, v2, n1, n2));
         final double degreesOfFreedom = df(v1, v2, n1, n2);
         // pass a null rng to avoid unneeded overhead as we will not sample 
from this distribution
-        final TDistribution distribution = new TDistribution(null, 
degreesOfFreedom);
+        final TDistribution distribution = new TDistribution(degreesOfFreedom);
         return 2.0 * distribution.cumulativeProbability(-t);
 
     }
@@ -1118,7 +1118,7 @@ public class TTest {
         final double t = FastMath.abs(homoscedasticT(m1, m2, v1, v2, n1, n2));
         final double degreesOfFreedom = n1 + n2 - 2;
         // pass a null rng to avoid unneeded overhead as we will not sample 
from this distribution
-        final TDistribution distribution = new TDistribution(null, 
degreesOfFreedom);
+        final TDistribution distribution = new TDistribution(degreesOfFreedom);
         return 2.0 * distribution.cumulativeProbability(-t);
 
     }

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/main/java/org/apache/commons/math4/stat/inference/WilcoxonSignedRankTest.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math4/stat/inference/WilcoxonSignedRankTest.java
 
b/src/main/java/org/apache/commons/math4/stat/inference/WilcoxonSignedRankTest.java
index 2bd303c..537d1c4 100644
--- 
a/src/main/java/org/apache/commons/math4/stat/inference/WilcoxonSignedRankTest.java
+++ 
b/src/main/java/org/apache/commons/math4/stat/inference/WilcoxonSignedRankTest.java
@@ -254,7 +254,7 @@ public class WilcoxonSignedRankTest {
 
         // No try-catch or advertised exception because args are valid
         // pass a null rng to avoid unneeded overhead as we will not sample 
from this distribution
-        final NormalDistribution standardNormal = new NormalDistribution(null, 
0, 1);
+        final NormalDistribution standardNormal = new NormalDistribution(0, 1);
 
         return 2*standardNormal.cumulativeProbability(z);
     }

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/analysis/interpolation/AkimaSplineInterpolatorTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/analysis/interpolation/AkimaSplineInterpolatorTest.java
 
b/src/test/java/org/apache/commons/math4/analysis/interpolation/AkimaSplineInterpolatorTest.java
index 15e4281..9eeb33a 100644
--- 
a/src/test/java/org/apache/commons/math4/analysis/interpolation/AkimaSplineInterpolatorTest.java
+++ 
b/src/test/java/org/apache/commons/math4/analysis/interpolation/AkimaSplineInterpolatorTest.java
@@ -20,13 +20,14 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import org.apache.commons.math4.analysis.UnivariateFunction;
+import org.apache.commons.math4.distribution.RealDistribution;
 import org.apache.commons.math4.distribution.UniformRealDistribution;
 import org.apache.commons.math4.exception.DimensionMismatchException;
 import org.apache.commons.math4.exception.NonMonotonicSequenceException;
 import org.apache.commons.math4.exception.NullArgumentException;
 import org.apache.commons.math4.exception.NumberIsTooSmallException;
-import org.apache.commons.math4.random.RandomGenerator;
-import org.apache.commons.math4.random.Well19937c;
+import org.apache.commons.math4.rng.UniformRandomProvider;
+import org.apache.commons.math4.rng.RandomSource;
 import org.apache.commons.math4.util.FastMath;
 import org.apache.commons.math4.util.Precision;
 import org.junit.Assert;
@@ -212,9 +213,9 @@ public class AkimaSplineInterpolatorTest
             assertTrue( Precision.equals( expected, actual ) );
         }
 
-        final RandomGenerator rng = new Well19937c( 1234567L ); // "tol" 
depends on the seed.
-        final UniformRealDistribution distX =
-            new UniformRealDistribution( rng, xValues[0], 
xValues[xValues.length - 1] );
+        final UniformRandomProvider rng = 
RandomSource.create(RandomSource.WELL_19937_C, 1234567L); // "tol" depends on 
the seed.
+        final RealDistribution.Sampler distX =
+            new UniformRealDistribution(xValues[0], xValues[xValues.length - 
1]).createSampler(rng);
 
         double sumError = 0;
         for ( int i = 0; i < numberOfSamples; i++ )

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/analysis/interpolation/BicubicInterpolatingFunctionTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/analysis/interpolation/BicubicInterpolatingFunctionTest.java
 
b/src/test/java/org/apache/commons/math4/analysis/interpolation/BicubicInterpolatingFunctionTest.java
index 0ec77aa..105cf70 100644
--- 
a/src/test/java/org/apache/commons/math4/analysis/interpolation/BicubicInterpolatingFunctionTest.java
+++ 
b/src/test/java/org/apache/commons/math4/analysis/interpolation/BicubicInterpolatingFunctionTest.java
@@ -17,12 +17,13 @@
 package org.apache.commons.math4.analysis.interpolation;
 
 import org.apache.commons.math4.analysis.BivariateFunction;
+import org.apache.commons.math4.distribution.RealDistribution;
 import org.apache.commons.math4.distribution.UniformRealDistribution;
 import org.apache.commons.math4.exception.DimensionMismatchException;
 import org.apache.commons.math4.exception.MathIllegalArgumentException;
 import org.apache.commons.math4.exception.OutOfRangeException;
-import org.apache.commons.math4.random.RandomGenerator;
-import org.apache.commons.math4.random.Well19937c;
+import org.apache.commons.math4.rng.UniformRandomProvider;
+import org.apache.commons.math4.rng.RandomSource;
 import org.apache.commons.math4.util.FastMath;
 import org.apache.commons.math4.util.Precision;
 import org.junit.Assert;
@@ -360,9 +361,9 @@ public final class BicubicInterpolatingFunctionTest {
             }
         }
 
-        final RandomGenerator rng = new Well19937c(1234567L);
-        final UniformRealDistribution distX = new UniformRealDistribution(rng, 
xValues[0], xValues[xValues.length - 1]);
-        final UniformRealDistribution distY = new UniformRealDistribution(rng, 
yValues[0], yValues[yValues.length - 1]);
+        final UniformRandomProvider rng = 
RandomSource.create(RandomSource.WELL_19937_C, 1234567L);
+        final RealDistribution.Sampler distX = new 
UniformRealDistribution(xValues[0], xValues[xValues.length - 
1]).createSampler(rng);
+        final RealDistribution.Sampler distY = new 
UniformRealDistribution(yValues[0], yValues[yValues.length - 
1]).createSampler(rng);
 
         double sumError = 0;
         for (int i = 0; i < numberOfSamples; i++) {

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/analysis/interpolation/BicubicInterpolatorTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/analysis/interpolation/BicubicInterpolatorTest.java
 
b/src/test/java/org/apache/commons/math4/analysis/interpolation/BicubicInterpolatorTest.java
index 6a2a9d7..f88ec55 100644
--- 
a/src/test/java/org/apache/commons/math4/analysis/interpolation/BicubicInterpolatorTest.java
+++ 
b/src/test/java/org/apache/commons/math4/analysis/interpolation/BicubicInterpolatorTest.java
@@ -17,11 +17,12 @@
 package org.apache.commons.math4.analysis.interpolation;
 
 import org.apache.commons.math4.analysis.BivariateFunction;
+import org.apache.commons.math4.distribution.RealDistribution;
 import org.apache.commons.math4.distribution.UniformRealDistribution;
 import org.apache.commons.math4.exception.DimensionMismatchException;
 import org.apache.commons.math4.exception.MathIllegalArgumentException;
-import org.apache.commons.math4.random.RandomGenerator;
-import org.apache.commons.math4.random.Well19937c;
+import org.apache.commons.math4.rng.UniformRandomProvider;
+import org.apache.commons.math4.rng.RandomSource;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -146,9 +147,9 @@ public final class BicubicInterpolatorTest {
         final BicubicInterpolatingFunction p = interpolator.interpolate(xval, 
yval, zval);
         double x, y;
 
-        final RandomGenerator rng = new Well19937c();
-        final UniformRealDistribution distX = new UniformRealDistribution(rng, 
xval[0], xval[xval.length - 1]);
-        final UniformRealDistribution distY = new UniformRealDistribution(rng, 
yval[0], yval[yval.length - 1]);
+        final UniformRandomProvider rng = 
RandomSource.create(RandomSource.WELL_19937_C);
+        final RealDistribution.Sampler distX = new 
UniformRealDistribution(xval[0], xval[xval.length - 1]).createSampler(rng);
+        final RealDistribution.Sampler distY = new 
UniformRealDistribution(yval[0], yval[yval.length - 1]).createSampler(rng);
 
         int count = 0;
         while (true) {

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/analysis/interpolation/PiecewiseBicubicSplineInterpolatingFunctionTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/analysis/interpolation/PiecewiseBicubicSplineInterpolatingFunctionTest.java
 
b/src/test/java/org/apache/commons/math4/analysis/interpolation/PiecewiseBicubicSplineInterpolatingFunctionTest.java
index c6701b3..48ff9a0 100644
--- 
a/src/test/java/org/apache/commons/math4/analysis/interpolation/PiecewiseBicubicSplineInterpolatingFunctionTest.java
+++ 
b/src/test/java/org/apache/commons/math4/analysis/interpolation/PiecewiseBicubicSplineInterpolatingFunctionTest.java
@@ -17,13 +17,14 @@
 package org.apache.commons.math4.analysis.interpolation;
 
 import org.apache.commons.math4.analysis.BivariateFunction;
+import org.apache.commons.math4.distribution.RealDistribution;
 import org.apache.commons.math4.distribution.UniformRealDistribution;
 import org.apache.commons.math4.exception.DimensionMismatchException;
 import org.apache.commons.math4.exception.InsufficientDataException;
 import org.apache.commons.math4.exception.NonMonotonicSequenceException;
 import org.apache.commons.math4.exception.NullArgumentException;
-import org.apache.commons.math4.random.RandomGenerator;
-import org.apache.commons.math4.random.Well19937c;
+import org.apache.commons.math4.rng.UniformRandomProvider;
+import org.apache.commons.math4.rng.RandomSource;
 import org.apache.commons.math4.util.FastMath;
 import org.apache.commons.math4.util.Precision;
 import org.junit.Assert;
@@ -175,7 +176,7 @@ public final class 
PiecewiseBicubicSplineInterpolatingFunctionTest {
         final double maximumY = 10;
         final int numberOfSamples = 100;
 
-        final double interpolationTolerance = 2e-14;
+        final double interpolationTolerance = 1e-13;
         final double maxTolerance = 6e-14;
 
         // Function values
@@ -250,9 +251,9 @@ public final class 
PiecewiseBicubicSplineInterpolatingFunctionTest {
             }
         }
 
-        final RandomGenerator rng = new Well19937c(1234567L);
-        final UniformRealDistribution distX = new UniformRealDistribution(rng, 
xValues[0], xValues[xValues.length - 1]);
-        final UniformRealDistribution distY = new UniformRealDistribution(rng, 
yValues[0], yValues[yValues.length - 1]);
+        final UniformRandomProvider rng = 
RandomSource.create(RandomSource.WELL_19937_C, 1234567L);
+        final RealDistribution.Sampler distX = new 
UniformRealDistribution(xValues[0], xValues[xValues.length - 
1]).createSampler(rng);
+        final RealDistribution.Sampler distY = new 
UniformRealDistribution(yValues[0], yValues[yValues.length - 
1]).createSampler(rng);
 
         double sumError = 0;
         for (int i = 0; i < numberOfSamples; i++) {

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/analysis/interpolation/PiecewiseBicubicSplineInterpolatorTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/analysis/interpolation/PiecewiseBicubicSplineInterpolatorTest.java
 
b/src/test/java/org/apache/commons/math4/analysis/interpolation/PiecewiseBicubicSplineInterpolatorTest.java
index 1645294..69bd8b4 100644
--- 
a/src/test/java/org/apache/commons/math4/analysis/interpolation/PiecewiseBicubicSplineInterpolatorTest.java
+++ 
b/src/test/java/org/apache/commons/math4/analysis/interpolation/PiecewiseBicubicSplineInterpolatorTest.java
@@ -17,13 +17,14 @@
 package org.apache.commons.math4.analysis.interpolation;
 
 import org.apache.commons.math4.analysis.BivariateFunction;
+import org.apache.commons.math4.distribution.RealDistribution;
 import org.apache.commons.math4.distribution.UniformRealDistribution;
 import org.apache.commons.math4.exception.DimensionMismatchException;
 import org.apache.commons.math4.exception.InsufficientDataException;
 import org.apache.commons.math4.exception.NonMonotonicSequenceException;
 import org.apache.commons.math4.exception.NullArgumentException;
-import org.apache.commons.math4.random.RandomGenerator;
-import org.apache.commons.math4.random.Well19937c;
+import org.apache.commons.math4.rng.UniformRandomProvider;
+import org.apache.commons.math4.rng.RandomSource;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -157,9 +158,9 @@ public final class PiecewiseBicubicSplineInterpolatorTest {
         BivariateFunction p = interpolator.interpolate(xval, yval, zval);
         double x, y;
 
-        final RandomGenerator rng = new Well19937c(1234567L); // "tol" depends 
on the seed.
-        final UniformRealDistribution distX = new UniformRealDistribution( 
rng, xval[0], xval[xval.length - 1] );
-        final UniformRealDistribution distY = new UniformRealDistribution( 
rng, yval[0], yval[yval.length - 1] );
+        final UniformRandomProvider rng = 
RandomSource.create(RandomSource.WELL_19937_C, 1234567L);
+        final RealDistribution.Sampler distX = new 
UniformRealDistribution(xval[0], xval[xval.length - 1]).createSampler(rng);
+        final RealDistribution.Sampler distY = new 
UniformRealDistribution(yval[0], yval[yval.length - 1]).createSampler(rng);
 
         final int numSamples = 50;
         final double tol = 2e-14;
@@ -209,9 +210,9 @@ public final class PiecewiseBicubicSplineInterpolatorTest {
         BivariateFunction p = interpolator.interpolate(xval, yval, zval);
         double x, y;
 
-        final RandomGenerator rng = new Well19937c(1234567L); // "tol" depends 
on the seed.
-        final UniformRealDistribution distX = new UniformRealDistribution( 
rng, xval[0], xval[xval.length - 1] );
-        final UniformRealDistribution distY = new UniformRealDistribution( 
rng, yval[0], yval[yval.length - 1] );
+        final UniformRandomProvider rng = 
RandomSource.create(RandomSource.WELL_19937_C, 1234567L);
+        final RealDistribution.Sampler distX = new 
UniformRealDistribution(xval[0], xval[xval.length - 1]).createSampler(rng);
+        final RealDistribution.Sampler distY = new 
UniformRealDistribution(yval[0], yval[yval.length - 1]).createSampler(rng);
 
         final int numSamples = 50;
         final double tol = 5e-13;

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/analysis/interpolation/TricubicInterpolatingFunctionTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/analysis/interpolation/TricubicInterpolatingFunctionTest.java
 
b/src/test/java/org/apache/commons/math4/analysis/interpolation/TricubicInterpolatingFunctionTest.java
index 44f06a0..deac81f 100644
--- 
a/src/test/java/org/apache/commons/math4/analysis/interpolation/TricubicInterpolatingFunctionTest.java
+++ 
b/src/test/java/org/apache/commons/math4/analysis/interpolation/TricubicInterpolatingFunctionTest.java
@@ -17,11 +17,12 @@
 package org.apache.commons.math4.analysis.interpolation;
 
 import org.apache.commons.math4.analysis.TrivariateFunction;
+import org.apache.commons.math4.distribution.RealDistribution;
 import org.apache.commons.math4.distribution.UniformRealDistribution;
 import org.apache.commons.math4.exception.DimensionMismatchException;
 import org.apache.commons.math4.exception.MathIllegalArgumentException;
-import org.apache.commons.math4.random.RandomGenerator;
-import org.apache.commons.math4.random.Well19937c;
+import org.apache.commons.math4.rng.UniformRandomProvider;
+import org.apache.commons.math4.rng.RandomSource;
 import org.apache.commons.math4.util.FastMath;
 import org.apache.commons.math4.util.Precision;
 import org.junit.Assert;
@@ -379,10 +380,10 @@ public final class TricubicInterpolatingFunctionTest {
             }
         }
 
-        final RandomGenerator rng = new Well19937c(1234567L);
-        final UniformRealDistribution distX = new UniformRealDistribution(rng, 
xValues[0], xValues[xValues.length - 1]);
-        final UniformRealDistribution distY = new UniformRealDistribution(rng, 
yValues[0], yValues[yValues.length - 1]);
-        final UniformRealDistribution distZ = new UniformRealDistribution(rng, 
zValues[0], zValues[zValues.length - 1]);
+        final UniformRandomProvider rng = 
RandomSource.create(RandomSource.WELL_19937_C, 1234568L);
+        final RealDistribution.Sampler distX = new 
UniformRealDistribution(xValues[0], xValues[xValues.length - 
1]).createSampler(rng);
+        final RealDistribution.Sampler distY = new 
UniformRealDistribution(yValues[0], yValues[yValues.length - 
1]).createSampler(rng);
+        final RealDistribution.Sampler distZ = new 
UniformRealDistribution(zValues[0], zValues[zValues.length - 
1]).createSampler(rng);
 
         double sumError = 0;
         for (int i = 0; i < numberOfSamples; i++) {

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/distribution/AbstractRealDistributionTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/distribution/AbstractRealDistributionTest.java
 
b/src/test/java/org/apache/commons/math4/distribution/AbstractRealDistributionTest.java
index cff0c08..449f4a6 100644
--- 
a/src/test/java/org/apache/commons/math4/distribution/AbstractRealDistributionTest.java
+++ 
b/src/test/java/org/apache/commons/math4/distribution/AbstractRealDistributionTest.java
@@ -35,7 +35,7 @@ public class AbstractRealDistributionTest {
         final double x3 = 3.0;
         final double p12 = 0.5;
         final AbstractRealDistribution distribution;
-        distribution = new AbstractRealDistribution(null) {
+        distribution = new AbstractRealDistribution() {
             private static final long serialVersionUID = 1L;
 
             @Override
@@ -119,7 +119,7 @@ public class AbstractRealDistributionTest {
         final double p12 = 1.0 / 3.0;
         final double p23 = 2.0 / 3.0;
         final AbstractRealDistribution distribution;
-        distribution = new AbstractRealDistribution(null) {
+        distribution = new AbstractRealDistribution() {
             private static final long serialVersionUID = 1L;
 
             @Override

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/distribution/BetaDistributionTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/distribution/BetaDistributionTest.java 
b/src/test/java/org/apache/commons/math4/distribution/BetaDistributionTest.java
index 373271d..5127503 100644
--- 
a/src/test/java/org/apache/commons/math4/distribution/BetaDistributionTest.java
+++ 
b/src/test/java/org/apache/commons/math4/distribution/BetaDistributionTest.java
@@ -346,8 +346,6 @@ public class BetaDistributionTest {
     public void testGoodnessOfFit() {
         final UniformRandomProvider rng = 
RandomSource.create(RandomSource.WELL_19937_A,
                                                               123456789L);
-        final RandomGenerator random = new Well19937a(0x237db1db907b089fL);
-
         final int numSamples = 1000;
         final double level = 0.01;
         for (final double alpha : alphaBetas) {
@@ -360,7 +358,7 @@ public class BetaDistributionTest {
                 Assert.assertFalse("G goodness-of-fit test rejected null at 
alpha = " + level,
                                    gTest(betaDistribution, observed) < level);
                 Assert.assertFalse("KS goodness-of-fit test rejected null at 
alpha = " + level,
-                                   new 
KolmogorovSmirnovTest(random).kolmogorovSmirnovTest(betaDistribution, observed) 
< level);
+                                   new KolmogorovSmirnovTest(RandomSource.JDK, 
3448845623L).kolmogorovSmirnovTest(betaDistribution, observed) < level);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/distribution/ConstantRealDistributionTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/distribution/ConstantRealDistributionTest.java
 
b/src/test/java/org/apache/commons/math4/distribution/ConstantRealDistributionTest.java
index 211a670..a2c7706 100644
--- 
a/src/test/java/org/apache/commons/math4/distribution/ConstantRealDistributionTest.java
+++ 
b/src/test/java/org/apache/commons/math4/distribution/ConstantRealDistributionTest.java
@@ -84,15 +84,6 @@ public class ConstantRealDistributionTest extends 
RealDistributionAbstractTest {
 
     @Test
     @Override
-    public void testSampling() {
-        ConstantRealDistribution dist = new ConstantRealDistribution(0);
-        for (int i = 0; i < 10; i++) {
-            Assert.assertEquals(0, dist.sample(), 0);
-        }
-    }
-
-    @Test
-    @Override
     public void testSampler() {
         final double value = 12.345;
         final RealDistribution.Sampler sampler = new 
ConstantRealDistribution(value).createSampler(null);

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/distribution/EnumeratedRealDistributionTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/distribution/EnumeratedRealDistributionTest.java
 
b/src/test/java/org/apache/commons/math4/distribution/EnumeratedRealDistributionTest.java
index 0300e5e..7cfebf7 100644
--- 
a/src/test/java/org/apache/commons/math4/distribution/EnumeratedRealDistributionTest.java
+++ 
b/src/test/java/org/apache/commons/math4/distribution/EnumeratedRealDistributionTest.java
@@ -30,6 +30,7 @@ import 
org.apache.commons.math4.exception.NotFiniteNumberException;
 import org.apache.commons.math4.exception.NotPositiveException;
 import org.apache.commons.math4.util.FastMath;
 import org.apache.commons.math4.util.Pair;
+import org.apache.commons.math4.rng.UniformRandomProvider;
 import org.apache.commons.math4.rng.RandomSource;
 import org.junit.Assert;
 import org.junit.Test;
@@ -197,7 +198,8 @@ public class EnumeratedRealDistributionTest {
         List<Pair<Object,Double>> list = new ArrayList<Pair<Object, Double>>();
         list.add(new Pair<Object, Double>(new Object() {}, new Double(0)));
         list.add(new Pair<Object, Double>(new Object() {}, new Double(1)));
-        Assert.assertEquals(1, new 
EnumeratedDistribution<Object>(list).sample(1).length);
+        final UniformRandomProvider rng = 
RandomSource.create(RandomSource.WELL_512_A);
+        Assert.assertEquals(1, new 
EnumeratedDistribution<Object>(list).createSampler(rng).sample(1).length);
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/distribution/LevyDistributionTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/distribution/LevyDistributionTest.java 
b/src/test/java/org/apache/commons/math4/distribution/LevyDistributionTest.java
index d0af056..659e418 100644
--- 
a/src/test/java/org/apache/commons/math4/distribution/LevyDistributionTest.java
+++ 
b/src/test/java/org/apache/commons/math4/distribution/LevyDistributionTest.java
@@ -17,7 +17,6 @@
 package org.apache.commons.math4.distribution;
 
 import org.apache.commons.math4.distribution.LevyDistribution;
-import org.apache.commons.math4.random.Well19937a;
 import org.apache.commons.math4.util.Precision;
 import org.junit.Assert;
 import org.junit.Test;
@@ -41,7 +40,7 @@ public class LevyDistributionTest extends 
RealDistributionAbstractTest {
 
     @Override
     public LevyDistribution makeDistribution() {
-        return new LevyDistribution(new Well19937a(0xc5a5506bbb17e57al), 1.2, 
0.4);
+        return new LevyDistribution(1.2, 0.4);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/distribution/RealDistributionAbstractTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/distribution/RealDistributionAbstractTest.java
 
b/src/test/java/org/apache/commons/math4/distribution/RealDistributionAbstractTest.java
index 61d01ff..7d9db82 100644
--- 
a/src/test/java/org/apache/commons/math4/distribution/RealDistributionAbstractTest.java
+++ 
b/src/test/java/org/apache/commons/math4/distribution/RealDistributionAbstractTest.java
@@ -327,22 +327,6 @@ public abstract class RealDistributionAbstractTest {
      * Test sampling
      */
     @Test
-    public void testSampling() {
-        final int sampleSize = 1000;
-        distribution.reseedRandomGenerator(1000); // Use fixed seed
-        double[] sample = distribution.sample(sampleSize);
-        double[] quartiles = TestUtils.getDistributionQuartiles(distribution);
-        double[] expected = {250, 250, 250, 250};
-        long[] counts = new long[4];
-        for (int i = 0; i < sampleSize; i++) {
-            TestUtils.updateCounts(sample[i], counts, quartiles);
-        }
-        TestUtils.assertChiSquareAccept(expected, counts, 0.001);
-    }
-
-
-    // New design
-    @Test
     public void testSampler() {
         final int sampleSize = 1000;
         final RealDistribution.Sampler sampler =
@@ -403,16 +387,18 @@ public abstract class RealDistributionAbstractTest {
                ClassNotFoundException {
         // Construct a distribution and initialize its internal random
         // generator, using a fixed seed for deterministic results.
-        distribution.reseedRandomGenerator(123);
-        distribution.sample();
+        final long seed = 123;
+        RandomSource source = RandomSource.WELL_512_A;
+        RealDistribution.Sampler origSampler = 
distribution.createSampler(RandomSource.create(source, seed));
 
         // Clone the distribution.
         final RealDistribution cloned = deepClone();
+        RealDistribution.Sampler clonedSampler = 
cloned.createSampler(RandomSource.create(source, seed));
 
         // Make sure they still produce the same samples.
-        final double s1 = distribution.sample();
-        final double s2 = cloned.sample();
-        Assert.assertEquals(s1, s2, 0d);
+        Assert.assertEquals(origSampler.sample(),
+                            clonedSampler.sample(),
+                            0d);
     }
 
     //------------------ Getters / Setters for test instance data -----------

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/filter/KalmanFilterTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/filter/KalmanFilterTest.java 
b/src/test/java/org/apache/commons/math4/filter/KalmanFilterTest.java
index 99d73c5..2db564d 100644
--- a/src/test/java/org/apache/commons/math4/filter/KalmanFilterTest.java
+++ b/src/test/java/org/apache/commons/math4/filter/KalmanFilterTest.java
@@ -14,6 +14,7 @@
 
 package org.apache.commons.math4.filter;
 
+import org.apache.commons.math4.distribution.RealDistribution;
 import org.apache.commons.math4.distribution.NormalDistribution;
 import org.apache.commons.math4.filter.DefaultMeasurementModel;
 import org.apache.commons.math4.filter.DefaultProcessModel;
@@ -26,9 +27,10 @@ import 
org.apache.commons.math4.linear.MatrixDimensionMismatchException;
 import org.apache.commons.math4.linear.MatrixUtils;
 import org.apache.commons.math4.linear.RealMatrix;
 import org.apache.commons.math4.linear.RealVector;
-import org.apache.commons.math4.random.JDKRandomGenerator;
 import org.apache.commons.math4.random.RandomGenerator;
-import org.apache.commons.math4.random.Well19937c;
+import org.apache.commons.math4.random.JDKRandomGenerator;
+import org.apache.commons.math4.rng.UniformRandomProvider;
+import org.apache.commons.math4.rng.RandomSource;
 import org.apache.commons.math4.util.FastMath;
 import org.apache.commons.math4.util.Precision;
 import org.junit.Assert;
@@ -392,8 +394,8 @@ public class KalmanFilterTest {
         final MeasurementModel mm = new DefaultMeasurementModel(H, R);
         final KalmanFilter filter = new KalmanFilter(pm, mm);
 
-        final RandomGenerator rng = new Well19937c(1000);
-        final NormalDistribution dist = new NormalDistribution(rng, 0, 
measurementNoise);
+        final UniformRandomProvider rng = 
RandomSource.create(RandomSource.WELL_19937_C, 1000);
+        final RealDistribution.Sampler dist = new NormalDistribution(0, 
measurementNoise).createSampler(rng);
 
         for (int i = 0; i < iterations; i++) {
             // get the "real" cannonball position

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/fitting/leastsquares/LevenbergMarquardtOptimizerTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/fitting/leastsquares/LevenbergMarquardtOptimizerTest.java
 
b/src/test/java/org/apache/commons/math4/fitting/leastsquares/LevenbergMarquardtOptimizerTest.java
index 6198eb7..5c0ebd9 100644
--- 
a/src/test/java/org/apache/commons/math4/fitting/leastsquares/LevenbergMarquardtOptimizerTest.java
+++ 
b/src/test/java/org/apache/commons/math4/fitting/leastsquares/LevenbergMarquardtOptimizerTest.java
@@ -262,7 +262,7 @@ public class LevenbergMarquardtOptimizerTest
         final double ySigma = 15;
         final double radius = 111.111;
         // The test is extremely sensitive to the seed.
-        final long seed = 59421061L;
+        final long seed = 59321761412L;
         final RandomCirclePointGenerator factory
             = new RandomCirclePointGenerator(xCenter, yCenter, radius,
                                              xSigma, ySigma,

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/fitting/leastsquares/RandomCirclePointGenerator.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/fitting/leastsquares/RandomCirclePointGenerator.java
 
b/src/test/java/org/apache/commons/math4/fitting/leastsquares/RandomCirclePointGenerator.java
index 8bc8569..59dd8af 100644
--- 
a/src/test/java/org/apache/commons/math4/fitting/leastsquares/RandomCirclePointGenerator.java
+++ 
b/src/test/java/org/apache/commons/math4/fitting/leastsquares/RandomCirclePointGenerator.java
@@ -20,8 +20,8 @@ import 
org.apache.commons.math4.distribution.NormalDistribution;
 import org.apache.commons.math4.distribution.RealDistribution;
 import org.apache.commons.math4.distribution.UniformRealDistribution;
 import org.apache.commons.math4.geometry.euclidean.twod.Vector2D;
-import org.apache.commons.math4.random.RandomGenerator;
-import org.apache.commons.math4.random.Well44497b;
+import org.apache.commons.math4.rng.UniformRandomProvider;
+import org.apache.commons.math4.rng.RandomSource;
 import org.apache.commons.math4.util.FastMath;
 import org.apache.commons.math4.util.MathUtils;
 
@@ -30,11 +30,11 @@ import org.apache.commons.math4.util.MathUtils;
  */
 public class RandomCirclePointGenerator {
     /** RNG for the x-coordinate of the center. */
-    private final RealDistribution cX;
+    private final RealDistribution.Sampler cX;
     /** RNG for the y-coordinate of the center. */
-    private final RealDistribution cY;
+    private final RealDistribution.Sampler cY;
     /** RNG for the parametric position of the point. */
-    private final RealDistribution tP;
+    private final RealDistribution.Sampler tP;
     /** Radius of the circle. */
     private final double radius;
 
@@ -52,13 +52,11 @@ public class RandomCirclePointGenerator {
                                       double xSigma,
                                       double ySigma,
                                       long seed) {
-        final RandomGenerator rng = new Well44497b(seed);
+        final UniformRandomProvider rng = 
RandomSource.create(RandomSource.WELL_44497_B, seed);
         this.radius = radius;
-        cX = new NormalDistribution(rng, x, xSigma,
-                                    
NormalDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY);
-        cY = new NormalDistribution(rng, y, ySigma,
-                                    
NormalDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY);
-        tP = new UniformRealDistribution(rng, 0, MathUtils.TWO_PI);
+        cX = new NormalDistribution(x, xSigma).createSampler(rng);
+        cY = new NormalDistribution(y, ySigma).createSampler(rng);
+        tP = new UniformRealDistribution(0, 
MathUtils.TWO_PI).createSampler(rng);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/commons-math/blob/9867d9f2/src/test/java/org/apache/commons/math4/fitting/leastsquares/RandomStraightLinePointGenerator.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/math4/fitting/leastsquares/RandomStraightLinePointGenerator.java
 
b/src/test/java/org/apache/commons/math4/fitting/leastsquares/RandomStraightLinePointGenerator.java
index 024f561..beff240 100644
--- 
a/src/test/java/org/apache/commons/math4/fitting/leastsquares/RandomStraightLinePointGenerator.java
+++ 
b/src/test/java/org/apache/commons/math4/fitting/leastsquares/RandomStraightLinePointGenerator.java
@@ -22,8 +22,8 @@ import java.awt.geom.Point2D;
 import org.apache.commons.math4.distribution.NormalDistribution;
 import org.apache.commons.math4.distribution.RealDistribution;
 import org.apache.commons.math4.distribution.UniformRealDistribution;
-import org.apache.commons.math4.random.RandomGenerator;
-import org.apache.commons.math4.random.Well44497b;
+import org.apache.commons.math4.rng.UniformRandomProvider;
+import org.apache.commons.math4.rng.RandomSource;
 
 /**
  * Factory for generating a cloud of points that approximate a straight line.
@@ -34,9 +34,9 @@ public class RandomStraightLinePointGenerator {
     /** Intercept. */
     private final double intercept;
     /** RNG for the x-coordinate. */
-    private final RealDistribution x;
+    private final RealDistribution.Sampler x;
     /** RNG for the error on the y-coordinate. */
-    private final RealDistribution error;
+    private final RealDistribution.Sampler error;
 
     /**
      * The generator will create a cloud of points whose x-coordinates
@@ -61,12 +61,11 @@ public class RandomStraightLinePointGenerator {
                                             double lo,
                                             double hi,
                                             long seed) {
-        final RandomGenerator rng = new Well44497b(seed);
+        final UniformRandomProvider rng = 
RandomSource.create(RandomSource.WELL_44497_B, seed);
         slope = a;
         intercept = b;
-        error = new NormalDistribution(rng, 0, sigma,
-                                       
NormalDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY);
-        x = new UniformRealDistribution(rng, lo, hi);
+        error = new NormalDistribution(0, sigma).createSampler(rng);
+        x = new UniformRealDistribution(lo, hi).createSampler(rng);
     }
 
     /**

Reply via email to