Index: branches/ParameterBinding/HeuristicLab.Core/3.3/ParameterizedNamedItem.cs
===================================================================
--- branches/ParameterBinding/HeuristicLab.Core/3.3/ParameterizedNamedItem.cs	(revision 4758)
+++ branches/ParameterBinding/HeuristicLab.Core/3.3/ParameterizedNamedItem.cs	(revision 4770)
@@ -34,6 +34,5 @@
     [Storable]
     private List<IParameterBinding> parameterBindingList;
-    // eventuelly this should be made public and exposed in a view so that the algorithm designer can add bindings in the GUI
-    protected List<IParameterBinding> ParameterBindingList {
+    public List<IParameterBinding> ParameterBindingList {
       get { return parameterBindingList; }
     }
@@ -105,4 +104,13 @@
       }
     }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      //BackwardsCompatibility3.3
+      #region Remove this code when going to 3.4
+      if (parameterBindingList == null)
+        parameterBindingList = new List<IParameterBinding>();
+      #endregion
+    }
   }
 }
Index: branches/ParameterBinding/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj
===================================================================
--- branches/ParameterBinding/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj	(revision 4758)
+++ branches/ParameterBinding/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj	(revision 4770)
@@ -111,8 +111,8 @@
     <None Include="HeuristicLabParametersPlugin.cs.frame" />
     <Compile Include="ConstrainedValueParameter.cs" />
-    <Compile Include="ParameterSecondLevelValueBinding.cs" />
+    <Compile Include="ParameterSecondLevelNameBinding.cs" />
     <Compile Include="ParameterValueBinding.cs" />
     <Compile Include="OptionalConstrainedValueParameter.cs" />
-    <Compile Include="ParameterActualNameBinding.cs" />
+    <Compile Include="ParameterNameBinding.cs" />
     <Compile Include="ScopeTreeLookupParameter.cs" />
     <Compile Include="ValueParameter.cs" />
