Index: /trunk/sources/HeuristicLab.BitVector/BitVectorCrossoverBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/BitVectorCrossoverBase.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.BitVector/BitVectorCrossoverBase.cs	(revision 77)
@@ -36,11 +36,11 @@
     protected sealed override void Cross(IScope scope, IRandom random, IScope parent1, IScope parent2, IScope child) {
       IVariableInfo bitVectorInfo = GetVariableInfo("BitVector");
-      BoolArrayData vector1 = parent1.GetVariableValue<BoolArrayData>(bitVectorInfo.ActualName, false);
-      BoolArrayData vector2 = parent2.GetVariableValue<BoolArrayData>(bitVectorInfo.ActualName, false);
+      BoolArrayData vector1 = parent1.GetVariableValue<BoolArrayData>(bitVectorInfo.FormalName, false);
+      BoolArrayData vector2 = parent2.GetVariableValue<BoolArrayData>(bitVectorInfo.FormalName, false);
 
       if (vector1.Data.Length != vector2.Data.Length) throw new InvalidOperationException("Cannot apply crossover to bit vectors of different length.");
 
       bool[] result = Cross(scope, random, vector1.Data, vector2.Data);
-      child.AddVariable(new Variable(bitVectorInfo.ActualName, new BoolArrayData(result)));
+      child.AddVariable(new Variable(child.TranslateName(bitVectorInfo.FormalName), new BoolArrayData(result)));
     }
 
Index: /trunk/sources/HeuristicLab.BitVector/RandomBitVectorGenerator.cs
===================================================================
--- /trunk/sources/HeuristicLab.BitVector/RandomBitVectorGenerator.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.BitVector/RandomBitVectorGenerator.cs	(revision 77)
@@ -56,5 +56,5 @@
 
             bool[] vector = Apply(random, length);
-            scope.AddVariable(new Variable(GetVariableInfo("BitVector").ActualName, new BoolArrayData(vector)));
+            scope.AddVariable(new Variable(scope.TranslateName("BitVector"), new BoolArrayData(vector)));
 
             return null;
Index: /trunk/sources/HeuristicLab.Evolutionary/CrossoverBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/CrossoverBase.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Evolutionary/CrossoverBase.cs	(revision 77)
@@ -42,10 +42,10 @@
       for (int i = 0; i < children; i++) {
         IScope parent1 = scope.SubScopes[0];
+        IScope parent2 = scope.SubScopes[1];
+        IScope child = new Scope(i.ToString());
+        scope.AddSubScope(child);
+        Cross(scope, random, parent1, parent2, child);
         scope.RemoveSubScope(parent1);
-        IScope parent2 = scope.SubScopes[0];
         scope.RemoveSubScope(parent2);
-        IScope child = new Scope(i.ToString());
-        Cross(scope, random, parent1, parent2, child);
-        scope.AddSubScope(child);
       }
 
Index: /trunk/sources/HeuristicLab.Evolutionary/SubScopesStorer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/SubScopesStorer.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Evolutionary/SubScopesStorer.cs	(revision 77)
@@ -49,5 +49,5 @@
           AddVariable(new Variable(info.ActualName, subScopesStore));
         else
-          scope.AddVariable(new Variable(info.ActualName, subScopesStore));
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), subScopesStore));
       }
 
@@ -64,5 +64,5 @@
             RemoveVariable(info.ActualName);
           else
-            scope.RemoveVariable(info.ActualName);
+            scope.RemoveVariable(scope.TranslateName(info.FormalName));
         }
         return null;
Index: /trunk/sources/HeuristicLab.Evolutionary/SuccessRuleMutationStrengthAdjuster.cs
===================================================================
--- /trunk/sources/HeuristicLab.Evolutionary/SuccessRuleMutationStrengthAdjuster.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Evolutionary/SuccessRuleMutationStrengthAdjuster.cs	(revision 77)
@@ -47,9 +47,12 @@
       if (successProb == null) {
         IVariableInfo successProbInfo = GetVariableInfo("SuccessProbability");
-        Variable successProbVar = new Variable(successProbInfo.ActualName, new DoubleData(targetSuccessProb.Data));
-        if (successProbInfo.Local)
+        IVariable successProbVar;
+        if (successProbInfo.Local) {
+          successProbVar = new Variable(successProbInfo.ActualName, new DoubleData(targetSuccessProb.Data));
           AddVariable(successProbVar);
-        else
+        } else {
+          successProbVar = new Variable(scope.TranslateName(successProbInfo.FormalName), new DoubleData(targetSuccessProb.Data));
           scope.AddVariable(successProbVar);
+        }
         successProb = (DoubleData)successProbVar.Value;
       }
