diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 28cd6ba..0876768 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -54,6 +54,9 @@
     </release>
 
     <release version="4.0" date="XXXX-XX-XX" description="">
+      <action dev="erans" type="fix" issue="MATH-1565" due-to="Randy Strauss">
+        Add context to "OutOfRangeException".
+      </action>
       <action dev="erans" type="update" issue="MATH-1562" due-to="Frank Ulbricht">
         Add "Automatic-Module-Name" entry to JAR manifest file.
       </action>
diff --git a/src/main/java/org/apache/commons/math4/analysis/integration/MidPointIntegrator.java b/src/main/java/org/apache/commons/math4/analysis/integration/MidPointIntegrator.java
index d010fbd..757e92d 100644
--- a/src/main/java/org/apache/commons/math4/analysis/integration/MidPointIntegrator.java
+++ b/src/main/java/org/apache/commons/math4/analysis/integration/MidPointIntegrator.java
@@ -16,12 +16,7 @@
  */
 package org.apache.commons.math4.analysis.integration;
 
-import org.apache.commons.math4.exception.MathIllegalArgumentException;
-import org.apache.commons.math4.exception.MaxCountExceededException;
-import org.apache.commons.math4.exception.NotStrictlyPositiveException;
 import org.apache.commons.math4.exception.NumberIsTooLargeException;
