Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Evaluation/GQAPNMoveEvaluator.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Evaluation/GQAPNMoveEvaluator.cs	(revision 15505)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Evaluation/GQAPNMoveEvaluator.cs	(revision 15506)
@@ -34,5 +34,5 @@
   [StorableClass]
   public class GQAPNMoveEvaluator : SingleSuccessorOperator, IGQAPNMoveEvaluator,
-    IQualityAwareGQAPOperator, IProblemInstanceAwareGQAPOperator {
+    IQualityAwareGQAPOperator, IProblemInstanceAwareGQAPOperator, IAssignmentAwareGQAPOperator {
 
     #region Parameter Descriptions
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GQAP.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GQAP.cs	(revision 15505)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GQAP.cs	(revision 15506)
@@ -48,4 +48,7 @@
     public override bool Maximization { get { return false; } }
 
+    [Storable]
+    private bool initialized; // ABE: helper variable that defines if the constructor has completed
+
     #region Parameter Descriptions
     public static readonly string BestKnownQualityDescription = "The best known quality (if available).";
@@ -88,4 +91,5 @@
       : base(original, cloner) {
       RegisterEventHandlers();
+      initialized = original.initialized;
     }
     public GQAP() : base() {
@@ -97,4 +101,6 @@
       InitializeOperators();
       RegisterEventHandlers();
+      initialized = true;
+      Parameterize();
     }
 
@@ -343,8 +349,10 @@
     protected override void OnOperatorsChanged() {
       base.OnOperatorsChanged();
+      if (!initialized) return;
       Parameterize();
     }
     protected override void OnEncodingChanged() {
       base.OnEncodingChanged();
+      if (!initialized) return;
       Parameterize();
     }
@@ -397,14 +405,17 @@
       Operators.RemoveAll(x => x is ISingleObjectiveMoveEvaluator);
       Operators.AddRange(ApplicationManager.Manager.GetInstances<IGQAPMoveEvaluator>());
-      Operators.Add(new HammingSimilarityCalculator());
-      Operators.Add(new QualitySimilarityCalculator());
+      Operators.Add(new HammingSimilarityCalculator() { SolutionVariableName = Encoding.Name, QualityVariableName = Evaluator.QualityParameter.ActualName });
+      Operators.Add(new QualitySimilarityCalculator() { SolutionVariableName = Encoding.Name, QualityVariableName = Evaluator.QualityParameter.ActualName });
       
       Operators.Add(new PopulationSimilarityAnalyzer(Operators.OfType<ISolutionSimilarityCalculator>()));
-      Parameterize();
     }
 
     private void Parameterize() {
       var operators = Operators.Union(new IOperator[] { SolutionCreator, Evaluator }).ToArray();
-      
+      Encoding.ConfigureOperators(operators.OfType<IOperator>());
+      foreach (var op in operators.OfType<IAssignmentAwareGQAPOperator>()) {
+        op.AssignmentParameter.ActualName = Encoding.Name;
+        op.AssignmentParameter.Hidden = true;
+      }
       foreach (var op in operators.OfType<IBestKnownQualityAwareGQAPOperator>()) {
         op.BestKnownQualityParameter.ActualName = BestKnownQualityParameter.Name;
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Interfaces/Parameter/IAssignmentAwareGQAPOperator.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Interfaces/Parameter/IAssignmentAwareGQAPOperator.cs	(revision 15506)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Interfaces/Parameter/IAssignmentAwareGQAPOperator.cs	(revision 15506)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2017 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.Core;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+
+namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment {
+  public interface IAssignmentAwareGQAPOperator : IGQAPOperator {
+    ILookupParameter<IntegerVector> AssignmentParameter { get; }
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/Crossovers/CordeauCrossover.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/Crossovers/CordeauCrossover.cs	(revision 15505)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/Crossovers/CordeauCrossover.cs	(revision 15506)
@@ -35,8 +35,5 @@
   public class CordeauCrossover : GQAPCrossover,
     IQualitiesAwareGQAPOperator, IProblemInstanceAwareGQAPOperator {
-
-    public ILookupParameter<BoolValue> MaximizationParameter {
-      get { return (ILookupParameter<BoolValue>)Parameters["Maximization"]; }
-    }
+    
     public IScopeTreeLookupParameter<DoubleValue> QualityParameter {
       get { return (IScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
@@ -56,5 +53,4 @@
     public CordeauCrossover()
       : base() {
-      Parameters.Add(new LookupParameter<BoolValue>("Maximization", ""));
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The quality of the parents", 1));
       Parameters.Add(new ScopeTreeLookupParameter<Evaluation>("Evaluation", GQAP.EvaluationDescription, 1));
@@ -66,5 +62,5 @@
     }
 
-    public static IntegerVector Apply(IRandom random, bool maximization,
+    public static IntegerVector Apply(IRandom random,
       IntegerVector parent1, DoubleValue quality1,
       IntegerVector parent2, DoubleValue quality2,
@@ -80,11 +76,10 @@
       
       bool onefound = false;
-      double fbest, fbestAttempt = maximization ? double.MinValue : double.MaxValue;
+      double fbest, fbestAttempt = double.MaxValue;
       IntegerVector bestAttempt = null;
       IntegerVector result = null;
 
       fbest = quality1.Value;
-      if (maximization && quality1.Value < quality2.Value
-        || !maximization && quality1.Value > quality2.Value) {
+      if (quality1.Value > quality2.Value) {
         var temp = parent1;
         parent1 = parent2;
@@ -102,11 +97,10 @@
           var childFit = problemInstance.ToSingleObjective(problemInstance.Evaluate(child));
           evaluatedSolutions.Value++;
-          if (maximization && childFit >= fbest
-            || !maximization && childFit <= fbest) {
+          if (childFit <= fbest) {
             fbest = childFit;
             result = child;
             onefound = true;
           }
-          if (!onefound && (maximization && fbestAttempt < childFit || !maximization && fbestAttempt > childFit)) {
+          if (!onefound && fbestAttempt > childFit) {
             bestAttempt = child;
             fbestAttempt = childFit;
@@ -130,5 +124,5 @@
         }
 
-        if (!onefound && (maximization && fbestAttempt < childFit || !maximization && fbestAttempt > childFit)) {
+        if (!onefound && fbestAttempt > childFit) {
           bestAttempt = child;
           fbestAttempt = childFit;
@@ -203,5 +197,5 @@
 
       var qualities = QualityParameter.ActualValue;
-      return Apply(random, MaximizationParameter.ActualValue.Value,
+      return Apply(random,
         parents[0], qualities[0],
         parents[1], qualities[1],
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/LocalImprovers/ApproximateLocalSearch.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/LocalImprovers/ApproximateLocalSearch.cs	(revision 15505)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/LocalImprovers/ApproximateLocalSearch.cs	(revision 15506)
@@ -36,5 +36,5 @@
   [StorableClass]
   public class ApproximateLocalSearch : SingleSuccessorOperator, IProblemInstanceAwareGQAPOperator,
-    IQualityAwareGQAPOperator, IGQAPLocalImprovementOperator, IStochasticOperator {
+    IQualityAwareGQAPOperator, IGQAPLocalImprovementOperator, IAssignmentAwareGQAPOperator, IStochasticOperator {
     public IProblem Problem { get; set; }
     public Type ProblemType {
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/PopulationReducers/GQAPQualitySimilarityReducer.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/PopulationReducers/GQAPQualitySimilarityReducer.cs	(revision 15505)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/PopulationReducers/GQAPQualitySimilarityReducer.cs	(revision 15506)
@@ -34,5 +34,5 @@
   [Item("GQAPQualitySimilarityReducer", "Reduces two populations two one by using quality and similarity information to obtain a population of high quality, but also diverse solutions.")]
   [StorableClass]
-  public class GQAPQualitySimilarityReducer : SingleSuccessorOperator, IQualityAwareGQAPOperator, IPopulationReducer {
+  public class GQAPQualitySimilarityReducer : SingleSuccessorOperator, IQualityAwareGQAPOperator, IAssignmentAwareGQAPOperator, IPopulationReducer {
     public ILookupParameter<IntegerVector> AssignmentParameter {
       get { return (ILookupParameter<IntegerVector>)Parameters["Assignment"]; }
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/Shakers/NMoveShakingOperator.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/Shakers/NMoveShakingOperator.cs	(revision 15505)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/Shakers/NMoveShakingOperator.cs	(revision 15506)
@@ -32,5 +32,6 @@
   [Item("NMoveShakingOperator", "Performs a number of shaking operations that increase in strength.")]
   [StorableClass]
-  public class NMoveShakingOperator : SingleSuccessorOperator, IProblemInstanceAwareGQAPOperator, IMultiNeighborhoodShakingOperator, IStochasticOperator {
+  public class NMoveShakingOperator : SingleSuccessorOperator, IProblemInstanceAwareGQAPOperator,
+    IAssignmentAwareGQAPOperator, IMultiNeighborhoodShakingOperator, IStochasticOperator {
 
 
