Merge branch 'MATH_3_X' into 3.6-release
diff --git a/build.xml b/build.xml
index 89cc433..3e97317 100644
--- a/build.xml
+++ b/build.xml
@@ -30,12 +30,12 @@
 
 <!-- ========== External Dependencies ===================================== -->
 
+  <property name="repository"              value = "${user.home}/.m2/repository"/>
 
   <!-- Junit -->
-  <property name="junit.version"           value="4.8.2"/>
-  <property name="junit.home"              value="/usr/share/junit"/>
-  <property name="junit.jar"               value="${junit.home}/junit-${junit.version}.jar"/>
-
+  <property name="junit.version"           value="4.11"/>
+  <property name="junit.jar"               value="$junit-{junit.version}.jar"/>
+  <property name="hamcrest.jar"            value="hamcrest-core-1.3.jar"/>
 
 <!-- ========== Component Declarations ==================================== -->
 
@@ -50,7 +50,7 @@
   <property name="component.title"         value="Commons MATH"/>
 
   <!-- The current version number of this component -->
-  <property name="component.version"       value="3.5"/>
+  <property name="component.version"       value="3.6"/>
 
   <!-- The base directory for component sources -->
   <property name="source.home"             value="src/main/java"/>
@@ -111,6 +111,7 @@
   <!-- External dependency classpath -->
   <path id="downloaded.lib.classpath">
     <pathelement location="${download.lib.dir}/junit-${junit.version}.jar"/>
+	<pathelement location="${download.lib.dir}/${hamcrest.jar}"/>
   </path>
 
 <!-- ========== Test Execution Defaults =================================== -->
@@ -121,6 +122,7 @@
     <pathelement location="${build.home}/classes"/>
     <pathelement location="${build.home}/test-classes"/>
     <pathelement location="${junit.jar}"/>
+	<pathelement location="${hamcrest.jar}"/>
     <path refid="downloaded.lib.classpath"/>
   </path>
 
@@ -343,9 +345,10 @@
 <!-- ========== Download Dependencies =========================================== -->
 
     <target name="download-dependencies" 
-           depends="check-availability" unless="skip.download">
+         depends="check-availability" unless="skip.download">
         <echo message="doing download-dependencies..." />
         <antcall target="download-junit" />
+        <antcall target="download-hamcrest" />
     </target>
 
     <target name="check-availability">
@@ -360,6 +363,14 @@
             usetimestamp="true" ignoreerrors="true"
             src="http://repo1.maven.org/maven2/junit/junit/${junit.version}/junit-${junit.version}.jar"/>
     </target>
+
+	<target name="download-hamcrest" unless="hamcrest.found">
+	        <echo message="Downloading hamcrest..."/>
+	        <mkdir dir="${download.lib.dir}" />
+	        <get dest="${download.lib.dir}/${hamcrest.jar}"
+	            usetimestamp="true" ignoreerrors="true"
+	            src="http://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar"/>
+	</target>
       
 </project>
 
diff --git a/doc/release/release.howto.txt b/doc/release/release.howto.txt
index b620e55..a667aa2 100644
--- a/doc/release/release.howto.txt
+++ b/doc/release/release.howto.txt
@@ -313,18 +313,19 @@
 (13)
 As the web site staging area is shared among all commons components and therefore
 can be published before vote ends, it is not recommended to use the standard staging
-area for the release candidate. So you will just archive the site and transfer it on
-your apache personal area for review:
+area for the release candidate. So you will just archive the transfer the site it on
+your apache personal area for review. Here is how to do this using lftp to initiate
+the sftp transfer (lftp supports a mirror command for recursive transfers, don't
+forget the -R flag for uploading instead of downloading the site):
 
   $ mvn site
   $ cd target
-  $ tar czf site.tar.gz site
-  $ scp site.tar.gz __Your_apache_login__@people.apache.org:~/
-  $ ssh __Your_apache_login__@people.apache.org
-     you@minotaur:~$ tar xzf site.tar.gz
-     you@minotaur:~$ mv site public_html/commons-math-3.4-RC1-site
-     you@minotaur:~$ rm site.tar.gz
-     you@minotaur:~$ logout
+  $ mv site commons-math-3.4-RC1-site
+  $ lftp sftp://__Your_apache_login__@home.apache.org/
+     lftp you@home.apache.org:~> cd public_html
+     lftp you@home.apache.org:~/public_html> mirror -R commons-math-3.4-RC1-site
+     lftp you@home.apache.org:~/public_html> bye
+
 
 (14)
 Call to vote by sending a message to the "dev" ML with subject
@@ -343,7 +344,7 @@
   cf4a9d70c9ac24dd7196995390171150e4e56451
 
 Site:
-  <http://people.apache.org/~__Your_apache_login__/commons-math-3.4-RC1-site>
+  <http://home.apache.org/~__Your_apache_login__/commons-math-3.4-RC1-site>
 
 Distribution files:
   https://dist.apache.org/repos/dist/dev/commons/math/
