Index: /trunk/sources/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationTypeView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationTypeView.Designer.cs	(revision 7039)
+++ /trunk/sources/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationTypeView.Designer.cs	(revision 7040)
@@ -54,7 +54,7 @@
       this.valueLabel.Location = new System.Drawing.Point(3, 3);
       this.valueLabel.Name = "valueLabel";
-      this.valueLabel.Size = new System.Drawing.Size(37, 13);
+      this.valueLabel.Size = new System.Drawing.Size(34, 13);
       this.valueLabel.TabIndex = 0;
-      this.valueLabel.Text = "&Value:";
+      this.valueLabel.Text = "&Type:";
       // 
       // valueComboBox
@@ -71,5 +71,5 @@
       this.valueComboBox.SelectedIndexChanged += new System.EventHandler(this.valueComboBox_SelectedIndexChanged);
       // 
-      // ComparisonView
+      // PermutationTypeView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -77,5 +77,5 @@
       this.Controls.Add(this.valueComboBox);
       this.Controls.Add(this.valueLabel);
-      this.Name = "ComparisonView";
+      this.Name = "PermutationTypeView";
       this.Size = new System.Drawing.Size(265, 29);
       this.ResumeLayout(false);
Index: /trunk/sources/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationView.Designer.cs	(revision 7039)
+++ /trunk/sources/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationView.Designer.cs	(revision 7040)
@@ -72,7 +72,7 @@
       this.Controls.Add(this.permutationTypeView);
       this.Name = "PermutationView";
-      this.Controls.SetChildIndex(this.permutationTypeView, 0);
       this.Controls.SetChildIndex(this.lengthLabel, 0);
       this.Controls.SetChildIndex(this.lengthTextBox, 0);
+      this.Controls.SetChildIndex(this.permutationTypeView, 0);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.ResumeLayout(false);
Index: /trunk/sources/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationView.cs	(revision 7039)
+++ /trunk/sources/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/PermutationView.cs	(revision 7040)
@@ -37,4 +37,5 @@
       InitializeComponent();
       dataGridView.Top = permutationTypeView.Bottom + permutationTypeView.Margin.Bottom + dataGridView.Margin.Top;
+      dataGridView.Height = Bottom - dataGridView.Top;
     }
 
Index: /trunk/sources/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSeachOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSeachOperator.cs	(revision 7039)
+++ /trunk/sources/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSeachOperator.cs	(revision 7040)
@@ -31,4 +31,5 @@
 namespace HeuristicLab.Problems.QuadraticAssignment.Algorithms {
   [Item("RobustTabooSearchOperator", "Performs an iteration of the robust taboo search algorithm as descrbied in Taillard 1991.")]
+  [StorableClass]
   public sealed class RobustTabooSeachOperator : SingleSuccessorOperator, IIterationBasedOperator, IStochasticOperator {
 
@@ -85,4 +86,8 @@
     public IValueLookupParameter<IntValue> AlternativeAspirationTenureParameter {
       get { return (IValueLookupParameter<IntValue>)Parameters["AlternativeAspirationTenure"]; }
+    }
+
+    private ILookupParameter<BoolValue> AllMovesTabuParameter {
+      get { return (ILookupParameter<BoolValue>)Parameters["AllMovesTabu"]; }
     }
     #endregion
@@ -111,8 +116,19 @@
       Parameters.Add(new ValueLookupParameter<BoolValue>("UseAlternativeAspiration", "True if the alternative aspiration condition should be used that takes moves that have not been made for some time above others."));
       Parameters.Add(new ValueLookupParameter<IntValue>("AlternativeAspirationTenure", "The time t that a move will be remembered for the alternative aspiration condition."));
+      Parameters.Add(new LookupParameter<BoolValue>("AllMovesTabu", "Indicates that all moves are tabu."));
     }
 
     public override IDeepCloneable Clone(Cloner cloner) {
       return new RobustTabooSeachOperator(this, cloner);
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code, remove with 3.4
+      if (!Parameters.ContainsKey("AllMovesTabu")) {
+        Parameters.Add(new LookupParameter<BoolValue>("AllMovesTabu", "Indicates that all moves are tabu."));
+      }
+      #endregion
     }
 
@@ -131,4 +147,8 @@
         bestQuality = BestQualityParameter.ActualValue;
       }
+      bool allMovesTabu = false;
+      if (AllMovesTabuParameter.ActualValue == null)
+        AllMovesTabuParameter.ActualValue = new BoolValue(false);
+      else allMovesTabu = AllMovesTabuParameter.ActualValue.Value;
 
       int minTenure = MinimumTabuTenureParameter.ActualValue.Value;
@@ -147,4 +167,5 @@
         if (lastMove == null)
           moveQuality = QAPSwap2MoveEvaluator.Apply(solution, move, weights, distances);
