Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs	(revision 6196)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs	(revision 6197)
@@ -48,11 +48,11 @@
     //private static double mutationProbability = 0.10;
 
-    private static int metaAlgorithmPopulationSize = 10;
-    private static int metaAlgorithmMaxGenerations = 20;
+    private static int metaAlgorithmPopulationSize = 4;
+    private static int metaAlgorithmMaxGenerations = 10;
     private static double metaAlgorithmMutationProbability = 0.10;
-    private static int metaProblemRepetitions = 2;
-    private static int baseAlgorithmMaxGenerations = 10;
+    private static int metaProblemRepetitions = 3;
+    private static int baseAlgorithmMaxGenerations = 20;
     private static int baseAlgorithmPopulationSize = 10;
-    
+
     public override void Run() {
       ContentManager.Initialize(new PersistenceContentManager());
@@ -60,4 +60,7 @@
       //TestTableBuilder();
       //TestShorten();
+
+
+      var x = typeof(float).IsPrimitive;
 
       //TestSimilarities(); return;
@@ -79,4 +82,6 @@
 
       //TestSymbolicDataAnalysisGrammar(); return;
+      //TestObjectGraphObjectsTraversal(); return;
+      //TestParameterizedItem(); return;
 
       //MetaOptimizationProblem metaOptimizationProblem = LoadOptimizationProblem("Meta Optimization Problem (Genetic Programming - Symbolic Regression 3.4 scaled).hl");
@@ -92,10 +97,8 @@
       //EvolutionStrategy metaLevelAlgorithm = GetMetaES(metaOptimizationProblem);
 
-      //Console.WriteLine("Press enter to start");
-      //Console.ReadLine();
+      //Console.WriteLine("Press enter to start"); Console.ReadLine();
       //TestConfiguration(algorithmVc, typeof(GeneticAlgorithm), metaOptimizationProblem.Problems.First());
 
-      //Console.WriteLine("Press enter to start");
-      //Console.ReadLine();
+      Console.WriteLine("Press enter to start"); Console.ReadLine();
       TestOptimization(metaLevelAlgorithm);
 
@@ -103,4 +106,48 @@
 
       Console.ReadLine();
+    }
+
+    private void TestParameterizedItem() {
+      var value = new MyParameterizedItem();
+      Console.WriteLine("P1=1;; " + value.ToString());
+
+      var vc = new ParameterizedValueConfiguration(value, typeof(MyParameterizedItem), true);
+      vc.Optimize = true;
+      ((IntValue)vc.ParameterConfigurations.Single(x => x.Name == "P1").ActualValue.Value).Value = 22;
+      Console.WriteLine("P1=22;; " + value.ToString());
+      vc.ParameterConfigurations.Single(x => x.Name == "P1").ActualValue.Value = new IntValue(33);
+      Console.WriteLine("P1=33;; " + value.ToString());
+      vc.Parameterize(value);
+      Console.WriteLine("P1=33;; " + value.ToString());
+            
+      Console.ReadLine();
+    }
+
+    private void TestObjectGraphObjectsTraversal() {
+      //var obj = new GeneticAlgorithm();
+      var obj = ContentManager.Load("Genetic Programming - Symbolic Regression 3.4_scaled_paused.hl");
+      Console.WriteLine("loaded");
+
+      for (int i = 0; i < 10; i++) {
+        var sw = new Stopwatch();
+        sw.Start();
+        var objects = obj.GetObjectGraphObjects().ToArray();
+        sw.Stop();
+
+        var typeCount = GetTypeCount(objects).ToArray();
+        Console.WriteLine("objects: {0}", objects.Count());
+        Console.WriteLine(sw.Elapsed);
+      }
+    }
+
+    private IOrderedEnumerable<KeyValuePair<Type, long>> GetTypeCount(object[] objects) {
+      var dict = new Dictionary<Type, long>();
+      foreach (var item in objects) {
+        var t = item.GetType();
+        if (!dict.ContainsKey(t))
+          dict.Add(t, 0);
+        dict[t]++;
+      }
+      return dict.OrderByDescending(x => x.Value);
     }
 