-import org.apache.commons.math4.exception.NumberIsTooSmallException;
-import org.apache.commons.math4.exception.TooManyEvaluationsException;
 import org.apache.commons.math4.util.FastMath;
 
 /**
@@ -47,9 +42,9 @@
      * @param absoluteAccuracy absolute accuracy of the result
      * @param minimalIterationCount minimum number of iterations
      * @param maximalIterationCount maximum number of iterations
-     * @exception NotStrictlyPositiveException if minimal number of iterations
+     * @exception org.apache.commons.math4.exception.NotStrictlyPositiveException if minimal number of iterations
      * is not strictly positive
-     * @exception NumberIsTooSmallException if maximal number of iterations
+     * @exception org.apache.commons.math4.exception.NumberIsTooSmallException if maximal number of iterations
      * is lesser than or equal to the minimal number of iterations
      * @exception NumberIsTooLargeException if maximal number of iterations
      * is greater than 39.
@@ -69,9 +64,9 @@
      * Build a midpoint integrator with given iteration counts.
      * @param minimalIterationCount minimum number of iterations
      * @param maximalIterationCount maximum number of iterations
-     * @exception NotStrictlyPositiveException if minimal number of iterations
+     * @exception org.apache.commons.math4.exception.NotStrictlyPositiveException if minimal number of iterations
      * is not strictly positive
-     * @exception NumberIsTooSmallException if maximal number of iterations
+     * @exception org.apache.commons.math4.exception.NumberIsTooSmallException if maximal number of iterations
      * is lesser than or equal to the minimal number of iterations
      * @exception NumberIsTooLargeException if maximal number of iterations
      * is greater than 39.
@@ -109,7 +104,7 @@
      * @param diffMaxMin Difference between the lower bound and upper bound
      * of the integration interval.
      * @return the value of n-th stage integral
-     * @throws TooManyEvaluationsException if the maximal number of evaluations
+     * @throws org.apache.commons.math4.exception.TooManyEvaluationsException if the maximal number of evaluations
      * is exceeded.
      */
     private double stage(final int n,
diff --git a/src/main/java/org/apache/commons/math4/analysis/integration/RombergIntegrator.java b/src/main/java/org/apache/commons/math4/analysis/integration/RombergIntegrator.java
index 50179df..5e81c01 100644
--- a/src/main/java/org/apache/commons/math4/analysis/integration/RombergIntegrator.java
+++ b/src/main/java/org/apache/commons/math4/analysis/integration/RombergIntegrator.java
@@ -16,11 +16,7 @@
  */
 package org.apache.commons.math4.analysis.integration;
 
-import org.apache.commons.math4.exception.MaxCountExceededException;
-import org.apache.commons.math4.exception.NotStrictlyPositiveException;
 import org.apache.commons.math4.exception.NumberIsTooLargeException;
-import org.apache.commons.math4.exception.NumberIsTooSmallException;
-import org.apache.commons.math4.exception.TooManyEvaluationsException;
 import org.apache.commons.math4.util.FastMath;
 
 /**
@@ -47,9 +43,9 @@
      * @param minimalIterationCount minimum number of iterations
      * @param maximalIterationCount maximum number of iterations
      * (must be less than or equal to {@link #ROMBERG_MAX_ITERATIONS_COUNT})
-     * @exception NotStrictlyPositiveException if minimal number of iterations
+     * @exception org.apache.commons.math4.exception.NotStrictlyPositiveException if minimal number of iterations
      * is not strictly positive
-     * @exception NumberIsTooSmallException if maximal number of iterations
+     * @exception org.apache.commons.math4.exception.NumberIsTooSmallException if maximal number of iterations
      * is lesser than or equal to the minimal number of iterations
      * @exception NumberIsTooLargeException if maximal number of iterations
      * is greater than {@link #ROMBERG_MAX_ITERATIONS_COUNT}
@@ -70,9 +66,9 @@
      * @param minimalIterationCount minimum number of iterations
      * @param maximalIterationCount maximum number of iterations
      * (must be less than or equal to {@link #ROMBERG_MAX_ITERATIONS_COUNT})
-     * @exception NotStrictlyPositiveException if minimal number of iterations
+     * @exception org.apache.commons.math4.exception.NotStrictlyPositiveException if minimal number of iterations
      * is not strictly positive
-     * @exception NumberIsTooSmallException if maximal number of iterations
+     * @exception org.apache.commons.math4.exception.NumberIsTooSmallException if maximal number of iterations
      * is lesser than or equal to the minimal number of iterations
      * @exception NumberIsTooLargeException if maximal number of iterations
      * is greater than {@link #ROMBERG_MAX_ITERATIONS_COUNT}
diff --git a/src/main/java/org/apache/commons/math4/analysis/integration/SimpsonIntegrator.java b/src/main/java/org/apache/commons/math4/analysis/integration/SimpsonIntegrator.java
index 554be75..0e85f72 100644
--- a/src/main/java/org/apache/commons/math4/analysis/integration/SimpsonIntegrator.java
+++ b/src/main/java/org/apache/commons/math4/analysis/integration/SimpsonIntegrator.java
@@ -16,9 +16,7 @@
  */
 package org.apache.commons.math4.analysis.integration;
 
-import org.apache.commons.math4.exception.NotStrictlyPositiveException;
 import org.apache.commons.math4.exception.NumberIsTooLargeException;
-import org.apache.commons.math4.exception.NumberIsTooSmallException;
 import org.apache.commons.math4.util.FastMath;
 
 /**
@@ -44,9 +42,9 @@
      * @param minimalIterationCount minimum number of iterations
      * @param maximalIterationCount maximum number of iterations
      * (must be less than or equal to {@link #SIMPSON_MAX_ITERATIONS_COUNT})
-     * @exception NotStrictlyPositiveException if minimal number of iterations
+     * @exception org.apache.commons.math4.exception.NotStrictlyPositiveException if minimal number of iterations
      * is not strictly positive
-     * @exception NumberIsTooSmallException if maximal number of iterations
+     * @exception org.apache.commons.math4.exception.NumberIsTooSmallException if maximal number of iterations
      * is lesser than or equal to the minimal number of iterations
      * @exception NumberIsTooLargeException if maximal number of iterations
      * is greater than {@link #SIMPSON_MAX_ITERATIONS_COUNT}
@@ -67,9 +65,9 @@
      * @param minimalIterationCount minimum number of iterations
      * @param maximalIterationCount maximum number of iterations
      * (must be less than or equal to {@link #SIMPSON_MAX_ITERATIONS_COUNT})
-     * @exception NotStrictlyPositiveException if minimal number of iterations
+     * @exception org.apache.commons.math4.exception.NotStrictlyPositiveException if minimal number of iterations
      * is not strictly positive
-     * @exception NumberIsTooSmallException if maximal number of iterations
+     * @exception org.apache.commons.math4.exception.NumberIsTooSmallException if maximal number of iterations
      * is lesser than or equal to the minimal number of iterations
      * @exception NumberIsTooLargeException if maximal number of iterations
      * is greater than {@link #SIMPSON_MAX_ITERATIONS_COUNT}
diff --git a/src/main/java/org/apache/commons/math4/analysis/integration/TrapezoidIntegrator.java b/src/main/java/org/apache/commons/math4/analysis/integration/TrapezoidIntegrator.java
index 5a7e0e8..87239c7 100644
--- a/src/main/java/org/apache/commons/math4/analysis/integration/TrapezoidIntegrator.java
+++ b/src/main/java/org/apache/commons/math4/analysis/integration/TrapezoidIntegrator.java
@@ -16,12 +16,7 @@
  */
 package org.apache.commons.math4.analysis.integration;
 
-import org.apache.commons.math4.exception.MathIllegalArgumentException;
-import org.apache.commons.math4.exception.MaxCountExceededException;
-import org.apache.commons.math4.exception.NotStrictlyPositiveException;
 import org.apache.commons.math4.exception.NumberIsTooLargeException;
-import org.apache.commons.math4.exception.NumberIsTooSmallException;
-import org.apache.commons.math4.exception.TooManyEvaluationsException;
 import org.apache.commons.math4.util.FastMath;
 
 /**
@@ -48,9 +43,9 @@
      * @param absoluteAccuracy absolute accuracy of the result
      * @param minimalIterationCount minimum number of iterations
      * @param maximalIterationCount maximum number of iterations
-     * @exception NotStrictlyPositiveException if minimal number of iterations
+     * @exception org.apache.commons.math4.exception.NotStrictlyPositiveException if minimal number of iterations
      * is not strictly positive
-     * @exception NumberIsTooSmallException if maximal number of iterations
+     * @exception org.apache.commons.math4.exception.NumberIsTooSmallException if maximal number of iterations
      * is lesser than or equal to the minimal number of iterations
      * @exception NumberIsTooLargeException if maximal number of iterations
      * is greater than 63.
@@ -70,9 +65,9 @@
      * Build a trapezoid integrator with given iteration counts.
      * @param minimalIterationCount minimum number of iterations
      * @param maximalIterationCount maximum number of iterations
-     * @exception NotStrictlyPositiveException if minimal number of iterations
+     * @exception org.apache.commons.math4.exception.NotStrictlyPositiveException if minimal number of iterations
      * is not strictly positive
-     * @exception NumberIsTooSmallException if maximal number of iterations
+     * @exception org.apache.commons.math4.exception.NumberIsTooSmallException if maximal number of iterations
      * is lesser than or equal to the minimal number of iterations
      * @exception NumberIsTooLargeException if maximal number of iterations
      * is greater than 63.
@@ -106,7 +101,7 @@
      * @param baseIntegrator integrator holding integration parameters
      * @param n the stage of 1/2 refinement, n = 0 is no refinement
      * @return the value of n-th stage integral
-     * @throws TooManyEvaluationsException if the maximal number of evaluations
+     * @throws org.apache.commons.math4.exception.TooManyEvaluationsException if the maximal number of evaluations
      * is exceeded.
      */
     double stage(final BaseAbstractUnivariateIntegrator baseIntegrator, final int n) {
diff --git a/src/main/java/org/apache/commons/math4/analysis/integration/UnivariateIntegrator.java b/src/main/java/org/apache/commons/math4/analysis/integration/UnivariateIntegrator.java
index 994985c..97dd416 100644
--- a/src/main/java/org/apache/commons/math4/analysis/integration/UnivariateIntegrator.java
+++ b/src/main/java/org/apache/commons/math4/analysis/integration/UnivariateIntegrator.java
@@ -17,10 +17,6 @@
 package org.apache.commons.math4.analysis.integration;
 
 import org.apache.commons.math4.analysis.UnivariateFunction;
-import org.apache.commons.math4.exception.MathIllegalArgumentException;
-import org.apache.commons.math4.exception.MaxCountExceededException;
-import org.apache.commons.math4.exception.NullArgumentException;
-import org.apache.commons.math4.exception.TooManyEvaluationsException;
 
 /**
  * Interface for univariate real integration algorithms.
@@ -65,13 +61,13 @@
      * @param min the lower bound for the interval
      * @param max the upper bound for the interval
      * @return the value of integral
-     * @throws TooManyEvaluationsException if the maximum number of function
+     * @throws org.apache.commons.math4.exception.TooManyEvaluationsException if the maximum number of function
      * evaluations is exceeded
-     * @throws MaxCountExceededException if the maximum iteration count is exceeded
+     * @throws org.apache.commons.math4.exception.MaxCountExceededException if the maximum iteration count is exceeded
      * or the integrator detects convergence problems otherwise
-     * @throws MathIllegalArgumentException if {@code min > max} or the endpoints do not
+     * @throws org.apache.commons.math4.exception.MathIllegalArgumentException if {@code min > max} or the endpoints do not
      * satisfy the requirements specified by the integrator
-     * @throws NullArgumentException if {@code f} is {@code null}.
+     * @throws org.apache.commons.math4.exception.NullArgumentException if {@code f} is {@code null}.
      */
     double integrate(int maxEval, UnivariateFunction f, double min, double max);
 
diff --git a/src/main/java/org/apache/commons/math4/analysis/integration/gauss/GaussIntegrator.java b/src/main/java/org/apache/commons/math4/analysis/integration/gauss/GaussIntegrator.java
index de86f48..9e0213a 100644
--- a/src/main/java/org/apache/commons/math4/analysis/integration/gauss/GaussIntegrator.java
+++ b/src/main/java/org/apache/commons/math4/analysis/integration/gauss/GaussIntegrator.java
@@ -18,7 +18,6 @@
 
 import org.apache.commons.math4.analysis.UnivariateFunction;
 import org.apache.commons.math4.exception.DimensionMismatchException;
-import org.apache.commons.math4.exception.NonMonotonicSequenceException;
 import org.apache.commons.math4.util.MathArrays;
 import org.apache.commons.math4.util.Pair;
 
@@ -42,7 +41,7 @@
      *
      * @param points Integration points.
      * @param weights Weights of the corresponding integration nodes.
-     * @throws NonMonotonicSequenceException if the {@code points} are not
+     * @throws org.apache.commons.math4.exception.NonMonotonicSequenceException if the {@code points} are not
      * sorted in increasing order.
      * @throws DimensionMismatchException if points and weights don't have the same length
      */
@@ -64,7 +63,7 @@
      * the pair) and weights (second element of the pair.
      *
      * @param pointsAndWeights Integration points and corresponding weights.
-     * @throws NonMonotonicSequenceException if the {@code points} are not
+     * @throws org.apache.commons.math4.exception.NonMonotonicSequenceException if the {@code points} are not
      * sorted in increasing order.
      *
      * @see #GaussIntegrator(double[], double[])
diff --git a/src/main/java/org/apache/commons/math4/analysis/integration/gauss/GaussIntegratorFactory.java b/src/main/java/org/apache/commons/math4/analysis/integration/gauss/GaussIntegratorFactory.java
index 3b1c2eb..e65124c 100644
--- a/src/main/java/org/apache/commons/math4/analysis/integration/gauss/GaussIntegratorFactory.java
+++ b/src/main/java/org/apache/commons/math4/analysis/integration/gauss/GaussIntegratorFactory.java
@@ -16,11 +16,8 @@
  */
 package org.apache.commons.math4.analysis.integration.gauss;
 
-import java.math.BigDecimal;
-
-import org.apache.commons.math4.exception.DimensionMismatchException;
-import org.apache.commons.math4.exception.NotStrictlyPositiveException;
 import org.apache.commons.math4.util.Pair;
+import java.math.BigDecimal;
 
 /**
  * Class that provides different ways to compute the nodes and weights to be
@@ -81,7 +78,7 @@
      * @param lowerBound Lower bound of the integration interval.
      * @param upperBound Upper bound of the integration interval.
      * @return a Gauss-Legendre integrator.
-     * @throws NotStrictlyPositiveException if number of points is not positive
+     * @throws org.apache.commons.math4.exception.NotStrictlyPositiveException if number of points is not positive
      */
     public GaussIntegrator legendre(int numberOfPoints,
                                     double lowerBound,
@@ -99,7 +96,7 @@
      *
      * @param numberOfPoints Order of the integration rule.
      * @return a Gauss-Legendre integrator.
-     * @throws NotStrictlyPositiveException if number of points is not positive
+     * @throws org.apache.commons.math4.exception.NotStrictlyPositiveException if number of points is not positive
      */
     public GaussIntegrator legendreHighPrecision(int numberOfPoints) {
         return new GaussIntegrator(getRule(legendreHighPrecision, numberOfPoints));
@@ -114,7 +111,7 @@
      * @param lowerBound Lower bound of the integration interval.
      * @param upperBound Upper bound of the integration interval.
      * @return a Gauss-Legendre integrator.
-     * @throws NotStrictlyPositiveException if number of points is not positive
+     * @throws org.apache.commons.math4.exception.NotStrictlyPositiveException if number of points is not positive
      */
     public GaussIntegrator legendreHighPrecision(int numberOfPoints,
                                                  double lowerBound,
@@ -145,8 +142,8 @@
      * @param factory Integration rule factory.
      * @param numberOfPoints Order of the integration rule.
      * @return the integration nodes and weights.
-     * @throws NotStrictlyPositiveException if number of points is not positive
-     * @throws DimensionMismatchException if the elements of the rule pair do not
+     * @throws org.apache.commons.math4.exception.NotStrictlyPositiveException if number of points is not positive
+     * @throws org.apache.commons.math4.exception.DimensionMismatchException if the elements of the rule pair do not
      * have the same length.
      */
     private static Pair<double[], double[]> getRule(BaseRuleFactory<? extends Number> factory,
diff --git a/src/main/java/org/apache/commons/math4/analysis/integration/gauss/HermiteRuleFactory.java b/src/main/java/org/apache/commons/math4/analysis/integration/gauss/HermiteRuleFactory.java
index c680ed9..2d5a3e1 100644
--- a/src/main/java/org/apache/commons/math4/analysis/integration/gauss/HermiteRuleFactory.java
+++ b/src/main/java/org/apache/commons/math4/analysis/integration/gauss/HermiteRuleFactory.java
@@ -16,7 +16,6 @@
  */
 package org.apache.commons.math4.analysis.integration.gauss;
 
-import org.apache.commons.math4.exception.DimensionMismatchException;
 import org.apache.commons.math4.util.FastMath;
 import org.apache.commons.math4.util.Pair;
 
diff --git a/src/main/java/org/apache/commons/math4/analysis/integration/gauss/LaguerreRuleFactory.java b/src/main/java/org/apache/commons/math4/analysis/integration/gauss/LaguerreRuleFactory.java
index fc9eb3b..23e45df 100644
--- a/src/main/java/org/apache/commons/math4/analysis/integration/gauss/LaguerreRuleFactory.java
+++ b/src/main/java/org/apache/commons/math4/analysis/integration/gauss/LaguerreRuleFactory.java
@@ -20,7 +20,6 @@
 
 import org.apache.commons.math4.analysis.polynomials.PolynomialFunction;
 import org.apache.commons.math4.analysis.polynomials.PolynomialsUtils;
-import org.apache.commons.math4.exception.DimensionMismatchException;
 import org.apache.commons.math4.linear.EigenDecomposition;
 import org.apache.commons.math4.linear.MatrixUtils;
 import org.apache.commons.math4.linear.RealMatrix;
diff --git a/src/main/java/org/apache/commons/math4/analysis/integration/gauss/LegendreHighPrecisionRuleFactory.java b/src/main/java/org/apache/commons/math4/analysis/integration/gauss/LegendreHighPrecisionRuleFactory.java
index 811f6d1..e5ce3c6 100644
--- a/src/main/java/org/apache/commons/math4/analysis/integration/gauss/LegendreHighPrecisionRuleFactory.java
+++ b/src/main/java/org/apache/commons/math4/analysis/integration/gauss/LegendreHighPrecisionRuleFactory.java
@@ -19,7 +19,6 @@
 import java.math.BigDecimal;
 import java.math.MathContext;
 
-import org.apache.commons.math4.exception.DimensionMismatchException;
 import org.apache.commons.math4.util.Pair;
 
 /**
diff --git a/src/main/java/org/apache/commons/math4/analysis/integration/gauss/LegendreRuleFactory.java b/src/main/java/org/apache/commons/math4/analysis/integration/gauss/LegendreRuleFactory.java
index 657f594..cbc1e7d 100644
--- a/src/main/java/org/apache/commons/math4/analysis/integration/gauss/LegendreRuleFactory.java
+++ b/src/main/java/org/apache/commons/math4/analysis/integration/gauss/LegendreRuleFactory.java
@@ -16,7 +16,6 @@
  */
 package org.apache.commons.math4.analysis.integration.gauss;
 
-import org.apache.commons.math4.exception.DimensionMismatchException;
 import org.apache.commons.math4.util.Pair;
 
 /**
diff --git a/src/main/java/org/apache/commons/math4/analysis/integration/gauss/SymmetricGaussIntegrator.java b/src/main/java/org/apache/commons/math4/analysis/integration/gauss/SymmetricGaussIntegrator.java
index 083b848..1230a1d 100644
--- a/src/main/java/org/apache/commons/math4/analysis/integration/gauss/SymmetricGaussIntegrator.java
+++ b/src/main/java/org/apache/commons/math4/analysis/integration/gauss/SymmetricGaussIntegrator.java
@@ -17,8 +17,6 @@
 package org.apache.commons.math4.analysis.integration.gauss;
 
 import org.apache.commons.math4.analysis.UnivariateFunction;
-import org.apache.commons.math4.exception.DimensionMismatchException;
-import org.apache.commons.math4.exception.NonMonotonicSequenceException;
 import org.apache.commons.math4.util.Pair;
 
 /**
@@ -36,9 +34,9 @@
      *
      * @param points Integration points.
      * @param weights Weights of the corresponding integration nodes.
-     * @throws NonMonotonicSequenceException if the {@code points} are not
+     * @throws org.apache.commons.math4.exception.NonMonotonicSequenceException if the {@code points} are not
      * sorted in increasing order.
-     * @throws DimensionMismatchException if points and weights don't have the same length
+     * @throws org.apache.commons.math4.exception.DimensionMismatchException if points and weights don't have the same length
      */
     public SymmetricGaussIntegrator(double[] points,
                                     double[] weights) {
@@ -50,7 +48,7 @@
      * the pair) and weights (second element of the pair.
      *
      * @param pointsAndWeights Integration points and corresponding weights.
-     * @throws NonMonotonicSequenceException if the {@code points} are not
+     * @throws org.apache.commons.math4.exception.NonMonotonicSequenceException if the {@code points} are not
      * sorted in increasing order.
      *
      * @see #SymmetricGaussIntegrator(double[], double[])
diff --git a/src/main/java/org/apache/commons/math4/exception/OutOfRangeException.java b/src/main/java/org/apache/commons/math4/exception/OutOfRangeException.java
index 4e8dd62..0d6730e 100644
--- a/src/main/java/org/apache/commons/math4/exception/OutOfRangeException.java
+++ b/src/main/java/org/apache/commons/math4/exception/OutOfRangeException.java
@@ -42,7 +42,9 @@
     public OutOfRangeException(Number wrong,
                                Number lo,
                                Number hi) {
-        this(LocalizedFormats.OUT_OF_RANGE_SIMPLE, wrong, lo, hi);
+        super(LocalizedFormats.OUT_OF_RANGE_SIMPLE, wrong, lo, hi);
+        this.lo = lo;
+        this.hi = hi;
     }
 
     /**
@@ -58,9 +60,8 @@
                                Number wrong,
                                Number lo,
                                Number hi) {
-        super(specific, wrong, lo, hi);
-        this.lo = lo;
-        this.hi = hi;
+        this(wrong, lo, hi);
+        getContext().addMessage(specific, wrong, lo, hi);
     }
 
     /**
diff --git a/src/test/java/org/apache/commons/math4/analysis/integration/gauss/BaseRuleFactoryTest.java b/src/test/java/org/apache/commons/math4/analysis/integration/gauss/BaseRuleFactoryTest.java
index 651339c..867a841 100644
--- a/src/test/java/org/apache/commons/math4/analysis/integration/gauss/BaseRuleFactoryTest.java
+++ b/src/test/java/org/apache/commons/math4/analysis/integration/gauss/BaseRuleFactoryTest.java
@@ -59,6 +59,7 @@
         for (Future<Pair<double[], double[]>> f : results) {
             f.get();
         }
+        exec.shutdown();
 
         // Assertion would fail if "getRuleInternal" were not "synchronized".
         final int n = RuleBuilder.getNumberOfCalls();
diff --git a/src/test/java/org/apache/commons/math4/linear/MatrixUtilsTest.java b/src/test/java/org/apache/commons/math4/linear/MatrixUtilsTest.java
index 9940c1c..e7486f2 100644
--- a/src/test/java/org/apache/commons/math4/linear/MatrixUtilsTest.java
+++ b/src/test/java/org/apache/commons/math4/linear/MatrixUtilsTest.java
@@ -22,6 +22,7 @@
 import org.apache.commons.math4.exception.MathIllegalArgumentException;
 import org.apache.commons.math4.exception.NotStrictlyPositiveException;
 import org.apache.commons.math4.exception.NullArgumentException;
+import org.apache.commons.math4.exception.OutOfRangeException;
 import org.apache.commons.math4.dfp.Dfp;
 import org.junit.Assert;
 import org.junit.Test;
@@ -445,4 +446,43 @@
                 MatrixUtils.createRealIdentityMatrix(testData.length), result, 1e-12);
     }
 
+    @Test
+    public void testCheckMatrixRowIndexError() {
+        try {
+            AnyMatrix m = MatrixUtils.createRealMatrix(new double[][] {{9,9}, {9,9}, {9,9}});
+            MatrixUtils.checkRowIndex(m, 4);
+            Assert.fail("expected an OutOfRangeException");
+        } catch (OutOfRangeException e) {
+            String s = e.getMessage();
+            int topIx = s.indexOf('2');
+            int botIx = s.indexOf('0');
+            int rowIx = s.indexOf('4');
+            if (topIx < 0 || botIx < 0 || rowIx < 0) {
+                Assert.fail("expected a message like index 4 is not in 0..3, not: " + s);
+            }
+        } catch (Exception e) {
+            Assert.fail("expected an OutOfRange exception, not: " +
+                        e.getClass().getName() + ": " + e.getMessage());
+        }
+    }
+
+    @Test
+    public void testCheckMatrixColIndexError() {
+        try {
+            AnyMatrix m = MatrixUtils.createRealMatrix(new double[][] {{9,9}, {9,9}, {9,9}});
+            MatrixUtils.checkColumnIndex(m, 4);
+            Assert.fail("expected an OutOfRangeException");
+        } catch (OutOfRangeException e) {
+            String s = e.getMessage();
+            int topIx = s.indexOf('1');
+            int botIx = s.indexOf('0');
+            int rowIx = s.indexOf('4');
+            if (topIx < 0 || botIx < 0 || rowIx < 0) {
+                Assert.fail("expected a message like index 4 is not in 0..3, not: " + s);
+            }
+        } catch (Exception e) {
+            Assert.fail("expected an OutOfRange exception, not: " +
+                        e.getClass().getName() + ": " + e.getMessage());
+        }
+    }
 }
diff --git a/src/test/java/org/apache/commons/math4/random/SynchronizedRandomGeneratorTest.java b/src/test/java/org/apache/commons/math4/random/SynchronizedRandomGeneratorTest.java
index bc58b13..b953871 100644
--- a/src/test/java/org/apache/commons/math4/random/SynchronizedRandomGeneratorTest.java
+++ b/src/test/java/org/apache/commons/math4/random/SynchronizedRandomGeneratorTest.java
@@ -114,6 +114,7 @@
         for (int i = 0; i < numGenerators; i++) {
             values[i] = results.get(i).get();
         }
+        exec.shutdown();
         return values;
     }
 }
