Index: branches/GP-MoveOperators/HeuristicLab.Common/3.3/EnumerableExtensions.cs
===================================================================
--- branches/GP-MoveOperators/HeuristicLab.Common/3.3/EnumerableExtensions.cs	(revision 8085)
+++ branches/GP-MoveOperators/HeuristicLab.Common/3.3/EnumerableExtensions.cs	(revision 8085)
@@ -0,0 +1,90 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace HeuristicLab.Common {
+  public static class EnumerableExtensions {
+    /// <summary>
+    /// Selects all elements in the sequence that are maximal with respect to the given value.
+    /// </summary>
+    /// <remarks>
+    /// Runtime complexity of the operation is O(N).
+    /// </remarks>
+    /// <typeparam name="T">The type of the elements.</typeparam>
+    /// <param name="source">The enumeration in which the items with a maximal value should be found.</param>
+    /// <param name="valueSelector">The function that selects the value to compare.</param>
+    /// <returns>All elements in the enumeration where the selected value is the maximum.</returns>
+    public static IEnumerable<T> MaxItems<T>(this IEnumerable<T> source, Func<T, IComparable> valueSelector) {
+      IEnumerator<T> enumerator = source.GetEnumerator();
+      if (!enumerator.MoveNext()) return Enumerable.Empty<T>();
+      IComparable max = valueSelector(enumerator.Current);
+      var result = new List<T>();
+      result.Add(enumerator.Current);
+
+      while (enumerator.MoveNext()) {
+        T item = enumerator.Current;
+        IComparable comparison = valueSelector(item);
+        if (comparison.CompareTo(max) > 0) {
+          result.Clear();
+          result.Add(item);
+          max = comparison;
+        } else if (comparison.CompareTo(max) == 0) {
+          result.Add(item);
+        }
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Selects all elements in the sequence that are minimal with respect to the given value.
+    /// </summary>
+    /// <remarks>
+    /// Runtime complexity of the operation is O(N).
+    /// </remarks>
+    /// <typeparam name="T">The type of the elements.</typeparam>
+    /// <param name="source">The enumeration in which items with a minimal value should be found.</param>
+    /// <param name="valueSelector">The function that selects the value.</param>
+    /// <returns>All elements in the enumeration where the selected value is the minimum.</returns>
+    public static IEnumerable<T> MinItems<T>(this IEnumerable<T> source, Func<T, IComparable> valueSelector) {
+      IEnumerator<T> enumerator = source.GetEnumerator();
+      if (!enumerator.MoveNext()) return Enumerable.Empty<T>();
+      IComparable min = valueSelector(enumerator.Current);
+      var result = new List<T>();
+      result.Add(enumerator.Current);
+
+      while (enumerator.MoveNext()) {
+        T item = enumerator.Current;
+        IComparable comparison = valueSelector(item);
+        if (comparison.CompareTo(min) < 0) {
+          result.Clear();
+          result.Add(item);
+          min = comparison;
+        } else if (comparison.CompareTo(min) == 0) {
+          result.Add(item);
+        }
+      }
+      return result;
+    }
+  }
+}
Index: branches/GP-MoveOperators/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj
===================================================================
--- branches/GP-MoveOperators/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj	(revision 7801)
+++ branches/GP-MoveOperators/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj	(revision 8085)
@@ -124,4 +124,6 @@
     <Compile Include="Content\IStorableContent.cs" />
     <Compile Include="Constants.cs" />
+    <Compile Include="EnumerableExtensions.cs" />
+    <Compile Include="MatrixExtensions.cs" />
     <Compile Include="NaturalStringComparer.cs" />
     <Compile Include="ObjectExtensions.cs" />
Index: branches/GP-MoveOperators/HeuristicLab.Common/3.3/MatrixExtensions.cs
===================================================================
--- branches/GP-MoveOperators/HeuristicLab.Common/3.3/MatrixExtensions.cs	(revision 8085)
+++ branches/GP-MoveOperators/HeuristicLab.Common/3.3/MatrixExtensions.cs	(revision 8085)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Common {
+  public static class MatrixExtensions {
+    /// <summary>
+    /// Returns a transposed matrix of the given <paramref name="matrix"/>.
+    /// </summary>
+    /// <typeparam name="T">The type of the matrix</typeparam>
+    /// <param name="matrix">The matrix that should be transposed.</param>
+    /// <returns>The transposed matrix.</returns>
+    public static T[,] Transpose<T>(this T[,] matrix) {
+      var result = new T[matrix.GetLength(1), matrix.GetLength(0)];
+      for (int i = 0; i < matrix.GetLength(0); i++)
+        for (int j = 0; j < matrix.GetLength(1); j++)
+          result[j, i] = matrix[i, j];
+      return result;
+    }
+  }
+}
Index: branches/GP-MoveOperators/HeuristicLab.Common/3.3/ObjectExtensions.cs
===================================================================
--- branches/GP-MoveOperators/HeuristicLab.Common/3.3/ObjectExtensions.cs	(revision 7801)
+++ branches/GP-MoveOperators/HeuristicLab.Common/3.3/ObjectExtensions.cs	(revision 8085)
@@ -31,4 +31,8 @@
 namespace HeuristicLab.Common {
   public static class ObjectExtensions {
+    public static IEnumerable<T> ToEnumerable<T>(this T item) {
+      return new[] { item };
+    }
+
     public static IEnumerable<object> GetObjectGraphObjects(this object obj, HashSet<string> excludedMembers = null, bool excludeStaticMembers = false) {
       if (obj == null) return Enumerable.Empty<object>();