@@ -733,6 +780,6 @@
     private static ParameterConfigurationTree SetupGAAlgorithm(Type baseLevelAlgorithmType, MetaOptimizationProblem metaOptimizationProblem) {
       metaOptimizationProblem.AlgorithmType.Value = baseLevelAlgorithmType;
-      
-      //metaOptimizationProblem.ProblemType.Value = typeof(SingleObjectiveTestFunctionProblem);
+
+      metaOptimizationProblem.ProblemType.Value = typeof(SingleObjectiveTestFunctionProblem);
       //metaOptimizationProblem.Problems.Clear();
       //metaOptimizationProblem.Problems.Add(new HeuristicLab.Problems.TestFunctions.SingleObjectiveTestFunctionProblem() {
@@ -753,18 +800,18 @@
 
       // tower problem
-      metaOptimizationProblem.ImportAlgorithm((IAlgorithm)ContentManager.Load("Genetic Programming - Symbolic Regression 3.4_scaled.hl"));
-      metaOptimizationProblem.Maximization.Value = true;
+      //metaOptimizationProblem.ImportAlgorithm((IAlgorithm)ContentManager.Load("Genetic Programming - Symbolic Regression 3.4_scaled.hl"));
+      //metaOptimizationProblem.Maximization.Value = true;
 
       ParameterConfigurationTree algorithmVc = metaOptimizationProblem.ParameterConfigurationTree;
       ((IntValue)algorithmVc.AlgorithmConfiguration.ParameterConfigurations.Single(x => x.Name == "MaximumGenerations").ActualValue.Value).Value = baseAlgorithmMaxGenerations;
       ((IntValue)algorithmVc.AlgorithmConfiguration.ParameterConfigurations.Single(x => x.Name == "PopulationSize").ActualValue.Value).Value = baseAlgorithmPopulationSize;
-      
+
       //ConfigurePopulationSize(algorithmVc, 10, 100, 1);
-      //ConfigureMutationRate(algorithmVc, 0.0, 1.0, 0.01);
-      //ConfigureMutationOperator(algorithmVc);
+      ConfigureMutationRate(algorithmVc, 0.0, 1.0, 0.01);
+      ConfigureMutationOperator(algorithmVc);
       //ConfigureElites(algorithmVc, 0, 10, 1);
       //ConfigureSelectionOperator(algorithmVc, true);
 
-      ConfigureSymbolicExpressionGrammar(algorithmVc);
+      //ConfigureSymbolicExpressionGrammar(algorithmVc);
 
       return algorithmVc;
@@ -992,5 +1039,5 @@
 
       ContentManager.Save((IStorableContent)metaLevelAlgorithm, resultPath + "-before.hl", true);
-      
+
       using (var sw = new StreamWriter(outputPath)) {
         sw.AutoFlush = true;
@@ -1262,3 +1309,42 @@
     }
   }
+
+  class MyParameterizedItem : ParameterizedNamedItem {
+    public MyParameterizedItem() {
+      this.Parameters.Add(new ValueParameter<IntValue>("P1", new IntValue(1)));
+      this.Parameters.Add(new ValueParameter<IntValue>("P2", new IntValue(2)));
+      this.Parameters.Add(new ValueParameter<IntValue>("P3", new IntValue(3)));
+      this.Parameters.Add(new ValueParameter<MyOtherParameterizedItem>("P4", new MyOtherParameterizedItem()));
+    }
+
+    protected MyParameterizedItem(MyParameterizedItem original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MyParameterizedItem(this, cloner);
+    }
+
+    public override string ToString() {
+      return string.Format("P1: {0}, P2: {1}, P3: {2}, P4: {3}", Parameters["P1"].ActualValue, Parameters["P2"].ActualValue, Parameters["P3"].ActualValue, Parameters["P4"].ActualValue);
+    }
+  }
+
+  class MyOtherParameterizedItem : ParameterizedNamedItem {
+    public MyOtherParameterizedItem() {
+      this.Parameters.Add(new ValueParameter<IntValue>("PP1", new IntValue(1)));
+      this.Parameters.Add(new ValueParameter<IntValue>("PP2", new IntValue(2)));
+      this.Parameters.Add(new ValueParameter<IntValue>("PP3", new IntValue(3)));
+    }
+
+    protected MyOtherParameterizedItem(MyOtherParameterizedItem original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MyOtherParameterizedItem(this, cloner);
+    }
+
+    public override string ToString() {
+      return string.Format("PP1: {0}, PP2: {1}, PP3: {2}", Parameters["PP1"].ActualValue, Parameters["PP2"].ActualValue, Parameters["PP3"].ActualValue);
+    }
+  }
 }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/BestParameterConfigurationAnalyzer.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/BestParameterConfigurationAnalyzer.cs	(revision 6196)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/BestParameterConfigurationAnalyzer.cs	(revision 6197)
