Index: /trunk/sources/HeuristicLab.Algorithms.EvolutionStrategy/3.3/EvolutionStrategyMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.EvolutionStrategy/3.3/EvolutionStrategyMainLoop.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Algorithms.EvolutionStrategy/3.3/EvolutionStrategyMainLoop.cs	(revision 3659)
@@ -44,6 +44,6 @@
       get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
     }
-    public SubScopesLookupParameter<DoubleValue> QualityParameter {
-      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Quality"]; }
+    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
     public ValueLookupParameter<DoubleValue> BestKnownQualityParameter {
@@ -106,5 +106,5 @@
       Parameters.Add(new ValueLookupParameter<IRandom>("Random", "A pseudo random number generator."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The best known quality value found so far."));
       Parameters.Add(new ValueLookupParameter<IntValue>("PopulationSize", "µ (mu) - the size of the population."));
Index: /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithmMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithmMainLoop.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithmMainLoop.cs	(revision 3659)
@@ -44,6 +44,6 @@
       get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
     }
-    public SubScopesLookupParameter<DoubleValue> QualityParameter {
-      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Quality"]; }
+    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
     public ValueLookupParameter<IOperator> SelectorParameter {
@@ -94,5 +94,5 @@
       Parameters.Add(new ValueLookupParameter<IRandom>("Random", "A pseudo random number generator."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
       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."));
Index: /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs	(revision 3659)
@@ -49,6 +49,6 @@
       get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
     }
-    public SubScopesLookupParameter<DoubleValue> QualityParameter {
-      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Quality"]; }
+    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
     public ValueLookupParameter<DoubleValue> BestKnownQualityParameter {
@@ -115,5 +115,5 @@
       Parameters.Add(new ValueLookupParameter<IRandom>("Random", "A pseudo random number generator."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The best known quality value found so far."));
       Parameters.Add(new ValueLookupParameter<IntValue>("NumberOfIslands", "The number of islands."));
@@ -193,5 +193,5 @@
       resultsCollector2.Name = "Reference Island Results";
       resultsCollector2.CopyValue = new BoolValue(false);
-      resultsCollector2.CollectedValues.Add(new SubScopesLookupParameter<ResultCollection>("IslandResults", "Result set for each island", "Results"));
+      resultsCollector2.CollectedValues.Add(new ScopeTreeLookupParameter<ResultCollection>("IslandResults", "Result set for each island", "Results"));
       resultsCollector2.ResultsParameter.ActualName = ResultsParameter.Name;
 
Index: /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithmMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithmMainLoop.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithmMainLoop.cs	(revision 3659)
@@ -49,6 +49,6 @@
       get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
     }
-    public SubScopesLookupParameter<DoubleValue> QualityParameter {
-      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Quality"]; }
+    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
     public ValueLookupParameter<DoubleValue> BestKnownQualityParameter {
@@ -142,5 +142,5 @@
       Parameters.Add(new ValueLookupParameter<IRandom>("Random", "A pseudo random number generator."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The best known quality value found so far."));
       Parameters.Add(new ValueLookupParameter<IntValue>("NumberOfIslands", "The number of islands."));
@@ -236,10 +236,10 @@
       resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
       resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
-      resultsCollector1.CollectedValues.Add(new SubScopesLookupParameter<ResultCollection>("IslandResults", "Result set for each island", "Results"));
+      resultsCollector1.CollectedValues.Add(new ScopeTreeLookupParameter<ResultCollection>("IslandResults", "Result set for each island", "Results"));
       resultsCollector1.ResultsParameter.ActualName = ResultsParameter.Name;
 
       resultsCollector2.Name = "Reference Island Results";
       resultsCollector2.CopyValue = new BoolValue(false);
-      resultsCollector2.CollectedValues.Add(new SubScopesLookupParameter<ResultCollection>("IslandResults", "Result set for each island", "Results"));
+      resultsCollector2.CollectedValues.Add(new ScopeTreeLookupParameter<ResultCollection>("IslandResults", "Result set for each island", "Results"));
       resultsCollector2.ResultsParameter.ActualName = ResultsParameter.Name;
 
Index: /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithmMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithmMainLoop.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithmMainLoop.cs	(revision 3659)
@@ -43,6 +43,6 @@
       get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
     }
-    public SubScopesLookupParameter<DoubleValue> QualityParameter {
-      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Quality"]; }
+    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
     public ValueLookupParameter<IOperator> SelectorParameter {
@@ -104,5 +104,5 @@
       Parameters.Add(new ValueLookupParameter<IRandom>("Random", "A pseudo random number generator."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The best known quality value found so far."));
       Parameters.Add(new ValueLookupParameter<IOperator>("Selector", "The operator used to select solutions for reproduction."));
Index: /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithmMainOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithmMainOperator.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithmMainOperator.cs	(revision 3659)
@@ -43,6 +43,6 @@
       get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
     }
-    public SubScopesLookupParameter<DoubleValue> QualityParameter {
-      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Quality"]; }
+    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
     public ValueLookupParameter<IOperator> SelectorParameter {
@@ -98,5 +98,5 @@
       Parameters.Add(new ValueLookupParameter<IRandom>("Random", "A pseudo random number generator."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
       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."));
Index: /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SASEGASAMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SASEGASAMainLoop.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SASEGASAMainLoop.cs	(revision 3659)
@@ -55,6 +55,6 @@
       get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
     }
-    public SubScopesLookupParameter<DoubleValue> QualityParameter {
-      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Quality"]; }
+    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
     public ValueLookupParameter<DoubleValue> BestKnownQualityParameter {
@@ -124,5 +124,5 @@
       Parameters.Add(new ValueLookupParameter<IRandom>("Random", "A pseudo random number generator."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The best known quality value found so far."));
       Parameters.Add(new ValueLookupParameter<IntValue>("NumberOfVillages", "The initial number of villages."));
@@ -234,5 +234,5 @@
       resultsCollector2.Name = "Reference Village Results";
       resultsCollector2.CopyValue = new BoolValue(false);
-      resultsCollector2.CollectedValues.Add(new SubScopesLookupParameter<ResultCollection>("VillageResults", "Result set for each village", "Results"));
+      resultsCollector2.CollectedValues.Add(new ScopeTreeLookupParameter<ResultCollection>("VillageResults", "Result set for each village", "Results"));
       resultsCollector2.ResultsParameter.ActualName = ResultsParameter.Name;
 
Index: /trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuNeighborhoodAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuNeighborhoodAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuNeighborhoodAnalyzer.cs	(revision 3659)
@@ -29,6 +29,6 @@
 namespace HeuristicLab.Algorithms.TabuSearch {
   public class TabuNeighborhoodAnalyzer : SingleSuccessorOperator, IAnalyzer {
-    public SubScopesLookupParameter<BoolValue> IsTabuParameter {
-      get { return (SubScopesLookupParameter<BoolValue>)Parameters["IsTabu"]; }
+    public ScopeTreeLookupParameter<BoolValue> IsTabuParameter {
+      get { return (ScopeTreeLookupParameter<BoolValue>)Parameters["IsTabu"]; }
     }
     public LookupParameter<PercentValue> PercentTabuParameter {
@@ -41,5 +41,5 @@
     public TabuNeighborhoodAnalyzer()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<BoolValue>("IsTabu", "A value that determines if a move is tabu or not."));
+      Parameters.Add(new ScopeTreeLookupParameter<BoolValue>("IsTabu", "A value that determines if a move is tabu or not."));
       Parameters.Add(new LookupParameter<PercentValue>("PercentTabu", "Indicates how much of the neighborhood is tabu."));
       Parameters.Add(new LookupParameter<ResultCollection>("Results", "The result collection where the value should be stored."));
Index: /trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSelector.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSelector.cs	(revision 3659)
@@ -91,6 +91,6 @@
       Parameters.Add(new ValueLookupParameter<BoolValue>("Aspiration", "Whether the default aspiration criterion should be used or not. The default aspiration criterion accepts a tabu move if it results in a better solution than the best solution found so far.", new BoolValue(true)));
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "Whether the problem is a maximization or minimization problem (used to decide whether a solution is better"));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("MoveQuality", "The quality of the move."));
-      Parameters.Add(new SubScopesLookupParameter<BoolValue>("MoveTabu", "The tabu status of the move."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("MoveQuality", "The quality of the move."));
+      Parameters.Add(new ScopeTreeLookupParameter<BoolValue>("MoveTabu", "The tabu status of the move."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("CopySelected", "True if the selected move should be copied.", new BoolValue(false)));
       Parameters.Add(new LookupParameter<BoolValue>("EmptyNeighborhood", "Will be set to true if the neighborhood didn't contain any non-tabu moves, otherwise it is set to false."));
Index: /trunk/sources/HeuristicLab.Analysis/3.3/BestAverageWorstQualityCalculator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis/3.3/BestAverageWorstQualityCalculator.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Analysis/3.3/BestAverageWorstQualityCalculator.cs	(revision 3659)
@@ -53,5 +53,5 @@
       : base() {
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the current problem is a maximization problem, otherwise false."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The value contained in each sub-scope which represents the solution quality."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value contained in each sub-scope which represents the solution quality."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("BestQuality", "The quality value of the best solution."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("AverageQuality", "The average quality of all solutions."));
Index: /trunk/sources/HeuristicLab.Analysis/3.3/BestQualityMemorizer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis/3.3/BestQualityMemorizer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Analysis/3.3/BestQualityMemorizer.cs	(revision 3659)
@@ -47,5 +47,5 @@
       : base() {
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the current problem is a maximization problem, otherwise false."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The value contained in each sub-scope which represents the solution quality."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value contained in each sub-scope which represents the solution quality."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("BestQuality", "The quality value of the best solution."));
     }
Index: /trunk/sources/HeuristicLab.Analysis/3.3/MinAverageMaxValueCalculator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis/3.3/MinAverageMaxValueCalculator.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Analysis/3.3/MinAverageMaxValueCalculator.cs	(revision 3659)
@@ -49,5 +49,5 @@
     public MinAverageMaxValueCalculator()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Value", "The value contained in each sub-scope for which the minimum, average and maximum should be calculated."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", "The value contained in each sub-scope for which the minimum, average and maximum should be calculated."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("MinValue", "The minimum of the value."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("AverageValue", "The average of the value."));
Index: /trunk/sources/HeuristicLab.Analysis/3.3/PopulationBestAverageWorstQualityAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis/3.3/PopulationBestAverageWorstQualityAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Analysis/3.3/PopulationBestAverageWorstQualityAnalyzer.cs	(revision 3659)
@@ -39,6 +39,6 @@
       get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
     }
-    public SubScopesLookupParameter<DoubleValue> QualityParameter {
-      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Quality"]; }
+    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
     public ValueLookupParameter<DoubleValue> BestKnownQualityParameter {
@@ -81,5 +81,5 @@
       #region Create parameters
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The best known quality value found so far."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("BestQuality", "The best quality value found in the current run."));
Index: /trunk/sources/HeuristicLab.Analysis/3.3/PopulationMinAverageMaxValueAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis/3.3/PopulationMinAverageMaxValueAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Analysis/3.3/PopulationMinAverageMaxValueAnalyzer.cs	(revision 3659)
@@ -36,6 +36,6 @@
   public sealed class PopulationMinAverageMaxValueAnalyzer : AlgorithmOperator, IAnalyzer {
     #region Parameter properties
-    public SubScopesLookupParameter<DoubleValue> ValueParameter {
-      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Value"]; }
+    public ScopeTreeLookupParameter<DoubleValue> ValueParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Value"]; }
     }
     public ValueLookupParameter<DoubleValue> MinValueParameter {
@@ -65,5 +65,5 @@
     private void Initialize() {
       #region Create parameters
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Value", "The value contained in each solution which should be analyzed."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", "The value contained in each solution which should be analyzed."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("MinValue", "The minimum of the value."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("AverageValue", "The average of the value."));
Index: /trunk/sources/HeuristicLab.Analysis/3.3/PopulationQualityAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis/3.3/PopulationQualityAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Analysis/3.3/PopulationQualityAnalyzer.cs	(revision 3659)
@@ -39,6 +39,6 @@
       get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
     }
-    public SubScopesLookupParameter<DoubleValue> QualityParameter {
-      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Quality"]; }
+    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
     public ValueLookupParameter<DoubleValue> BestKnownQualityParameter {
@@ -72,5 +72,5 @@
       #region Create parameters
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The best known quality value found so far."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("BestQuality", "The best quality value found in the current run."));
@@ -96,5 +96,5 @@
       bestQualityMemorizer2.QualityParameter.ActualName = "Quality";
 
-      dataTableValuesCollector.CollectedValues.Add(new SubScopesLookupParameter<DoubleValue>("Quality", null, "Quality"));
+      dataTableValuesCollector.CollectedValues.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", null, "Quality"));
       dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
       dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, "BestKnownQuality"));
@@ -106,5 +106,5 @@
       qualityDifferenceCalculator.SecondQualityParameter.ActualName = "BestQuality";
 
-      resultsCollector.CollectedValues.Add(new SubScopesLookupParameter<DoubleValue>("Quality", null, "Quality"));
+      resultsCollector.CollectedValues.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", null, "Quality"));
       resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
       resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, "BestKnownQuality"));
Index: /trunk/sources/HeuristicLab.Analysis/3.3/PopulationValueAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis/3.3/PopulationValueAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Analysis/3.3/PopulationValueAnalyzer.cs	(revision 3659)
@@ -36,6 +36,6 @@
   public sealed class PopulationValueAnalyzer : AlgorithmOperator, IAnalyzer {
     #region Parameter properties
-    public SubScopesLookupParameter<DoubleValue> ValueParameter {
-      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Value"]; }
+    public ScopeTreeLookupParameter<DoubleValue> ValueParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Value"]; }
     }
     public ValueLookupParameter<DataTable> ValuesParameter {
@@ -56,5 +56,5 @@
     private void Initialize() {
       #region Create parameters
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Value", "The value contained in each solution which should be analyzed."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", "The value contained in each solution which should be analyzed."));
       Parameters.Add(new ValueLookupParameter<DataTable>("Values", "The data table to store the values."));
       Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The results collection where the analysis values should be stored."));
@@ -65,8 +65,8 @@
       ResultsCollector resultsCollector = new ResultsCollector();
 
-      dataTableValuesCollector.CollectedValues.Add(new SubScopesLookupParameter<DoubleValue>("Value", null, "Value"));
+      dataTableValuesCollector.CollectedValues.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", null, "Value"));
       dataTableValuesCollector.DataTableParameter.ActualName = "Values";
 
-      resultsCollector.CollectedValues.Add(new SubScopesLookupParameter<DoubleValue>("Value", null, "Value"));
+      resultsCollector.CollectedValues.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", null, "Value"));
       resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>("Values"));
       resultsCollector.ResultsParameter.ActualName = "Results";
Index: /trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorCrossover.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorCrossover.cs	(revision 3659)
@@ -42,5 +42,5 @@
     }
     public ILookupParameter<ItemArray<BinaryVector>> ParentsParameter {
-      get { return (SubScopesLookupParameter<BinaryVector>)Parameters["Parents"]; }
+      get { return (ScopeTreeLookupParameter<BinaryVector>)Parameters["Parents"]; }
     }
     public ILookupParameter<BinaryVector> ChildParameter {
@@ -51,5 +51,5 @@
       : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic crossover operators."));
-      Parameters.Add(new SubScopesLookupParameter<BinaryVector>("Parents", "The parent vectors which should be crossed."));
+      Parameters.Add(new ScopeTreeLookupParameter<BinaryVector>("Parents", "The parent vectors which should be crossed."));
       Parameters.Add(new LookupParameter<BinaryVector>("Child", "The child vector resulting from the crossover."));
     }
Index: /trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/MultiBinaryVectorCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/MultiBinaryVectorCrossover.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/MultiBinaryVectorCrossover.cs	(revision 3659)
@@ -52,5 +52,5 @@
     public MultiBinaryVectorCrossover()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<BinaryVector>("Parents", "The parent binary vector which should be crossed."));
+      Parameters.Add(new ScopeTreeLookupParameter<BinaryVector>("Parents", "The parent binary vector which should be crossed."));
       ParentsParameter.ActualName = "BinaryVector";
       Parameters.Add(new LookupParameter<BinaryVector>("Child", "The child binary vector resulting from the crossover."));
Index: /trunk/sources/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/MultiIntegerVectorCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/MultiIntegerVectorCrossover.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/MultiIntegerVectorCrossover.cs	(revision 3659)
@@ -52,5 +52,5 @@
     public MultiIntegerVectorCrossover()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<IntegerVector>("Parents", "The parent integer vector which should be crossed."));
+      Parameters.Add(new ScopeTreeLookupParameter<IntegerVector>("Parents", "The parent integer vector which should be crossed."));
       ParentsParameter.ActualName = "IntegerVector";
       Parameters.Add(new LookupParameter<IntegerVector>("Child", "The child integer vector resulting from the crossover."));
Index: /trunk/sources/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorCrossover.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorCrossover.cs	(revision 3659)
@@ -42,5 +42,5 @@
     }
     public ILookupParameter<ItemArray<IntegerVector>> ParentsParameter {
-      get { return (SubScopesLookupParameter<IntegerVector>)Parameters["Parents"]; }
+      get { return (ScopeTreeLookupParameter<IntegerVector>)Parameters["Parents"]; }
     }
     public ILookupParameter<IntegerVector> ChildParameter {
@@ -51,5 +51,5 @@
       : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic crossover operators."));
-      Parameters.Add(new SubScopesLookupParameter<IntegerVector>("Parents", "The parent vectors which should be crossed."));
+      Parameters.Add(new ScopeTreeLookupParameter<IntegerVector>("Parents", "The parent vectors which should be crossed."));
       Parameters.Add(new LookupParameter<IntegerVector>("Child", "The child vector resulting from the crossover."));
     }
Index: /trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/Crossovers/MultiPermutationCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/Crossovers/MultiPermutationCrossover.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/Crossovers/MultiPermutationCrossover.cs	(revision 3659)
@@ -52,5 +52,5 @@
     public MultiPermutationCrossover()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<Permutation>("Parents", "The parent permutations which should be crossed."));
+      Parameters.Add(new ScopeTreeLookupParameter<Permutation>("Parents", "The parent permutations which should be crossed."));
       ParentsParameter.ActualName = "Permutation";
       Parameters.Add(new LookupParameter<Permutation>("Child", "The child permutation resulting from the crossover."));
Index: /trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/PermutationCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/PermutationCrossover.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/PermutationCrossover.cs	(revision 3659)
@@ -42,5 +42,5 @@
     }
     public ILookupParameter<ItemArray<Permutation>> ParentsParameter {
-      get { return (SubScopesLookupParameter<Permutation>)Parameters["Parents"]; }
+      get { return (ScopeTreeLookupParameter<Permutation>)Parameters["Parents"]; }
     }
     public ILookupParameter<Permutation> ChildParameter {
@@ -51,5 +51,5 @@
       : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic crossover operators."));
-      Parameters.Add(new SubScopesLookupParameter<Permutation>("Parents", "The parent permutations which should be crossed."));
+      Parameters.Add(new ScopeTreeLookupParameter<Permutation>("Parents", "The parent permutations which should be crossed."));
       ParentsParameter.ActualName = "Permutation";
       Parameters.Add(new LookupParameter<Permutation>("Child", "The child permutation resulting from the crossover."));
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/BlendAlphaBetaCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/BlendAlphaBetaCrossover.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/BlendAlphaBetaCrossover.cs	(revision 3659)
@@ -50,6 +50,6 @@
     /// The quality of the parents.
     /// </summary>
-    public SubScopesLookupParameter<DoubleValue> QualityParameter {
-      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Quality"]; }
+    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
     /// <summary>
@@ -73,5 +73,5 @@
       : base() {
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "Whether the problem is a maximization problem or not."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The quality values of the parents."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The quality values of the parents."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("Alpha", "The value for alpha.", new DoubleValue(0.75)));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("Beta", "The value for beta.", new DoubleValue(0.25)));
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/HeuristicCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/HeuristicCrossover.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/HeuristicCrossover.cs	(revision 3659)
@@ -47,6 +47,6 @@
     /// The quality of the parents.
     /// </summary>
-    public SubScopesLookupParameter<DoubleValue> QualityParameter {
-      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Quality"]; }
+    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
 
@@ -58,5 +58,5 @@
       : base() {
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "Whether the problem is a maximization problem or not."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The quality values of the parents."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The quality values of the parents."));
     }
 
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/MultiRealVectorCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/MultiRealVectorCrossover.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/MultiRealVectorCrossover.cs	(revision 3659)
@@ -55,5 +55,5 @@
     public MultiRealVectorCrossover()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<RealVector>("Parents", "The parent real vector which should be crossed."));
+      Parameters.Add(new ScopeTreeLookupParameter<RealVector>("Parents", "The parent real vector which should be crossed."));
       ParentsParameter.ActualName = "RealVector";
       Parameters.Add(new LookupParameter<RealVector>("Child", "The child real vector resulting from the crossover."));
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs	(revision 3659)
@@ -43,5 +43,5 @@
     }
     public ILookupParameter<ItemArray<RealVector>> ParentsParameter {
-      get { return (SubScopesLookupParameter<RealVector>)Parameters["Parents"]; }
+      get { return (ScopeTreeLookupParameter<RealVector>)Parameters["Parents"]; }
     }
     public ILookupParameter<RealVector> ChildParameter {
@@ -55,5 +55,5 @@
       : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic crossover operators."));
-      Parameters.Add(new SubScopesLookupParameter<RealVector>("Parents", "The parent vectors which should be crossed."));
+      Parameters.Add(new ScopeTreeLookupParameter<RealVector>("Parents", "The parent vectors which should be crossed."));
       Parameters.Add(new LookupParameter<RealVector>("Child", "The child vector resulting from the crossover."));
       Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bounds of the real vector."));
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorCrossover.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorCrossover.cs	(revision 3659)
@@ -48,5 +48,5 @@
       : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator to use."));
-      Parameters.Add(new SubScopesLookupParameter<RealVector>("ParentStrategyParameter", "The strategy parameters to cross."));
+      Parameters.Add(new ScopeTreeLookupParameter<RealVector>("ParentStrategyParameter", "The strategy parameters to cross."));
       Parameters.Add(new LookupParameter<RealVector>("StrategyParameter", "The crossed strategy parameter."));
       ParentsParameter.ActualName = "StrategyParameter";
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Analyzers/PopulationMinAvgMaxTreeSizeAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Analyzers/PopulationMinAvgMaxTreeSizeAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Analyzers/PopulationMinAvgMaxTreeSizeAnalyzer.cs	(revision 3659)
@@ -62,6 +62,6 @@
     public PopulationMinAvgMaxTreeSizeAnalyzer()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression tree whose size should be calculated."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>(SymbolicExpressionTreeSizeParameterName, "The tree size of the symbolic expression tree."));
+      Parameters.Add(new ScopeTreeLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression tree whose size should be calculated."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>(SymbolicExpressionTreeSizeParameterName, "The tree size of the symbolic expression tree."));
       Parameters.Add(new ValueLookupParameter<DataTable>(SymbolicExpressionTreeSizesParameterName, "The data table to store the tree sizes."));
       Parameters.Add(new ValueLookupParameter<VariableCollection>(ResultsParameterName, "The results collection where the analysis values should be stored."));
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Crossovers/SymbolicExpressionTreeCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Crossovers/SymbolicExpressionTreeCrossover.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Crossovers/SymbolicExpressionTreeCrossover.cs	(revision 3659)
@@ -42,5 +42,5 @@
     private const string FailedCrossoverEventsParameterName = "FailedCrossoverEvents";
     public ILookupParameter<ItemArray<SymbolicExpressionTree>> ParentsParameter {
-      get { return (SubScopesLookupParameter<SymbolicExpressionTree>)Parameters[ParentsParameterName]; }
+      get { return (ScopeTreeLookupParameter<SymbolicExpressionTree>)Parameters[ParentsParameterName]; }
     }
     public ILookupParameter<SymbolicExpressionTree> ChildParameter {
@@ -56,5 +56,5 @@
     protected SymbolicExpressionTreeCrossover()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<SymbolicExpressionTree>(ParentsParameterName, "The parent symbolic expression trees which should be crossed."));
+      Parameters.Add(new ScopeTreeLookupParameter<SymbolicExpressionTree>(ParentsParameterName, "The parent symbolic expression trees which should be crossed."));
       Parameters.Add(new LookupParameter<SymbolicExpressionTree>(ChildParameterName, "The child symbolic expression tree resulting from the crossover."));
       Parameters.Add(new ValueParameter<IntValue>(FailedCrossoverEventsParameterName, "The number of failed crossover events (child is an exact copy of a parent)", new IntValue()));
Index: /trunk/sources/HeuristicLab.Operators/3.3/SubScopesSorter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/SubScopesSorter.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Operators/3.3/SubScopesSorter.cs	(revision 3659)
@@ -36,6 +36,6 @@
     private string actualName;
 
-    public SubScopesLookupParameter<DoubleValue> ValueParameter {
-      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Value"]; }
+    public ScopeTreeLookupParameter<DoubleValue> ValueParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Value"]; }
     }
     public ValueLookupParameter<BoolValue> DescendingParameter {
@@ -51,5 +51,5 @@
     public SubScopesSorter()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Value", "The values contained in each sub-scope acording which the sub-scopes of the current scope are sorted."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Value", "The values contained in each sub-scope acording which the sub-scopes of the current scope are sorted."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("Descending", "True if the sub-scopes should be sorted in descending order, otherwise false."));
       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope whose sub-scopes are sorted."));
Index: /trunk/sources/HeuristicLab.Optimization.Operators/3.3/WeightedParentsQualityComparator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Operators/3.3/WeightedParentsQualityComparator.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Optimization.Operators/3.3/WeightedParentsQualityComparator.cs	(revision 3659)
@@ -53,5 +53,5 @@
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, false otherwise"));
       Parameters.Add(new LookupParameter<DoubleValue>("LeftSide", "The quality of the child."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("RightSide", "The qualities of the parents."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("RightSide", "The qualities of the parents."));
       Parameters.Add(new LookupParameter<BoolValue>("Result", "The result of the comparison: True means Quality is better, False means it is worse than parents."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("ComparisonFactor", "Determines if the quality should be compared to the better parent (1.0), to the worse (0.0) or to any linearly interpolated value between them."));
Index: /trunk/sources/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj	(revision 3658)
+++ /trunk/sources/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj	(revision 3659)
@@ -92,4 +92,10 @@
       <DependentUpon>ConstrainedValueParameterView.cs</DependentUpon>
     </Compile>
+    <Compile Include="ScopeTreeLookupParameterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ScopeTreeLookupParameterView.Designer.cs">
+      <DependentUpon>ScopeTreeLookupParameterView.cs</DependentUpon>
+    </Compile>
     <Compile Include="ValueLookupParameterView.cs">
       <SubType>UserControl</SubType>
Index: /trunk/sources/HeuristicLab.Parameters.Views/3.3/ScopeTreeLookupParameterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/ScopeTreeLookupParameterView.Designer.cs	(revision 3659)
+++ /trunk/sources/HeuristicLab.Parameters.Views/3.3/ScopeTreeLookupParameterView.Designer.cs	(revision 3659)
@@ -0,0 +1,158 @@
+#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
+
+namespace HeuristicLab.Parameters.Views {
+  partial class ScopeTreeLookupParameterView<T> {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.depthTextBox = new System.Windows.Forms.TextBox();
+      this.depthLabel = new System.Windows.Forms.Label();
+      this.actualNameTextBox = new System.Windows.Forms.TextBox();
+      this.actualNameLabel = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 81);
+      this.dataTypeLabel.TabIndex = 6;
+      // 
+      // dataTypeTextBox
+      // 
+      this.dataTypeTextBox.Location = new System.Drawing.Point(80, 78);
+      this.dataTypeTextBox.Size = new System.Drawing.Size(306, 20);
+      this.dataTypeTextBox.TabIndex = 7;
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Location = new System.Drawing.Point(80, 0);
+      this.nameTextBox.Size = new System.Drawing.Size(306, 20);
+      // 
+      // descriptionLabel
+      // 
+      this.descriptionLabel.Location = new System.Drawing.Point(3, 55);
+      this.descriptionLabel.TabIndex = 4;
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Location = new System.Drawing.Point(80, 52);
+      this.descriptionTextBox.Size = new System.Drawing.Size(306, 20);
+      this.descriptionTextBox.TabIndex = 5;
+      // 
+      // depthTextBox
+      // 
+      this.depthTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.errorProvider.SetIconAlignment(this.depthTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.depthTextBox, 2);
+      this.depthTextBox.Location = new System.Drawing.Point(80, 104);
+      this.depthTextBox.Name = "depthTextBox";
+      this.depthTextBox.Size = new System.Drawing.Size(306, 20);
+      this.depthTextBox.TabIndex = 9;
+      this.depthTextBox.Validated += new System.EventHandler(this.depthTextBox_Validated);
+      this.depthTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.depthTextBox_KeyDown);
+      this.depthTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.depthTextBox_Validating);
+      // 
+      // depthLabel
+      // 
+      this.depthLabel.AutoSize = true;
+      this.depthLabel.Location = new System.Drawing.Point(3, 107);
+      this.depthLabel.Name = "depthLabel";
+      this.depthLabel.Size = new System.Drawing.Size(39, 13);
+      this.depthLabel.TabIndex = 8;
+      this.depthLabel.Text = "&Depth:";
+      // 
+      // actualNameTextBox
+      // 
+      this.actualNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.actualNameTextBox.Location = new System.Drawing.Point(80, 26);
+      this.actualNameTextBox.Name = "actualNameTextBox";
+      this.actualNameTextBox.Size = new System.Drawing.Size(306, 20);
+      this.actualNameTextBox.TabIndex = 3;
+      this.actualNameTextBox.Validated += new System.EventHandler(this.actualNameTextBox_Validated);
+      // 
+      // actualNameLabel
+      // 
+      this.actualNameLabel.AutoSize = true;
+      this.actualNameLabel.Location = new System.Drawing.Point(3, 29);
+      this.actualNameLabel.Name = "actualNameLabel";
+      this.actualNameLabel.Size = new System.Drawing.Size(71, 13);
+      this.actualNameLabel.TabIndex = 2;
+      this.actualNameLabel.Text = "&Actual Name:";
+      // 
+      // ScopeTreeLookupParameterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.actualNameTextBox);
+      this.Controls.Add(this.depthTextBox);
+      this.Controls.Add(this.depthLabel);
+      this.Controls.Add(this.actualNameLabel);
+      this.Name = "ScopeTreeLookupParameterView";
+      this.Size = new System.Drawing.Size(386, 132);
+      this.Controls.SetChildIndex(this.actualNameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
+      this.Controls.SetChildIndex(this.depthLabel, 0);
+      this.Controls.SetChildIndex(this.depthTextBox, 0);
+      this.Controls.SetChildIndex(this.actualNameTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.TextBox depthTextBox;
+    protected System.Windows.Forms.Label depthLabel;
+    protected System.Windows.Forms.TextBox actualNameTextBox;
+    protected System.Windows.Forms.Label actualNameLabel;
+  }
+}
Index: /trunk/sources/HeuristicLab.Parameters.Views/3.3/ScopeTreeLookupParameterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/ScopeTreeLookupParameterView.cs	(revision 3659)
+++ /trunk/sources/HeuristicLab.Parameters.Views/3.3/ScopeTreeLookupParameterView.cs	(revision 3659)
@@ -0,0 +1,137 @@
+#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;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Parameters.Views {
+  /// <summary>
+  /// The visual representation of a <see cref="Parameter"/>.
+  /// </summary>
+  [View("ScopeTreeLookupParameter View")]
+  [Content(typeof(ScopeTreeLookupParameter<>), true)]
+  public partial class ScopeTreeLookupParameterView<T> : ParameterView where T : class, IItem {
+    /// <summary>
+    /// Gets or sets the variable to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public new ScopeTreeLookupParameter<T> Content {
+      get { return (ScopeTreeLookupParameter<T>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableView"/> with caption "Variable".
+    /// </summary>
+    public ScopeTreeLookupParameterView() {
+      InitializeComponent();
+      Caption = "ScopeTreeLookupParameter";
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="IVariable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void DeregisterContentEvents() {
+      Content.ActualNameChanged -= new EventHandler(Content_ActualNameChanged);
+      Content.DepthChanged -= new EventHandler(Content_DepthChanged);
+      base.DeregisterContentEvents();
+    }
+
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IVariable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ActualNameChanged += new EventHandler(Content_ActualNameChanged);
+      Content.DepthChanged += new EventHandler(Content_DepthChanged);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        Caption = "ScopeTreeLookupParameter";
+        actualNameTextBox.Text = string.Empty;
+        depthTextBox.Text = string.Empty;
+      } else {
+        Caption = Content.Name + " (" + Content.GetType().Name + ")";
+        actualNameTextBox.Text = Content.ActualName;
+        depthTextBox.Text = Content.Depth.ToString();
+      }
+      SetEnabledStateOfControls();
+    }
+
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      SetEnabledStateOfControls();
+    }
+
+    private void SetEnabledStateOfControls() {
+      actualNameTextBox.Enabled = Content != null;
+      actualNameTextBox.ReadOnly = ReadOnly;
+      depthTextBox.Enabled = Content != null;
+      depthTextBox.ReadOnly = ReadOnly;
+    }
+
+    protected virtual void Content_ActualNameChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ActualNameChanged), sender, e);
+      else
+        actualNameTextBox.Text = Content.ActualName;
+    }
+    protected virtual void Content_DepthChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_DepthChanged), sender, e);
+      else
+        depthTextBox.Text = Content.Depth.ToString();
+    }
+
+    protected virtual void actualNameTextBox_Validated(object sender, EventArgs e) {
+      Content.ActualName = actualNameTextBox.Text;
+    }
+    protected virtual void depthTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        depthLabel.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        depthTextBox.Text = Content.Depth.ToString();
+        depthLabel.Focus();  // set focus on label to validate data
+      }
+    }
+    protected virtual void depthTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) {
+      int val;
+      if (!int.TryParse(depthTextBox.Text, out val) || (val < 0)) {
+        e.Cancel = true;
+        errorProvider.SetError(depthTextBox, "Invalid Value (depth must be an integer number greater or equal to zero)");
+        depthTextBox.SelectAll();
+      }
+    }
+    protected virtual void depthTextBox_Validated(object sender, EventArgs e) {
+      Content.Depth = int.Parse(depthTextBox.Text);
+      errorProvider.SetError(depthTextBox, string.Empty);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj	(revision 3658)
+++ /trunk/sources/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj	(revision 3659)
@@ -86,5 +86,4 @@
     <None Include="HeuristicLabParametersPlugin.cs.frame" />
     <Compile Include="ConstrainedValueParameter.cs" />
-    <Compile Include="SubScopesSubScopesLookupParameter.cs" />
     <Compile Include="OptionalConstrainedValueParameter.cs" />
     <Compile Include="ValueParameter.cs" />
Index: /trunk/sources/HeuristicLab.Parameters/3.3/SubScopesLookupParameter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters/3.3/SubScopesLookupParameter.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Parameters/3.3/SubScopesLookupParameter.cs	(revision 3659)
@@ -21,4 +21,6 @@
 
 using System;
+using System.Collections.Generic;
+using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -27,23 +29,59 @@
 namespace HeuristicLab.Parameters {
   /// <summary>
-  /// A generic parameter representing instances of type T which are collected from or written to the sub-scopes of the current scope.
+  /// A generic parameter representing instances of type T which are collected from or written to scope tree.
   /// </summary>
-  [Item("SubScopesLookupParameter<T>", "A generic parameter representing instances of type T which are collected from or written to the sub-scopes of the current scope.")]
+  [Item("ScopeTreeLookupParameter<T>", "A generic parameter representing instances of type T which are collected from or written to scope tree.")]
   [StorableClass]
-  public class SubScopesLookupParameter<T> : LookupParameter<ItemArray<T>> where T : class, IItem {
-    public SubScopesLookupParameter() : base() { }
-    public SubScopesLookupParameter(string name) : base(name) { }
-    public SubScopesLookupParameter(string name, string description) : base(name, description) { }
-    public SubScopesLookupParameter(string name, string description, string actualName) : base(name, description, actualName) { }
+  public class ScopeTreeLookupParameter<T> : LookupParameter<ItemArray<T>> where T : class, IItem {
+    [Storable]
+    private int depth;
+    public int Depth {
+      get { return depth; }
+      set {
+        if (value < 0) throw new ArgumentException("Depth must be larger than or equal to 0.");
+        if (depth != value) {
+          depth = value;
+          OnDepthChanged();
+        }
+      }
+    }
+
+    public ScopeTreeLookupParameter()
+      : base() {
+      depth = 1;
+    }
+    public ScopeTreeLookupParameter(string name)
+      : base(name) {
+      depth = 1;
+    }
+    public ScopeTreeLookupParameter(string name, string description)
+      : base(name, description) {
+      depth = 1;
+    }
+    public ScopeTreeLookupParameter(string name, string description, string actualName)
+      : base(name, description, actualName) {
+      depth = 1;
+    }
+    [StorableConstructor]
+    protected ScopeTreeLookupParameter(bool deserializing) : base(deserializing) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      ScopeTreeLookupParameter<T> clone = (ScopeTreeLookupParameter<T>)base.Clone(cloner);
+      clone.depth = depth;
+      return clone;
+    }
 
     protected override IItem GetActualValue() {
       string name = LookupParameter<ItemArray<T>>.TranslateName(Name, ExecutionContext);
-      IScope scope = ExecutionContext.Scope;
-      ItemArray<T> values = new ItemArray<T>(scope.SubScopes.Count);
+
+      IEnumerable<IScope> scopes = new IScope[] { ExecutionContext.Scope };
+      for (int i = 0; i < depth; i++)
+        scopes = scopes.Select(x => (IEnumerable<IScope>)x.SubScopes).Aggregate((a, b) => a.Concat(b));
+
+      List<T> values = new List<T>();
       IVariable var;
       T value;
-
-      for (int i = 0; i < values.Length; i++) {
-        scope.SubScopes[i].Variables.TryGetValue(name, out var);
+      foreach (IScope scope in scopes) {
+        scope.Variables.TryGetValue(name, out var);
         if (var != null) {
           value = var.Value as T;
@@ -54,8 +92,8 @@
                             typeof(T).GetPrettyName())
             );
-          values[i] = value;
+          values.Add(value);
         }
       }
-      return values;
+      return new ItemArray<T>(values);
     }
     protected override void SetActualValue(IItem value) {
@@ -68,12 +106,25 @@
 
       string name = LookupParameter<ItemArray<T>>.TranslateName(Name, ExecutionContext);
-      IScope scope = ExecutionContext.Scope;
+
+      IEnumerable<IScope> scopes = new IScope[] { ExecutionContext.Scope };
+      for (int i = 0; i < depth; i++)
+        scopes = scopes.Select(x => (IEnumerable<IScope>)x.SubScopes).Aggregate((a, b) => a.Concat(b));
+
+      if (scopes.Count() != values.Length) throw new InvalidOperationException("Number of values is not equal to number of scopes.");
+
+      int j = 0;
       IVariable var;
+      foreach (IScope scope in scopes) {
+        scope.Variables.TryGetValue(name, out var);
+        if (var != null) var.Value = values[j];
+        else scope.Variables.Add(new Variable(name, values[j]));
+        j++;
+      }
+    }
 
-      for (int i = 0; i < values.Length; i++) {
-        scope.SubScopes[i].Variables.TryGetValue(name, out var);
-        if (var != null) var.Value = values[i];
-        else scope.SubScopes[i].Variables.Add(new Variable(name, values[i]));
-      }
+    public event EventHandler DepthChanged;
+    protected virtual void OnDepthChanged() {
+      EventHandler handler = DepthChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
     }
   }
Index: unk/sources/HeuristicLab.Parameters/3.3/SubScopesSubScopesLookupParameter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters/3.3/SubScopesSubScopesLookupParameter.cs	(revision 3658)
+++ 	(revision )
@@ -1,85 +1,0 @@
-#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;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Parameters {
-  /// <summary>
-  /// A generic parameter representing instances of type T which are collected from or written to the sub-scopes of the sub-scopes of the current scope.
-  /// </summary>
-  [Item("SubScopesSubScopesLookupParameter<T>", "A generic parameter representing instances of type T which are collected from or written to the sub-scopes of the sub-scopes of the current scope.")]
-  [StorableClass]
-  public class SubScopesSubScopesLookupParameter<T> : LookupParameter<ItemArray<ItemArray<T>>> where T : class, IItem {
-    public SubScopesSubScopesLookupParameter() : base() { }
-    public SubScopesSubScopesLookupParameter(string name) : base(name) { }
-    public SubScopesSubScopesLookupParameter(string name, string description) : base(name, description) { }
-    public SubScopesSubScopesLookupParameter(string name, string description, string actualName) : base(name, description, actualName) { }
-
-    protected override IItem GetActualValue() {
-      string name = LookupParameter<ItemArray<ItemArray<T>>>.TranslateName(Name, ExecutionContext);
-      IScope scope = ExecutionContext.Scope;
-      ItemArray<ItemArray<T>> values = new ItemArray<ItemArray<T>>(scope.SubScopes.Count);
-      IVariable var;
-      T value;
-
-      for (int i = 0; i < values.Length; i++) {
-        values[i] = new ItemArray<T>(scope.SubScopes[i].SubScopes.Count);
-        for (int j = 0; j < values[i].Length; j++) {
-          scope.SubScopes[i].SubScopes[j].Variables.TryGetValue(name, out var);
-          if (var != null) {
-            value = var.Value as T;
-            if ((var.Value != null) && (value == null))
-              throw new InvalidOperationException(
-                string.Format("Type mismatch. Variable \"{0}\" does not contain a \"{1}\".",
-                              name,
-                              typeof(T).GetPrettyName())
-              );
-            values[i][j] = value;
-          }
-        }
-      }
-      return values;
-    }
-    protected override void SetActualValue(IItem value) {
-      ItemArray<ItemArray<T>> values = value as ItemArray<ItemArray<T>>;
-      if (values == null)
-        throw new InvalidOperationException(
-          string.Format("Type mismatch. Value is not a \"{0}\".",
-                        typeof(ItemArray<T>).GetPrettyName())
-        );
-
-      string name = LookupParameter<ItemArray<ItemArray<T>>>.TranslateName(Name, ExecutionContext);
-      IScope scope = ExecutionContext.Scope;
-      IVariable var;
-
-      for (int i = 0; i < values.Length; i++) {
-        for (int j = 0; j < values[i].Length; j++) {
-          scope.SubScopes[i].SubScopes[j].Variables.TryGetValue(name, out var);
-          if (var != null) var.Value = values[i][j];
-          else scope.SubScopes[i].SubScopes[j].Variables.Add(new Variable(name, values[i][j]));
-        }
-      }
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Problems.ArtificialAnt/3.3/Analyzers/PopulationBestAntTrailAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ArtificialAnt/3.3/Analyzers/PopulationBestAntTrailAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Problems.ArtificialAnt/3.3/Analyzers/PopulationBestAntTrailAnalyzer.cs	(revision 3659)
@@ -59,6 +59,6 @@
       : base() {
       Parameters.Add(new LookupParameter<BoolMatrix>("World", "The world with food items for the artificial ant."));
-      Parameters.Add(new SubScopesLookupParameter<SymbolicExpressionTree>("SymbolicExpressionTree", "The artificial ant solutions from which the best solution should be visualized."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The qualities of the artificial ant solutions which should be visualized."));
+      Parameters.Add(new ScopeTreeLookupParameter<SymbolicExpressionTree>("SymbolicExpressionTree", "The artificial ant solutions from which the best solution should be visualized."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the artificial ant solutions which should be visualized."));
       Parameters.Add(new LookupParameter<AntTrail>("BestSolution", "The visual representation of the best ant trail."));
       Parameters.Add(new LookupParameter<IntValue>("MaxTimeSteps", "The maximal time steps that the artificial ant has available to collect all food items."));
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/PopulationBestSymbolicRegressionSolutionAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/PopulationBestSymbolicRegressionSolutionAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/PopulationBestSymbolicRegressionSolutionAnalyzer.cs	(revision 3659)
@@ -79,10 +79,10 @@
     public PopulationBestSymbolicRegressionSolutionAnalyzer()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees to analyze."));
+      Parameters.Add(new ScopeTreeLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees to analyze."));
       Parameters.Add(new LookupParameter<ISymbolicExpressionTreeInterpreter>(SymbolicExpressionTreeInterpreterParameterName, "The interpreter that should be used for the analysis of symbolic expression trees."));
       Parameters.Add(new LookupParameter<DataAnalysisProblemData>(ProblemDataParameterName, "The problem data for which the symbolic expression tree is a solution."));
       Parameters.Add(new LookupParameter<DoubleValue>(UpperEstimationLimitParameterName, "The upper estimation limit that was set for the evaluation of the symbolic expression trees."));
       Parameters.Add(new LookupParameter<DoubleValue>(LowerEstimationLimitParameterName, "The lower estimation limit that was set for the evaluation of the symbolic expression trees."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>(QualityParameterName, "The qualities of the symbolic regression trees which should be analyzed."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>(QualityParameterName, "The qualities of the symbolic regression trees which should be analyzed."));
       Parameters.Add(new LookupParameter<SymbolicRegressionSolution>(BestSolutionParameterName, "The best symbolic regression solution."));
       Parameters.Add(new LookupParameter<DoubleValue>(BestSolutionQualityParameterName, "The quality of the best symbolic regression solution."));
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/PopulationSymbolicRegressionModelQualityAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/PopulationSymbolicRegressionModelQualityAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/PopulationSymbolicRegressionModelQualityAnalyzer.cs	(revision 3659)
@@ -89,5 +89,5 @@
       : base() {
       Parameters.Add(new LookupParameter<ISymbolicExpressionTreeInterpreter>(SymbolicExpressionTreeInterpreterParameterName, "The interpreter that should be used to calculate the output values of the symbolic expression tree."));
-      Parameters.Add(new SubScopesLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees to analyze."));
+      Parameters.Add(new ScopeTreeLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees to analyze."));
       Parameters.Add(new LookupParameter<DataAnalysisProblemData>(ProblemDataParameterName, "The problem data containing the input varaibles for the symbolic regression problem."));
       Parameters.Add(new LookupParameter<ResultCollection>(ResultsParameterName, "The result collection where the best symbolic regression solution should be stored."));
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/PopulationSymbolicRegressionVariableFrequencyAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/PopulationSymbolicRegressionVariableFrequencyAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/PopulationSymbolicRegressionVariableFrequencyAnalyzer.cs	(revision 3659)
@@ -68,5 +68,5 @@
     public PopulationSymbolicRegressionVariableFrequencyAnalyzer()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees to analyze."));
+      Parameters.Add(new ScopeTreeLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees to analyze."));
       Parameters.Add(new LookupParameter<DataAnalysisProblemData>(ProblemDataParameterName, "The problem data containing the input varaibles for the symbolic regression problem."));
       Parameters.Add(new ValueLookupParameter<DataTable>(VariableFrequenciesParameterName, "The data table to store the variable frequencies."));
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/PopulationValidationBestScaledSymbolicRegressionSolutionAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/PopulationValidationBestScaledSymbolicRegressionSolutionAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/PopulationValidationBestScaledSymbolicRegressionSolutionAnalyzer.cs	(revision 3659)
@@ -90,5 +90,5 @@
     public PopulationValidationBestScaledSymbolicRegressionSolutionAnalyzer()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees to analyze."));
+      Parameters.Add(new ScopeTreeLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees to analyze."));
       Parameters.Add(new LookupParameter<ISymbolicExpressionTreeInterpreter>(SymbolicExpressionTreeInterpreterParameterName, "The interpreter that should be used for the analysis of symbolic expression trees."));
       Parameters.Add(new LookupParameter<DataAnalysisProblemData>(ProblemDataParameterName, "The problem data for which the symbolic expression tree is a solution."));
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/VariableFrequencyAnalyser.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/VariableFrequencyAnalyser.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/VariableFrequencyAnalyser.cs	(revision 3659)
@@ -64,5 +64,5 @@
     public VariableFrequencyAnalyser()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees that should be analyzed."));
+      Parameters.Add(new ScopeTreeLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees that should be analyzed."));
       Parameters.Add(new LookupParameter<DataAnalysisProblemData>(DataAnalysisProblemDataParameterName, "The problem data on which the for which the symbolic expression tree is a solution."));
       Parameters.Add(new LookupParameter<DoubleMatrix>(VariableFrequenciesParameterName, "The relative variable reference frequencies aggregated over the whole population."));
Index: /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/Analyzers/MultiPopulationBestKnapsackSolutionAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/Analyzers/MultiPopulationBestKnapsackSolutionAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/Analyzers/MultiPopulationBestKnapsackSolutionAnalyzer.cs	(revision 3659)
@@ -70,10 +70,10 @@
     public MultiPopulationBestKnapsackSolutionAnalyzer()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<ItemArray<BinaryVector>>("BinaryVector", "The knapsack solutions from which the best solution should be visualized."));
+      Parameters.Add(new ScopeTreeLookupParameter<ItemArray<BinaryVector>>("BinaryVector", "The knapsack solutions from which the best solution should be visualized."));
       Parameters.Add(new LookupParameter<IntValue>("KnapsackCapacity", "Capacity of the Knapsack."));
       Parameters.Add(new LookupParameter<IntArray>("Weights", "The weights of the items."));
       Parameters.Add(new LookupParameter<IntArray>("Values", "The values of the items."));
       
-      Parameters.Add(new SubScopesLookupParameter<ItemArray<DoubleValue>>("Quality", "The qualities of the knapsack solutions which should be visualized."));
+      Parameters.Add(new ScopeTreeLookupParameter<ItemArray<DoubleValue>>("Quality", "The qualities of the knapsack solutions which should be visualized."));
       Parameters.Add(new LookupParameter<KnapsackSolution>("BestSolution", "The best knapsack solution."));
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the knapsack solution should be stored."));
Index: /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/Analyzers/PopulationBestKnapsackSolutionAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/Analyzers/PopulationBestKnapsackSolutionAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/Analyzers/PopulationBestKnapsackSolutionAnalyzer.cs	(revision 3659)
@@ -70,10 +70,10 @@
     public PopulationBestKnapsackSolutionAnalyzer()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<BinaryVector>("BinaryVector", "The knapsack solutions from which the best solution should be visualized."));
+      Parameters.Add(new ScopeTreeLookupParameter<BinaryVector>("BinaryVector", "The knapsack solutions from which the best solution should be visualized."));
       Parameters.Add(new LookupParameter<IntValue>("KnapsackCapacity", "Capacity of the Knapsack."));
       Parameters.Add(new LookupParameter<IntArray>("Weights", "The weights of the items."));
       Parameters.Add(new LookupParameter<IntArray>("Values", "The values of the items."));
       
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The qualities of the knapsack solutions which should be visualized."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the knapsack solutions which should be visualized."));
       Parameters.Add(new LookupParameter<KnapsackSolution>("BestSolution", "The best knapsack solution."));
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the knapsack solution should be stored."));
Index: /trunk/sources/HeuristicLab.Problems.OneMax/3.3/Analyzers/MultiPopulationBestOneMaxSolutionAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.OneMax/3.3/Analyzers/MultiPopulationBestOneMaxSolutionAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Problems.OneMax/3.3/Analyzers/MultiPopulationBestOneMaxSolutionAnalyzer.cs	(revision 3659)
@@ -61,7 +61,7 @@
     public MultiPopulationBestOneMaxSolutionAnalyzer()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<ItemArray<BinaryVector>>("BinaryVector", "The Onemax solutions from which the best solution should be visualized."));
+      Parameters.Add(new ScopeTreeLookupParameter<ItemArray<BinaryVector>>("BinaryVector", "The Onemax solutions from which the best solution should be visualized."));
 
-      Parameters.Add(new SubScopesLookupParameter<ItemArray<DoubleValue>>("Quality", "The qualities of the Onemax solutions which should be visualized."));
+      Parameters.Add(new ScopeTreeLookupParameter<ItemArray<DoubleValue>>("Quality", "The qualities of the Onemax solutions which should be visualized."));
       Parameters.Add(new LookupParameter<OneMaxSolution>("BestSolution", "The best Onemax solution."));
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the Onemax solution should be stored."));
Index: /trunk/sources/HeuristicLab.Problems.OneMax/3.3/Analyzers/PopulationBestOneMaxSolutionAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.OneMax/3.3/Analyzers/PopulationBestOneMaxSolutionAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Problems.OneMax/3.3/Analyzers/PopulationBestOneMaxSolutionAnalyzer.cs	(revision 3659)
@@ -61,7 +61,7 @@
     public PopulationBestOneMaxSolutionAnalyzer()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<BinaryVector>("BinaryVector", "The Onemax solutions from which the best solution should be visualized."));
+      Parameters.Add(new ScopeTreeLookupParameter<BinaryVector>("BinaryVector", "The Onemax solutions from which the best solution should be visualized."));
 
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The qualities of the Onemax solutions which should be visualized."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the Onemax solutions which should be visualized."));
       Parameters.Add(new LookupParameter<OneMaxSolution>("BestSolution", "The best Onemax solution."));
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the Onemax solution should be stored."));
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Analyzers/MultiPopulationBestSingleObjectiveTestFunctionSolutionAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Analyzers/MultiPopulationBestSingleObjectiveTestFunctionSolutionAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Analyzers/MultiPopulationBestSingleObjectiveTestFunctionSolutionAnalyzer.cs	(revision 3659)
@@ -61,7 +61,7 @@
     public MultiPopulationBestSingleObjectiveTestFunctionSolutionAnalyzer()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<ItemArray<RealVector>>("RealVector", "The SingleObjectiveTestFunction solutions from which the best solution should be visualized."));
+      Parameters.Add(new ScopeTreeLookupParameter<ItemArray<RealVector>>("RealVector", "The SingleObjectiveTestFunction solutions from which the best solution should be visualized."));
 
-      Parameters.Add(new SubScopesLookupParameter<ItemArray<DoubleValue>>("Quality", "The qualities of the SingleObjectiveTestFunction solutions which should be visualized."));
+      Parameters.Add(new ScopeTreeLookupParameter<ItemArray<DoubleValue>>("Quality", "The qualities of the SingleObjectiveTestFunction solutions which should be visualized."));
       Parameters.Add(new LookupParameter<SingleObjectiveTestFunctionSolution>("BestSolution", "The best SingleObjectiveTestFunction solution."));
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the SingleObjectiveTestFunction solution should be stored."));
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Analyzers/PopulationBestSingleObjectiveTestFunctionSolutionAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Analyzers/PopulationBestSingleObjectiveTestFunctionSolutionAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Analyzers/PopulationBestSingleObjectiveTestFunctionSolutionAnalyzer.cs	(revision 3659)
@@ -61,7 +61,7 @@
     public PopulationBestSingleObjectiveTestFunctionSolutionAnalyzer()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<RealVector>("RealVector", "The SingleObjectiveTestFunction solutions from which the best solution should be visualized."));
+      Parameters.Add(new ScopeTreeLookupParameter<RealVector>("RealVector", "The SingleObjectiveTestFunction solutions from which the best solution should be visualized."));
 
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The qualities of the SingleObjectiveTestFunction solutions which should be visualized."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the SingleObjectiveTestFunction solutions which should be visualized."));
       Parameters.Add(new LookupParameter<SingleObjectiveTestFunctionSolution>("BestSolution", "The best SingleObjectiveTestFunction solution."));
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the SingleObjectiveTestFunction solution should be stored."));
Index: /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Analyzers/MultiPopulationBestTSPSolutionAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Analyzers/MultiPopulationBestTSPSolutionAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Analyzers/MultiPopulationBestTSPSolutionAnalyzer.cs	(revision 3659)
@@ -64,6 +64,6 @@
       : base() {
       Parameters.Add(new LookupParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the cities."));
-      Parameters.Add(new SubScopesSubScopesLookupParameter<Permutation>("Permutation", "The TSP solutions given in path representation from which the best solution should be analyzed."));
-      Parameters.Add(new SubScopesSubScopesLookupParameter<DoubleValue>("Quality", "The qualities of the TSP solutions which should be analyzed."));
+      Parameters.Add(new ScopeTreeLookupParameter<Permutation>("Permutation", "The TSP solutions given in path representation from which the best solution should be analyzed."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the TSP solutions which should be analyzed."));
       Parameters.Add(new LookupParameter<PathTSPTour>("BestSolution", "The best TSP solution."));
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the best TSP solution should be stored."));
Index: /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Analyzers/PopulationBestTSPSolutionAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Analyzers/PopulationBestTSPSolutionAnalyzer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Analyzers/PopulationBestTSPSolutionAnalyzer.cs	(revision 3659)
@@ -62,6 +62,6 @@
       : base() {
       Parameters.Add(new LookupParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the cities."));
-      Parameters.Add(new SubScopesLookupParameter<Permutation>("Permutation", "The TSP solutions given in path representation from which the best solution should be analyzed."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The qualities of the TSP solutions which should be analyzed."));
+      Parameters.Add(new ScopeTreeLookupParameter<Permutation>("Permutation", "The TSP solutions given in path representation from which the best solution should be analyzed."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the TSP solutions which should be analyzed."));
       Parameters.Add(new LookupParameter<PathTSPTour>("BestSolution", "The best TSP solution."));
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the best TSP solution should be stored."));
Index: /trunk/sources/HeuristicLab.Selection/3.3/ConditionalSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Selection/3.3/ConditionalSelector.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Selection/3.3/ConditionalSelector.cs	(revision 3659)
@@ -32,6 +32,6 @@
   [StorableClass]
   public class ConditionalSelector : Selector {
-    public SubScopesLookupParameter<BoolValue> ConditionParameter {
-      get { return (SubScopesLookupParameter<BoolValue>)Parameters["Condition"]; }
+    public ScopeTreeLookupParameter<BoolValue> ConditionParameter {
+      get { return (ScopeTreeLookupParameter<BoolValue>)Parameters["Condition"]; }
     }
     public ValueParameter<BoolValue> CopySelectedParameter {
@@ -46,5 +46,5 @@
     public ConditionalSelector()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<BoolValue>("Condition", "The boolean variable based on which the scopes are selected into a true scope-branch and a false scope-branch."));
+      Parameters.Add(new ScopeTreeLookupParameter<BoolValue>("Condition", "The boolean variable based on which the scopes are selected into a true scope-branch and a false scope-branch."));
       Parameters.Add(new ValueParameter<BoolValue>("CopySelected", "The parameter that decides whether the selected scopes should be copied or moved.", new BoolValue(true)));
     }
Index: /trunk/sources/HeuristicLab.Selection/3.3/GenderSpecificSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Selection/3.3/GenderSpecificSelector.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Selection/3.3/GenderSpecificSelector.cs	(revision 3659)
@@ -89,5 +89,5 @@
       #region Create parameters
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The quality of the solutions."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The quality of the solutions."));
       Parameters.Add(new ValueLookupParameter<IntValue>("NumberOfSelectedSubScopes", "The number of scopes that should be selected."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("CopySelected", "True if the scopes should be copied, false if they should be moved.", new BoolValue(true)));
Index: /trunk/sources/HeuristicLab.Selection/3.3/RandomReplacer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Selection/3.3/RandomReplacer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Selection/3.3/RandomReplacer.cs	(revision 3659)
@@ -53,5 +53,5 @@
     public RandomReplacer()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The quality of a solution."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The quality of a solution."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator to use."));
Index: /trunk/sources/HeuristicLab.Selection/3.3/SingleObjectiveSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Selection/3.3/SingleObjectiveSelector.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Selection/3.3/SingleObjectiveSelector.cs	(revision 3659)
@@ -56,5 +56,5 @@
       Parameters.Add(new ValueLookupParameter<IntValue>("NumberOfSelectedSubScopes", "The number of sub-scopes which should be selected."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the current problem is a maximization problem, otherwise false."));
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The quality value contained in each sub-scope which is used for selection."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The quality value contained in each sub-scope which is used for selection."));
     }
   }
Index: /trunk/sources/HeuristicLab.Selection/3.3/WorstReplacer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Selection/3.3/WorstReplacer.cs	(revision 3658)
+++ /trunk/sources/HeuristicLab.Selection/3.3/WorstReplacer.cs	(revision 3659)
@@ -50,5 +50,5 @@
     public WorstReplacer()
       : base() {
-      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The quality of a solution."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The quality of a solution."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
 