@@ -59,8 +62,8 @@
       double success = 0.0;
       for (int i = 0 ; i < scope.SubScopes.Count ; i++) {
-        if (scope.SubScopes[i].GetVariableValue<BoolData>(GetVariableInfo("SuccessfulChild").ActualName, false).Data) {
+        if (scope.SubScopes[i].GetVariableValue<BoolData>("SuccessfulChild", false).Data) {
           success++;
         }
-        scope.SubScopes[i].RemoveVariable(GetVariableInfo("SuccessfulChild").ActualName);
+        scope.SubScopes[i].RemoveVariable(scope.SubScopes[i].TranslateName("SuccessfulChild"));
       }
       if (scope.SubScopes.Count > 0) success /= scope.SubScopes.Count;
Index: /trunk/sources/HeuristicLab.Logging/BestAverageWorstQualityCalculator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Logging/BestAverageWorstQualityCalculator.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Logging/BestAverageWorstQualityCalculator.cs	(revision 77)
@@ -46,5 +46,5 @@
 
       for (int i = 0; i < scope.SubScopes.Count; i++)
-        qualities[i] = scope.SubScopes[i].GetVariableValue<DoubleData>(GetVariableInfo("Quality").ActualName, false).Data;
+        qualities[i] = scope.SubScopes[i].GetVariableValue<DoubleData>("Quality", false).Data;
 
       double worst = qualities[0];
@@ -78,5 +78,5 @@
           AddVariable(new Variable(info.ActualName, data));
         else
-          scope.AddVariable(new Variable(info.ActualName, data));
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), data));
       }
       data.Data = value;
Index: /trunk/sources/HeuristicLab.Logging/LinechartInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Logging/LinechartInjector.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Logging/LinechartInjector.cs	(revision 77)
@@ -52,5 +52,5 @@
           AddVariable(new Variable(info.ActualName, linechart));
         else
-          scope.AddVariable(new Variable(info.ActualName, linechart));
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), linechart));
       } else
         linechart.Values = values;
Index: /trunk/sources/HeuristicLab.Logging/QualityLogger.cs
===================================================================
--- /trunk/sources/HeuristicLab.Logging/QualityLogger.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Logging/QualityLogger.cs	(revision 77)
@@ -43,5 +43,5 @@
 
       for (int i = 0; i < scope.SubScopes.Count; i++)
-        qualities[i] = scope.SubScopes[i].GetVariableValue<DoubleData>(GetVariableInfo("Quality").ActualName, false).Data;
+        qualities[i] = scope.SubScopes[i].GetVariableValue<DoubleData>("Quality", false).Data;
 
       double min = qualities[0];
@@ -62,5 +62,5 @@
           AddVariable(new Variable(info.ActualName, log));
         else
-          scope.AddVariable(new Variable(info.ActualName, log));
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), log));
       }
       log.Items.Add(new DoubleArrayData(new double[] { min, average, max } ));
Index: /trunk/sources/HeuristicLab.Operators.Programmable/ProgrammableOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Programmable/ProgrammableOperator.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Operators.Programmable/ProgrammableOperator.cs	(revision 77)
@@ -163,5 +163,5 @@
               AddVariable(new Variable(info.ActualName, value));
             } else {
-              scope.AddVariable(new Variable(info.ActualName, value));
+              scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), value));
             }
             parameters[i] = value;
Index: /trunk/sources/HeuristicLab.Operators/ComparatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/ComparatorBase.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Operators/ComparatorBase.cs	(revision 77)
@@ -42,5 +42,5 @@
           AddVariable(new Variable(info.ActualName, result));
         else
-          scope.AddVariable(new Variable(info.ActualName, result));
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), result));
       }
       IItem leftSide = GetVariableValue<IItem>("LeftSide", scope, true);
