Index: trunk/sources/HeuristicLab.Algorithms.SGA/3.3/SGA.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.SGA/3.3/SGA.cs	(revision 3094)
+++ trunk/sources/HeuristicLab.Algorithms.SGA/3.3/SGA.cs	(revision 3095)
@@ -66,6 +66,6 @@
       get { return (ConstrainedValueParameter<ICrossover>)Parameters["Crossover"]; }
     }
-    private ValueParameter<DoubleValue> MutationProbabilityParameter {
-      get { return (ValueParameter<DoubleValue>)Parameters["MutationProbability"]; }
+    private ValueParameter<PercentValue> MutationProbabilityParameter {
+      get { return (ValueParameter<PercentValue>)Parameters["MutationProbability"]; }
     }
     private OptionalConstrainedValueParameter<IManipulator> MutatorParameter {
@@ -101,5 +101,5 @@
       set { CrossoverParameter.Value = value; }
     }
-    public DoubleValue MutationProbability {
+    public PercentValue MutationProbability {
       get { return MutationProbabilityParameter.Value; }
       set { MutationProbabilityParameter.Value = value; }
@@ -139,5 +139,5 @@
       Parameters.Add(new ConstrainedValueParameter<ISelector>("Selector", "The operator used to select solutions for reproduction."));
       Parameters.Add(new ConstrainedValueParameter<ICrossover>("Crossover", "The operator used to cross solutions."));
-      Parameters.Add(new ValueParameter<DoubleValue>("MutationProbability", "The probability that the mutation operator is applied on a solution.", new DoubleValue(0.05)));
+      Parameters.Add(new ValueParameter<PercentValue>("MutationProbability", "The probability that the mutation operator is applied on a solution.", new PercentValue(0.05)));
       Parameters.Add(new OptionalConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
       Parameters.Add(new ValueParameter<IntValue>("Elites", "The numer of elite solutions which are kept in each generation.", new IntValue(1)));
Index: trunk/sources/HeuristicLab.Algorithms.SGA/3.3/SGAMainLoop.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.SGA/3.3/SGAMainLoop.cs	(revision 3094)
+++ trunk/sources/HeuristicLab.Algorithms.SGA/3.3/SGAMainLoop.cs	(revision 3095)
@@ -56,6 +56,6 @@
       get { return (ValueLookupParameter<IOperator>)Parameters["Crossover"]; }
     }
-    public ValueLookupParameter<DoubleValue> MutationProbabilityParameter {
-      get { return (ValueLookupParameter<DoubleValue>)Parameters["MutationProbability"]; }
+    public ValueLookupParameter<PercentValue> MutationProbabilityParameter {
+      get { return (ValueLookupParameter<PercentValue>)Parameters["MutationProbability"]; }
     }
     public ValueLookupParameter<IOperator> MutatorParameter {
@@ -98,5 +98,5 @@
       Parameters.Add(new ValueLookupParameter<IOperator>("Selector", "The operator used to select solutions for reproduction."));
       Parameters.Add(new ValueLookupParameter<IOperator>("Crossover", "The operator used to cross solutions."));
-      Parameters.Add(new ValueLookupParameter<DoubleValue>("MutationProbability", "The probability that the mutation operator is applied on a solution."));
+      Parameters.Add(new ValueLookupParameter<PercentValue>("MutationProbability", "The probability that the mutation operator is applied on a solution."));
       Parameters.Add(new ValueLookupParameter<IOperator>("Mutator", "The operator used to mutate solutions."));
       Parameters.Add(new ValueLookupParameter<IOperator>("Evaluator", "The operator used to evaluate solutions."));
@@ -110,6 +110,8 @@
       VariableCreator variableCreator = new VariableCreator();
       BestQualityMemorizer bestQualityMemorizer1 = new BestQualityMemorizer();
+      BestQualityMemorizer bestQualityMemorizer2 = new BestQualityMemorizer();
       BestAverageWorstQualityCalculator bestAverageWorstQualityCalculator1 = new BestAverageWorstQualityCalculator();
       DataTableValuesCollector dataTableValuesCollector1 = new DataTableValuesCollector();
+      QualityDifferenceCalculator qualityDifferenceCalculator1 = new QualityDifferenceCalculator();
       ResultsCollector resultsCollector = new ResultsCollector();
       SubScopesSorter subScopesSorter1 = new SubScopesSorter();
@@ -130,34 +132,47 @@
       IntCounter intCounter = new IntCounter();
       Comparator comparator = new Comparator();
-      BestQualityMemorizer bestQualityMemorizer2 = new BestQualityMemorizer();
+      BestQualityMemorizer bestQualityMemorizer3 = new BestQualityMemorizer();
+      BestQualityMemorizer bestQualityMemorizer4 = new BestQualityMemorizer();
       BestAverageWorstQualityCalculator bestAverageWorstQualityCalculator2 = new BestAverageWorstQualityCalculator();
       DataTableValuesCollector dataTableValuesCollector2 = new DataTableValuesCollector();
+      QualityDifferenceCalculator qualityDifferenceCalculator2 = new QualityDifferenceCalculator();
       ConditionalBranch conditionalBranch = new ConditionalBranch();
 
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Generations", new IntValue(0)));
 
-      bestQualityMemorizer1.BestQualityParameter.ActualName = "Best Quality";
+      bestQualityMemorizer1.BestQualityParameter.ActualName = "BestQuality";
       bestQualityMemorizer1.MaximizationParameter.ActualName = "Maximization";
       bestQualityMemorizer1.QualityParameter.ActualName = "Quality";
 
-      bestAverageWorstQualityCalculator1.AverageQualityParameter.ActualName = "Current Average Quality";
-      bestAverageWorstQualityCalculator1.BestQualityParameter.ActualName = "Current Best Quality";
+      bestQualityMemorizer2.BestQualityParameter.ActualName = "BestKnownQuality";
+      bestQualityMemorizer2.MaximizationParameter.ActualName = "Maximization";
+      bestQualityMemorizer2.QualityParameter.ActualName = "Quality";
+
+      bestAverageWorstQualityCalculator1.AverageQualityParameter.ActualName = "CurrentAverageQuality";
+      bestAverageWorstQualityCalculator1.BestQualityParameter.ActualName = "CurrentBestQuality";
       bestAverageWorstQualityCalculator1.MaximizationParameter.ActualName = "Maximization";
       bestAverageWorstQualityCalculator1.QualityParameter.ActualName = "Quality";
-      bestAverageWorstQualityCalculator1.WorstQualityParameter.ActualName = "Current Worst Quality";
-
-      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality"));
-      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality"));
-      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality"));
-      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality"));
+      bestAverageWorstQualityCalculator1.WorstQualityParameter.ActualName = "CurrentWorstQuality";
+
+      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality", null, "CurrentBestQuality"));
+      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality", null, "CurrentAverageQuality"));
+      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality", null, "CurrentWorstQuality"));
+      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
       dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, "BestKnownQuality"));
       dataTableValuesCollector1.DataTableParameter.ActualName = "Qualities";
 
+      qualityDifferenceCalculator1.AbsoluteDifferenceParameter.ActualName = "AbsoluteDifferenceBestKnownToBest";
+      qualityDifferenceCalculator1.FirstQualityParameter.ActualName = "BestKnownQuality";
+      qualityDifferenceCalculator1.RelativeDifferenceParameter.ActualName = "RelativeDifferenceBestKnownToBest";
+      qualityDifferenceCalculator1.SecondQualityParameter.ActualName = "BestQuality";
+
       resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
-      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality"));
-      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality"));
-      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality"));
-      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality"));
+      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality", null, "CurrentBestQuality"));
+      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality", null, "CurrentAverageQuality"));
+      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality", null, "CurrentWorstQuality"));
+      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
       resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, "BestKnownQuality"));
+      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Absolute Difference of Best Known Quality to Best Quality", null, "AbsoluteDifferenceBestKnownToBest"));
+      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Relative Difference of Best Known Quality to Best Quality", null, "RelativeDifferenceBestKnownToBest"));
       resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>("Qualities"));
       resultsCollector.ResultsParameter.ActualName = "Results";
