diff --git a/VectoCommon/VectoCommon/Utils/EnumberableExtensionMethods.cs b/VectoCommon/VectoCommon/Utils/EnumerableExtensionMethods.cs
similarity index 79%
rename from VectoCommon/VectoCommon/Utils/EnumberableExtensionMethods.cs
rename to VectoCommon/VectoCommon/Utils/EnumerableExtensionMethods.cs
index a3b02515ce1b25262d0855043e6b2ac2cea87f49..c03a7c3bea18ce5a927287cac01d87d2a7c4f657 100644
--- a/VectoCommon/VectoCommon/Utils/EnumberableExtensionMethods.cs
+++ b/VectoCommon/VectoCommon/Utils/EnumerableExtensionMethods.cs
@@ -36,7 +36,7 @@ using TUGraz.VectoCommon.Models;
 
 namespace TUGraz.VectoCommon.Utils
 {
-	public static class EnumberableExtensionMethods
+	public static class EnumerableExtensionMethods
 	{
 		public static IEnumerable<double> ToDouble(this IEnumerable<string> self)
 		{
@@ -226,9 +226,74 @@ namespace TUGraz.VectoCommon.Utils
 			}
 		}
 
+		/// <summary>
+		/// Repeats the element and returns an Enumerable.
+		/// </summary>
+		/// <typeparam name="T"></typeparam>
+		/// <param name="element"></param>
+		/// <param name="count"></param>
+		/// <returns></returns>
 		public static IEnumerable<T> Repeat<T>(this T element, int count)
 		{
 			return Enumerable.Repeat(element, count);
 		}
+
+		/// <summary>
+		/// Distinct only by a defined key function (uses GetHashCode of TKey).
+		/// </summary>
+		/// <typeparam name="T"></typeparam>
+		/// <typeparam name="TKey"></typeparam>
+		/// <param name="items"></param>
+		/// <param name="keySelector"></param>
+		/// <returns></returns>
+		public static IEnumerable<T> DistinctBy<T, TKey>(this IEnumerable<T> items, Func<T, TKey> keySelector)
+		{
+			return
+				items.Distinct(new LambdaComparer<T>(
+					equals: (x, y) => x.GetHashCode() == y.GetHashCode(),
+					getHashCode: k => keySelector(k).GetHashCode()));
+		}
+
+		/// <summary>
+		/// Distinct by a defined equals function (uses this function for checking equality. No Hash is used.)
+		/// </summary>
+		public static IEnumerable<T> DistinctBy<T>(this IEnumerable<T> items, Func<T, T, bool> equals)
+		{
+			return items.Distinct(new LambdaComparer<T>(equals));
+		}
+
+		/// <summary>
+		/// Distinct by hash function and equality function (like IEqualityComparer, but with lambdas).
+		/// </summary>
+		public static IEnumerable<T> DistinctBy<T>(this IEnumerable<T> items, Func<T, T, bool> equals,
+			Func<T, int> getHashCode)
+		{
+			return items.Distinct(new LambdaComparer<T>(equals, getHashCode));
+		}
+
+		/// <summary>
+		/// Comparer which uses lambda expressions for equality and hashcode.
+		/// </summary>
+		private class LambdaComparer<T> : IEqualityComparer<T>
+		{
+			private readonly Func<T, T, bool> _equals;
+			private readonly Func<T, int> _getHashCode;
+
+			public LambdaComparer(Func<T, T, bool> equals, Func<T, int> getHashCode = null)
+			{
+				_equals = equals;
+				_getHashCode = getHashCode ?? (o => 0);
+			}
+
+			public bool Equals(T x, T y)
+			{
+				return _equals(x, y);
+			}
+
+			public int GetHashCode(T obj)
+			{
+				return _getHashCode(obj);
+			}
+		}
 	}
 }
\ No newline at end of file