Index: /trunk/sources/HeuristicLab.Operators/DataCollector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/DataCollector.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Operators/DataCollector.cs	(revision 77)
@@ -50,5 +50,5 @@
           AddVariable(new Variable(info.ActualName, values));
         else
-          scope.AddVariable(new Variable(info.ActualName, values));
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), values));
       }
 
Index: /trunk/sources/HeuristicLab.Operators/SingleObjectiveEvaluatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/SingleObjectiveEvaluatorBase.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Operators/SingleObjectiveEvaluatorBase.cs	(revision 77)
@@ -42,5 +42,5 @@
           AddVariable(new Variable(qualityInfo.ActualName, quality));
         else
-          scope.AddVariable(new Variable(qualityInfo.ActualName, quality));
+          scope.AddVariable(new Variable(scope.TranslateName(qualityInfo.FormalName), quality));
       } else {
         quality.Data = qualityValue;
Index: /trunk/sources/HeuristicLab.Operators/Sorter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/Sorter.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Operators/Sorter.cs	(revision 77)
@@ -44,5 +44,5 @@
 
       for (int i = 0; i < keys.Length; i++) {
-        keys[i] = scope.SubScopes[i].GetVariableValue<DoubleData>(GetVariableInfo("Value").ActualName, false).Data;
+        keys[i] = scope.SubScopes[i].GetVariableValue<DoubleData>("Value", false).Data;
         sequence[i] = i;
       }
Index: /trunk/sources/HeuristicLab.Permutation/PermutationCrossoverBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Permutation/PermutationCrossoverBase.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Permutation/PermutationCrossoverBase.cs	(revision 77)
@@ -34,12 +34,11 @@
 
     protected sealed override void Cross(IScope scope, IRandom random, IScope parent1, IScope parent2, IScope child) {
-      IVariableInfo permutationInfo = GetVariableInfo("Permutation");
-      Permutation perm1 = parent1.GetVariableValue<Permutation>(permutationInfo.ActualName, false);
-      Permutation perm2 = parent2.GetVariableValue<Permutation>(permutationInfo.ActualName, false);
+      Permutation perm1 = parent1.GetVariableValue<Permutation>("Permutation", false);
+      Permutation perm2 = parent2.GetVariableValue<Permutation>("Permutation", false);
 
       if (perm1.Data.Length != perm2.Data.Length) throw new InvalidOperationException("Cannot apply crossover to permutations of different length.");
 
       int[] result = Cross(scope, random, perm1.Data, perm2.Data);
-      child.AddVariable(new Variable(permutationInfo.ActualName, new Permutation(result)));
+      child.AddVariable(new Variable(scope.TranslateName("Permutation"), new Permutation(result)));
     }
 
Index: /trunk/sources/HeuristicLab.Permutation/RandomPermutationGenerator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Permutation/RandomPermutationGenerator.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Permutation/RandomPermutationGenerator.cs	(revision 77)
@@ -61,5 +61,5 @@
 
       int[] perm = Apply(random, length.Data);
-      scope.AddVariable(new Variable(GetVariableInfo("Permutation").ActualName, new Permutation(perm)));
+      scope.AddVariable(new Variable(scope.TranslateName("Permutation"), new Permutation(perm)));
 
       return null;
Index: /trunk/sources/HeuristicLab.Random/RandomInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Random/RandomInjector.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Random/RandomInjector.cs	(revision 77)
@@ -56,5 +56,6 @@
       }
       MersenneTwister mersenneTwister = new MersenneTwister((uint)seed.Data);
-      scope.AddVariable(new Variable(GetVariableInfo("Random").ActualName, mersenneTwister));
+
+      scope.AddVariable(new Variable(scope.TranslateName("Random"), mersenneTwister));
       return null;
     }
