Index: /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/DirectScheduleGTCrossoverTest.cs
===================================================================
--- /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/DirectScheduleGTCrossoverTest.cs	(revision 10493)
+++ /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/DirectScheduleGTCrossoverTest.cs	(revision 10494)
@@ -20,4 +20,5 @@
 #endregion
 
+using System.Linq;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition;
@@ -48,6 +49,7 @@
       actual = DirectScheduleGTCrossover.Apply(random, parent1, parent2, jobData, mutProp);
       Schedule expected = DirectScheduleRandomCreator.Apply(3, 3, new PWREncoding(3, 3, new TestRandom(new int[] { 0, 2, 1, 1, 0, 2, 1, 2, 0 }, null)), TestUtils.CreateJobData());
-      Assert.IsTrue(actual.Equals(expected));
+      Assert.IsTrue(TestUtils.ScheduleEquals(actual, expected));
     }
+
   }
 }
Index: /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMJOXCrossoverTest.cs
===================================================================
--- /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMJOXCrossoverTest.cs	(revision 10493)
+++ /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMJOXCrossoverTest.cs	(revision 10494)
@@ -53,5 +53,5 @@
       actual = JSMJOXCrossover.Apply(random, p1, p2);
 
-      Assert.IsTrue(expected.Equals(actual));
+      Assert.IsTrue(TestUtils.JSMEncodingEquals(expected, actual));
     }
   }
Index: /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMSXXCrossoverTest.cs
===================================================================
--- /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMSXXCrossoverTest.cs	(revision 10493)
+++ /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMSXXCrossoverTest.cs	(revision 10494)
@@ -53,5 +53,5 @@
       actual = JSMSXXCrossover.Apply(random, p1, p2);
 
-      Assert.IsTrue(expected.Equals(actual));
+      Assert.IsTrue(TestUtils.JSMEncodingEquals(expected, actual));
     }
   }
Index: /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMShiftChangeManipulatorTest.cs
===================================================================
--- /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMShiftChangeManipulatorTest.cs	(revision 10493)
+++ /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMShiftChangeManipulatorTest.cs	(revision 10494)
@@ -51,5 +51,5 @@
       expected.JobSequenceMatrix = jsm;
 
-      Assert.IsTrue(individual.Equals(expected));
+      Assert.IsTrue(TestUtils.JSMEncodingEquals(expected, individual));
     }
   }
Index: /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/PWRGOXCrossoverTest.cs
===================================================================
--- /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/PWRGOXCrossoverTest.cs	(revision 10493)
+++ /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/PWRGOXCrossoverTest.cs	(revision 10494)
@@ -47,5 +47,5 @@
       PWREncoding actual;
       actual = PWRGOXCrossover.Apply(random, parent1, parent2);
-      Assert.IsTrue(actual.Equals(expected));
+      Assert.IsTrue(TestUtils.PRWEncodingEquals(expected, actual));
     }
   }
Index: /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/PWRPPXCrossoverTest.cs
===================================================================
--- /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/PWRPPXCrossoverTest.cs	(revision 10493)
+++ /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/PWRPPXCrossoverTest.cs	(revision 10494)
@@ -47,5 +47,5 @@
       PWREncoding actual;
       actual = PWRPPXCrossover.Apply(random, parent1, parent2);
-      Assert.IsTrue(actual.Equals(expected));
+      Assert.IsTrue(TestUtils.PRWEncodingEquals(expected, actual));
     }
   }
Index: /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/TestUtils.cs
===================================================================
--- /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/TestUtils.cs	(revision 10493)
+++ /trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/TestUtils.cs	(revision 10494)
@@ -20,4 +20,5 @@
 #endregion
 
+using System.Linq;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.IntegerVectorEncoding;
@@ -97,4 +98,54 @@
       return result;
     }
+    public static bool ScheduleEquals(Schedule actual, Schedule expected) {
+      return actual.Resources.Count == expected.Resources.Count &&
+             actual.Resources.Zip(expected.Resources, (a, e) => ResourceEquals(a, e)).All(_ => _);
+    }
+
+    public static bool ResourceEquals(Resource actual, Resource expected) {
+      return actual.Index == expected.Index &&
+             actual.TotalDuration == expected.TotalDuration &&
+             actual.Tasks.Count == expected.Tasks.Count &&
+             actual.Tasks.Zip(expected.Tasks, (a, e) => TaskEquals(a, e)).All(_ => _);
+    }
+
+    public static bool TaskEquals(ScheduledTask actual, ScheduledTask expected) {
+      return
+        actual.StartTime == expected.StartTime &&
+        actual.EndTime == expected.EndTime &&
+        actual.Duration == expected.Duration &&
+        actual.ResourceNr == expected.ResourceNr &&
+        actual.JobNr == expected.JobNr &&
+        actual.TaskNr == expected.TaskNr;
+    }
+
+    public static bool JSMEncodingEquals(JSMEncoding expected, JSMEncoding actual) {
+      if (expected.JobSequenceMatrix.Count != actual.JobSequenceMatrix.Count)
+        return false;
+      for (int i = 0; i < expected.JobSequenceMatrix.Count; i++) {
+        if (!PermutationEquals(expected.JobSequenceMatrix[i], actual.JobSequenceMatrix[i]))
+          return false;
+      }
+      return true;
+    }
+    private static bool PermutationEquals(Permutation p1, Permutation p2) {
+      if (p1.Length != p2.Length)
+        return false;
+      for (int i = 0; i < p1.Length; i++) {
+        if (p1[i] != p2[i])
+          return false;
+      }
+      return true;
+    }
+
+    public static bool PRWEncodingEquals(PWREncoding expected, PWREncoding actual) {
+      if (expected.PermutationWithRepetition.Length != actual.PermutationWithRepetition.Length)
+        return false;
+      for (int i = 0; i < expected.PermutationWithRepetition.Length; i++) {
+        if (expected.PermutationWithRepetition[i] != actual.PermutationWithRepetition[i])
+          return false;
+      }
+      return true;
+    }
   }
 }
