Index: /trunk/sources/HeuristicLab.Data/HeuristicLab.Data.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Data/HeuristicLab.Data.csproj	(revision 83)
+++ /trunk/sources/HeuristicLab.Data/HeuristicLab.Data.csproj	(revision 84)
@@ -220,4 +220,5 @@
     <EmbeddedResource Include="ConstrainedItemListView.resx">
       <DependentUpon>ConstrainedItemListView.cs</DependentUpon>
+      <SubType>Designer</SubType>
     </EmbeddedResource>
     <EmbeddedResource Include="DoubleDataView.resx">
Index: /trunk/sources/HeuristicLab.ES/HeuristicLab.ES.csproj
===================================================================
--- /trunk/sources/HeuristicLab.ES/HeuristicLab.ES.csproj	(revision 83)
+++ /trunk/sources/HeuristicLab.ES/HeuristicLab.ES.csproj	(revision 84)
@@ -59,4 +59,5 @@
       <DependentUpon>ESEditor.cs</DependentUpon>
     </Compile>
+    <Compile Include="VariableStrengthRepeatingManipulator.cs" />
   </ItemGroup>
   <ItemGroup>
Index: /trunk/sources/HeuristicLab.ES/VariableStrengthRepeatingManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.ES/VariableStrengthRepeatingManipulator.cs	(revision 84)
+++ /trunk/sources/HeuristicLab.ES/VariableStrengthRepeatingManipulator.cs	(revision 84)
@@ -0,0 +1,37 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.ES {
+  public class VariableStrengthRepeatingManipulator : OperatorBase {
+    public override string Description {
+      get { return @"Applies its suboperator a number of times depending on the ShakingFactor"; }
+    }
+
+    public VariableStrengthRepeatingManipulator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+      AddVariableInfo(new VariableInfo("ShakingFactor", "Determines the strength of the mutation (repeated application of the operator)", typeof(DoubleData), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      double shakingFactor = scope.GetVariableValue<DoubleData>("ShakingFactor", true).Data;
+      NormalDistributedRandom N = new NormalDistributedRandom(random, 1.0, shakingFactor);
+      int strength = (int)Math.Ceiling(Math.Abs(N.NextDouble()));
+      if (strength == 0) strength = 1;
+
+      CompositeOperation co = new CompositeOperation();
+      co.ExecuteInParallel = false;
+      for (int i = 0; i < strength; i++) {
+        co.AddOperation(new AtomicOperation(SubOperators[0], scope));
+      }
+
+      return co;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Permutation/HeuristicLab.Permutation.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Permutation/HeuristicLab.Permutation.csproj	(revision 83)
+++ /trunk/sources/HeuristicLab.Permutation/HeuristicLab.Permutation.csproj	(revision 84)
@@ -81,7 +81,4 @@
     <Compile Include="TranslocationInversionManipulator.cs" />
     <Compile Include="TranslocationManipulator.cs" />
-    <Compile Include="VariableStrengthInversionManipulator.cs" />
-    <Compile Include="VariableStrengthPermutationManipulatorBase.cs" />
-    <Compile Include="VariableStrengthSwap2Manipulator.cs" />
   </ItemGroup>
   <ItemGroup>
@@ -106,4 +103,8 @@
       <Name>HeuristicLab.PluginInfrastructure</Name>
     </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Random\HeuristicLab.Random.csproj">
+      <Project>{47019A74-F7F7-482E-83AA-D3F4F777E879}</Project>
+      <Name>HeuristicLab.Random</Name>
+    </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
Index: unk/sources/HeuristicLab.Permutation/VariableStrengthInversionManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Permutation/VariableStrengthInversionManipulator.cs	(revision 83)
+++ 	(revision )
@@ -1,53 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Collections.Generic;
-using System.Text;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.Permutation {
-  public class VariableStrengthInversionManipulator : VariableStrengthPermutationManipulatorBase {
-    public override string Description {
-      get { return @"Applies a Lin-2-Opt manipulation which inverts the permutation between a randomly selected interval"; }
-    }
-
-    public static int[] Apply(IRandom random, int[] permutation) {
-      int[] result = (int[])permutation.Clone();
-      int breakPoint1, breakPoint2;
-
-      breakPoint1 = random.Next(result.Length - 1);
-      do {
-        breakPoint2 = random.Next(result.Length - 1);
-      } while (breakPoint2 == breakPoint1);
-      if (breakPoint2 < breakPoint1) { int h = breakPoint1; breakPoint1 = breakPoint2; breakPoint2 = h; }
-
-      for (int i = 0; i <= (breakPoint2 - breakPoint1); i++) {  // reverse permutation between breakpoints
-        result[breakPoint1 + i] = permutation[breakPoint2 - i];
-      }
-      return result;
-    }
-
-    protected override int[] Manipulate(IScope scope, IRandom random, int[] permutation) {
-      return Apply(random, permutation);
-    }
-  }
-}
Index: unk/sources/HeuristicLab.Permutation/VariableStrengthPermutationManipulatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Permutation/VariableStrengthPermutationManipulatorBase.cs	(revision 83)
+++ 	(revision )
@@ -1,48 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Collections.Generic;
-using System.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.Permutation {
-  public abstract class VariableStrengthPermutationManipulatorBase : PermutationManipulatorBase {
-
-    public VariableStrengthPermutationManipulatorBase()
-      : base() {
-      AddVariableInfo(new VariableInfo("ShakingFactor", "Determines the strength of the mutation (repeated application of the operator)", typeof(DoubleData), VariableKind.In));
-    }
-
-    public override IOperation Apply(IScope scope) {
-      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
-      Permutation perm = GetVariableValue<Permutation>("Permutation", scope, false);
-      double shakingFactor = scope.GetVariableValue<DoubleData>("ShakingFactor", true).Data;
-      int strength = (int)Math.Ceiling(shakingFactor);
-
-      for (int i = 0; i < strength; i++) {
-        perm.Data = Manipulate(scope, random, perm.Data);
-      }
-      return null;
-    }
-  }
-}
Index: unk/sources/HeuristicLab.Permutation/VariableStrengthSwap2Manipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Permutation/VariableStrengthSwap2Manipulator.cs	(revision 83)
+++ 	(revision )
@@ -1,52 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Collections.Generic;
-using System.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.Permutation {
-  public class VariableStrengthSwap2Manipulator : VariableStrengthPermutationManipulatorBase {
-    public override string Description {
-      get { return @"Swaps two randomly selected items in the permutation"; }
-    }
-
-    public static int[] Apply(IRandom random, int[] permutation) {
-      int[] result = (int[])permutation.Clone();
-      int index1, index2, temp;
-
-      index1 = random.Next(result.Length);
-      index2 = random.Next(result.Length);
-
-      temp = result[index1];
-      result[index1] = result[index2];
-      result[index2] = temp;
-
-      return result;
-    }
-
-    protected override int[] Manipulate(IScope scope, IRandom random, int[] permutation) {
-      return Apply(random, permutation);
-    }
-  }
-}