Index: /trunk/sources/HeuristicLab.RealVector/HeuristicCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.RealVector/HeuristicCrossover.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.RealVector/HeuristicCrossover.cs	(revision 77)
@@ -35,15 +35,13 @@
     protected sealed override void Cross(IScope scope, IRandom random, IScope parent1, IScope parent2, IScope child) {
       bool maximization = GetVariableValue<BoolData>("Maximization", scope, true).Data;
-      IVariableInfo realVectorInfo = GetVariableInfo("RealVector");
-      IVariableInfo qualityInfo = GetVariableInfo("Quality");
-      DoubleArrayData vector1 = parent1.GetVariableValue<DoubleArrayData>(realVectorInfo.ActualName, false);
-      DoubleData quality1 = parent1.GetVariableValue<DoubleData>(qualityInfo.ActualName, false);
-      DoubleArrayData vector2 = parent2.GetVariableValue<DoubleArrayData>(realVectorInfo.ActualName, false);
-      DoubleData quality2 = parent2.GetVariableValue<DoubleData>(qualityInfo.ActualName, false);
+      DoubleArrayData vector1 = parent1.GetVariableValue<DoubleArrayData>("RealVector", false);
+      DoubleData quality1 = parent1.GetVariableValue<DoubleData>("Quality", false);
+      DoubleArrayData vector2 = parent2.GetVariableValue<DoubleArrayData>("RealVector", false);
+      DoubleData quality2 = parent2.GetVariableValue<DoubleData>("Quality", false);
 
       if (vector1.Data.Length != vector2.Data.Length) throw new InvalidOperationException("Cannot apply crossover to real vectors of different length.");
 
       double[] result = Apply(random, maximization, vector1.Data, quality1.Data, vector2.Data, quality2.Data);
-      child.AddVariable(new Variable(realVectorInfo.ActualName, new DoubleArrayData(result)));
+      child.AddVariable(new Variable(child.TranslateName("RealVector"), new DoubleArrayData(result)));
     }
   }
Index: /trunk/sources/HeuristicLab.RealVector/RealVectorCrossoverBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.RealVector/RealVectorCrossoverBase.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.RealVector/RealVectorCrossoverBase.cs	(revision 77)
@@ -35,12 +35,11 @@
 
     protected sealed override void Cross(IScope scope, IRandom random, IScope parent1, IScope parent2, IScope child) {
-      IVariableInfo realVectorInfo = GetVariableInfo("RealVector");
-      DoubleArrayData vector1 = parent1.GetVariableValue<DoubleArrayData>(realVectorInfo.ActualName, false);
-      DoubleArrayData vector2 = parent2.GetVariableValue<DoubleArrayData>(realVectorInfo.ActualName, false);
+      DoubleArrayData vector1 = parent1.GetVariableValue<DoubleArrayData>("RealVector", false);
+      DoubleArrayData vector2 = parent2.GetVariableValue<DoubleArrayData>("RealVector", false);
 
       if (vector1.Data.Length != vector2.Data.Length) throw new InvalidOperationException("Cannot apply crossover to real vectors of different length.");
 
       double[] result = Cross(scope, random, vector1.Data, vector2.Data);
-      child.AddVariable(new Variable(realVectorInfo.ActualName, new DoubleArrayData(result)));
+      child.AddVariable(new Variable(child.TranslateName("RealVector"), new DoubleArrayData(result)));
     }
 
Index: /trunk/sources/HeuristicLab.RealVector/UniformRandomRealVectorGenerator.cs
===================================================================
--- /trunk/sources/HeuristicLab.RealVector/UniformRandomRealVectorGenerator.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.RealVector/UniformRandomRealVectorGenerator.cs	(revision 77)
@@ -54,5 +54,5 @@
 
       double[] vector = Apply(random, length, min, max);
-      scope.AddVariable(new Variable(GetVariableInfo("RealVector").ActualName, new DoubleArrayData(vector)));
+      scope.AddVariable(new Variable(scope.TranslateName("RealVector"), new DoubleArrayData(vector)));
 
       return null;
Index: /trunk/sources/HeuristicLab.Routing.TSP/TSPDistanceMatrixInjectorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Routing.TSP/TSPDistanceMatrixInjectorBase.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Routing.TSP/TSPDistanceMatrixInjectorBase.cs	(revision 77)
@@ -49,5 +49,5 @@
         }
       }
-      scope.AddVariable(new Variable(GetVariableInfo("DistanceMatrix").ActualName, new DoubleMatrixData(distanceMatrix)));
+      scope.AddVariable(new Variable(scope.TranslateName("DistanceMatrix"), new DoubleMatrixData(distanceMatrix)));
 
       return null;