@@ -102,5 +102,5 @@
       RunCollection rc = new RunCollection();
       foreach (ParameterConfigurationTree pt in (maximization ? parameterTrees.OrderByDescending(x => x.Quality) : parameterTrees.OrderBy(x => x.Quality))) {
-        rc.Add(pt.ToRun(string.Format("Individual {0} ({1})", i, pt.ParameterInfoString)));
+        rc.Add(pt.ToRun(string.Format("Individual {0} ({1})", i, pt.ParameterInfoString), true));
         i++;
       }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/PMOBestSolutionHistoryAnalyzer.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/PMOBestSolutionHistoryAnalyzer.cs	(revision 6196)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/PMOBestSolutionHistoryAnalyzer.cs	(revision 6197)
@@ -76,5 +76,5 @@
       }
       if (bestSolutionHistory.Count == 0 || best.ParameterInfoString != ((StringValue)bestSolutionHistory.Last().Results["Meta.ParameterInfoString"]).Value) {
-        IRun run = best.ToRun(string.Format("{0}: {1}", currentGeneration, best.ParameterInfoString));
+        IRun run = best.ToRun(string.Format("{0}: {1}", currentGeneration, best.ParameterInfoString), false);
         run.Results.Add("Meta.Generation", new IntValue(currentGeneration));
         run.Results.Add("Meta.ParameterInfoString", new StringValue(best.ParameterInfoString));
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurationTree.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurationTree.cs	(revision 6196)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurationTree.cs	(revision 6197)
@@ -184,5 +184,4 @@
         this.parameters.Add(p.Key, cloner.Clone(p.Value));
       }
-      //this.name = original.name;
     }
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -291,14 +290,14 @@
     }
 
-    public IRun ToRun() {
-      return ToRun(this.ParameterInfoString);
-    }
-
-    public IRun ToRun(string name) {
+    public IRun ToRun(bool clearParameters) {
+      return ToRun(this.ParameterInfoString, clearParameters);
+    }
+
+    public IRun ToRun(string name, bool clearParameters) {
       IRun run = new Run();
       run.Name = name;
       this.CollectResultValues(run.Results);
       this.CollectParameterValues(run.Parameters);
-      MetaOptimizationUtil.ClearParameters(run, this.GetOptimizedParameterNames());
+      if(clearParameters) MetaOptimizationUtil.ClearParameters(run, this.GetOptimizedParameterNames());
       return run;
     }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/ParameterConfiguration.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/ParameterConfiguration.cs	(revision 6196)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/ParameterConfiguration.cs	(revision 6197)
@@ -211,5 +211,7 @@
       this.validTypes = original.validTypes.ToArray();
       this.valueConfigurations = cloner.Clone(original.ValueConfigurations);
-      this.ActualValue = cloner.Clone(original.ActualValue);
+      if (this.valueConfigurations != null) RegisterValueConfigurationEvents();
+      this.actualValue = cloner.Clone(original.actualValue);
+      if (this.actualValue != null) RegisterActualValueEvents();
       this.optimize = original.optimize;
       this.actualValueConfigurationIndex = original.actualValueConfigurationIndex;
@@ -217,5 +219,4 @@
       this.itemImage = original.itemImage;
       this.discoverValidValues = original.discoverValidValues;
-      if (this.valueConfigurations != null) RegisterValueConfigurationEvents();
       this.AutoPopulateValueConfigurations = original.AutoPopulateValueConfigurations;
     }
