Index: /trunk/sources/HeuristicLab.Operators/HeuristicLab.Operators.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Operators/HeuristicLab.Operators.csproj	(revision 589)
+++ /trunk/sources/HeuristicLab.Operators/HeuristicLab.Operators.csproj	(revision 590)
@@ -99,4 +99,5 @@
     <Compile Include="Sorter.cs" />
     <Compile Include="StochasticBranch.cs" />
+    <Compile Include="SubScopesRemover.cs" />
     <Compile Include="UnequalToComparator.cs" />
     <Compile Include="UniformSequentialSubScopesProcessor.cs" />
Index: /trunk/sources/HeuristicLab.Operators/SubScopesRemover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/SubScopesRemover.cs	(revision 590)
+++ /trunk/sources/HeuristicLab.Operators/SubScopesRemover.cs	(revision 590)
@@ -0,0 +1,33 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  public class SubScopesRemover : OperatorBase {
+    public override string Description {
+      get {
+        return @"This operator either removes the subscope specified in the variable SubScopeIndex or if this variable is absent, removes all subscopes.";
+      }
+    }
+
+    public SubScopesRemover()
+      : base() {
+      AddVariableInfo(new VariableInfo("SubScopeIndex", "(Optional) the index of the subscope to remove", typeof(IntData), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      IntData index = GetVariableValue<IntData>("SubScopeIndex", scope, true, false);
+      if (index == null) { // remove all scopes
+        while (scope.SubScopes.Count > 0) {
+          scope.RemoveSubScope(scope.SubScopes[0]);
+        }
+      } else {
+        if (index.Data < 0 && index.Data >= scope.SubScopes.Count) throw new InvalidOperationException("ERROR: no scope with index " + index.Data + " exists");
+        scope.RemoveSubScope(scope.SubScopes[index.Data]);
+      }
+      return null;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.SimOpt/HeuristicLab.SimOpt.csproj
===================================================================
--- /trunk/sources/HeuristicLab.SimOpt/HeuristicLab.SimOpt.csproj	(revision 589)
+++ /trunk/sources/HeuristicLab.SimOpt/HeuristicLab.SimOpt.csproj	(revision 590)
@@ -60,5 +60,4 @@
     <Compile Include="SimOptSequentialSubOperatorProcessor.cs" />
     <Compile Include="SimOptSquentialSubOperatorCrossover.cs" />
-    <Compile Include="SubScopesRemover.cs" />
     <Compile Include="Swap2PermutationManipulator.cs" />
     <Compile Include="RandomDoubleInitializer.cs" />
Index: /trunk/sources/HeuristicLab.SimOpt/SimOptSquentialSubOperatorCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.SimOpt/SimOptSquentialSubOperatorCrossover.cs	(revision 589)
+++ /trunk/sources/HeuristicLab.SimOpt/SimOptSquentialSubOperatorCrossover.cs	(revision 590)
@@ -46,5 +46,5 @@
         for (int n = 0 ; n < SubOperators.Count ; n++)
           co.AddOperation(new AtomicOperation(SubOperators[n], child));
-        co.AddOperation(new AtomicOperation(new SubScopesRemover(), child));
+        co.AddOperation(new AtomicOperation(new Operators.SubScopesRemover(), child));
       }
       return co;
Index: unk/sources/HeuristicLab.SimOpt/SubScopesRemover.cs
===================================================================
--- /trunk/sources/HeuristicLab.SimOpt/SubScopesRemover.cs	(revision 589)
+++ 	(revision )
@@ -1,16 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.SimOpt {
-  public class SubScopesRemover : OperatorBase {
-    public override IOperation Apply(IScope scope) {
-      while (scope.SubScopes.Count > 0) {
-        scope.RemoveSubScope(scope.SubScopes[0]);
-      }
-      return null;
-    }
-  }
-}