Index: /trunk/sources/HeuristicLab.Routing.TSP/TSPInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Routing.TSP/TSPInjector.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Routing.TSP/TSPInjector.cs	(revision 77)
@@ -51,9 +51,9 @@
 
     public override IOperation Apply(IScope scope) {
-      scope.AddVariable(new Variable(GetVariableInfo("Maximization").ActualName, new BoolData(false)));
-      scope.AddVariable(new Variable(GetVariableInfo("Cities").ActualName, (IItem)GetVariable("Cities").Value.Clone()));
-      scope.AddVariable(new Variable(GetVariableInfo("Coordinates").ActualName, (IItem)GetVariable("Coordinates").Value.Clone()));
+      scope.AddVariable(new Variable(scope.TranslateName("Maximization"), new BoolData(false)));
+      scope.AddVariable(new Variable(scope.TranslateName("Cities"), (IItem)GetVariable("Cities").Value.Clone()));
+      scope.AddVariable(new Variable(scope.TranslateName("Coordinates"), (IItem)GetVariable("Coordinates").Value.Clone()));
       if (GetVariable("InjectBestKnownQuality").GetValue<BoolData>().Data)
-        scope.AddVariable(new Variable(GetVariableInfo("BestKnownQuality").ActualName, (IItem)GetVariable("BestKnownQuality").Value.Clone()));
+        scope.AddVariable(new Variable(scope.TranslateName("BestKnownQuality"), (IItem)GetVariable("BestKnownQuality").Value.Clone()));
       return null;
     }
Index: /trunk/sources/HeuristicLab.Routing.TSP/TSPTourInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Routing.TSP/TSPTourInjector.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Routing.TSP/TSPTourInjector.cs	(revision 77)
@@ -50,5 +50,5 @@
           AddVariable(new Variable(info.ActualName, tour));
         else
