diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/CMAESOptimizer.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/CMAESOptimizer.java
index 13e7480..45190e8 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/CMAESOptimizer.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/CMAESOptimizer.java
@@ -34,6 +34,7 @@
 import org.apache.commons.math4.legacy.optim.OptimizationData;
 import org.apache.commons.math4.legacy.optim.PointValuePair;
 import org.apache.commons.math4.legacy.optim.nonlinear.scalar.GoalType;
+import org.apache.commons.math4.legacy.optim.nonlinear.scalar.PopulationSize;
 import org.apache.commons.math4.legacy.optim.nonlinear.scalar.MultivariateOptimizer;
 import org.apache.commons.rng.UniformRandomProvider;
 import org.apache.commons.statistics.distribution.ContinuousDistribution;
@@ -77,6 +78,14 @@
  *  <li><a href="http://en.wikipedia.org/wiki/CMA-ES">Wikipedia</a></li>
  * </ul>
  *
+ * <p>
+ * The {@link PopulationSize number of offsprings} is the primary strategy
+ * parameter. In the absence of better clues, a good default could be an integer
+ * close to {@code 4 + 3 ln(n)}, where {@code n} is the number of optimized
+ * parameters. Increasing the population size improves global search properties
+ * at the expense of speed (which in general decreases at most linearly with
+ * increasing population size).
+ *
  * @since 3.0
  */
 public class CMAESOptimizer
@@ -309,40 +318,6 @@
     }
 
     /**
-     * Population size.
-     * The number of offspring is the primary strategy parameter.
-     * In the absence of better clues, a good default could be an
-     * integer close to {@code 4 + 3 ln(n)}, where {@code n} is the
-     * number of optimized parameters.
-     * Increasing the population size improves global search properties
-     * at the expense of speed (which in general decreases at most
-     * linearly with increasing population size).
-     */
-    public static class PopulationSize implements OptimizationData {
-        /** Population size. */
-        private final int lambda;
-
-        /**
-         * @param size Population size.
-         * @throws NotStrictlyPositiveException if {@code size <= 0}.
-         */
-        public PopulationSize(int size)
-            throws NotStrictlyPositiveException {
-            if (size <= 0) {
-                throw new NotStrictlyPositiveException(size);
-            }
-            lambda = size;
-        }
-
-        /**
-         * @return the population size.
-         */
-        public int getPopulationSize() {
-            return lambda;
-        }
-    }
-
-    /**
      * {@inheritDoc}
      *
      * @param optData Optimization data. In addition to those documented in
diff --git a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/CMAESOptimizerTest.java b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/CMAESOptimizerTest.java
index 9724e27..1eab96f 100644
--- a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/CMAESOptimizerTest.java
+++ b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/CMAESOptimizerTest.java
@@ -29,6 +29,7 @@
 import org.apache.commons.math4.legacy.optim.PointValuePair;
 import org.apache.commons.math4.legacy.optim.SimpleBounds;
 import org.apache.commons.math4.legacy.optim.nonlinear.scalar.GoalType;
+import org.apache.commons.math4.legacy.optim.nonlinear.scalar.PopulationSize;
 import org.apache.commons.math4.legacy.optim.nonlinear.scalar.ObjectiveFunction;
 import org.apache.commons.math4.legacy.optim.nonlinear.scalar.TestFunction;
 import org.apache.commons.rng.simple.RandomSource;
@@ -172,7 +173,7 @@
                                                    new ObjectiveFunction(fitnessFunction),
                                                    SimpleBounds.unbounded(1),
                                                    GoalType.MINIMIZE,
-                                                   new CMAESOptimizer.PopulationSize(5),
+                                                   new PopulationSize(5),
                                                    new CMAESOptimizer.Sigma(sigma),
                                                    new InitialGuess(start)).getPoint();
         Assert.assertEquals(0, result[0], 1e-7);
@@ -391,7 +392,7 @@
         final double[] result = optimizer.optimize(new MaxEval(10000),
                                                    new ObjectiveFunction(fitnessFunction),
                                                    GoalType.MINIMIZE,
-                                                   new CMAESOptimizer.PopulationSize(5),
+                                                   new PopulationSize(5),
                                                    new CMAESOptimizer.Sigma(sigma),
                                                    new InitialGuess(start),
                                                    new SimpleBounds(lower, upper)).getPoint();
@@ -423,7 +424,7 @@
                                                    new ObjectiveFunction(fitnessFunction),
                                                    GoalType.MINIMIZE,
                                                    SimpleBounds.unbounded(1),
-                                                   new CMAESOptimizer.PopulationSize(5),
+                                                   new PopulationSize(5),
                                                    new CMAESOptimizer.Sigma(new double[] { 1e-1 }),
                                                    new InitialGuess(start));
         final double resNoBound = result.getPoint()[0];
@@ -435,7 +436,7 @@
         result = optimizer.optimize(new MaxEval(100000),
                                     new ObjectiveFunction(fitnessFunction),
                                     GoalType.MINIMIZE,
-                                    new CMAESOptimizer.PopulationSize(5),
+                                    new PopulationSize(5),
                                     new CMAESOptimizer.Sigma(sigma),
                                     new InitialGuess(start),
                                     new SimpleBounds(lower, upper));
@@ -447,7 +448,7 @@
         result = optimizer.optimize(new MaxEval(100000),
                                     new ObjectiveFunction(fitnessFunction),
                                     GoalType.MINIMIZE,
-                                    new CMAESOptimizer.PopulationSize(5),
+                                    new PopulationSize(5),
                                     new CMAESOptimizer.Sigma(sigma),
                                     new InitialGuess(start),
                                     new SimpleBounds(lower, upper));
@@ -502,7 +503,7 @@
                            new InitialGuess(startPoint),
                            SimpleBounds.unbounded(dim),
                            new CMAESOptimizer.Sigma(inSigma),
-                           new CMAESOptimizer.PopulationSize(lambda)) :
+                           new PopulationSize(lambda)) :
             optim.optimize(new MaxEval(maxEvaluations),
                            new ObjectiveFunction(func),
                            goal,
@@ -510,7 +511,7 @@
                                             boundaries[1]),
                            new InitialGuess(startPoint),
                            new CMAESOptimizer.Sigma(inSigma),
-                           new CMAESOptimizer.PopulationSize(lambda));
+                           new PopulationSize(lambda));
 
         Assert.assertEquals(expected.getValue(), result.getValue(), fTol);
         for (int i = 0; i < dim; i++) {
