Index: /stable/HeuristicLab.Optimization.Operators/3.3/ExponentialDiscreteDoubleValueModifier.cs
===================================================================
--- /stable/HeuristicLab.Optimization.Operators/3.3/ExponentialDiscreteDoubleValueModifier.cs	(revision 17731)
+++ /stable/HeuristicLab.Optimization.Operators/3.3/ExponentialDiscreteDoubleValueModifier.cs	(revision 17732)
@@ -43,4 +43,9 @@
     }
 
+    
+    protected override double Modify(double value, double startValue, double endValue, int index, int startIndex, int endIndex) {
+      return Apply(value, startValue, endValue, index, startIndex, endIndex);
+    }
+
     /// <summary>
     /// Calculates a new value based on exponential decay or growth.
@@ -54,5 +59,5 @@
     /// <param name="endIndex">The end index.</param>
     /// <returns>The new value.</returns>
-    protected override double Modify(double value, double startValue, double endValue, int index, int startIndex, int endIndex) {
+    public static double Apply(double value, double startValue, double endValue, int index, int startIndex, int endIndex) {
       if (endValue <= 0 || startValue <= 0) throw new ArgumentException("startValue and endValue must be greater than 0.");
       double b = Math.Pow(endValue / startValue, 1.0 / (endIndex - startIndex));
Index: /stable/HeuristicLab.Optimization.Operators/3.3/GeneralizedExponentialDiscreteDoubleValueModifier.cs
===================================================================
--- /stable/HeuristicLab.Optimization.Operators/3.3/GeneralizedExponentialDiscreteDoubleValueModifier.cs	(revision 17731)
+++ /stable/HeuristicLab.Optimization.Operators/3.3/GeneralizedExponentialDiscreteDoubleValueModifier.cs	(revision 17732)
@@ -58,4 +58,8 @@
     }
 
+    protected override double Modify(double value, double startValue, double endValue, int index, int startIndex, int endIndex) {
+      return Apply(value, startValue, endValue, index, startIndex, endIndex, Base);
+    }
+
     /// <summary>
     /// Calculates a new value based on exponential decay or growth.
@@ -69,10 +73,10 @@
     /// <param name="endIndex">The final index.</param>
     /// <returns>The new value.</returns>
-    protected override double Modify(double value, double startValue, double endValue, int index, int startIndex, int endIndex) {
-      if (Base <= 0)
+    public static double Apply(double value, double startValue, double endValue, int index, int startIndex, int endIndex, double @base) {
+      if (@base <= 0)
         throw new ArgumentException("Base must be > 0.");
-      if (Base == 1.0)
-        return startValue + (endValue - startValue)*(index - startIndex)/(endIndex - startIndex);
-      return startValue + (endValue - startValue)*(Math.Pow(Base, 1.0*(index-startIndex)/(endIndex-startIndex)) - 1)/(Base - 1);
+      if (@base == 1.0)
+        return startValue + (endValue - startValue) * (index - startIndex) / (endIndex - startIndex);
+      return startValue + (endValue - startValue) * (Math.Pow(@base, 1.0 * (index - startIndex) / (endIndex - startIndex)) - 1) / (@base - 1);
     }
   }
Index: /stable/HeuristicLab.Optimization.Operators/3.3/LinearDiscreteDoubleValueModifier.cs
===================================================================
--- /stable/HeuristicLab.Optimization.Operators/3.3/LinearDiscreteDoubleValueModifier.cs	(revision 17731)
+++ /stable/HeuristicLab.Optimization.Operators/3.3/LinearDiscreteDoubleValueModifier.cs	(revision 17732)
@@ -41,4 +41,18 @@
 
     protected override double Modify(double value, double startValue, double endValue, int index, int startIndex, int endIndex) {
+      return Apply(value, startValue, endValue, index, startIndex, endIndex);
+    }
+
+    /// <summary>
+    /// Calculates a new value based on linear decay or growth.
+    /// </summary>
+    /// <param name="value">The previous value.</param>
+    /// <param name="startValue">The initial value.</param>
+    /// <param name="endValue">The final value.</param>
+    /// <param name="index">The current index.</param>
+    /// <param name="startIndex">The initial index.</param>
+    /// <param name="endIndex">The final index.</param>
+    /// <returns>The new value.</returns>
+    public static double Apply(double value, double startValue, double endValue, int index, int startIndex, int endIndex) {
       double k = (endValue - startValue) / (endIndex - startIndex);
       double x = index - startIndex;
Index: /stable/HeuristicLab.Optimization.Operators/3.3/QuadraticDiscreteDoubleValueModifier.cs
===================================================================
--- /stable/HeuristicLab.Optimization.Operators/3.3/QuadraticDiscreteDoubleValueModifier.cs	(revision 17731)
+++ /stable/HeuristicLab.Optimization.Operators/3.3/QuadraticDiscreteDoubleValueModifier.cs	(revision 17732)
@@ -41,4 +41,18 @@
 
     protected override double Modify(double value, double startValue, double endValue, int index, int startIndex, int endIndex) {
+      return Apply(value, startValue, endValue, index, startIndex, endIndex);
+    }
+
+    /// <summary>
+    /// Calculates a new value based on quadratic decay or growth.
+    /// </summary>
+    /// <param name="value">The previous value.</param>
+    /// <param name="startValue">The initial value.</param>
+    /// <param name="endValue">The final value.</param>
+    /// <param name="index">The current index.</param>
+    /// <param name="startIndex">The initial index.</param>
+    /// <param name="endIndex">The final index.</param>
+    /// <returns>The new value.</returns>
+    public static double Apply(double value, double startValue, double endValue, int index, int startIndex, int endIndex) {
       double a = (endValue - startValue) / ((endIndex - startIndex) * (endIndex - startIndex));
       return a * (index - startIndex) * (index - startIndex) + startValue;
Index: /stable/HeuristicLab.Optimization.Operators/3.3/SquareRootDiscreteDoubleValueModifier.cs
===================================================================
--- /stable/HeuristicLab.Optimization.Operators/3.3/SquareRootDiscreteDoubleValueModifier.cs	(revision 17731)
+++ /stable/HeuristicLab.Optimization.Operators/3.3/SquareRootDiscreteDoubleValueModifier.cs	(revision 17732)
@@ -42,4 +42,18 @@
 
     protected override double Modify(double value, double startValue, double endValue, int index, int startIndex, int endIndex) {
+      return Apply(value, startValue, endValue, index, startIndex, endIndex);
+    }
+
+    /// <summary>
+    /// Calculates a new value based on sqrt decay or growth.
+    /// </summary>
+    /// <param name="value">The previous value.</param>
+    /// <param name="startValue">The initial value.</param>
+    /// <param name="endValue">The final value.</param>
+    /// <param name="index">The current index.</param>
+    /// <param name="startIndex">The initial index.</param>
+    /// <param name="endIndex">The final index.</param>
+    /// <returns>The new value.</returns>
+    public static double Apply(double value, double startValue, double endValue, int index, int startIndex, int endIndex) {
       double a = (endValue - startValue) / Math.Sqrt(endIndex - startIndex);
       return a * Math.Sqrt(index - startIndex) + startValue;