-          scope.AddVariable(new Variable(info.ActualName, tour));
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), tour));
       } else {
         tour.Coordinates = coordinates;
Index: /trunk/sources/HeuristicLab.Scheduling.JSSP/CopyVariableFromSubScope.cs
===================================================================
--- /trunk/sources/HeuristicLab.Scheduling.JSSP/CopyVariableFromSubScope.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Scheduling.JSSP/CopyVariableFromSubScope.cs	(revision 77)
@@ -46,8 +46,8 @@
         IItem var = GetVariableValue<IItem>("Variable", s, false);
         if(var != null) {
-          if(scope.GetVariable(GetVariableInfo("Variable").ActualName) != null) {
-            scope.RemoveVariable(GetVariableInfo("Variable").ActualName);
+          if(scope.GetVariable(scope.TranslateName("Variable")) != null) {
+            scope.RemoveVariable(scope.TranslateName("Variable"));
           }
-          scope.AddVariable(new Variable(GetVariableInfo("Variable").ActualName, var));
+          scope.AddVariable(new Variable(scope.TranslateName("Variable"), var));
           return null;
         }
Index: /trunk/sources/HeuristicLab.Scheduling.JSSP/IsSchedulable.cs
===================================================================
--- /trunk/sources/HeuristicLab.Scheduling.JSSP/IsSchedulable.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Scheduling.JSSP/IsSchedulable.cs	(revision 77)
@@ -40,9 +40,9 @@
     public override IOperation Apply(IScope scope) {
       Operation op = GetVariableValue<Operation>("Operation", scope, true);
-      if(scope.GetVariable(GetVariableInfo("Schedulable").ActualName) != null) {
+      if(scope.GetVariable(scope.TranslateName("Schedulable")) != null) {
         BoolData isSchedulable = GetVariableValue<BoolData>("Schedulable", scope, false);
         isSchedulable.Data = (op.Predecessors.Count == 0);
       } else {
-        scope.AddVariable(new Variable(GetVariableInfo("Schedulable").ActualName, new BoolData((op.Predecessors.Count == 0))));
+        scope.AddVariable(new Variable(scope.TranslateName("Schedulable"), new BoolData((op.Predecessors.Count == 0))));
       }
       return null;
Index: /trunk/sources/HeuristicLab.Scheduling.JSSP/ItemListIndexer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Scheduling.JSSP/ItemListIndexer.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Scheduling.JSSP/ItemListIndexer.cs	(revision 77)
@@ -45,9 +45,9 @@
       ItemList list = GetVariableValue<ItemList>("List", scope, true);
       int index = GetVariableValue<IntData>("Index", scope, true).Data;
-      if(scope.GetVariable(GetVariableInfo("Object").ActualName) != null) {
-        scope.RemoveVariable(GetVariableInfo("Object").ActualName);
+      if(scope.GetVariable(scope.TranslateName("Object")) != null) {
+        scope.RemoveVariable(scope.TranslateName("Object"));
       }
       if((list != null) && (index < list.Count)) {
-        scope.AddVariable(new Variable(GetVariableInfo("Object").ActualName, (IItem)list[index].Clone()));
+        scope.AddVariable(new Variable(scope.TranslateName("Object"), (IItem)list[index].Clone()));
       }
       return null;
Index: /trunk/sources/HeuristicLab.Scheduling.JSSP/JSSPInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Scheduling.JSSP/JSSPInjector.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Scheduling.JSSP/JSSPInjector.cs	(revision 77)
@@ -66,7 +66,7 @@
 
     public override IOperation Apply(IScope scope) {
-      scope.AddVariable(new Variable(GetVariableInfo("Machines").ActualName, machines.Clone() as IntData));
-      scope.AddVariable(new Variable(GetVariableInfo("Jobs").ActualName, jobs.Clone() as IntData));
-      scope.AddVariable(new Variable(GetVariableInfo("Operations").ActualName, (ItemList)operations.Clone()));
+      scope.AddVariable(new Variable(scope.TranslateName("Machines"), machines.Clone() as IntData));
+      scope.AddVariable(new Variable(scope.TranslateName("Jobs"), jobs.Clone() as IntData));
+      scope.AddVariable(new Variable(scope.TranslateName("Operations"), (ItemList)operations.Clone()));
       return base.Apply(scope);
     }
Index: /trunk/sources/HeuristicLab.Scheduling.JSSP/ScheduleInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Scheduling.JSSP/ScheduleInjector.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Scheduling.JSSP/ScheduleInjector.cs	(revision 77)
@@ -51,5 +51,5 @@
       IntData timespan = GetVariableValue<IntData>("Timespan", scope, true);
       schedule = new Schedule(machines.Data, timespan.Data);
-      scope.AddVariable(new Variable(GetVariableInfo("Schedule").ActualName, schedule));
+      scope.AddVariable(new Variable(scope.TranslateName("Schedule"), schedule));
       return null;
     }
Index: /trunk/sources/HeuristicLab.Selection.OffspringSelection/OffspringAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Selection.OffspringSelection/OffspringAnalyzer.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Selection.OffspringSelection/OffspringAnalyzer.cs	(revision 77)
@@ -60,5 +60,5 @@
         double[] qualitiesArray = new double[scope.SubScopes.Count];
         for (int i = 0; i < qualitiesArray.Length; i++)
-          qualitiesArray[i] = scope.SubScopes[i].GetVariableValue<DoubleData>(qualityInfo.ActualName, false).Data;
+          qualitiesArray[i] = scope.SubScopes[i].GetVariableValue<DoubleData>(qualityInfo.FormalName, false).Data;
         qualities = new DoubleArrayData(qualitiesArray);
         IVariableInfo parentQualitiesInfo = GetVariableInfo("ParentQualities");
@@ -66,5 +66,5 @@
           AddVariable(new Variable(parentQualitiesInfo.ActualName, qualities));
         else
-          scope.AddVariable(new Variable(parentQualitiesInfo.ActualName, qualities));
+          scope.AddVariable(new Variable(scope.TranslateName(parentQualitiesInfo.FormalName), qualities));
 
         CompositeOperation next = new CompositeOperation();
@@ -82,5 +82,5 @@
           }
           IVariableInfo qualityInfo = GetVariableInfo("Quality");
-          double child = scope.SubScopes[i].GetVariableValue<DoubleData>(qualityInfo.ActualName, false).Data;
+          double child = scope.SubScopes[i].GetVariableValue<DoubleData>(qualityInfo.FormalName, false).Data;
           double threshold;
 
@@ -97,5 +97,5 @@
           else
             successful = new BoolData(false);
-          scope.SubScopes[i].AddVariable(new Variable(successfulInfo.ActualName, successful));
+          scope.SubScopes[i].AddVariable(new Variable(scope.TranslateName(successfulInfo.FormalName), successful));
         }
 
@@ -105,5 +105,5 @@
           RemoveVariable(parentQualitiesInfo.ActualName);
         else
-          scope.RemoveVariable(parentQualitiesInfo.ActualName);
+          scope.RemoveVariable(scope.TranslateName(parentQualitiesInfo.FormalName));
 
         return null;
Index: /trunk/sources/HeuristicLab.Selection.OffspringSelection/OffspringSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Selection.OffspringSelection/OffspringSelector.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Selection.OffspringSelection/OffspringSelector.cs	(revision 77)
@@ -57,5 +57,5 @@
           AddVariable(new Variable(goodChildrenInfo.ActualName, goodChildren));
         else
-          scope.AddVariable(new Variable(goodChildrenInfo.ActualName, goodChildren));
+          scope.AddVariable(new Variable(scope.TranslateName(goodChildrenInfo.FormalName), goodChildren));
       }
       ItemList<IScope> badChildren = GetVariableValue<ItemList<IScope>>("BadChildren", scope, false, false);
@@ -66,5 +66,5 @@
           AddVariable(new Variable(badChildrenInfo.ActualName, badChildren));
         else
-          scope.AddVariable(new Variable(badChildrenInfo.ActualName, badChildren));
+          scope.AddVariable(new Variable(scope.TranslateName(badChildrenInfo.FormalName), badChildren));
       }
 