+        else if (allMovesTabu) moveQuality = moveQualityMatrix[move.Index1, move.Index2];
         else moveQuality = QAPSwap2MoveEvaluator.Apply(solution, move, moveQualityMatrix[move.Index1, move.Index2], weights, distances, lastMove);
 
@@ -180,7 +201,10 @@
       }
 
-      LastMoveParameter.ActualValue = bestMove;
-
-      if (bestMove == null) return base.Apply();
+      allMovesTabu = bestMove == null;
+      if (!allMovesTabu)
+        LastMoveParameter.ActualValue = bestMove;
+      AllMovesTabuParameter.ActualValue.Value = allMovesTabu;
+
+      if (allMovesTabu) return base.Apply();
 
       bool useNewAdaptionScheme = UseNewTabuTenureAdaptionSchemeParameter.ActualValue.Value;
Index: /trunk/sources/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSearch.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSearch.cs	(revision 7039)
+++ /trunk/sources/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSearch.cs	(revision 7040)
@@ -51,6 +51,6 @@
 
     #region Parameter Properties
-    public FixedValueParameter<MultiAnalyzer> AnalyzerParameter {
-      get { return (FixedValueParameter<MultiAnalyzer>)Parameters["Analyzer"]; }
+    public IValueParameter<MultiAnalyzer> AnalyzerParameter {
+      get { return (IValueParameter<MultiAnalyzer>)Parameters["Analyzer"]; }
     }
     public FixedValueParameter<IntValue> SeedParameter {
@@ -77,4 +77,7 @@
     public FixedValueParameter<BoolValue> UseNewTabuTenureAdaptionSchemeParameter {
       get { return (FixedValueParameter<BoolValue>)Parameters["UseNewTabuTenureAdaptionScheme"]; }
+    }
+    public FixedValueParameter<BoolValue> TerminateOnOptimalSolutionParameter {
+      get { return (FixedValueParameter<BoolValue>)Parameters["TerminateOnOptimalSolution"]; }
     }
     #endregion
@@ -112,4 +115,8 @@
       get { return UseNewTabuTenureAdaptionSchemeParameter.Value.Value; }
       set { UseNewTabuTenureAdaptionSchemeParameter.Value.Value = value; }
+    }
+    public bool TerminateOnOptimalSolution {
+      get { return TerminateOnOptimalSolutionParameter.Value.Value; }
+      set { TerminateOnOptimalSolutionParameter.Value.Value = value; }
     }
     #endregion
@@ -132,5 +139,5 @@
     }
     public RobustTabooSearch() {
-      Parameters.Add(new FixedValueParameter<MultiAnalyzer>("Analyzer", "The analyzers that are applied after each iteration.", new MultiAnalyzer()));
+      Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The analyzers that are applied after each iteration.", new MultiAnalyzer()));
       Parameters.Add(new FixedValueParameter<IntValue>("Seed", "The seed value of the random number generator.", new IntValue(0)));
       Parameters.Add(new FixedValueParameter<BoolValue>("SetSeedRandomly", "True whether the seed should be set randomly for each run, false if it should be fixed.", new BoolValue(true)));
@@ -140,9 +147,11 @@
       Parameters.Add(new FixedValueParameter<BoolValue>("UseAlternativeAspiration", "True if the alternative aspiration condition should be used that takes moves that have not been made for some time above others.", new BoolValue(false)));
       Parameters.Add(new FixedValueParameter<IntValue>("AlternativeAspirationTenure", "The time t that a move will be remembered for the alternative aspiration condition.", new IntValue(int.MaxValue)));
-      Parameters.Add(new FixedValueParameter<BoolValue>("TerminateOnOptimalSolution", "True when the algorithm should stop if it reached a quality equal or smaller to the BestKnownQuality.", new BoolValue(true)));
+      Parameters.Add(new FixedValueParameter<BoolValue>("TerminateOnOptimalSolution", "True when the algorithm should stop if it reached a quality equal or smaller to the BestKnownQuality.", new BoolValue(false)));
       Parameters.Add(new FixedValueParameter<BoolValue>("UseNewTabuTenureAdaptionScheme", @"In an updated version of his implementation, Eric Taillard introduced a different way to change the tabu tenure.
 Instead of setting it uniformly between min and max, it will be set between 0 and max according to a right-skewed distribution.
 Set this option to false if you want to optimize using the earlier 1991 version, and set to true if you want to optimize using the newer version.
 Please note that the MinimumTabuTenure parameter has no effect in the new version.", new BoolValue(true)));
+
+      TerminateOnOptimalSolutionParameter.Hidden = true;
 
       qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
@@ -298,4 +307,12 @@
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code, remove with 3.4
+      if (Parameters["Analyzer"] is FixedValueParameter<MultiAnalyzer>) {
+        MultiAnalyzer analyzer = AnalyzerParameter.Value;
+        Parameters.Remove("Analyzer");
+        Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The analyzers that are applied after each iteration.", analyzer));
+      }
+      #endregion
       RegisterEventHandlers();
     }