@@ -226,6 +227,7 @@
     }
     [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
+    protected virtual void AfterDeserialization() {
       if (this.valueConfigurations != null) RegisterValueConfigurationEvents();
+      if (this.actualValue != null) RegisterActualValueEvents();
     }
     #endregion
@@ -400,5 +402,5 @@
 
     #region Events
-    void ActualValue_ToStringChanged(object sender, EventArgs e) {
+    protected virtual void ActualValue_ToStringChanged(object sender, EventArgs e) {
       OnToStringChanged();
     }
@@ -495,5 +497,5 @@
       var clonedValue = this.ActualValue.Value != null ? (IItem)this.ActualValue.Value.Clone() : null;
       if (clonedValue != null) AdaptValidValues(parameter, clonedValue);
-      parameter.Value = clonedValue;
+      parameter.ActualValue = clonedValue;
     }
 
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/SingleValuedParameterConfiguration.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/SingleValuedParameterConfiguration.cs	(revision 6196)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/SingleValuedParameterConfiguration.cs	(revision 6197)
@@ -8,5 +8,5 @@
   [StorableClass]
   public class SingleValuedParameterConfiguration : ParameterConfiguration {
-
+    
     #region Constructors and Cloning
     [StorableConstructor]
@@ -25,5 +25,5 @@
       this.validValues = new ItemSet<IItem> { valueConfiguration.ActualValue.Value };
       this.validTypes = new Type[] { valueConfiguration.ActualValue.ValueDataType };
-      this.IsNullable = false;
+      this.isNullable = false;
       this.itemImage = valueConfiguration.ItemImage;
       this.ValueConfigurations = new CheckedValueConfigurationList { valueConfiguration };
@@ -54,10 +54,10 @@
 
     public override string ToString() {
-      if (this.valueConfigurations.First() is SymbolValueConfiguration) {
-        var syVc = (SymbolValueConfiguration)this.valueConfigurations.First();
+      if (this.valueConfigurations.Single() is SymbolValueConfiguration) {
+        var syVc = (SymbolValueConfiguration)this.valueConfigurations.Single();
         if (this.Optimize) {
           return syVc.ToString() + " (Optimize)";
         } else {
-          return syVc.ToString();
+          return ActualValue.ToString();
         }
       } else {
@@ -66,5 +66,5 @@
     }
 
-    private void valueConfiguration_ToStringChanged(object sender, EventArgs e) {
+    protected virtual void valueConfiguration_ToStringChanged(object sender, EventArgs e) {
       OnToStringChanged();
     }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/RangeConstraints/ConstrainedValue.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/RangeConstraints/ConstrainedValue.cs	(revision 6196)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/RangeConstraints/ConstrainedValue.cs	(revision 6197)
@@ -1,10 +1,7 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Common;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Data;
 
 namespace HeuristicLab.Problems.MetaOptimization {
@@ -56,7 +53,14 @@
     private void RegisterEvents() {
       this.value.ToStringChanged += new EventHandler(value_ToStringChanged);
+      if (this.value is Symbol) {
+        ((Symbol)this.value).Changed += new EventHandler(ConstrainedValue_Changed);
+      }
     }
+
     private void DeregisterEvents() {
       this.value.ToStringChanged -= new EventHandler(value_ToStringChanged);
+      if (this.value is Symbol) {
+        ((Symbol)this.value).Changed -= new EventHandler(ConstrainedValue_Changed);
+      }
     }
 
@@ -90,5 +94,12 @@
     }
 
+    private void ConstrainedValue_Changed(object sender, EventArgs e) {
+      OnToStringChanged();
+    }
+
     public override string ToString() {
+      if (this.value is Symbol) {
+        return string.Format("{0}: {1}", this.value, ((Symbol)this.value).InitialFrequency);
+      }
       return value != null ? value.ToString() : base.ToString();
     }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/SymbolicExpressionGrammar/SymbolValueConfiguration.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/SymbolicExpressionGrammar/SymbolValueConfiguration.cs	(revision 6196)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/SymbolicExpressionGrammar/SymbolValueConfiguration.cs	(revision 6197)
@@ -1,3 +1,4 @@
-﻿using System.Collections.Generic;
+﻿using System;
+using System.Collections.Generic;
 using System.Linq;
 using HeuristicLab.Common;
@@ -11,4 +12,10 @@
   [StorableClass]
   public class SymbolValueConfiguration : ParameterizedValueConfiguration {
+    [Storable]
+    private IOptimizable parentOptimizable;
+    public IOptimizable ParentOptimizable {
+      get { return parentOptimizable; }
+      set { this.parentOptimizable = value; }
+    }
 
     #region Constructors and Cloning
@@ -21,11 +28,17 @@
       this.Optimize = false;
       this.Name = symbol.Name;
-      this.actualValue = new ConstrainedValue(symbol, symbol.GetType(), new ItemSet<IItem> { symbol }, false);
+      this.ActualValue = new ConstrainedValue(symbol, symbol.GetType(), new ItemSet<IItem> { symbol }, false);
     }
     protected SymbolValueConfiguration(SymbolValueConfiguration original, Cloner cloner)
       : base(original, cloner) {
+      RegisterInitialFrequencyEvents();
+      this.parentOptimizable = cloner.Clone(original.parentOptimizable);
     }
     public override IDeepCloneable Clone(Cloner cloner) {
       return new SymbolValueConfiguration(this, cloner);
+    }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterInitialFrequencyEvents();
     }
     #endregion
@@ -33,5 +46,4 @@
     protected override void PopulateParameterConfigurations(IItem item, bool discoverValidValues) {
       this.ClearParameterConfigurations();
-
       var symbol = (Symbol)item;
 
@@ -41,4 +53,5 @@
       var initialFrequencyParameterConfiguration = new ParameterConfiguration("InitialFrequency", typeof(Symbol), new DoubleValue(symbol.InitialFrequency), initialFrequencyValueConfigurations);
       this.parameterConfigurations.Add(initialFrequencyParameterConfiguration);
+      RegisterInitialFrequencyEvents();
 
       var constant = symbol as Constant;
@@ -74,22 +87,25 @@
 
     public virtual void Parameterize(Symbol symbol) {
-      symbol.InitialFrequency = GetDoubleValue("InitialFrequency");
-      
+      var actualValueSymbol = this.ActualValue.Value as Symbol;
+      symbol.InitialFrequency = parentOptimizable.Optimize ? GetDoubleValue("InitialFrequency") : actualValueSymbol.InitialFrequency;
+
       var constant = symbol as Constant;
       if (constant != null) {
-        constant.MinValue = GetDoubleValue("MinValue");
-        constant.MaxValue = GetDoubleValue("MaxValue");
-        constant.ManipulatorMu = GetDoubleValue("ManipulatorMu");
-        constant.ManipulatorSigma = GetDoubleValue("ManipulatorSigma");
-        constant.MultiplicativeManipulatorSigma = GetDoubleValue("MultiplicativeManipulatorSigma");
+        var actualValueConstant = this.ActualValue.Value as Constant;
+        constant.MinValue = parentOptimizable.Optimize ? GetDoubleValue("MinValue") : actualValueConstant.MinValue;
+        constant.MaxValue = parentOptimizable.Optimize ? GetDoubleValue("MaxValue") : actualValueConstant.MaxValue;
+        constant.ManipulatorMu = parentOptimizable.Optimize ? GetDoubleValue("ManipulatorMu") : actualValueConstant.ManipulatorMu;
+        constant.ManipulatorSigma = parentOptimizable.Optimize ? GetDoubleValue("ManipulatorSigma") : actualValueConstant.ManipulatorSigma;
+        constant.MultiplicativeManipulatorSigma = parentOptimizable.Optimize ? GetDoubleValue("MultiplicativeManipulatorSigma") : actualValueConstant.MultiplicativeManipulatorSigma;
       }
-      
+
       var variable = symbol as HeuristicLab.Problems.DataAnalysis.Symbolic.Variable;
       if (variable != null) {
-        variable.WeightMu = GetDoubleValue("WeightMu");
-        variable.WeightSigma = GetDoubleValue("WeightSigma");
-        variable.WeightManipulatorMu = GetDoubleValue("WeightManipulatorMu");
-        variable.WeightManipulatorSigma = GetDoubleValue("WeightManipulatorSigma");
-        variable.MultiplicativeWeightManipulatorSigma = GetDoubleValue("MultiplicativeWeightManipulatorSigma");
+        var actualValueVariable = this.ActualValue.Value as HeuristicLab.Problems.DataAnalysis.Symbolic.Variable;
+        variable.WeightMu = parentOptimizable.Optimize ? GetDoubleValue("WeightMu") : actualValueVariable.WeightMu;
+        variable.WeightSigma = parentOptimizable.Optimize ? GetDoubleValue("WeightSigma") : actualValueVariable.WeightSigma;
+        variable.WeightManipulatorMu = parentOptimizable.Optimize ? GetDoubleValue("WeightManipulatorMu") : actualValueVariable.WeightManipulatorMu;
+        variable.WeightManipulatorSigma = parentOptimizable.Optimize ? GetDoubleValue("WeightManipulatorSigma") : actualValueVariable.WeightManipulatorSigma;
+        variable.MultiplicativeWeightManipulatorSigma = parentOptimizable.Optimize ? GetDoubleValue("MultiplicativeWeightManipulatorSigma") : actualValueVariable.MultiplicativeWeightManipulatorSigma;
       }
     }
@@ -97,4 +113,15 @@
     private double GetDoubleValue(string name) {
       return ((DoubleValue)ParameterConfigurations.Single(x => x.Name == name).ActualValue.Value).Value;
+    }
+
+    private void RegisterInitialFrequencyEvents() {
+      this.parameterConfigurations.Single(x => x.Name == "InitialFrequency").ToStringChanged += new EventHandler(initialFrequencyParameterConfiguration_ToStringChanged);
+    }
+    private void DeregisterInitialFrequencyEvents() {
+      this.parameterConfigurations.Single(x => x.Name == "InitialFrequency").ToStringChanged -= new EventHandler(initialFrequencyParameterConfiguration_ToStringChanged);
+    }
+
+    protected virtual void initialFrequencyParameterConfiguration_ToStringChanged(object sender, EventArgs e) {
+      OnToStringChanged();
     }
 
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/SymbolicExpressionGrammar/SymbolicExpressionGrammarValueConfiguration.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/SymbolicExpressionGrammar/SymbolicExpressionGrammarValueConfiguration.cs	(revision 6196)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/SymbolicExpressionGrammar/SymbolicExpressionGrammarValueConfiguration.cs	(revision 6197)
@@ -28,5 +28,7 @@
       var grammar = (ISymbolicExpressionGrammar)item;
       foreach (Symbol symbol in grammar.Symbols) {
-        var pc = new SingleValuedParameterConfiguration(symbol.Name, new SymbolValueConfiguration(symbol));
+        var svc = new SymbolValueConfiguration(symbol);
+        var pc = new SingleValuedParameterConfiguration(symbol.Name, svc);
+        svc.ParentOptimizable = pc;
         SetOptimizeIfOnlyOneValueConfiguration(pc);
         this.parameterConfigurations.Add(pc);
@@ -36,5 +38,6 @@
     public virtual void Parameterize(ISymbolicExpressionGrammar grammar) {
       foreach (Symbol symbol in grammar.Symbols) {
-        ((SymbolValueConfiguration)this.parameterConfigurations.Single(pc => pc.Name == symbol.Name).ValueConfigurations.First()).Parameterize(symbol);
+        var symbolValueConfiguration = (SymbolValueConfiguration)this.parameterConfigurations.Single(pc => pc.Name == symbol.Name).ValueConfigurations.First();
+        symbolValueConfiguration.Parameterize(symbol);
       }
     }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/AlgorithmRunsAnalyzer.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/AlgorithmRunsAnalyzer.cs	(revision 6196)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/AlgorithmRunsAnalyzer.cs	(revision 6197)
@@ -132,5 +132,5 @@
           int repetitionIndex = repetitionIndices[i].Value;
 
-          IRun run = algorithms[i].Runs.Single();
+          IRun run = (IRun)algorithms[i].Runs.Single().Clone();
           MetaOptimizationUtil.ClearResults(run, resultNames);
           MetaOptimizationUtil.ClearParameters(run, parameterNames);
@@ -142,5 +142,5 @@
           executionTimes[problemIndex][repetitionIndex] = (((TimeSpanValue)run.Results["Execution Time"]).Value);
           evaluatedSolutions[problemIndex][repetitionIndex] = (((IntValue)run.Results["EvaluatedSolutions"]).Value);
-          runs.Add((IRun)run.Clone());
+          runs.Add(run);
         }
 
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Crossovers/DoubleValue/NormalDoubleValueCrossover.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Crossovers/DoubleValue/NormalDoubleValueCrossover.cs	(revision 6196)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Crossovers/DoubleValue/NormalDoubleValueCrossover.cs	(revision 6197)
@@ -39,4 +39,8 @@
         offspring.Value = range.ApplyStepSize(offspring.Value);
       } while (!range.IsInRange(offspring.Value));
+
+      if (offspring.Value < 0)
+        throw new Exception("WTF Exception");
+
       return offspring;
     }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/DoubleValue/NormalDoubleValueManipulator.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/DoubleValue/NormalDoubleValueManipulator.cs	(revision 6196)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/DoubleValue/NormalDoubleValueManipulator.cs	(revision 6197)
@@ -35,5 +35,5 @@
       var vector = new RealVector(1);
       double val = value.Value;
-
+      
       do { 
         vector[0] = val;
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/IntValue/NormalIntValueManipulator.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/IntValue/NormalIntValueManipulator.cs	(revision 6196)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/IntValue/NormalIntValueManipulator.cs	(revision 6197)
@@ -15,5 +15,5 @@
       get { return (LookupParameter<IRandom>)Parameters["Random"]; }
     }
-
+    
     public NormalIntValueManipulator() { }
     [StorableConstructor]
