Index: /branches/TerminationCriteria/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithm.cs
===================================================================
--- /branches/TerminationCriteria/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithm.cs	(revision 12309)
+++ /branches/TerminationCriteria/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithm.cs	(revision 12310)
@@ -326,9 +326,4 @@
       ParameterizeComparisonFactorModifiers();
 
-      var maximumGenerationsTerminationCriteria = new MaximumIterationsTerminationCriterion();
-      maximumGenerationsTerminationCriteria.IterationsParameter.ActualName = "Generations";
-      maximumGenerationsTerminationCriteria.MaximumIterationsParameter.ActualName = "MaximumGenerations";
-      TerminationCriteriaParameter.Value.Operators.Add(maximumGenerationsTerminationCriteria);
-
       qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
       selectionPressureAnalyzer = new ValueAnalyzer();
@@ -336,4 +331,5 @@
       ParameterizeAnalyzers();
       UpdateAnalyzers();
+      AddTerminationCriteria();
 
       Initialize();
@@ -517,4 +513,12 @@
       Analyzer.Operators.Add(successfulOffspringAnalyzer, successfulOffspringAnalyzer.EnabledByDefault);
     }
+    private void AddTerminationCriteria() {
+      TerminationCriteriaParameter.Value.Operators.Add(
+        new ComparisonTerminationCriterion<IntValue>("Generations", "MaximumGenerations", ComparisonType.GreaterOrEqual) { Name = "Maximum Generations" });
+      TerminationCriteriaParameter.Value.Operators.Add(
+        new ComparisonTerminationCriterion<IntValue>("EvaluatedSolutions", "EvaluatedSolutionsGenerations", ComparisonType.GreaterOrEqual) { Name = "Maximum Evaluations" });
+      TerminationCriteriaParameter.Value.Operators.Add(
+        new ComparisonTerminationCriterion<DoubleValue>("SelectionPressure", "MaximumSelectionPressure", ComparisonType.GreaterOrEqual) { Name = "Maximum Selection Pressure" });
+    }
     private OffspringSelectionGeneticAlgorithmMainLoop FindMainLoop(IOperator start) {
       IOperator mainLoop = start;
Index: /branches/TerminationCriteria/HeuristicLab.Termination/3.3/ComparisonTerminationCriterion.cs
===================================================================
--- /branches/TerminationCriteria/HeuristicLab.Termination/3.3/ComparisonTerminationCriterion.cs	(revision 12310)
+++ /branches/TerminationCriteria/HeuristicLab.Termination/3.3/ComparisonTerminationCriterion.cs	(revision 12310)
@@ -0,0 +1,98 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Termination {
+  [Item("ComparisonTerminationCriterion", "")]
+  [StorableClass]
+  public sealed class ComparisonTerminationCriterion<T> : TerminationCriterion where T : class, IItem, IComparable {
+    public ILookupParameter<T> LeftSideParameter {
+      get { return (ILookupParameter<T>)Parameters["LeftSide"]; }
+    }
+    public IValueLookupParameter<T> RightSideParameter {
+      get { return (IValueLookupParameter<T>)Parameters["RightSide"]; }
+    }
+    private ValueParameter<Comparison> ComparisonParameter {
+      get { return (ValueParameter<Comparison>)Parameters["Comparison"]; }
+    }
+
+    public Comparison Comparison {
+      get { return ComparisonParameter.Value; }
+      set { ComparisonParameter.Value = value; }
+    }
+
+    [StorableConstructor]
+    private ComparisonTerminationCriterion(bool deserializing) : base(deserializing) { }
+    private ComparisonTerminationCriterion(ComparisonTerminationCriterion<T> original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ComparisonTerminationCriterion<T>(this, cloner);
+    }
+    public ComparisonTerminationCriterion()
+      : base() {
+      Parameters.Add(new LookupParameter<T>("LeftSide", "The left side of the comparison."));
+      Parameters.Add(new ValueLookupParameter<T>("RightSide", "The right side of the comparison."));
+      Parameters.Add(new ValueParameter<Comparison>("Comparison", "The type of comparison.", new Comparison(ComparisonType.Equal)) { Hidden = true });
+    }
+    public ComparisonTerminationCriterion(string leftSideActualName, string rightSideActualName, ComparisonType comparison = ComparisonType.GreaterOrEqual)
+      : this() {
+      LeftSideParameter.ActualName = leftSideActualName;
+      RightSideParameter.ActualName = rightSideActualName;
+      Comparison.Value = comparison;
+    }
+    public ComparisonTerminationCriterion(string leftSideActualName, T rightSideValue, ComparisonType comparison = ComparisonType.GreaterOrEqual)
+      : this() {
+      LeftSideParameter.ActualName = leftSideActualName;
+      RightSideParameter.Value = rightSideValue;
+      Comparison.Value = comparison;
+    }
+
+    protected override bool CheckTermination() {
+      IComparable lhs = LeftSideParameter.ActualValue;
+      IComparable rhs = RightSideParameter.ActualValue;
+
+      int i = lhs.CompareTo(rhs);
+      switch (Comparison.Value) {
+        case ComparisonType.Less:
+          return i < 0;
+        case ComparisonType.LessOrEqual:
+          return i <= 0;
+        case ComparisonType.Equal:
+          return i == 0;
+        case ComparisonType.GreaterOrEqual:
+          return i >= 0;
+        case ComparisonType.Greater:
+          return i > 0;
+        case ComparisonType.NotEqual:
+          return i != 0;
+        default:
+          throw new InvalidOperationException(Name + ": " + Comparison.Value + " is not supported.");
+      }
+    }
+  }
+}
Index: /branches/TerminationCriteria/HeuristicLab.Termination/3.3/HeuristicLab.Termination-3.3.csproj
===================================================================
--- /branches/TerminationCriteria/HeuristicLab.Termination/3.3/HeuristicLab.Termination-3.3.csproj	(revision 12309)
+++ /branches/TerminationCriteria/HeuristicLab.Termination/3.3/HeuristicLab.Termination-3.3.csproj	(revision 12310)
@@ -119,5 +119,5 @@
   <ItemGroup>
     <Compile Include="ITerminationCriterion.cs" />
-    <Compile Include="MaximumIterationsTerminationCriterion.cs" />
+    <Compile Include="ComparisonTerminationCriterion.cs" />
     <Compile Include="MultiTerminationCriterion.cs" />
     <Compile Include="TerminationCriterion.cs" />
Index: anches/TerminationCriteria/HeuristicLab.Termination/3.3/MaximumIterationsTerminationCriterion.cs
===================================================================
--- /branches/TerminationCriteria/HeuristicLab.Termination/3.3/MaximumIterationsTerminationCriterion.cs	(revision 12309)
+++ 	(revision )
@@ -1,59 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2015 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 HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Optimization;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Termination {
-  [Item("MaximumIterationsTerminationCriterion", "")]
-  [StorableClass]
-  public sealed class MaximumIterationsTerminationCriterion : TerminationCriterion, IIterationBasedOperator {
-    public ILookupParameter<IntValue> IterationsParameter {
-      get { return (ILookupParameter<IntValue>)Parameters["Iterations"]; }
-    }
-
-    public IValueLookupParameter<IntValue> MaximumIterationsParameter {
-      get { return (IValueLookupParameter<IntValue>)Parameters["MaximumIterations"]; }
-    }
-
-    [StorableConstructor]
-    private MaximumIterationsTerminationCriterion(bool deserializing) : base(deserializing) { }
-    private MaximumIterationsTerminationCriterion(MaximumIterationsTerminationCriterion original, Cloner cloner)
-      : base(original, cloner) {
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new MaximumIterationsTerminationCriterion(this, cloner);
-    }
-    public MaximumIterationsTerminationCriterion()
-      : base() {
-      Parameters.Add(new LookupParameter<IntValue>("Iterations", "The current iteration"));
-      Parameters.Add(new ValueLookupParameter<IntValue>("MaximumIterations", "The number of iterations that the algorithm should run."));
-    }
-
-    protected override bool CheckTermination() {
-      return IterationsParameter.ActualValue.Value >= MaximumIterationsParameter.ActualValue.Value;
-    }
-  }
-}