@@ -199,20 +214,29 @@
       comparator.RightSideParameter.ActualName = "MaximumGenerations";
 
-      bestQualityMemorizer2.BestQualityParameter.ActualName = "Best Quality";
-      bestQualityMemorizer2.MaximizationParameter.ActualName = "Maximization";
-      bestQualityMemorizer2.QualityParameter.ActualName = "Quality";
-
-      bestAverageWorstQualityCalculator2.AverageQualityParameter.ActualName = "Current Average Quality";
-      bestAverageWorstQualityCalculator2.BestQualityParameter.ActualName = "Current Best Quality";
+      bestQualityMemorizer3.BestQualityParameter.ActualName = "BestQuality";
+      bestQualityMemorizer3.MaximizationParameter.ActualName = "Maximization";
+      bestQualityMemorizer3.QualityParameter.ActualName = "Quality";
+
+      bestQualityMemorizer4.BestQualityParameter.ActualName = "BestKnownQuality";
+      bestQualityMemorizer4.MaximizationParameter.ActualName = "Maximization";
+      bestQualityMemorizer4.QualityParameter.ActualName = "Quality";
+
+      bestAverageWorstQualityCalculator2.AverageQualityParameter.ActualName = "CurrentAverageQuality";
+      bestAverageWorstQualityCalculator2.BestQualityParameter.ActualName = "CurrentBestQuality";
       bestAverageWorstQualityCalculator2.MaximizationParameter.ActualName = "Maximization";
       bestAverageWorstQualityCalculator2.QualityParameter.ActualName = "Quality";
