Index: branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Operator/CountNumberOfUniqueActions.cs
===================================================================
--- branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Operator/CountNumberOfUniqueActions.cs	(revision 9110)
+++ branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Operator/CountNumberOfUniqueActions.cs	(revision 9194)
@@ -35,6 +35,9 @@
       get { return (ILookupParameter<ItemArray<IClassifier>>)Parameters["Classifiers"]; }
     }
-    public IValueLookupParameter<IItemSet<IClassifier>> UniqueActionsParameter {
-      get { return (IValueLookupParameter<IItemSet<IClassifier>>)Parameters["UniqueActions"]; }
+    public ILookupParameter<IClassifierComparer> ClassifierComparerParameter {
+      get { return (ILookupParameter<IClassifierComparer>)Parameters["ClassifierComparer"]; }
+    }
+    public IValueLookupParameter<IItemSet<IAction>> UniqueActionsParameter {
+      get { return (IValueLookupParameter<IItemSet<IAction>>)Parameters["UniqueActions"]; }
     }
     public IValueLookupParameter<IntValue> NumberOfUniqueActionsParameter {
@@ -53,10 +56,11 @@
       : base() {
       Parameters.Add(new ScopeTreeLookupParameter<IClassifier>("Classifiers"));
-      Parameters.Add(new ValueLookupParameter<IItemSet<IClassifier>>("UniqueActions"));
+      Parameters.Add(new LookupParameter<IClassifierComparer>("ClassifierComparer"));
+      Parameters.Add(new ValueLookupParameter<IItemSet<IAction>>("UniqueActions"));
       Parameters.Add(new ValueLookupParameter<IntValue>("NumberOfUniqueActions"));
     }
 
     public override IOperation Apply() {
-      ItemSet<IClassifier> actions = new ItemSet<IClassifier>();
+      ItemSet<IAction> actions = new ItemSet<IAction>(ClassifierComparerParameter.ActualValue);
       foreach (var classifier in ClassifiersParameter.ActualValue) {
         actions.Add(classifier.Action);
Index: branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Operator/MatchActionOperator.cs
===================================================================
--- branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Operator/MatchActionOperator.cs	(revision 9110)
+++ branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Operator/MatchActionOperator.cs	(revision 9194)
@@ -34,6 +34,6 @@
       get { return (ILookupParameter<BoolValue>)Parameters["MatchAction"]; }
     }
-    public ILookupParameter<IClassifier> TargetMatchParameter {
-      get { return (ILookupParameter<IClassifier>)Parameters["TargetMatchParameter"]; }
+    public ILookupParameter<IAction> TargetMatchParameter {
+      get { return (ILookupParameter<IAction>)Parameters["TargetMatchParameter"]; }
     }
     public ILookupParameter<IClassifier> MatchParameter {
@@ -49,5 +49,5 @@
       : base() {
       Parameters.Add(new LookupParameter<BoolValue>("MatchAction", "True if the action matches."));
-      Parameters.Add(new ValueLookupParameter<IClassifier>("TargetMatchParameter", "Target that has to be matched by the match parameter."));
+      Parameters.Add(new ValueLookupParameter<IAction>("TargetMatchParameter", "Target that has to be matched by the match parameter."));
       Parameters.Add(new ValueLookupParameter<IClassifier>("MatchParameter", "The matching encoding contained in each sub-scope which is used for selection."));
     }
@@ -57,5 +57,5 @@
 
     public override IOperation Apply() {
-      IClassifier target = TargetMatchParameter.ActualValue;
+      IAction target = TargetMatchParameter.ActualValue;
       IClassifier match = MatchParameter.ActualValue;
       MatchActionParameter.ActualValue = new BoolValue(match.MatchAction(target));
Index: branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Operator/MatchConditionOperator.cs
===================================================================
--- branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Operator/MatchConditionOperator.cs	(revision 9110)
+++ branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Operator/MatchConditionOperator.cs	(revision 9194)
@@ -34,6 +34,6 @@
       get { return (ILookupParameter<BoolValue>)Parameters["MatchCondition"]; }
     }
-    public ILookupParameter<IClassifier> TargetMatchParameter {
-      get { return (ILookupParameter<IClassifier>)Parameters["TargetMatchParameter"]; }
+    public ILookupParameter<IInput> TargetMatchParameter {
+      get { return (ILookupParameter<IInput>)Parameters["TargetMatchParameter"]; }
     }
     public ILookupParameter<IClassifier> MatchParameter {
@@ -49,5 +49,5 @@
       : base() {
       Parameters.Add(new LookupParameter<BoolValue>("MatchCondition", "True if the condition matches."));
-      Parameters.Add(new ValueLookupParameter<IClassifier>("TargetMatchParameter", "Target that has to be matched by the match parameter."));
+      Parameters.Add(new ValueLookupParameter<IInput>("TargetMatchParameter", "Target that has to be matched by the match parameter."));
       Parameters.Add(new ValueLookupParameter<IClassifier>("MatchParameter", "The matching encoding contained in each sub-scope which is used for selection."));
     }
@@ -57,7 +57,7 @@
 
     public override IOperation Apply() {
-      IClassifier target = TargetMatchParameter.ActualValue;
+      IInput target = TargetMatchParameter.ActualValue;
       IClassifier match = MatchParameter.ActualValue;
-      MatchConditionParameter.ActualValue = new BoolValue(match.MatchCondition(target));
+      MatchConditionParameter.ActualValue = new BoolValue(match.MatchInput(target));
       return base.Apply();
     }
Index: branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Operator/PredictionArrayCalculator.cs
===================================================================
--- branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Operator/PredictionArrayCalculator.cs	(revision 9110)
+++ branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Operator/PredictionArrayCalculator.cs	(revision 9194)
@@ -33,4 +33,7 @@
   public class PredictionArrayCalculator : SingleSuccessorOperator {
 
+    public ILookupParameter<IClassifierComparer> ClassifierComparerParameter {
+      get { return (ILookupParameter<IClassifierComparer>)Parameters["ClassifierComparer"]; }
+    }
     public ILookupParameter<ItemArray<DoubleValue>> FitnessParameter {
       get { return (ILookupParameter<ItemArray<DoubleValue>>)Parameters["Fitness"]; }
@@ -39,6 +42,6 @@
       get { return (ILookupParameter<ItemArray<DoubleValue>>)Parameters["Prediction"]; }
     }
-    public IValueParameter<IItemDictionary<IClassifier, DoubleValue>> PredictionArrayParameter {
-      get { return (IValueParameter<IItemDictionary<IClassifier, DoubleValue>>)Parameters["PredictionArray"]; }
+    public IValueParameter<IItemDictionary<IAction, DoubleValue>> PredictionArrayParameter {
+      get { return (IValueParameter<IItemDictionary<IAction, DoubleValue>>)Parameters["PredictionArray"]; }
     }
     public ILookupParameter<ItemArray<IClassifier>> MatchParameter {
@@ -53,7 +56,8 @@
     public PredictionArrayCalculator()
       : base() {
+      Parameters.Add(new LookupParameter<IClassifierComparer>("ClassifierComparer"));
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Fitness"));
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Prediction"));
-      Parameters.Add(new ValueLookupParameter<IItemDictionary<IClassifier, DoubleValue>>("PredictionArray"));
+      Parameters.Add(new ValueLookupParameter<IItemDictionary<IAction, DoubleValue>>("PredictionArray"));
       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope from which sub-scopes should be selected."));
       Parameters.Add(new ScopeTreeLookupParameter<IClassifier>("MatchParameter", "The matching encoding contained in each sub-scope which is used for selection."));
@@ -64,6 +68,6 @@
 
     public sealed override IOperation Apply() {
-      IItemDictionary<IClassifier, DoubleValue> predictionArray = new ItemDictionary<IClassifier, DoubleValue>();
-      IDictionary<IClassifier, double> fitnessSumPerAction = new Dictionary<IClassifier, double>();
+      IItemDictionary<IAction, DoubleValue> predictionArray = new ItemDictionary<IAction, DoubleValue>(ClassifierComparerParameter.ActualValue);
+      IDictionary<IAction, double> fitnessSumPerAction = new Dictionary<IAction, double>(ClassifierComparerParameter.ActualValue);
       ItemArray<DoubleValue> fitnesses = FitnessParameter.ActualValue;
       ItemArray<DoubleValue> predictions = PredictionParameter.ActualValue;