diff --git a/src/main/java/org/apache/commons/math3/complex/Complex.java b/src/main/java/org/apache/commons/math3/complex/Complex.java
index c8bd211..bf43120 100644
--- a/src/main/java/org/apache/commons/math3/complex/Complex.java
+++ b/src/main/java/org/apache/commons/math3/complex/Complex.java
@@ -32,7 +32,7 @@
 /**
  * Representation of a Complex number, i.e. a number which has both a
  * real and imaginary part.
- * <br/>
+ * <p>
  * Implementations of arithmetic operations handle {@code NaN} and
  * infinite values according to the rules for {@link java.lang.Double}, i.e.
  * {@link #equals} is an equivalence relation for all instances that have
@@ -42,16 +42,14 @@
  *  <li>{@code 1 + NaNi}</li>
  *  <li>{@code NaN + i}</li>
  *  <li>{@code NaN + NaNi}</li>
- * </ul>
- * Note that this is in contradiction with the IEEE-754 standard for floating
+ * </ul><p>
+ * Note that this contradicts the IEEE-754 standard for floating
  * point numbers (according to which the test {@code x == x} must fail if
  * {@code x} is {@code NaN}). The method
  * {@link org.apache.commons.math3.util.Precision#equals(double,double,int)
  * equals for primitive double} in {@link org.apache.commons.math3.util.Precision}
  * conforms with IEEE-754 while this class conforms with the standard behavior
- * for Java object types.
- * <br/>
- * Implements Serializable since 2.0
+ * for Java object types.</p>
  *
  */
 public class Complex implements FieldElement<Complex>, Serializable  {
@@ -138,12 +136,9 @@
      * Returns a {@code Complex} whose value is
      * {@code (this + addend)}.
      * Uses the definitional formula
-     * <pre>
-     *  <code>
-     *   (a + bi) + (c + di) = (a+c) + (b+d)i
-     *  </code>
-     * </pre>
-     * <br/>
+     * <p>
+     *   {@code (a + bi) + (c + di) = (a+c) + (b+d)i}
+     * </p>
      * If either {@code this} or {@code addend} has a {@code NaN} value in
      * either part, {@link #NaN} is returned; otherwise {@code Infinite}
      * and {@code NaN} values are returned in the parts of the result
@@ -180,17 +175,17 @@
     }
 
      /**
-     * Return the conjugate of this complex number.
+     * Returns the conjugate of this complex number.
      * The conjugate of {@code a + bi} is {@code a - bi}.
-     * <br/>
+     * <p>
      * {@link #NaN} is returned if either the real or imaginary
      * part of this Complex number equals {@code Double.NaN}.
-     * <br/>
+     * </p><p>
      * If the imaginary part is infinite, and the real part is not
      * {@code NaN}, the returned value has infinite imaginary part
      * of the opposite sign, e.g. the conjugate of
      * {@code 1 + POSITIVE_INFINITY i} is {@code 1 - NEGATIVE_INFINITY i}.
-     *
+     * </p>
      * @return the conjugate of this Complex object.
      */
     public Complex conjugate() {
@@ -216,7 +211,7 @@
      * <a href="http://doi.acm.org/10.1145/1039813.1039814">
      * prescaling of operands</a> to limit the effects of overflows and
      * underflows in the computation.
-     * <br/>
+     * <p>
      * {@code Infinite} and {@code NaN} values are handled according to the
      * following rules, applied in the order presented:
      * <ul>
@@ -401,7 +396,7 @@
      * Returns {@code true} if, both for the real part and for the imaginary
      * part, there is no double value strictly between the arguments or the
      * difference between them is within the range of allowed error
-     * (inclusive).
+     * (inclusive).  Returns {@code false} if either of the arguments is NaN.
      *
      * @param x First value (cannot be {@code null}).
      * @param y Second value (cannot be {@code null}).
@@ -421,7 +416,7 @@
      * Returns {@code true} if, both for the real part and for the imaginary
      * part, there is no double value strictly between the arguments or the
      * relative difference between them is smaller or equal to the given
-     * tolerance.
+     * tolerance. Returns {@code false} if either of the arguments is NaN.
      *
      * @param x First value (cannot be {@code null}).
      * @param y Second value (cannot be {@code null}).
@@ -500,21 +495,19 @@
      * Returns a {@code Complex} whose value is {@code this * factor}.
      * Implements preliminary checks for {@code NaN} and infinity followed by
      * the definitional formula:
-     * <pre>
-     *  <code>
-     *   (a + bi)(c + di) = (ac - bd) + (ad + bc)i
-     *  </code>
-     * </pre>
+     * <p>
+     *   {@code (a + bi)(c + di) = (ac - bd) + (ad + bc)i}
+     * </p>
      * Returns {@link #NaN} if either {@code this} or {@code factor} has one or
      * more {@code NaN} parts.
-     * <br/>
+     * <p>
      * Returns {@link #INF} if neither {@code this} nor {@code factor} has one
      * or more {@code NaN} parts and if either {@code this} or {@code factor}
      * has one or more infinite parts (same result is returned regardless of
      * the sign of the components).
-     * <br/>
+     * </p><p>
      * Returns finite values in components of the result per the definitional
-     * formula in all remaining cases.
+     * formula in all remaining cases.</p>
      *
      * @param  factor value to be multiplied by this {@code Complex}.
      * @return {@code this * factor}.
@@ -580,7 +573,7 @@
     /**
      * Returns a {@code Complex} whose value is {@code (-this)}.
      * Returns {@code NaN} if either real or imaginary
-     * part of this Complex number equals {@code Double.NaN}.
+     * part of this Complex number is {@code Double.NaN}.
      *
      * @return {@code -this}.
      */
@@ -596,11 +589,9 @@
      * Returns a {@code Complex} whose value is
      * {@code (this - subtrahend)}.
      * Uses the definitional formula
-     * <pre>
-     *  <code>
-     *   (a + bi) - (c + di) = (a-c) + (b-d)i
-     *  </code>
-     * </pre>
+     * <p>
+     *  {@code (a + bi) - (c + di) = (a-c) + (b-d)i}
+     * </p>
      * If either {@code this} or {@code subtrahend} has a {@code NaN]} value in either part,
      * {@link #NaN} is returned; otherwise infinite and {@code NaN} values are
      * returned in the parts of the result according to the rules for
@@ -641,11 +632,9 @@
      * <a href="http://mathworld.wolfram.com/InverseCosine.html" TARGET="_top">
      * inverse cosine</a> of this complex number.
      * Implements the formula:
-     * <pre>
-     *  <code>
-     *   acos(z) = -i (log(z + i (sqrt(1 - z<sup>2</sup>))))
-     *  </code>
-     * </pre>
+     * <p>
+     *  {@code acos(z) = -i (log(z + i (sqrt(1 - z<sup>2</sup>))))}
+     * </p>
      * Returns {@link Complex#NaN} if either real or imaginary part of the
      * input argument is {@code NaN} or infinite.
      *
@@ -665,13 +654,11 @@
      * <a href="http://mathworld.wolfram.com/InverseSine.html" TARGET="_top">
      * inverse sine</a> of this complex number.
      * Implements the formula:
-     * <pre>
-     *  <code>
-     *   asin(z) = -i (log(sqrt(1 - z<sup>2</sup>) + iz))
-     *  </code>
-     * </pre>
+     * <p>
+     *  {@code asin(z) = -i (log(sqrt(1 - z<sup>2</sup>) + iz))}
+     * </p><p>
      * Returns {@link Complex#NaN} if either real or imaginary part of the
-     * input argument is {@code NaN} or infinite.
+     * input argument is {@code NaN} or infinite.</p>
      *
      * @return the inverse sine of this complex number.
      * @since 1.2
@@ -689,13 +676,11 @@
      * <a href="http://mathworld.wolfram.com/InverseTangent.html" TARGET="_top">
      * inverse tangent</a> of this complex number.
      * Implements the formula:
-     * <pre>
-     *  <code>
-     *   atan(z) = (i/2) log((i + z)/(i - z))
-     *  </code>
-     * </pre>
+     * <p>
+     * {@code atan(z) = (i/2) log((i + z)/(i - z))}
+     * </p><p>
      * Returns {@link Complex#NaN} if either real or imaginary part of the
-     * input argument is {@code NaN} or infinite.
+     * input argument is {@code NaN} or infinite.</p>
      *
      * @return the inverse tangent of this complex number
      * @since 1.2
@@ -712,27 +697,24 @@
     /**
      * Compute the
      * <a href="http://mathworld.wolfram.com/Cosine.html" TARGET="_top">
-     * cosine</a>
-     * of this complex number.
+     * cosine</a> of this complex number.
      * Implements the formula:
-     * <pre>
-     *  <code>
-     *   cos(a + bi) = cos(a)cosh(b) - sin(a)sinh(b)i
-     *  </code>
-     * </pre>
+     * <p>
+     *  {@code cos(a + bi) = cos(a)cosh(b) - sin(a)sinh(b)i}
+     * </p><p>
      * where the (real) functions on the right-hand side are
      * {@link FastMath#sin}, {@link FastMath#cos},
      * {@link FastMath#cosh} and {@link FastMath#sinh}.
-     * <br/>
+     * </p><p>
      * Returns {@link Complex#NaN} if either real or imaginary part of the
      * input argument is {@code NaN}.
-     * <br/>
+     * </p><p>
      * Infinite values in real or imaginary parts of the input may result in
-     * infinite or NaN values returned in parts of the result.
+     * infinite or NaN values returned in parts of the result.</p>
      * <pre>
      *  Examples:
      *  <code>
-     *   cos(1 &plusmn; INFINITY i) = 1 &#x2213; INFINITY i
+     *   cos(1 &plusmn; INFINITY i) = 1 \u2213 INFINITY i
      *   cos(&plusmn;INFINITY + i) = NaN + NaN i
      *   cos(&plusmn;INFINITY &plusmn; INFINITY i) = NaN + NaN i
      *  </code>
@@ -757,16 +739,16 @@
      * Implements the formula:
      * <pre>
      *  <code>
-     *   cosh(a + bi) = cosh(a)cos(b) + sinh(a)sin(b)i}
+     *   cosh(a + bi) = cosh(a)cos(b) + sinh(a)sin(b)i
      *  </code>
      * </pre>
      * where the (real) functions on the right-hand side are
      * {@link FastMath#sin}, {@link FastMath#cos},
      * {@link FastMath#cosh} and {@link FastMath#sinh}.
-     * <br/>
+     * <p>
      * Returns {@link Complex#NaN} if either real or imaginary part of the
      * input argument is {@code NaN}.
-     * <br/>
+     * </p>
      * Infinite values in real or imaginary parts of the input may result in
      * infinite or NaN values returned in parts of the result.
      * <pre>
@@ -803,10 +785,10 @@
      * where the (real) functions on the right-hand side are
      * {@link FastMath#exp}, {@link FastMath#cos}, and
      * {@link FastMath#sin}.
-     * <br/>
+     * <p>
      * Returns {@link Complex#NaN} if either real or imaginary part of the
      * input argument is {@code NaN}.
-     * <br/>
+     * </p>
      * Infinite values in real or imaginary parts of the input may result in
      * infinite or NaN values returned in parts of the result.
      * <pre>
@@ -845,10 +827,10 @@
      * where ln on the right hand side is {@link FastMath#log},
      * {@code |a + bi|} is the modulus, {@link Complex#abs},  and
      * {@code arg(a + bi) = }{@link FastMath#atan2}(b, a).
-     * <br/>
+     * <p>
      * Returns {@link Complex#NaN} if either real or imaginary part of the
      * input argument is {@code NaN}.
-     * <br/>
+     * </p>
      * Infinite (or critical) values in real or imaginary parts of the input may
      * result in infinite or NaN values returned in parts of the result.
      * <pre>
@@ -886,13 +868,13 @@
      * </pre>
      * where {@code exp} and {@code log} are {@link #exp} and
      * {@link #log}, respectively.
-     * <br/>
+     * <p>
      * Returns {@link Complex#NaN} if either real or imaginary part of the
      * input argument is {@code NaN} or infinite, or if {@code y}
-     * equals {@link Complex#ZERO}.
+     * equals {@link Complex#ZERO}.</p>
      *
      * @param  x exponent to which this {@code Complex} is to be raised.
-     * @return <code> this<sup>{@code x}</sup></code>.
+     * @return <code> this<sup>x</sup></code>.
      * @throws NullArgumentException if x is {@code null}.
      * @since 1.2
      */
@@ -927,10 +909,10 @@
      * where the (real) functions on the right-hand side are
      * {@link FastMath#sin}, {@link FastMath#cos},
      * {@link FastMath#cosh} and {@link FastMath#sinh}.
-     * <br/>
+     * <p>
      * Returns {@link Complex#NaN} if either real or imaginary part of the
      * input argument is {@code NaN}.
-     * <br/>
+     * </p><p>
      * Infinite values in real or imaginary parts of the input may result in
      * infinite or {@code NaN} values returned in parts of the result.
      * <pre>
@@ -967,10 +949,10 @@
      * where the (real) functions on the right-hand side are
      * {@link FastMath#sin}, {@link FastMath#cos},
      * {@link FastMath#cosh} and {@link FastMath#sinh}.
-     * <br/>
+     * <p>
      * Returns {@link Complex#NaN} if either real or imaginary part of the
      * input argument is {@code NaN}.
-     * <br/>
+     * </p><p>
      * Infinite values in real or imaginary parts of the input may result in
      * infinite or NaN values returned in parts of the result.
      * <pre>
@@ -1008,10 +990,10 @@
      * <li>{@code |a + bi| = }{@link Complex#abs}(a + bi)</li>
      * <li>{@code sign(b) =  }{@link FastMath#copySign(double,double) copySign(1d, b)}
      * </ul>
-     * <br/>
+     * <p>
      * Returns {@link Complex#NaN} if either real or imaginary part of the
      * input argument is {@code NaN}.
-     * <br/>
+     * </p>
      * Infinite values in real or imaginary parts of the input may result in
      * infinite or NaN values returned in parts of the result.
      * <pre>
@@ -1053,10 +1035,10 @@
      * number.
      * Computes the result directly as
      * {@code sqrt(ONE.subtract(z.multiply(z)))}.
-     * <br/>
+     * <p>
      * Returns {@link Complex#NaN} if either real or imaginary part of the
      * input argument is {@code NaN}.
-     * <br/>
+     * </p>
      * Infinite values in real or imaginary parts of the input may result in
      * infinite or NaN values returned in parts of the result.
      *
@@ -1080,10 +1062,10 @@
      * where the (real) functions on the right-hand side are
      * {@link FastMath#sin}, {@link FastMath#cos}, {@link FastMath#cosh} and
      * {@link FastMath#sinh}.
-     * <br/>
+     * <p>
      * Returns {@link Complex#NaN} if either real or imaginary part of the
      * input argument is {@code NaN}.
-     * <br/>
+     * </p>
      * Infinite (or critical) values in real or imaginary parts of the input may
      * result in infinite or NaN values returned in parts of the result.
      * <pre>
@@ -1131,10 +1113,10 @@
      * where the (real) functions on the right-hand side are
      * {@link FastMath#sin}, {@link FastMath#cos}, {@link FastMath#cosh} and
      * {@link FastMath#sinh}.
-     * <br/>
+     * <p>
      * Returns {@link Complex#NaN} if either real or imaginary part of the
      * input argument is {@code NaN}.
-     * <br/>
+     * </p>
      * Infinite values in real or imaginary parts of the input may result in
      * infinite or NaN values returned in parts of the result.
      * <pre>
@@ -1177,7 +1159,7 @@
      * The value returned is between -PI (not inclusive)
      * and PI (inclusive), with negative values returned for numbers with
      * negative imaginary parts.
-     * <br/>
+     * <p>
      * If either real or imaginary part (or both) is NaN, NaN is returned.
      * Infinite parts are handled as {@code Math.atan2} handles them,
      * essentially treating finite parts as zero in the presence of an
@@ -1202,14 +1184,14 @@
      * for <i>{@code k=0, 1, ..., n-1}</i>, where {@code abs} and {@code phi}
      * are respectively the {@link #abs() modulus} and
      * {@link #getArgument() argument} of this complex number.
-     * <br/>
+     * <p>
      * If one or both parts of this complex number is NaN, a list with just
      * one element, {@link #NaN} is returned.
      * if neither part is NaN, but at least one part is infinite, the result
      * is a one-element list containing {@link #INF}.
      *
      * @param n Degree of root.
-     * @return a List<Complex> of all {@code n}-th roots of {@code this}.
+     * @return a List of all {@code n}-th roots of {@code this}.
      * @throws NotPositiveException if {@code n <= 0}.
      * @since 2.0
      */
diff --git a/src/main/java/org/apache/commons/math3/random/BitsStreamGenerator.java b/src/main/java/org/apache/commons/math3/random/BitsStreamGenerator.java
index 9f7cb56..7a8aef5 100644
--- a/src/main/java/org/apache/commons/math3/random/BitsStreamGenerator.java
+++ b/src/main/java/org/apache/commons/math3/random/BitsStreamGenerator.java
@@ -187,7 +187,6 @@
      *
      * @param bytes Array in which to put the generated bytes. Cannot be {@code null}.
      */
-    @Override
     public void nextBytes(byte[] bytes) {
         nextBytesFill(bytes, 0, bytes.length);
     }
diff --git a/src/main/java/org/apache/commons/math3/util/Precision.java b/src/main/java/org/apache/commons/math3/util/Precision.java
index 49fd15c..180ad4f 100644
--- a/src/main/java/org/apache/commons/math3/util/Precision.java
+++ b/src/main/java/org/apache/commons/math3/util/Precision.java
@@ -99,7 +99,8 @@
      * @param eps the amount of error to allow when checking for equality
      * @return <ul><li>0 if  {@link #equals(double, double, double) equals(x, y, eps)}</li>
      *       <li>&lt; 0 if !{@link #equals(double, double, double) equals(x, y, eps)} &amp;&amp; x &lt; y</li>
-     *       <li>> 0 if !{@link #equals(double, double, double) equals(x, y, eps)} &amp;&amp; x > y</li></ul>
+     *       <li>> 0 if !{@link #equals(double, double, double) equals(x, y, eps)} &amp;&amp; x > y or
+     *       either argument is NaN</li></ul>
      */
     public static int compareTo(double x, double y, double eps) {
         if (equals(x, y, eps)) {
@@ -117,7 +118,7 @@
      * point numbers are considered equal.
      * Adapted from <a
      * href="http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/">
-     * Bruce Dawson</a>
+     * Bruce Dawson</a>. Returns {@code false} if either of the arguments is NaN.
      *
      * @param x first value
      * @param y second value
@@ -125,7 +126,8 @@
      * values between {@code x} and {@code y}.
      * @return <ul><li>0 if  {@link #equals(double, double, int) equals(x, y, maxUlps)}</li>
      *       <li>&lt; 0 if !{@link #equals(double, double, int) equals(x, y, maxUlps)} &amp;&amp; x &lt; y</li>
-     *       <li>> 0 if !{@link #equals(double, double, int) equals(x, y, maxUlps)} &amp;&amp; x > y</li></ul>
+     *       <li>&gt; 0 if !{@link #equals(double, double, int) equals(x, y, maxUlps)} &amp;&amp; x > y
+     *       or either argument is NaN</li></ul>
      */
     public static int compareTo(final double x, final double y, final int maxUlps) {
         if (equals(x, y, maxUlps)) {
@@ -149,7 +151,7 @@
     }
 
     /**
-     * Returns true if both arguments are NaN or neither is NaN and they are
+     * Returns true if both arguments are NaN or they are
      * equal as defined by {@link #equals(float,float) equals(x, y, 1)}.
      *
      * @param x first value
@@ -162,8 +164,9 @@
     }
 
     /**
-     * Returns true if both arguments are equal or within the range of allowed
-     * error (inclusive).
+     * Returns true if the arguments are equal or within the range of allowed
+     * error (inclusive).  Returns {@code false} if either of the arguments
+     * is NaN.
      *
      * @param x first value
      * @param y second value
@@ -176,7 +179,7 @@
     }
 
     /**
-     * Returns true if both arguments are NaN or are equal or within the range
+     * Returns true if the arguments are both NaN, are equal, or are within the range
      * of allowed error (inclusive).
      *
      * @param x first value
@@ -191,14 +194,14 @@
     }
 
     /**
-     * Returns true if both arguments are equal or within the range of allowed
+     * Returns true if the arguments are equal or within the range of allowed
      * error (inclusive).
      * Two float numbers are considered equal if there are {@code (maxUlps - 1)}
      * (or fewer) floating point numbers between them, i.e. two adjacent floating
      * point numbers are considered equal.
      * Adapted from <a
      * href="http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/">
-     * Bruce Dawson</a>
+     * Bruce Dawson</a>.  Returns {@code false} if either of the arguments is NaN.
      *
      * @param x first value
      * @param y second value
@@ -242,7 +245,7 @@
     }
 
     /**
-     * Returns true if both arguments are NaN or if they are equal as defined
+     * Returns true if the arguments are both NaN or if they are equal as defined
      * by {@link #equals(float,float,int) equals(x, y, maxUlps)}.
      *
      * @param x first value
@@ -270,7 +273,7 @@
     }
 
     /**
-     * Returns true if both arguments are NaN or neither is NaN and they are
+     * Returns true if the arguments are both NaN or they are
      * equal as defined by {@link #equals(double,double) equals(x, y, 1)}.
      *
      * @param x first value
@@ -285,7 +288,8 @@
     /**
      * Returns {@code true} if there is no double value strictly between the
      * arguments or the difference between them is within the range of allowed
-     * error (inclusive).
+     * error (inclusive). Returns {@code false} if either of the arguments
+     * is NaN.
      *
      * @param x First value.
      * @param y Second value.
@@ -299,8 +303,9 @@
 
     /**
      * Returns {@code true} if there is no double value strictly between the
-     * arguments or the relative difference between them is smaller or equal
-     * to the given tolerance.
+     * arguments or the relative difference between them is less than or equal
+     * to the given tolerance. Returns {@code false} if either of the arguments
+     * is NaN.
      *
      * @param x First value.
      * @param y Second value.
@@ -321,7 +326,7 @@
     }
 
     /**
-     * Returns true if both arguments are NaN or are equal or within the range
+     * Returns true if the arguments are both NaN, are equal or are within the range
      * of allowed error (inclusive).
      *
      * @param x first value
@@ -336,7 +341,7 @@
     }
 
     /**
-     * Returns true if both arguments are equal or within the range of allowed
+     * Returns true if the arguments are equal or within the range of allowed
      * error (inclusive).
      * <p>
      * Two float numbers are considered equal if there are {@code (maxUlps - 1)}
@@ -346,7 +351,7 @@
      * <p>
      * Adapted from <a
      * href="http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/">
-     * Bruce Dawson</a>
+     * Bruce Dawson</a>. Returns {@code false} if either of the arguments is NaN.
      * </p>
      *
      * @param x first value
diff --git a/src/site/xdoc/userguide/stat.xml b/src/site/xdoc/userguide/stat.xml
index b93e0e1..305795c 100644
--- a/src/site/xdoc/userguide/stat.xml
+++ b/src/site/xdoc/userguide/stat.xml
@@ -915,10 +915,9 @@
            <a href="http://www.jstatsoft.org/v39/i11/"> Computing the Two-Sided Kolmogorov-Smirnov
            Distribution</a> by Richard Simard and Pierre L'Ecuyer.  In the 2-sample case, estimation
            by default depends on the number of data points.  For small samples, the distribution
-           is computed exactly; for moderately large samples a Monte Carlo procedure is used, and
-           for large samples a numerical approximation of the Kolmogorov distribution is used.
-           Methods to perform each type of p-value estimation are also exposed directly.  See
-           the class javadoc for details.</li>
+           is computed exactly and for large samples a numerical approximation of the Kolmogorov
+           distribution is used. Methods to perform each type of p-value estimation are also exposed
+           directly.  See the class javadoc for details.</li>
           </ul>
           </p>
           <p>
@@ -1237,7 +1236,7 @@
 TestUtils.exactP(d, x.length, y.length, false)
           </source>
           assuming that the non-strict form of the null hypothesis is desired. Note, however,
-          that exact computation for anything but very small samples takes a very long time.    
+          that exact computation for large samples takes a long time.
           </dd>
         </dl>
         </p>
diff --git a/src/test/java/org/apache/commons/math3/complex/ComplexTest.java b/src/test/java/org/apache/commons/math3/complex/ComplexTest.java
index 7cf7962..bb34a48 100644
--- a/src/test/java/org/apache/commons/math3/complex/ComplexTest.java
+++ b/src/test/java/org/apache/commons/math3/complex/ComplexTest.java
@@ -565,6 +565,15 @@
     }
 
     @Test
+    public void testFloatingPointEqualsWithAllowedDeltaNaN() {
+        final Complex x = new Complex(0, Double.NaN);
+        final Complex y = new Complex(Double.NaN, 0);
+        Assert.assertFalse(Complex.equals(x, Complex.ZERO, 0.1));
+        Assert.assertFalse(Complex.equals(x, x, 0.1));
+        Assert.assertFalse(Complex.equals(x, y, 0.1));
+    }
+
+    @Test
     public void testFloatingPointEqualsWithRelativeTolerance() {
         final double tol = 1e-4;
         final double re = 1;
@@ -577,6 +586,15 @@
     }
 
     @Test
+    public void testFloatingPointEqualsWithRelativeToleranceNaN() {
+        final Complex x = new Complex(0, Double.NaN);
+        final Complex y = new Complex(Double.NaN, 0);
+        Assert.assertFalse(Complex.equalsWithRelativeTolerance(x, Complex.ZERO, 0.1));
+        Assert.assertFalse(Complex.equalsWithRelativeTolerance(x, x, 0.1));
+        Assert.assertFalse(Complex.equalsWithRelativeTolerance(x, y, 0.1));
+    }
+
+    @Test
     public void testEqualsTrue() {
         Complex x = new Complex(3.0, 4.0);
         Complex y = new Complex(3.0, 4.0);
diff --git a/src/test/java/org/apache/commons/math3/distribution/EnumeratedIntegerDistributionTest.java b/src/test/java/org/apache/commons/math3/distribution/EnumeratedIntegerDistributionTest.java
index 85aa5af..4277187 100644
--- a/src/test/java/org/apache/commons/math3/distribution/EnumeratedIntegerDistributionTest.java
+++ b/src/test/java/org/apache/commons/math3/distribution/EnumeratedIntegerDistributionTest.java
@@ -22,6 +22,7 @@
 import org.apache.commons.math3.exception.NotFiniteNumberException;
 import org.apache.commons.math3.exception.NotPositiveException;
 import org.apache.commons.math3.util.FastMath;
+import org.apache.commons.math3.util.Precision;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -173,7 +174,7 @@
     public void testCreateFromIntegers() {
         final int[] data = new int[] {0, 1, 1, 2, 2, 2};
         EnumeratedIntegerDistribution distribution = new EnumeratedIntegerDistribution(data);
-        Assert.assertEquals(0.5, distribution.probability(2), 0);
-        Assert.assertEquals(0.5, distribution.cumulativeProbability(1), 0);
+        Assert.assertEquals(0.5, distribution.probability(2), Precision.EPSILON);
+        Assert.assertEquals(0.5, distribution.cumulativeProbability(1), Precision.EPSILON);
     }
 }
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/AdamsBashforthFieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/AdamsBashforthFieldIntegratorTest.java
index 9b7c45e..e78a6de 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/AdamsBashforthFieldIntegratorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/AdamsBashforthFieldIntegratorTest.java
@@ -26,7 +26,7 @@
 import org.apache.commons.math3.util.Decimal64Field;
 import org.junit.Test;
 
-public class AdamsBashforthFieldIntegratorTest extends AbstractAdamsFieldIntegratorTest {
+public class AdamsBashforthFieldIntegratorTest extends AdamsFieldIntegratorAbstractTest {
 
     protected <T extends RealFieldElement<T>> AdamsFieldIntegrator<T>
     createIntegrator(Field<T> field, final int nSteps, final double minStep, final double maxStep,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractAdamsFieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/AdamsFieldIntegratorAbstractTest.java
similarity index 99%
rename from src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractAdamsFieldIntegratorTest.java
rename to src/test/java/org/apache/commons/math3/ode/nonstiff/AdamsFieldIntegratorAbstractTest.java
index 74a5841..efc1b2c 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractAdamsFieldIntegratorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/AdamsFieldIntegratorAbstractTest.java
@@ -40,7 +40,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-public abstract class AbstractAdamsFieldIntegratorTest {
+public abstract class AdamsFieldIntegratorAbstractTest {
 
     protected abstract <T extends RealFieldElement<T>> AdamsFieldIntegrator<T>
     createIntegrator(Field<T> field, final int nSteps, final double minStep, final double maxStep,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/AdamsMoultonFieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/AdamsMoultonFieldIntegratorTest.java
index 2a389b4..eda33d3 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/AdamsMoultonFieldIntegratorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/AdamsMoultonFieldIntegratorTest.java
@@ -26,7 +26,7 @@
 import org.apache.commons.math3.util.Decimal64Field;
 import org.junit.Test;
 
-public class AdamsMoultonFieldIntegratorTest extends AbstractAdamsFieldIntegratorTest {
+public class AdamsMoultonFieldIntegratorTest extends AdamsFieldIntegratorAbstractTest {
 
     protected <T extends RealFieldElement<T>> AdamsFieldIntegrator<T>
     createIntegrator(Field<T> field, final int nSteps, final double minStep, final double maxStep,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/ClassicalRungKuttaFieldStepInterpolatorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/ClassicalRungKuttaFieldStepInterpolatorTest.java
index e94a041..b69b52b 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/ClassicalRungKuttaFieldStepInterpolatorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/ClassicalRungKuttaFieldStepInterpolatorTest.java
@@ -25,7 +25,7 @@
 import org.apache.commons.math3.util.Decimal64Field;
 import org.junit.Test;
 
-public class ClassicalRungKuttaFieldStepInterpolatorTest extends AbstractRungeKuttaFieldStepInterpolatorTest {
+public class ClassicalRungKuttaFieldStepInterpolatorTest extends RungeKuttaFieldStepInterpolatorAbstractTest {
 
     protected <T extends RealFieldElement<T>> RungeKuttaFieldStepInterpolator<T>
     createInterpolator(Field<T> field, boolean forward, T[][] yDotK,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/ClassicalRungeKuttaFieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/ClassicalRungeKuttaFieldIntegratorTest.java
index e1cef43..2fa96d5 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/ClassicalRungeKuttaFieldIntegratorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/ClassicalRungeKuttaFieldIntegratorTest.java
@@ -22,7 +22,7 @@
 import org.apache.commons.math3.RealFieldElement;
 import org.apache.commons.math3.util.Decimal64Field;
 
-public class ClassicalRungeKuttaFieldIntegratorTest extends AbstractRungeKuttaFieldIntegratorTest {
+public class ClassicalRungeKuttaFieldIntegratorTest extends RungeKuttaFieldIntegratorAbstractTest {
 
     protected <T extends RealFieldElement<T>> RungeKuttaFieldIntegrator<T>
     createIntegrator(Field<T> field, T step) {
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince54FieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince54FieldIntegratorTest.java
index cd3c5ad..5285b75 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince54FieldIntegratorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince54FieldIntegratorTest.java
@@ -22,7 +22,7 @@
 import org.apache.commons.math3.RealFieldElement;
 import org.apache.commons.math3.util.Decimal64Field;
 
-public class DormandPrince54FieldIntegratorTest extends AbstractEmbeddedRungeKuttaFieldIntegratorTest {
+public class DormandPrince54FieldIntegratorTest extends EmbeddedRungeKuttaFieldIntegratorAbstractTest {
 
     protected <T extends RealFieldElement<T>> EmbeddedRungeKuttaFieldIntegrator<T>
     createIntegrator(Field<T> field, final double minStep, final double maxStep,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince54FieldStepInterpolatorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince54FieldStepInterpolatorTest.java
index a01976e..792b21c 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince54FieldStepInterpolatorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince54FieldStepInterpolatorTest.java
@@ -25,7 +25,7 @@
 import org.apache.commons.math3.util.Decimal64Field;
 import org.junit.Test;
 
-public class DormandPrince54FieldStepInterpolatorTest extends AbstractRungeKuttaFieldStepInterpolatorTest {
+public class DormandPrince54FieldStepInterpolatorTest extends RungeKuttaFieldStepInterpolatorAbstractTest {
 
     protected <T extends RealFieldElement<T>> RungeKuttaFieldStepInterpolator<T>
     createInterpolator(Field<T> field, boolean forward, T[][] yDotK,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince853FieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince853FieldIntegratorTest.java
index 1edc8a4..80f2d96 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince853FieldIntegratorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince853FieldIntegratorTest.java
@@ -22,7 +22,7 @@
 import org.apache.commons.math3.RealFieldElement;
 import org.apache.commons.math3.util.Decimal64Field;
 
-public class DormandPrince853FieldIntegratorTest extends AbstractEmbeddedRungeKuttaFieldIntegratorTest {
+public class DormandPrince853FieldIntegratorTest extends EmbeddedRungeKuttaFieldIntegratorAbstractTest {
 
     protected <T extends RealFieldElement<T>> EmbeddedRungeKuttaFieldIntegrator<T>
     createIntegrator(Field<T> field, final double minStep, final double maxStep,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince853FieldStepInterpolatorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince853FieldStepInterpolatorTest.java
index 2fca2bd..d9e4ea1 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince853FieldStepInterpolatorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/DormandPrince853FieldStepInterpolatorTest.java
@@ -25,7 +25,7 @@
 import org.apache.commons.math3.util.Decimal64Field;
 import org.junit.Test;
 
-public class DormandPrince853FieldStepInterpolatorTest extends AbstractRungeKuttaFieldStepInterpolatorTest {
+public class DormandPrince853FieldStepInterpolatorTest extends RungeKuttaFieldStepInterpolatorAbstractTest {
 
     protected <T extends RealFieldElement<T>> RungeKuttaFieldStepInterpolator<T>
     createInterpolator(Field<T> field, boolean forward, T[][] yDotK,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractEmbeddedRungeKuttaFieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/EmbeddedRungeKuttaFieldIntegratorAbstractTest.java
similarity index 99%
rename from src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractEmbeddedRungeKuttaFieldIntegratorTest.java
rename to src/test/java/org/apache/commons/math3/ode/nonstiff/EmbeddedRungeKuttaFieldIntegratorAbstractTest.java
index 97458d0..cb5797a 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractEmbeddedRungeKuttaFieldIntegratorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/EmbeddedRungeKuttaFieldIntegratorAbstractTest.java
@@ -44,7 +44,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-public abstract class AbstractEmbeddedRungeKuttaFieldIntegratorTest {
+public abstract class EmbeddedRungeKuttaFieldIntegratorAbstractTest {
 
     protected abstract <T extends RealFieldElement<T>> EmbeddedRungeKuttaFieldIntegrator<T>
     createIntegrator(Field<T> field, final double minStep, final double maxStep,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/EulerFieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/EulerFieldIntegratorTest.java
index b3a8488..68b66f8 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/EulerFieldIntegratorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/EulerFieldIntegratorTest.java
@@ -22,7 +22,7 @@
 import org.apache.commons.math3.RealFieldElement;
 import org.apache.commons.math3.util.Decimal64Field;
 
-public class EulerFieldIntegratorTest extends AbstractRungeKuttaFieldIntegratorTest {
+public class EulerFieldIntegratorTest extends RungeKuttaFieldIntegratorAbstractTest {
 
     @Override
     protected <T extends RealFieldElement<T>> RungeKuttaFieldIntegrator<T>
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/EulerFieldStepInterpolatorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/EulerFieldStepInterpolatorTest.java
index 2725d91..bc93b4b 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/EulerFieldStepInterpolatorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/EulerFieldStepInterpolatorTest.java
@@ -25,7 +25,7 @@
 import org.apache.commons.math3.util.Decimal64Field;
 import org.junit.Test;
 
-public class EulerFieldStepInterpolatorTest extends AbstractRungeKuttaFieldStepInterpolatorTest {
+public class EulerFieldStepInterpolatorTest extends RungeKuttaFieldStepInterpolatorAbstractTest {
 
     protected <T extends RealFieldElement<T>> RungeKuttaFieldStepInterpolator<T>
     createInterpolator(Field<T> field, boolean forward, T[][] yDotK,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/GillFieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/GillFieldIntegratorTest.java
index 943703a..9f9935b 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/GillFieldIntegratorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/GillFieldIntegratorTest.java
@@ -22,7 +22,7 @@
 import org.apache.commons.math3.RealFieldElement;
 import org.apache.commons.math3.util.Decimal64Field;
 
-public class GillFieldIntegratorTest extends AbstractRungeKuttaFieldIntegratorTest {
+public class GillFieldIntegratorTest extends RungeKuttaFieldIntegratorAbstractTest {
 
     protected <T extends RealFieldElement<T>> RungeKuttaFieldIntegrator<T>
     createIntegrator(Field<T> field, T step) {
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/GillFieldStepInterpolatorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/GillFieldStepInterpolatorTest.java
index 446a3e4..78e9e6d 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/GillFieldStepInterpolatorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/GillFieldStepInterpolatorTest.java
@@ -25,7 +25,7 @@
 import org.apache.commons.math3.util.Decimal64Field;
 import org.junit.Test;
 
-public class GillFieldStepInterpolatorTest extends AbstractRungeKuttaFieldStepInterpolatorTest {
+public class GillFieldStepInterpolatorTest extends RungeKuttaFieldStepInterpolatorAbstractTest {
 
     protected <T extends RealFieldElement<T>> RungeKuttaFieldStepInterpolator<T>
     createInterpolator(Field<T> field, boolean forward, T[][] yDotK,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/HighamHall54FieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/HighamHall54FieldIntegratorTest.java
index 3069bd0..19dc348 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/HighamHall54FieldIntegratorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/HighamHall54FieldIntegratorTest.java
@@ -22,7 +22,7 @@
 import org.apache.commons.math3.RealFieldElement;
 import org.apache.commons.math3.util.Decimal64Field;
 
-public class HighamHall54FieldIntegratorTest extends AbstractEmbeddedRungeKuttaFieldIntegratorTest {
+public class HighamHall54FieldIntegratorTest extends EmbeddedRungeKuttaFieldIntegratorAbstractTest {
 
     protected <T extends RealFieldElement<T>> EmbeddedRungeKuttaFieldIntegrator<T>
     createIntegrator(Field<T> field, final double minStep, final double maxStep,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/HighamHall54FieldStepInterpolatorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/HighamHall54FieldStepInterpolatorTest.java
index 2487c26..df3ab48 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/HighamHall54FieldStepInterpolatorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/HighamHall54FieldStepInterpolatorTest.java
@@ -25,7 +25,7 @@
 import org.apache.commons.math3.util.Decimal64Field;
 import org.junit.Test;
 
-public class HighamHall54FieldStepInterpolatorTest extends AbstractRungeKuttaFieldStepInterpolatorTest {
+public class HighamHall54FieldStepInterpolatorTest extends RungeKuttaFieldStepInterpolatorAbstractTest {
 
     protected <T extends RealFieldElement<T>> RungeKuttaFieldStepInterpolator<T>
     createInterpolator(Field<T> field, boolean forward, T[][] yDotK,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/LutherFieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/LutherFieldIntegratorTest.java
index 2307280..f6599bb 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/LutherFieldIntegratorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/LutherFieldIntegratorTest.java
@@ -26,7 +26,7 @@
 import org.apache.commons.math3.exception.NumberIsTooSmallException;
 import org.apache.commons.math3.util.Decimal64Field;
 
-public class LutherFieldIntegratorTest extends AbstractRungeKuttaFieldIntegratorTest {
+public class LutherFieldIntegratorTest extends RungeKuttaFieldIntegratorAbstractTest {
 
     protected <T extends RealFieldElement<T>> RungeKuttaFieldIntegrator<T>
     createIntegrator(Field<T> field, T step) {
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/LutherFieldStepInterpolatorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/LutherFieldStepInterpolatorTest.java
index f7ad829..4d4c418 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/LutherFieldStepInterpolatorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/LutherFieldStepInterpolatorTest.java
@@ -25,7 +25,7 @@
 import org.apache.commons.math3.util.Decimal64Field;
 import org.junit.Test;
 
-public class LutherFieldStepInterpolatorTest extends AbstractRungeKuttaFieldStepInterpolatorTest {
+public class LutherFieldStepInterpolatorTest extends RungeKuttaFieldStepInterpolatorAbstractTest {
 
     protected <T extends RealFieldElement<T>> RungeKuttaFieldStepInterpolator<T>
     createInterpolator(Field<T> field, boolean forward, T[][] yDotK,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/MidpointFieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/MidpointFieldIntegratorTest.java
index 3a6b02c..e8c6805 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/MidpointFieldIntegratorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/MidpointFieldIntegratorTest.java
@@ -22,7 +22,7 @@
 import org.apache.commons.math3.RealFieldElement;
 import org.apache.commons.math3.util.Decimal64Field;
 
-public class MidpointFieldIntegratorTest extends AbstractRungeKuttaFieldIntegratorTest {
+public class MidpointFieldIntegratorTest extends RungeKuttaFieldIntegratorAbstractTest {
 
     protected <T extends RealFieldElement<T>> RungeKuttaFieldIntegrator<T>
     createIntegrator(Field<T> field, T step) {
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/MidpointFieldStepInterpolatorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/MidpointFieldStepInterpolatorTest.java
index 6640045..b3de00e 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/MidpointFieldStepInterpolatorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/MidpointFieldStepInterpolatorTest.java
@@ -25,7 +25,7 @@
 import org.apache.commons.math3.util.Decimal64Field;
 import org.junit.Test;
 
-public class MidpointFieldStepInterpolatorTest extends AbstractRungeKuttaFieldStepInterpolatorTest {
+public class MidpointFieldStepInterpolatorTest extends RungeKuttaFieldStepInterpolatorAbstractTest {
 
     protected <T extends RealFieldElement<T>> RungeKuttaFieldStepInterpolator<T>
     createInterpolator(Field<T> field, boolean forward, T[][] yDotK,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractRungeKuttaFieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/RungeKuttaFieldIntegratorAbstractTest.java
similarity index 99%
rename from src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractRungeKuttaFieldIntegratorTest.java
rename to src/test/java/org/apache/commons/math3/ode/nonstiff/RungeKuttaFieldIntegratorAbstractTest.java
index 35cc13d..518690a 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractRungeKuttaFieldIntegratorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/RungeKuttaFieldIntegratorAbstractTest.java
@@ -49,7 +49,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-public abstract class AbstractRungeKuttaFieldIntegratorTest {
+public abstract class RungeKuttaFieldIntegratorAbstractTest {
 
     protected abstract <T extends RealFieldElement<T>> RungeKuttaFieldIntegrator<T>
         createIntegrator(Field<T> field, T step);
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractRungeKuttaFieldStepInterpolatorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/RungeKuttaFieldStepInterpolatorAbstractTest.java
similarity index 99%
rename from src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractRungeKuttaFieldStepInterpolatorTest.java
rename to src/test/java/org/apache/commons/math3/ode/nonstiff/RungeKuttaFieldStepInterpolatorAbstractTest.java
index b5c7ff0..601e7b0 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/AbstractRungeKuttaFieldStepInterpolatorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/RungeKuttaFieldStepInterpolatorAbstractTest.java
@@ -33,7 +33,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-public abstract class AbstractRungeKuttaFieldStepInterpolatorTest {
+public abstract class RungeKuttaFieldStepInterpolatorAbstractTest {
 
     protected abstract <T extends RealFieldElement<T>> RungeKuttaFieldStepInterpolator<T>
         createInterpolator(Field<T> field, boolean forward, T[][] yDotK,
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/ThreeEighthesFieldIntegratorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/ThreeEighthesFieldIntegratorTest.java
index 700661d..971dac8 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/ThreeEighthesFieldIntegratorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/ThreeEighthesFieldIntegratorTest.java
@@ -22,7 +22,7 @@
 import org.apache.commons.math3.RealFieldElement;
 import org.apache.commons.math3.util.Decimal64Field;
 
-public class ThreeEighthesFieldIntegratorTest extends AbstractRungeKuttaFieldIntegratorTest {
+public class ThreeEighthesFieldIntegratorTest extends RungeKuttaFieldIntegratorAbstractTest {
 
     protected <T extends RealFieldElement<T>> RungeKuttaFieldIntegrator<T>
     createIntegrator(Field<T> field, T step) {
diff --git a/src/test/java/org/apache/commons/math3/ode/nonstiff/ThreeEighthesFieldStepInterpolatorTest.java b/src/test/java/org/apache/commons/math3/ode/nonstiff/ThreeEighthesFieldStepInterpolatorTest.java
index f1a2d28..f326a2b 100644
--- a/src/test/java/org/apache/commons/math3/ode/nonstiff/ThreeEighthesFieldStepInterpolatorTest.java
+++ b/src/test/java/org/apache/commons/math3/ode/nonstiff/ThreeEighthesFieldStepInterpolatorTest.java
@@ -25,7 +25,7 @@
 import org.apache.commons.math3.util.Decimal64Field;
 import org.junit.Test;
 
-public class ThreeEighthesFieldStepInterpolatorTest extends AbstractRungeKuttaFieldStepInterpolatorTest {
+public class ThreeEighthesFieldStepInterpolatorTest extends RungeKuttaFieldStepInterpolatorAbstractTest {
 
     protected <T extends RealFieldElement<T>> RungeKuttaFieldStepInterpolator<T>
     createInterpolator(Field<T> field, boolean forward, T[][] yDotK,
diff --git a/test-jar.xml b/test-jar.xml
index c6e12ec..e5a20a5 100644
--- a/test-jar.xml
+++ b/test-jar.xml
@@ -21,25 +21,23 @@
    Compiles and runs unit tests against distribution jar(s).  Use .antrc or the 
    command line to control the jdk used to execute this build file.  
    
-   Assumes that the distribution jar to be tested is in the base directory. 
-   Use the "jardir" property to specify the path to the directory containing
-   the jar. Any other jars in this directory will also be added to the
-   classpath.  
+   Assumes that the distribution jar to be tested is in the basedir/lib, along
+   with any dependent jars (junit, hamcrest). Use the "libdir" property to specify
+   the path to the directory containing these jars. 
    
    The default target, "test," executes clean as a dependency.
 -->
   
 <project default="test" name="commons-math" basedir=".">
-  <property name="defaulttargetdir" value="target"/>
-  <property name="libdir" value="target/lib"/>
+  <property name="libdir" value="lib"/>
   <property name="testclassesdir" value="target/test-classes"/>
   <property name="testreportdir" value="target/test-reports"/>
   <property name="defaulttargetdir" value="target"/>
-  <property name="jardir" value="${basedir}"/>
-   <path id="build.classpath">
+  <property name="test.resources" value="src/test/resources"/>
+  <property name="build.home" value="target"/>
+  <path id="build.classpath">
     <fileset dir="${libdir}">
-      <include name="**/*.jar">
-      </include>
+      <include name="*.jar" />
     </fileset>
   </path>
   <target name="clean" description="o Clean up the generated directories">
@@ -58,24 +56,17 @@
     Java library path: ${java.library.path}
     ===========================================================================
     </echo>
-    <mkdir dir="${libdir}" />
-    <condition property="noget">
-      <equals arg2="only" arg1="${build.sysclasspath}">
-      </equals>
-    </condition>
-    <!--Test if JUNIT is present in ANT classpath-->
-    <available property="Junit.present" classname="org.junit.Test">
-    </available>
   </target>
   <target name="test" description="o Run the test cases" if="test.failure" depends="internal-test">
     <fail message="There were test failures.">
     </fail>
   </target>
-  <target name="internal-test" if="Junit.present" depends="clean, junit-present,compile-tests">
+  <target name="internal-test" depends="clean,compile-tests">
     <mkdir dir="${testreportdir}"/>
-    <junit dir="./" failureproperty="test.failure" printSummary="yes" fork="true" haltonerror="true">
+    <junit dir="./" failureproperty="test.failure" printSummary="yes"
+           fork="true" haltonerror="true" showOutput="true">
       <sysproperty key="basedir" value="."/>
-      <formatter usefile="false" type="plain"/>
+      <formatter type="brief"/>
       <classpath>
         <path refid="build.classpath"/>
         <pathelement path="${testclassesdir}"/>
@@ -88,14 +79,7 @@
       </batchtest>
     </junit>
   </target>
-  <target name="junit-present" unless="Junit.present" depends="init">
-  <echo>
-    ================================= WARNING ================================
-    Junit isn't present in your ${ANT_HOME}/lib directory. Tests not executed.
-    ==========================================================================
-  </echo>
-  </target>
-  <target name="compile-tests" if="Junit.present" depends="junit-present">
+  <target name="compile-tests" >
     <mkdir dir="${testclassesdir}"/>
     <javac destdir="${testclassesdir}" deprecation="true" debug="true"
             optimize="false" excludes="**/package.html">
@@ -106,12 +90,10 @@
         <path refid="build.classpath"/>
       </classpath>
     </javac>
-    <copy todir="${testclassesdir}">
-      <fileset dir="src/test/resources">
-        <include name="**/*.xml"/>
-        <include name="**/*.txt"/>
+	<copy todir="${build.home}/test-classes">
+	  <fileset dir="${test.resources}">
       </fileset>
-    </copy>
+	</copy>
   </target>
 </project>