-      bestAverageWorstQualityCalculator2.WorstQualityParameter.ActualName = "Current Worst Quality";
-
-      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality"));
-      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality"));
-      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality"));
-      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality"));
+      bestAverageWorstQualityCalculator2.WorstQualityParameter.ActualName = "CurrentWorstQuality";
+
+      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality", null, "CurrentBestQuality"));
+      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality", null, "CurrentAverageQuality"));
+      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality", null, "CurrentWorstQuality"));
+      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
       dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, "BestKnownQuality"));
       dataTableValuesCollector2.DataTableParameter.ActualName = "Qualities";
+
+      qualityDifferenceCalculator2.AbsoluteDifferenceParameter.ActualName = "AbsoluteDifferenceBestKnownToBest";
+      qualityDifferenceCalculator2.FirstQualityParameter.ActualName = "BestKnownQuality";
+      qualityDifferenceCalculator2.RelativeDifferenceParameter.ActualName = "RelativeDifferenceBestKnownToBest";
+      qualityDifferenceCalculator2.SecondQualityParameter.ActualName = "BestQuality";
 
       conditionalBranch.ConditionParameter.ActualName = "Terminate";
@@ -222,7 +246,9 @@
       OperatorGraph.InitialOperator = variableCreator;
       variableCreator.Successor = bestQualityMemorizer1;
-      bestQualityMemorizer1.Successor = bestAverageWorstQualityCalculator1;
+      bestQualityMemorizer1.Successor = bestQualityMemorizer2;
+      bestQualityMemorizer2.Successor = bestAverageWorstQualityCalculator1;
       bestAverageWorstQualityCalculator1.Successor = dataTableValuesCollector1;
-      dataTableValuesCollector1.Successor = resultsCollector;
+      dataTableValuesCollector1.Successor = qualityDifferenceCalculator1;
+      qualityDifferenceCalculator1.Successor = resultsCollector;
       resultsCollector.Successor = subScopesSorter1;
       subScopesSorter1.Successor = selector;
