Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/Constant.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/Constant.cs	(revision 3485)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/Constant.cs	(revision 3512)
@@ -28,4 +28,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
+using System;
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols {
   [StorableClass]
@@ -45,7 +46,26 @@
       set { maxValue = value; }
     }
+    [Storable]
+    private double manipulatorNu;
+    public double ManipulatorNu {
+      get { return manipulatorNu; }
+      set { manipulatorNu = value; }
+    }
+    [Storable]
+    private double manipulatorSigma;
+    public double ManipulatorSigma {
+      get { return manipulatorSigma; }
+      set {
+        if (value < 0) throw new ArgumentException();
+        manipulatorSigma = value;
+      }
+    }
     #endregion
     public Constant()
       : base() {
+      manipulatorNu = 0.0;
+      manipulatorSigma = 1.0;
+      minValue = -20.0;
+      maxValue = 20.0;
     }
 
@@ -55,7 +75,9 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      Constant clone = (Constant) base.Clone(cloner);
+      Constant clone = (Constant)base.Clone(cloner);
       clone.minValue = minValue;
       clone.maxValue = maxValue;
+      clone.manipulatorNu = manipulatorNu;
+      clone.manipulatorSigma = manipulatorSigma;
       return clone;
     }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/ConstantTreeNode.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/ConstantTreeNode.cs	(revision 3485)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/ConstantTreeNode.cs	(revision 3512)
@@ -63,4 +63,11 @@
     }
 
+    public override void ShakeLocalParameters(IRandom random, double shakingFactor) {
+      base.ShakeLocalParameters(random, shakingFactor);
+      var normalDistributedRNG = new NormalDistributedRandom(random, Symbol.ManipulatorNu, Symbol.ManipulatorSigma);
+      double x = normalDistributedRNG.NextDouble();
+      Value = Value + x * shakingFactor;
+    }
+
     public override object Clone() {
       return new ConstantTreeNode(this);
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/Variable.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/Variable.cs	(revision 3485)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/Variable.cs	(revision 3512)
@@ -52,4 +52,19 @@
     }
     [Storable]
+    private double weightManipulatorNu;
+    public double WeightManipulatorNu {
+      get { return weightManipulatorNu; }
+      set { weightManipulatorNu = value; }
+    }
+    [Storable]
+    private double weightManipulatorSigma;
+    public double WeightManipulatorSigma {
+      get { return weightManipulatorSigma; }
+      set {
+        if (weightManipulatorSigma < 0.0) throw new ArgumentException("Negative sigma is not allowed.");
+        weightManipulatorSigma = value;
+      }
+    }
+    [Storable]
     private List<string> variableNames;
     public IEnumerable<string> VariableNames {
@@ -66,4 +81,6 @@
       weightNu = 1.0;
       weightSigma = 1.0;
+      weightManipulatorNu = 0.0;
+      weightManipulatorSigma = 1.0;
       variableNames = new List<string>();
     }
@@ -78,4 +95,6 @@
       clone.weightSigma = weightSigma;
       clone.variableNames = new List<string>(variableNames);
+      clone.weightManipulatorNu = weightManipulatorNu;
+      clone.weightManipulatorSigma = weightManipulatorSigma;
       return clone;
     }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/VariableTreeNode.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/VariableTreeNode.cs	(revision 3485)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/VariableTreeNode.cs	(revision 3512)
@@ -69,8 +69,15 @@
       var normalDistributedRNG = new NormalDistributedRandom(random, Symbol.WeightNu, Symbol.WeightSigma);
       weight = normalDistributedRNG.NextDouble();
-      var variableList = new List<string>(Symbol.VariableNames);
-      int variableIndex = random.Next(0, variableList.Count);
-      variableName = variableList[variableIndex];
+      variableName = Symbol.VariableNames.SelectRandom(random);
     }
+
+    public override void ShakeLocalParameters(IRandom random, double shakingFactor) {
+      base.ShakeLocalParameters(random, shakingFactor);
+      var normalDistributedRNG = new NormalDistributedRandom(random, Symbol.WeightManipulatorNu, Symbol.WeightManipulatorSigma);
+      double x = normalDistributedRNG.NextDouble();
+      weight = weight + x * shakingFactor;
+      variableName = Symbol.VariableNames.SelectRandom(random);
+    }
+
 
     public override object Clone() {
