Index: /branches/2825-NSGA3/HeuristicLab.Algorithms.NSGA3/3.3/Utility.cs
===================================================================
--- /branches/2825-NSGA3/HeuristicLab.Algorithms.NSGA3/3.3/Utility.cs	(revision 17657)
+++ /branches/2825-NSGA3/HeuristicLab.Algorithms.NSGA3/3.3/Utility.cs	(revision 17658)
@@ -94,14 +94,4 @@
         internal static TOut Min<TIn, TOut>(Func<TIn, TOut> func, IEnumerable<TIn> inputs) where TOut : IComparable
         {
-            //var it = inputs.GetEnumerator();
-            //it.MoveNext();
-            //var minValue = func(it.Current);
-            //while (it.MoveNext())
-            //{
-            //    var currentValue = func(it.Current);
-            //    if (minValue.CompareTo(currentValue) > 0) minValue = currentValue;
-            //}
-
-            //return minValue;
             return MinArgMin(func, inputs).Item2;
         }
@@ -112,8 +102,24 @@
         }
 
+        /// <summary>
+        /// Finds the value amongst <paramref name="inputs" /> such that the output value returned
+        /// by <paramref name="func" /> is minimal.
+        /// </summary>
+        /// <typeparam name="TIn">The input type for the function.</typeparam>
+        /// <typeparam name="TOut">The comparable output type of the function.</typeparam>
+        /// <param name="func">The function for which to find the minimal value.</param>
+        /// <param name="inputs">
+        /// The function arguments for which to find the one with the minimum output value when
+        /// given to <paramref name="func" />.
+        /// </param>
+        /// <returns></returns>
         internal static Tuple<TIn, TOut> MinArgMin<TIn, TOut>(Func<TIn, TOut> func, IEnumerable<TIn> inputs) where TOut : IComparable
         {
+            if (inputs == null) throw new ArgumentNullException(nameof(inputs));
             var it = inputs.GetEnumerator();
-            it.MoveNext();
+            var hasItems = it.MoveNext();
+            if (!hasItems) throw new InvalidOperationException("No items given to find the minimum of");
+
+            // find minimum argument and minimum value
             var minArg = it.Current;
             var minValue = func(it.Current);
@@ -134,14 +140,4 @@
         internal static TOut Max<TIn, TOut>(Func<TIn, TOut> func, IEnumerable<TIn> inputs) where TOut : IComparable
         {
-            //var it = inputs.GetEnumerator();
-            //it.MoveNext();
-            //var maxValue = func(it.Current);
-            //while (it.MoveNext())
-            //{
-            //    var currentValue = func(it.Current);
-            //    if (maxValue.CompareTo(currentValue) < 0) maxValue = currentValue;
-            //}
-
-            //return maxValue;
             return MaxArgMax(func, inputs).Item2;
         }
@@ -152,8 +148,24 @@
         }
 
+        /// <summary>
+        /// Finds the value amongst <paramref name="inputs" /> such that the output value returned
+        /// by <paramref name="func" /> is as big as possible.
+        /// </summary>
+        /// <typeparam name="TIn">The input type for the function.</typeparam>
+        /// <typeparam name="TOut">The comparable output type of the function.</typeparam>
+        /// <param name="func">The function for which to find the biggest value.</param>
+        /// <param name="inputs">
+        /// The function arguments for which to find the one with the biggest output value when
+        /// given to <paramref name="func" />.
+        /// </param>
+        /// <returns></returns>
         internal static Tuple<TIn, TOut> MaxArgMax<TIn, TOut>(Func<TIn, TOut> func, IEnumerable<TIn> inputs) where TOut : IComparable
         {
+            if (inputs == null) throw new ArgumentNullException(nameof(inputs));
             var it = inputs.GetEnumerator();
-            it.MoveNext();
+            var hasItems = it.MoveNext();
+            if (!hasItems) throw new InvalidOperationException("No items given to find the maximum of");
+
+            // find maximum argument and maximum value
             var maxArg = it.Current;
             var maxValue = func(it.Current);