@@ -249,8 +275,10 @@
       mergingReducer.Successor = intCounter;
       intCounter.Successor = comparator;
-      comparator.Successor = bestQualityMemorizer2;
-      bestQualityMemorizer2.Successor = bestAverageWorstQualityCalculator2;
+      comparator.Successor = bestQualityMemorizer3;
+      bestQualityMemorizer3.Successor = bestQualityMemorizer4;
+      bestQualityMemorizer4.Successor = bestAverageWorstQualityCalculator2;
       bestAverageWorstQualityCalculator2.Successor = dataTableValuesCollector2;
-      dataTableValuesCollector2.Successor = conditionalBranch;
+      dataTableValuesCollector2.Successor = qualityDifferenceCalculator2;
+      qualityDifferenceCalculator2.Successor = conditionalBranch;
       conditionalBranch.FalseBranch = subScopesSorter1;
       conditionalBranch.TrueBranch = null;
Index: trunk/sources/HeuristicLab.Analysis/3.3/DataTableValuesCollector.cs
===================================================================
--- trunk/sources/HeuristicLab.Analysis/3.3/DataTableValuesCollector.cs	(revision 3094)
+++ trunk/sources/HeuristicLab.Analysis/3.3/DataTableValuesCollector.cs	(revision 3095)
@@ -58,5 +58,5 @@
         table.Rows.TryGetValue(param.Name, out row);
         if (row == null) {
-          row = new DataRow(param.Name);
+          row = new DataRow(param.Name, param.Description);
           row.Values.Add(data.Value);
           table.Rows.Add(row);
Index: trunk/sources/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj	(revision 3094)
+++ trunk/sources/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj	(revision 3095)
@@ -86,4 +86,5 @@
     <Compile Include="BestAverageWorstQualityCalculator.cs" />
     <Compile Include="BestQualityMemorizer.cs" />
+    <Compile Include="QualityDifferenceCalculator.cs" />
     <Compile Include="DataRow.cs" />
     <Compile Include="HeuristicLabAnalysisPlugin.cs" />
Index: trunk/sources/HeuristicLab.Analysis/3.3/QualityDifferenceCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Analysis/3.3/QualityDifferenceCalculator.cs	(revision 3095)
+++ trunk/sources/HeuristicLab.Analysis/3.3/QualityDifferenceCalculator.cs	(revision 3095)
@@ -0,0 +1,72 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Analysis {
+  /// <summary>
+  /// An operator which calculates the absolute and relative difference of two quality values.
+  /// </summary>
+  [Item("QualityDifferenceCalculator", "An operator which calculates the absolute and relative difference of two quality values.")]
+  [StorableClass]
+  public class QualityDifferenceCalculator : SingleSuccessorOperator {
+    public IValueLookupParameter<DoubleValue> FirstQualityParameter {
+      get { return (IValueLookupParameter<DoubleValue>)Parameters["FirstQuality"]; }
+    }
+    public IValueLookupParameter<DoubleValue> SecondQualityParameter {
+      get { return (IValueLookupParameter<DoubleValue>)Parameters["SecondQuality"]; }
+    }
+    public IValueLookupParameter<DoubleValue> AbsoluteDifferenceParameter {
+      get { return (IValueLookupParameter<DoubleValue>)Parameters["AbsoluteDifference"]; }
+    }
+    public IValueLookupParameter<PercentValue> RelativeDifferenceParameter {
+      get { return (IValueLookupParameter<PercentValue>)Parameters["RelativeDifference"]; }
+    }
+
+    public QualityDifferenceCalculator()
+      : base() {
+      Parameters.Add(new ValueLookupParameter<DoubleValue>("FirstQuality", "The first quality value from which the difference to the second quality value is calculated."));
+      Parameters.Add(new ValueLookupParameter<DoubleValue>("SecondQuality", "The second quality value from which the difference from the first quality value is calculated."));
+      Parameters.Add(new ValueLookupParameter<DoubleValue>("AbsoluteDifference", "The absolute difference of the first and second quality value."));
+      Parameters.Add(new ValueLookupParameter<PercentValue>("RelativeDifference", "The relative difference of the first and second quality value."));
+    }
+
+    public override IOperation Apply() {
+      DoubleValue first = FirstQualityParameter.ActualValue;
+      DoubleValue second = SecondQualityParameter.ActualValue;
+
+      if ((first != null) && (second != null)) {
+        double absolute = second.Value - first.Value;
+        double relative = first.Value == 0 ? double.NaN : absolute / first.Value;
+
+        if (AbsoluteDifferenceParameter.ActualValue == null) AbsoluteDifferenceParameter.ActualValue = new DoubleValue(absolute);
+        else AbsoluteDifferenceParameter.ActualValue.Value = absolute;
+        if (RelativeDifferenceParameter.ActualValue == null) RelativeDifferenceParameter.ActualValue = new PercentValue(relative);
+        else RelativeDifferenceParameter.ActualValue.Value = relative;
+      }
+      return base.Apply();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj	(revision 3094)
+++ trunk/sources/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj	(revision 3095)
@@ -104,4 +104,5 @@
     <Compile Include="Comparison.cs" />
     <Compile Include="ComparisonType.cs" />
+    <Compile Include="PercentValue.cs" />
     <Compile Include="DateTimeValue.cs" />
     <Compile Include="DoubleArray.cs" />
Index: trunk/sources/HeuristicLab.Data/3.3/PercentValue.cs
===================================================================
--- trunk/sources/HeuristicLab.Data/3.3/PercentValue.cs	(revision 3095)
+++ trunk/sources/HeuristicLab.Data/3.3/PercentValue.cs	(revision 3095)
@@ -0,0 +1,62 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Data {
+  [Item("PercentValue", "Represents a double value in percent.")]
+  [Creatable("Test")]
+  [StorableClass]
+  public class PercentValue : DoubleValue {
+    public PercentValue() : base() { }
+    public PercentValue(double value) : base(value) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      PercentValue clone = new PercentValue(value);
+      cloner.RegisterClonedObject(this, clone);
+      return clone;
+    }
+
+    public override string ToString() {
+      return (Value * 100).ToString("r") + " %";  // round-trip format
+    }
+
+    protected override bool Validate(string value, out string errorMessage) {
+      value = value.Replace("%", string.Empty);
+      return base.Validate(value, out errorMessage);
+    }
+    protected override string GetValue() {
+      return (Value * 100).ToString("r") + " %";  // round-trip format
+    }
+    protected override bool SetValue(string value) {
+      value = value.Replace("%", string.Empty);
+      double val;
+      if (double.TryParse(value, out val)) {
+        Value = val == 0 ? 0 : val / 100;
+        return true;
+      } else {
+        return false;
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Operators/3.3/ResultsCollector.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators/3.3/ResultsCollector.cs	(revision 3094)
+++ trunk/sources/HeuristicLab.Operators/3.3/ResultsCollector.cs	(revision 3095)
@@ -49,5 +49,5 @@
           var.Value = (IItem)param.ActualValue;
         else
-          results.Add(new Variable(param.Name, param.ActualValue));
+          results.Add(new Variable(param.Name, param.Description, param.ActualValue));
       }
       return base.Apply();
Index: trunk/sources/HeuristicLab.Operators/3.3/VariableCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators/3.3/VariableCreator.cs	(revision 3094)
+++ trunk/sources/HeuristicLab.Operators/3.3/VariableCreator.cs	(revision 3095)
@@ -51,5 +51,5 @@
           var.Value = (IItem)param.ActualValue.Clone();
         else
-          CurrentScope.Variables.Add(new Variable(param.Name, (IItem)param.ActualValue.Clone()));
+          CurrentScope.Variables.Add(new Variable(param.Name, param.Description, (IItem)param.ActualValue.Clone()));
       }
       return base.Apply();