@@ -73,5 +73,5 @@
       while (children.SubScopes.Count > 0) {
         IScope child = children.SubScopes[0];
-        bool successful = child.GetVariableValue<BoolData>(successfulInfo.ActualName, false).Data;
+        bool successful = child.GetVariableValue<BoolData>(successfulInfo.FormalName, false).Data;
         if (successful) goodChildren.Add(child);
         else badChildren.Add(child);
@@ -87,5 +87,5 @@
           AddVariable(new Variable(selectionPressureInfo.ActualName, selectionPressure));
         else
-          scope.AddVariable(new Variable(selectionPressureInfo.ActualName, selectionPressure));
+          scope.AddVariable(new Variable(scope.TranslateName(selectionPressureInfo.FormalName), selectionPressure));
       }
       DoubleData successRatio = GetVariableValue<DoubleData>("SuccessRatio", scope, false, false);
@@ -96,5 +96,5 @@
           AddVariable(new Variable(successRatioInfo.ActualName, successRatio));
         else
-          scope.AddVariable(new Variable(successRatioInfo.ActualName, successRatio));
+          scope.AddVariable(new Variable(scope.TranslateName(successRatioInfo.FormalName), successRatio));
       }
       int goodCount = goodChildren.Count;
@@ -130,10 +130,10 @@
           RemoveVariable(goodChildrenInfo.ActualName);
         else
-          scope.RemoveVariable(goodChildrenInfo.ActualName);
+          scope.RemoveVariable(scope.TranslateName(goodChildrenInfo.FormalName));
         IVariableInfo badChildrenInfo = GetVariableInfo("BadChildren");
         if (badChildrenInfo.Local)
           RemoveVariable(badChildrenInfo.ActualName);
         else
-          scope.RemoveVariable(badChildrenInfo.ActualName);
+          scope.RemoveVariable(scope.TranslateName(badChildrenInfo.FormalName));
 
         return null;
Index: /trunk/sources/HeuristicLab.Selection/ProportionalSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Selection/ProportionalSelector.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Selection/ProportionalSelector.cs	(revision 77)
@@ -81,6 +81,6 @@
       if (subScopes < 1) throw new InvalidOperationException("No source scopes to select available.");
 