Index: branches/ParameterBinding/HeuristicLab.Parameters/3.3/ParameterActualNameBinding.cs
===================================================================
--- branches/ParameterBinding/HeuristicLab.Parameters/3.3/ParameterActualNameBinding.cs	(revision 4758)
+++ 	(revision )
@@ -1,69 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Core;
-using HeuristicLab.Common;
-
-namespace HeuristicLab.Parameters {
-  [StorableClass]
-  public class ParameterActualNameBinding : IParameterBinding {
-    [Storable]
-    private ILookupParameter source;
-    public ILookupParameter Source {
-      get { return source; }
-    }
-    [Storable]
-    private ILookupParameter destination;
-    public ILookupParameter Destination {
-      get { return destination; }
-    }
-
-    [StorableConstructor]
-    protected ParameterActualNameBinding(bool deserializing) { }
-    protected ParameterActualNameBinding(ParameterActualNameBinding original, Cloner cloner) {
-      this.source = cloner.Clone(source);
-      this.destination = cloner.Clone(destination);
-      RegisterEventHandlers();
-    }
-    public ParameterActualNameBinding(ILookupParameter source, ILookupParameter destination) {
-      if (source == null) throw new ArgumentNullException("source");
-      if (destination == null) throw new ArgumentNullException("destination");
-      this.source = source;
-      this.destination = destination;
-      RegisterEventHandlers();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new ParameterActualNameBinding(this, cloner);
-    }
-
-    public void Bind() {
-      RegisterEventHandlers();
-    }
-
-    public void Unbind() {
-      DeregisterEventHandlers();
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      RegisterEventHandlers();
-    }
-
-    private void RegisterEventHandlers() {
-      source.ActualNameChanged += new EventHandler(source_ActualNameChanged);
-    }
-
-    private void DeregisterEventHandlers() {
-      source.ActualNameChanged -= new EventHandler(source_ActualNameChanged);
-    }
-    
-
-    private void source_ActualNameChanged(object sender, EventArgs e) {
-      if (destination.ActualName != source.ActualName)
-        destination.ActualName = source.ActualName;
-    }
-  }
-}
Index: branches/ParameterBinding/HeuristicLab.Parameters/3.3/ParameterNameBinding.cs
===================================================================
--- branches/ParameterBinding/HeuristicLab.Parameters/3.3/ParameterNameBinding.cs	(revision 4770)
+++ branches/ParameterBinding/HeuristicLab.Parameters/3.3/ParameterNameBinding.cs	(revision 4770)
@@ -0,0 +1,87 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Parameters {
+  [StorableClass]
+  public class ParameterNameBinding : IParameterBinding {
+    [Storable]
+    private IParameter source;
+    public IParameter Source {
+      get { return source; }
+    }
+    private ILookupParameter sourceAsLookup;
+
+    [Storable]
+    private ILookupParameter target;
+    public ILookupParameter Target {
+      get { return target; }
+    }
+
+    [StorableConstructor]
+    protected ParameterNameBinding(bool deserializing) { }
+    protected ParameterNameBinding(ParameterNameBinding original, Cloner cloner) {
+      this.source = cloner.Clone(source);
+      this.target = cloner.Clone(target);
+      this.sourceAsLookup = this.source as ILookupParameter;
+      RegisterEventHandlers();
+    }
+    public ParameterNameBinding(ILookupParameter target, IParameter source) {
+      if (source == null) throw new ArgumentNullException("source");
+      if (target == null) throw new ArgumentNullException("target");
+      this.source = source;
+      this.target = target;
+      this.sourceAsLookup = this.source as ILookupParameter;
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new ParameterNameBinding(this, cloner);
+    }
+
+    public void Bind() {
+      RegisterEventHandlers();
+      ExecuteBinding();
+    }
+
+    public void Unbind() {
+      DeregisterEventHandlers();
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      this.sourceAsLookup = this.source as ILookupParameter;
+      RegisterEventHandlers();
+    }
+
+    private void RegisterEventHandlers() {
+      if (sourceAsLookup != null)
+        sourceAsLookup.ActualNameChanged += new EventHandler(source_NameChanged);
+      else source.NameChanged += new EventHandler(source_NameChanged);
+    }
+
+    private void DeregisterEventHandlers() {
+      if (sourceAsLookup != null)
+        sourceAsLookup.ActualNameChanged -= new EventHandler(source_NameChanged);
+      else source.NameChanged -= new EventHandler(source_NameChanged);
+    }
+
+    private void source_NameChanged(object sender, EventArgs e) {
+      ExecuteBinding();
+    }
+
+    private void ExecuteBinding() {
+      if (sourceAsLookup != null) {
+        if (target.ActualName != sourceAsLookup.ActualName)
+          target.ActualName = sourceAsLookup.ActualName;
+      } else target.ActualName = source.Name;
+    }
+  }
+}
Index: branches/ParameterBinding/HeuristicLab.Parameters/3.3/ParameterSecondLevelNameBinding.cs
===================================================================
--- branches/ParameterBinding/HeuristicLab.Parameters/3.3/ParameterSecondLevelNameBinding.cs	(revision 4770)
+++ branches/ParameterBinding/HeuristicLab.Parameters/3.3/ParameterSecondLevelNameBinding.cs	(revision 4770)
@@ -0,0 +1,103 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+using System.Reflection;
+
+namespace HeuristicLab.Parameters {
+  [StorableClass]
+  public class ParameterSecondLevelNameBinding : IParameterBinding {
+    [Storable]
+    private IValueParameter source;
+    public IValueParameter Source {
+      get { return source; }
+    }
+    [Storable]
+    private ILookupParameter target;
+    public ILookupParameter Target {
+      get { return target; }
+    }
+    [Storable]
+    private string sourcePropertyName;
+    public string SourcePropertyName {
+      get { return sourcePropertyName; }
+    }
+    [Storable]
+    private ParameterNameBinding nameBinding;
+
+    [StorableConstructor]
+    protected ParameterSecondLevelNameBinding(bool deserializing) { }
+    protected ParameterSecondLevelNameBinding(ParameterSecondLevelNameBinding original, Cloner cloner) {
+      this.source = cloner.Clone(source);
+      this.target = cloner.Clone(target);
+      this.sourcePropertyName = original.sourcePropertyName;
+      RegisterEventHandlers(); // nameBinding does not need to be cloned, is recreated here
+    }
+    public ParameterSecondLevelNameBinding(ILookupParameter target, IValueParameter source, string sourcePropertyName) {
+      if (source == null) throw new ArgumentNullException("source");
+      if (target == null) throw new ArgumentNullException("target");
+      this.source = source;
+      this.target = target;
+      this.sourcePropertyName = sourcePropertyName;
+      this.nameBinding = null;
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new ParameterSecondLevelNameBinding(this, cloner);
+    }
+
+    public void Bind() {
+      RegisterEventHandlers();
+    }
+
+    public void Unbind() {
+      DeregisterEventHandlers();
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEventHandlers();
+    }
+
+    private void RegisterEventHandlers() {
+      source.ValueChanged += new EventHandler(source_ValueChanged);
+      IParameter sourceParameter = GetNestedParameter(source, sourcePropertyName);
+      if (sourceParameter != null) {
+        nameBinding = new ParameterNameBinding(target, sourceParameter);
+        nameBinding.Bind();
+      }
+    }
+
+    private void DeregisterEventHandlers() {
+      source.ValueChanged -= new EventHandler(source_ValueChanged);
+
+      if (nameBinding != null) nameBinding.Unbind();
+      nameBinding = null;
+    }
+
+    private void source_ValueChanged(object sender, EventArgs e) {
+      IParameter sourceParameter = GetNestedParameter(source, sourcePropertyName);
+      if (sourceParameter != null) {
+        if (nameBinding != null) nameBinding.Unbind();
+        nameBinding = new ParameterNameBinding(target, sourceParameter);
+        nameBinding.Bind();
+      }
+    }
+
+    private IParameter GetNestedParameter(IValueParameter param, string name) {
+      if (param.Value == null) return null;
+      PropertyInfo property = param.Value.GetType().GetProperty(name, BindingFlags.Instance | BindingFlags.NonPublic);
+      if (property == null) return null;
+      if (property.GetGetMethod() == null) throw new InvalidOperationException("Property " + name + " of type " + param.Value.GetType().FullName + " does not have a Get method.");
+      IParameter nestedParam = (property.GetGetMethod().Invoke(param.Value, null) as IParameter);
+      return nestedParam;
+    }
+  }
+}
Index: branches/ParameterBinding/HeuristicLab.Parameters/3.3/ParameterSecondLevelValueBinding.cs
===================================================================
--- branches/ParameterBinding/HeuristicLab.Parameters/3.3/ParameterSecondLevelValueBinding.cs	(revision 4758)
+++ 	(revision )
@@ -1,111 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Core;
-using HeuristicLab.Common;
-using System.Reflection;
-
-namespace HeuristicLab.Parameters {
-  [StorableClass]
-  public class ParameterSecondLevelActualNameBinding : IParameterBinding {
-    [Storable]
-    private IValueParameter source;
-    public IValueParameter Source {
-      get { return source; }
-    }
-    [Storable]
-    private IValueParameter destination;
-    public IValueParameter Destination {
-      get { return destination; }
-    }
-    [Storable]
-    private string sourcePropertyName;
-    public string SourcePropertyName {
-      get { return sourcePropertyName; }
-    }
-    [Storable]
-    private string destinationPropertyName;
-    public string DestinationPropertyName {
-      get { return destinationPropertyName; }
-    }
-
-    [StorableConstructor]
-    protected ParameterSecondLevelActualNameBinding(bool deserializing) { }
-    protected ParameterSecondLevelActualNameBinding(ParameterSecondLevelActualNameBinding original, Cloner cloner) {
-      this.source = cloner.Clone(source);
-      this.destination = cloner.Clone(destination);
-      RegisterEventHandlers();
-    }
-    public ParameterSecondLevelActualNameBinding(IValueParameter source, IValueParameter destination, string sourcePropertyName, string destinationPropertyName) {
-      if (source == null) throw new ArgumentNullException("source");
-      if (destination == null) throw new ArgumentNullException("destination");
-      this.source = source;
-      this.destination = destination;
-      this.sourcePropertyName = sourcePropertyName;
-      this.destinationPropertyName = destinationPropertyName;
-      RegisterEventHandlers();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new ParameterSecondLevelActualNameBinding(this, cloner);
-    }
-
-    public void Bind() {
-      RegisterEventHandlers();
-    }
-
-    public void Unbind() {
-      DeregisterEventHandlers();
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      RegisterEventHandlers();
-    }
-
-    private void RegisterEventHandlers() {
-      source.ValueChanged += new EventHandler(source_ValueChanged);
-      ILookupParameter sourceParameter = GetNestedParameter(source, sourcePropertyName);
-      if (sourceParameter != null)
-        sourceParameter.ActualNameChanged += new EventHandler(sourceParameter_ActualNameChanged);
-    }
-
-    private void DeregisterEventHandlers() {
-      source.ValueChanged -= new EventHandler(source_ValueChanged);
-
-      ILookupParameter sourceParameter = GetNestedParameter(source, sourcePropertyName);
-      if (sourceParameter != null)
-        sourceParameter.ActualNameChanged -= new EventHandler(sourceParameter_ActualNameChanged);
-    }
-
-    private ILookupParameter GetNestedParameter(IValueParameter param, string name) {
-      if (param.Value == null) return null;
-      PropertyInfo property = param.Value.GetType().GetProperty(name, BindingFlags.Instance | BindingFlags.NonPublic);
-      if (property == null) return null;
-      if (property.GetGetMethod() == null) throw new InvalidOperationException("Property " + name + " of type " + param.Value.GetType().FullName + " does not have a Get method.");
-      ILookupParameter nestedParam = (property.GetGetMethod().Invoke(param.Value, null) as ILookupParameter);
-      return nestedParam;
-    }
-
-    private void source_ValueChanged(object sender, EventArgs e) {
-      ILookupParameter sourceParameter = GetNestedParameter(source, sourcePropertyName);
-      if (sourceParameter != null) {
-        sourceParameter.ActualNameChanged += new EventHandler(sourceParameter_ActualNameChanged);
-        DoAction();
-      }
-    }
-
-    private void sourceParameter_ActualNameChanged(object sender, EventArgs e) {
-      DoAction();
-    }
-
-    private void DoAction() {
-      ILookupParameter sourceParameter = GetNestedParameter(source, sourcePropertyName);
-      ILookupParameter destinationParameter = GetNestedParameter(destination, destinationPropertyName);
-      if (destinationParameter != null)
-        destinationParameter.ActualName = sourceParameter.ActualName;
-    }
-  }
-}
Index: branches/ParameterBinding/HeuristicLab.Parameters/3.3/ParameterValueBinding.cs
===================================================================
--- branches/ParameterBinding/HeuristicLab.Parameters/3.3/ParameterValueBinding.cs	(revision 4758)
+++ branches/ParameterBinding/HeuristicLab.Parameters/3.3/ParameterValueBinding.cs	(revision 4770)
@@ -11,12 +11,12 @@
   public class ParameterValueBinding : IParameterBinding {
     [Storable]
-    private IValueParameter recipient;
-    public IValueParameter Recipient {
-      get { return recipient; }
+    private IValueParameter target;
+    public IValueParameter Target {
+      get { return target; }
     }
     [Storable]
-    private IValueParameter donor;
-    public IValueParameter Donor {
-      get { return donor; }
+    private IValueParameter source;
+    public IValueParameter Source {
+      get { return source; }
     }
 
@@ -24,17 +24,20 @@
     protected ParameterValueBinding(bool deserializing) { }
     protected ParameterValueBinding(ParameterValueBinding original, Cloner cloner) {
-      this.donor = cloner.Clone(donor);
-      this.recipient = cloner.Clone(recipient);
+      this.source = cloner.Clone(source);
+      this.target = cloner.Clone(target);
       RegisterEventHandlers();
     }
-    public ParameterValueBinding(IValueParameter recipient, IValueParameter donor) {
-      if (recipient == null) throw new ArgumentNullException("destination");
-      if (donor == null) throw new ArgumentNullException("source");
-      this.recipient = recipient;
-      this.donor = donor;
-      RegisterEventHandlers();
+    public ParameterValueBinding(IValueParameter target, IValueParameter source) {
+      if (target == null) throw new ArgumentNullException("destination");
+      if (source == null) throw new ArgumentNullException("source");
+      this.target = target;
+      this.source = source;
     }
 
-    public override IDeepCloneable Clone(Cloner cloner) {
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
       return new ParameterValueBinding(this, cloner);
     }
@@ -42,4 +45,5 @@
     public void Bind() {
       RegisterEventHandlers();
+      ExecuteBinding();
     }
 
@@ -54,14 +58,17 @@
 
     private void RegisterEventHandlers() {
-      donor.ValueChanged += new EventHandler(source_ValueChanged);
+      source.ValueChanged += new EventHandler(source_ValueChanged);
     }
 
     private void DeregisterEventHandlers() {
-      donor.ValueChanged -= new EventHandler(source_ValueChanged);
+      source.ValueChanged -= new EventHandler(source_ValueChanged);
     }
-    
 
     private void source_ValueChanged(object sender, EventArgs e) {
-      recipient.Value = (IItem)donor.Value.Clone();
+      ExecuteBinding();
+    }
+
+    private void ExecuteBinding() {
+      target.Value = (IItem)source.Value.Clone();
     }
   }
Index: branches/ParameterBinding/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs
===================================================================
--- branches/ParameterBinding/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs	(revision 4758)
+++ branches/ParameterBinding/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs	(revision 4770)
@@ -239,4 +239,10 @@
       ParameterizeAnalyzers();
     }
+    private void MoveGenerator_InversionMoveParameter_ActualNameChanged(object sender, EventArgs e) {
+      string name = ((ILookupParameter<InversionMove>)sender).ActualName;
+      foreach (IPermutationInversionMoveOperator op in Operators.OfType<IPermutationInversionMoveOperator>()) {
+        op.InversionMoveParameter.ActualName = name;
+      }
+    }
     private void MoveGenerator_TranslocationMoveParameter_ActualNameChanged(object sender, EventArgs e) {
       string name = ((ILookupParameter<TranslocationMove>)sender).ActualName;
@@ -279,20 +285,12 @@
     }
     private void InitializeMoveGenerators() {
-      foreach (IPermutationInversionMoveOperator moveGen in Operators.OfType<IMoveGenerator>().OfType<IPermutationInversionMoveOperator>()) {
-        foreach (IPermutationInversionMoveOperator moveOp in Operators.Where(x => ! (x is IMoveGenerator)).OfType<IPermutationInversionMoveOperator>()) {
-          ParameterActualNameBinding binding = new ParameterActualNameBinding(
-            moveGen.InversionMoveParameter,
-            moveOp.InversionMoveParameter);
-          ParameterBindingList.Add(binding);
-          binding.Bind();
+      foreach (IPermutationInversionMoveOperator op in Operators.OfType<IPermutationInversionMoveOperator>()) {
+        if (op is IMoveGenerator) {
+          op.InversionMoveParameter.ActualNameChanged += new EventHandler(MoveGenerator_InversionMoveParameter_ActualNameChanged);
         }
       }
-      foreach (IPermutationTranslocationMoveOperator moveGen in Operators.OfType<IMoveGenerator>().OfType<IPermutationTranslocationMoveOperator>()) {
-        foreach (IPermutationTranslocationMoveOperator moveOp in Operators.Where(x => !(x is IMoveGenerator)).OfType<IPermutationTranslocationMoveOperator>()) {
-          ParameterActualNameBinding binding = new ParameterActualNameBinding(
-            moveGen.TranslocationMoveParameter,
-            moveOp.TranslocationMoveParameter);
-          ParameterBindingList.Add(binding);
-          binding.Bind();
+      foreach (IPermutationTranslocationMoveOperator op in Operators.OfType<IPermutationTranslocationMoveOperator>()) {
+        if (op is IMoveGenerator) {
+          op.TranslocationMoveParameter.ActualNameChanged += new EventHandler(MoveGenerator_TranslocationMoveParameter_ActualNameChanged);
         }
       }
@@ -312,11 +310,4 @@
     }
     private void ParameterizeEvaluator() {
-      ParameterSecondLevelActualNameBinding binding = new ParameterSecondLevelActualNameBinding(
-        SolutionCreatorParameter, EvaluatorParameter,
-        "PermutationParameter", "PermutationParameter"
-        );
-      ParameterBindingList.Add(binding);
-      binding.Bind();
-
       if (Evaluator is ITSPPathEvaluator)
         ((ITSPPathEvaluator)Evaluator).PermutationParameter.ActualName = SolutionCreator.PermutationParameter.ActualName;
@@ -330,4 +321,41 @@
     private void ParameterizeAnalyzers() {
       if (BestTSPSolutionAnalyzer != null) {
+        #region Using First Level Bindings
+        BestTSPSolutionAnalyzer.ParameterBindingList.Add(new ParameterNameBinding(
+          BestTSPSolutionAnalyzer.QualityParameter,
+          Evaluator.QualityParameter
+          ));
+        BestTSPSolutionAnalyzer.ParameterBindingList.Add(new ParameterNameBinding(
+          BestTSPSolutionAnalyzer.CoordinatesParameter,
+          CoordinatesParameter
+          ));
+        BestTSPSolutionAnalyzer.ParameterBindingList.Add(new ParameterNameBinding(
+          BestTSPSolutionAnalyzer.PermutationParameter,
+          SolutionCreator.PermutationParameter
+          ));
+        BestTSPSolutionAnalyzer.ParameterBindingList.Add(new ParameterNameBinding(
+          BestTSPSolutionAnalyzer.BestKnownQualityParameter,
+          BestKnownQualityParameter
+          ));
+        BestTSPSolutionAnalyzer.ParameterBindingList.Add(new ParameterNameBinding(
+          BestTSPSolutionAnalyzer.BestKnownSolutionParameter,
+          BestKnownSolutionParameter
+          ));
+        BestTSPSolutionAnalyzer.ParameterBindingList.Add(new ParameterNameBinding(
+          BestTSPSolutionAnalyzer.MaximizationParameter,
+          MaximizationParameter
+          ));
+        #endregion
+        #region Using Second Level Bindings
+        BestTSPSolutionAnalyzer.ParameterBindingList.Add(new ParameterSecondLevelNameBinding(
+          BestTSPSolutionAnalyzer.QualityParameter,
+          EvaluatorParameter, "QualityParameter"
+          ));
+        BestTSPSolutionAnalyzer.ParameterBindingList.Add(new ParameterSecondLevelNameBinding(
+           BestTSPSolutionAnalyzer.PermutationParameter,
+           SolutionCreatorParameter, "PermutationParameter"
+           ));
+        #endregion
+        #region Old
         BestTSPSolutionAnalyzer.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
         BestTSPSolutionAnalyzer.CoordinatesParameter.ActualName = CoordinatesParameter.Name;
@@ -337,4 +365,5 @@
         BestTSPSolutionAnalyzer.BestKnownSolutionParameter.ActualName = BestKnownSolutionParameter.Name;
         BestTSPSolutionAnalyzer.MaximizationParameter.ActualName = MaximizationParameter.Name;
+        #endregion
       }
 