-      double best = source.SubScopes[0].GetVariableValue<DoubleData>(qualityInfo.ActualName, false).Data;
-      double worst = source.SubScopes[subScopes - 1].GetVariableValue<DoubleData>(qualityInfo.ActualName, false).Data;
+      double best = source.SubScopes[0].GetVariableValue<DoubleData>(qualityInfo.FormalName, false).Data;
+      double worst = source.SubScopes[subScopes - 1].GetVariableValue<DoubleData>(qualityInfo.FormalName, false).Data;
       double limit = Math.Min(worst * 2, double.MaxValue);
       double min = Math.Min(best, worst);
@@ -90,5 +90,5 @@
       // preprocess fitness values, apply windowing if desired
       for (int i = 0; i < qualities.Length; i++) {
-        solutionQuality = source.SubScopes[i].GetVariableValue<DoubleData>(qualityInfo.ActualName, false).Data;
+        solutionQuality = source.SubScopes[i].GetVariableValue<DoubleData>(qualityInfo.FormalName, false).Data;
         if (solutionQuality < min || solutionQuality > max) {
           // something has obviously gone wrong here
Index: /trunk/sources/HeuristicLab.Selection/TournamentSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Selection/TournamentSelector.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.Selection/TournamentSelector.cs	(revision 77)
@@ -52,5 +52,5 @@
         for (int j = 0; j < groupSize; j++) {
           IScope scope = source.SubScopes[random.Next(source.SubScopes.Count)];
-          double quality = scope.GetVariableValue<DoubleData>(qualityInfo.ActualName, false).Data;
+          double quality = scope.GetVariableValue<DoubleData>(qualityInfo.FormalName, false).Data;
           if (((maximization) && (quality > best)) ||
               ((!maximization) && (quality < best))) {
Index: /trunk/sources/HeuristicLab.StructureIdentification/StructIdProblemInjector.cs
===================================================================
--- /trunk/sources/HeuristicLab.StructureIdentification/StructIdProblemInjector.cs	(revision 76)
+++ /trunk/sources/HeuristicLab.StructureIdentification/StructIdProblemInjector.cs	(revision 77)
@@ -57,11 +57,11 @@
 
     public override IOperation Apply(IScope scope) {
-      scope.AddVariable(new Variable(GetVariableInfo("Maximization").ActualName, new BoolData(false)));
-      scope.AddVariable(new Variable(GetVariableInfo("Dataset").ActualName, (IItem)GetVariable("Dataset").Value.Clone()));
-      scope.AddVariable(new Variable(GetVariableInfo("TargetVariable").ActualName, (IItem)GetVariable("TargetVariable").Value.Clone()));
-      scope.AddVariable(new Variable(GetVariableInfo("MaxTreeHeight").ActualName, (IItem)GetVariable("MaxTreeHeight").Value.Clone()));
-      scope.AddVariable(new Variable(GetVariableInfo("MaxTreeSize").ActualName, (IItem)GetVariable("MaxTreeSize").Value.Clone()));
-      scope.AddVariable(new Variable(GetVariableInfo("TrainingSamplesStart").ActualName, (IItem)GetVariable("TrainingSamplesStart").Value.Clone()));
-      scope.AddVariable(new Variable(GetVariableInfo("TrainingSamplesEnd").ActualName, (IItem)GetVariable("TrainingSamplesEnd").Value.Clone()));
+      scope.AddVariable(new Variable(scope.TranslateName("Maximization"), new BoolData(false)));
+      scope.AddVariable(new Variable(scope.TranslateName("Dataset"), (IItem)GetVariable("Dataset").Value.Clone()));
+      scope.AddVariable(new Variable(scope.TranslateName("TargetVariable"), (IItem)GetVariable("TargetVariable").Value.Clone()));
+      scope.AddVariable(new Variable(scope.TranslateName("MaxTreeHeight"), (IItem)GetVariable("MaxTreeHeight").Value.Clone()));
+      scope.AddVariable(new Variable(scope.TranslateName("MaxTreeSize"), (IItem)GetVariable("MaxTreeSize").Value.Clone()));
+      scope.AddVariable(new Variable(scope.TranslateName("TrainingSamplesStart"), (IItem)GetVariable("TrainingSamplesStart").Value.Clone()));
+      scope.AddVariable(new Variable(scope.TranslateName("TrainingSamplesEnd"), (IItem)GetVariable("TrainingSamplesEnd").Value.Clone()));
       return null;
     }
