Index: branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs
===================================================================
--- branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 11397)
+++ branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 11398)
@@ -165,4 +165,6 @@
 
       if (solutionCreators.Count == 1) {
+        Operators.RemoveAll(x => x is ParameterVectorCrossover
+                              || x is ParameterVectorManipulator);
         UpdateSingleVectorEncodingOperators(solutionCreators, configuration);
       } else {
@@ -179,7 +181,5 @@
       var solutionCreators = new List<ISolutionCreator>();
       foreach (var param in configuration.Parameters) {
-        /*
-         * Binary Vectors
-         */
+        #region Configure BinaryVector Creator
         var binConfig = param.Value as BinaryParameterConfiguration;
         if (binConfig != null) {
@@ -192,7 +192,6 @@
           solutionCreators.Add(creator);
         }
-        /*
-         * Integer Vectors
-         */
+        #endregion
+        #region Configure IntegerVector Creator
         var intConfig = param.Value as IntegerParameterConfiguration;
         if (intConfig != null) {
@@ -208,7 +207,6 @@
           solutionCreators.Add(creator);
         }
-        /*
-         * Real Vectors
-         */
+        #endregion
+        #region Configure RealVector Creator
         var realConfig = param.Value as RealParameterConfiguration;
         if (realConfig != null) {
@@ -224,7 +222,6 @@
           solutionCreators.Add(creator);
         }
-        /*
-         * Permutations
-         */
+        #endregion
+        #region Configure Permutation Creator
         var permConfig = param.Value as PermutationParameterConfiguration;
         if (permConfig != null) {
@@ -238,4 +235,5 @@
           solutionCreators.Add(creator);
         }
+        #endregion
       }
 
@@ -249,4 +247,5 @@
     protected virtual void UpdateSingleVectorEncodingOperators(List<ISolutionCreator> solutionCreators, Configuration configuration) {
       var newCreator = solutionCreators.Single();
+      #region Configure Operators for BinaryVectorEncoding
       var binCreator = newCreator as IBinaryVectorCreator;
       if (binCreator != null) {
@@ -258,17 +257,41 @@
           Operators.Add(SolutionCreator);
         }
-        Operators.RemoveAll(x => x is ICrossover && !(x is IBinaryVectorCrossover) || x is IBinaryVectorCrossover && ((IBinaryVectorCrossover)x).ChildParameter.ActualName != paramName);
-        Operators.RemoveAll(x => x is IManipulator && !(x is IBinaryVectorManipulator) || x is IBinaryVectorManipulator && ((IBinaryVectorManipulator)x).BinaryVectorParameter.ActualName != paramName);
+
+        #region Wire BinaryVector Crossovers
+        Operators.RemoveAll(x => x is IBinaryVectorCrossover && ((IBinaryVectorCrossover)x).ChildParameter.ActualName != paramName);
         var crossovers = ApplicationManager.Manager.GetInstances<IBinaryVectorCrossover>().ToList();
-        var manipulators = ApplicationManager.Manager.GetInstances<IBinaryVectorManipulator>().ToList();
         foreach (var xo in crossovers) {
           xo.ChildParameter.ActualName = binCreator.BinaryVectorParameter.ActualName;
+          xo.ChildParameter.Hidden = true;
           xo.ParentsParameter.ActualName = binCreator.BinaryVectorParameter.ActualName;
-        }
-        foreach (var m in manipulators)
+          xo.ParentsParameter.Hidden = true;
+        }
+        Operators.AddRange(crossovers.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+        #endregion
+        #region Wire BinaryVector Manipulators
+        Operators.RemoveAll(x => x is IBinaryVectorManipulator && ((IBinaryVectorManipulator)x).BinaryVectorParameter.ActualName != paramName);
+        var manipulators = ApplicationManager.Manager.GetInstances<IBinaryVectorManipulator>().ToList();
+        foreach (var m in manipulators) {
           m.BinaryVectorParameter.ActualName = binCreator.BinaryVectorParameter.ActualName;
-        Operators.AddRange(crossovers.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+          m.BinaryVectorParameter.Hidden = true;
+        }
         Operators.AddRange(manipulators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
-      }
+        #endregion
+        #region Wire BinaryVector ShakingOperators
+        Operators.RemoveAll(x => x is IBinaryVectorMultiNeighborhoodShakingOperator && ((IBinaryVectorManipulator)x).BinaryVectorParameter.ActualName != paramName);
+        var shakingOperators = ApplicationManager.Manager.GetInstances<IBinaryVectorMultiNeighborhoodShakingOperator>().ToList();
+        foreach (var so in shakingOperators) {
+          so.BinaryVectorParameter.ActualName = paramName;
+          so.BinaryVectorParameter.Hidden = true;
+        }
+        Operators.AddRange(shakingOperators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+        #endregion
+      } else {
+        Operators.RemoveAll(x => x is IBinaryVectorCrossover
+          || x is IBinaryVectorManipulator
+          || x is IBinaryVectorMultiNeighborhoodShakingOperator);
+      }
+      #endregion
+      #region Configure Operators for IntegerVectorEncoding
       var intCreator = newCreator as IIntegerVectorCreator;
       if (intCreator != null) {
@@ -281,29 +304,47 @@
           Operators.Add(SolutionCreator);
         }
-        Operators.RemoveAll(x => x is ICrossover && !(x is IIntegerVectorCrossover) || x is IIntegerVectorCrossover && ((IIntegerVectorCrossover)x).ChildParameter.ActualName != paramName);
-        Operators.RemoveAll(x => x is IManipulator && !(x is IIntegerVectorManipulator) || x is IIntegerVectorManipulator && ((IIntegerVectorManipulator)x).IntegerVectorParameter.ActualName != paramName);
+
+        #region Wire IntegerVector Crossovers
+        Operators.RemoveAll(x => x is IIntegerVectorCrossover && ((IIntegerVectorCrossover)x).ChildParameter.ActualName != paramName);
+        var crossovers = ApplicationManager.Manager.GetInstances<IIntegerVectorCrossover>().ToList();
+        foreach (var xo in crossovers) {
+          xo.ChildParameter.ActualName = intCreator.IntegerVectorParameter.ActualName;
+          xo.ChildParameter.Hidden = true;
+          xo.ParentsParameter.ActualName = intCreator.IntegerVectorParameter.ActualName;
+          xo.ParentsParameter.Hidden = true;
+          var bx = xo as IBoundedIntegerVectorOperator;
+          if (bx != null) {
+            bx.BoundsParameter.ActualName = intCreator.BoundsParameter.ActualName;
+            bx.BoundsParameter.Hidden = true;
+          }
+        }
+        Operators.AddRange(crossovers.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+        #endregion
+        #region Wire IntegerVector Manipulators
+        Operators.RemoveAll(x => x is IIntegerVectorManipulator && ((IIntegerVectorManipulator)x).IntegerVectorParameter.ActualName != paramName);
+        var manipulators = ApplicationManager.Manager.GetInstances<IIntegerVectorManipulator>().ToList();
+        foreach (var m in manipulators) {
+          m.IntegerVectorParameter.ActualName = intCreator.IntegerVectorParameter.ActualName;
+          m.IntegerVectorParameter.Hidden = true;
+          var sm = m as ISelfAdaptiveManipulator;
+          if (sm != null) {
+            var p = sm.StrategyParameterParameter as ILookupParameter;
+            if (p != null) {
+              p.ActualName = paramName + "Strategy";
+              p.Hidden = true;
+            }
+          }
+          var bm = m as IBoundedIntegerVectorOperator;
+          if (bm != null) {
+            bm.BoundsParameter.ActualName = intCreator.BoundsParameter.ActualName;
+            bm.BoundsParameter.Hidden = true;
+          }
+        }
+        Operators.AddRange(manipulators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+        #region Wire IntegerVector StrategyParameters for SelfAdaptiveManipulators
         Operators.RemoveAll(x => x is IStrategyParameterCreator && !(x is IIntegerVectorStdDevStrategyParameterCreator) || x is IIntegerVectorStdDevStrategyParameterCreator && ((IIntegerVectorStdDevStrategyParameterCreator)x).StrategyParameterParameter.ActualName != paramName + "Strategy");
         Operators.RemoveAll(x => x is IStrategyParameterManipulator && !(x is IIntegerVectorStdDevStrategyParameterManipulator) || x is IIntegerVectorStdDevStrategyParameterManipulator && ((IIntegerVectorStdDevStrategyParameterManipulator)x).StrategyParameterParameter.ActualName != paramName + "Strategy");
         Operators.RemoveAll(x => x is IStrategyParameterCrossover && !(x is IIntegerVectorStdDevStrategyParameterCrossover) || x is IIntegerVectorStdDevStrategyParameterCrossover && ((IIntegerVectorStdDevStrategyParameterCrossover)x).StrategyParameterParameter.ActualName != paramName + "Strategy");
-        var crossovers = ApplicationManager.Manager.GetInstances<IIntegerVectorCrossover>().ToList();
-        var manipulators = ApplicationManager.Manager.GetInstances<IIntegerVectorManipulator>().ToList();
         var strategyOperators = ApplicationManager.Manager.GetInstances<IIntegerVectorStdDevStrategyParameterOperator>().ToList();
-        foreach (var xo in crossovers) {
-          xo.ChildParameter.ActualName = intCreator.IntegerVectorParameter.ActualName;
-          xo.ParentsParameter.ActualName = intCreator.IntegerVectorParameter.ActualName;
-        }
-        foreach (var m in manipulators) {
-          m.IntegerVectorParameter.ActualName = intCreator.IntegerVectorParameter.ActualName;
-          var sm = m as ISelfAdaptiveManipulator;
-          if (sm != null) {
-            var p = sm.StrategyParameterParameter as ILookupParameter;
-            if (p != null) p.ActualName = paramName + "Strategy";
-          }
-        }
-        foreach (var bo in crossovers.OfType<IBoundedIntegerVectorOperator>()
-              .Concat(manipulators.OfType<IBoundedIntegerVectorOperator>())
-              .ToList()) {
-          bo.BoundsParameter.ActualName = intCreator.BoundsParameter.ActualName;
-        }
         if (!(configuration.Parameters.First().Value is IntegerParameterConfiguration)) throw new InvalidOperationException("Single-encoded problem with integervector creator that is not an integer-coded problem.");
         var problemSize = ((IntegerParameterConfiguration)configuration.Parameters.First().Value).Length.Value;
@@ -338,8 +379,24 @@
           }
         }
-        Operators.AddRange(crossovers.Where(x => Operators.All(y => x.GetType() != y.GetType())));
-        Operators.AddRange(manipulators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
         Operators.AddRange(strategyOperators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
-      }
+        #endregion
+        #endregion
+        #region Wire IntegerVector ShakingOperators
+        Operators.RemoveAll(x => x is IIntegerVectorMultiNeighborhoodShakingOperator && ((IIntegerVectorMultiNeighborhoodShakingOperator)x).IntegerVectorParameter.ActualName != paramName);
+        var shakingOperators = ApplicationManager.Manager.GetInstances<IIntegerVectorMultiNeighborhoodShakingOperator>().ToList();
+        foreach (var so in shakingOperators) {
+          so.IntegerVectorParameter.ActualName = paramName;
+          so.IntegerVectorParameter.Hidden = true;
+        }
+        Operators.AddRange(shakingOperators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+        #endregion
+      } else {
+        Operators.RemoveAll(x => x is IIntegerVectorCrossover
+          || x is IIntegerVectorManipulator
+          || x is IIntegerVectorStdDevStrategyParameterOperator
+          || x is IIntegerVectorMultiNeighborhoodShakingOperator);
+      }
+      #endregion
+      #region Configure Operators for RealVectorEncoding
       var realCreator = newCreator as IRealVectorCreator;
       if (realCreator != null) {
@@ -352,26 +409,42 @@
           Operators.Add(SolutionCreator);
         }
-        Operators.RemoveAll(x => x is ICrossover && !(x is IRealVectorCrossover) || x is IRealVectorCrossover && ((IRealVectorCrossover)x).ChildParameter.ActualName != paramName);
-        Operators.RemoveAll(x => x is IManipulator && !(x is IRealVectorManipulator) || x is IRealVectorManipulator && ((IRealVectorManipulator)x).RealVectorParameter.ActualName != paramName);
+
+        #region Wire RealVector Crossovers
+        Operators.RemoveAll(x => x is IRealVectorCrossover && ((IRealVectorCrossover)x).ChildParameter.ActualName != paramName);
+        var crossovers = ApplicationManager.Manager.GetInstances<IRealVectorCrossover>().ToList();
+        foreach (var xo in crossovers) {
+          xo.ChildParameter.ActualName = paramName;
+          xo.ChildParameter.Hidden = true;
+          xo.ParentsParameter.ActualName = paramName;
+          xo.ParentsParameter.Hidden = true;
+          xo.BoundsParameter.ActualName = realCreator.BoundsParameter.ActualName;
+          xo.BoundsParameter.Hidden = true;
+        }
+        Operators.AddRange(crossovers.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+        #endregion
+        #region Wire RealVector Manipulators
+        Operators.RemoveAll(x => x is IRealVectorManipulator && ((IRealVectorManipulator)x).RealVectorParameter.ActualName != paramName);
+        var manipulators = ApplicationManager.Manager.GetInstances<IRealVectorManipulator>().ToList();
+        foreach (var m in manipulators) {
+          m.RealVectorParameter.ActualName = paramName;
+          m.RealVectorParameter.Hidden = true;
+          m.BoundsParameter.ActualName = realCreator.BoundsParameter.ActualName;
+          m.BoundsParameter.Hidden = true;
+          var sm = m as ISelfAdaptiveManipulator;
+          if (sm != null) {
+            var p = sm.StrategyParameterParameter as ILookupParameter;
+            if (p != null) {
+              p.ActualName = paramName + "Strategy";
+              p.Hidden = true;
+            }
+          }
+        }
+        Operators.AddRange(manipulators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+        #region Wire RealVector Strategy Parameters for SelfAdaptiveManipulators
+
         Operators.RemoveAll(x => x is IStrategyParameterCreator && !(x is IRealVectorStdDevStrategyParameterCreator) || x is IRealVectorStdDevStrategyParameterCreator && ((IRealVectorStdDevStrategyParameterCreator)x).StrategyParameterParameter.ActualName != paramName + "Strategy");
         Operators.RemoveAll(x => x is IStrategyParameterManipulator && !(x is IRealVectorStdDevStrategyParameterManipulator) || x is IRealVectorStdDevStrategyParameterManipulator && ((IRealVectorStdDevStrategyParameterManipulator)x).StrategyParameterParameter.ActualName != paramName + "Strategy");
         Operators.RemoveAll(x => x is IStrategyParameterCrossover && !(x is IRealVectorStdDevStrategyParameterCrossover) || x is IRealVectorStdDevStrategyParameterCrossover && ((IRealVectorStdDevStrategyParameterCrossover)x).StrategyParameterParameter.ActualName != paramName + "Strategy");
-        var crossovers = ApplicationManager.Manager.GetInstances<IRealVectorCrossover>().ToList();
-        var manipulators = ApplicationManager.Manager.GetInstances<IRealVectorManipulator>().ToList();
         var strategyOperators = ApplicationManager.Manager.GetInstances<IRealVectorStdDevStrategyParameterOperator>().ToList();
-        foreach (var xo in crossovers) {
-          xo.ChildParameter.ActualName = paramName;
-          xo.ParentsParameter.ActualName = paramName;
-          xo.BoundsParameter.ActualName = realCreator.BoundsParameter.ActualName;
-        }
-        foreach (var m in manipulators) {
-          m.RealVectorParameter.ActualName = paramName;
-          m.BoundsParameter.ActualName = realCreator.BoundsParameter.ActualName;
-          var sm = m as ISelfAdaptiveManipulator;
-          if (sm != null) {
-            var p = sm.StrategyParameterParameter as ILookupParameter;
-            if (p != null) p.ActualName = paramName + "Strategy";
-          }
-        }
         if (!(configuration.Parameters.First().Value is RealParameterConfiguration)) throw new InvalidOperationException("Single-encoded problem with realvector creator that is not a real-coded problem.");
         var problemSize = ((RealParameterConfiguration)configuration.Parameters.First().Value).Length.Value;
@@ -404,8 +477,62 @@
           }
         }
-        Operators.AddRange(crossovers.Where(x => Operators.All(y => x.GetType() != y.GetType())));
-        Operators.AddRange(manipulators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
         Operators.AddRange(strategyOperators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
-      }
+        #endregion
+        #endregion
+        #region Wire RealVector ParticleCreators
+        Operators.RemoveAll(x => x is IRealVectorParticleCreator && ((IRealVectorParticleCreator)x).RealVectorParameter.ActualName != paramName);
+        var particleCreators = ApplicationManager.Manager.GetInstances<IRealVectorParticleCreator>().ToList();
+        foreach (var pc in particleCreators) {
+          pc.RealVectorParameter.ActualName = paramName;
+          pc.RealVectorParameter.Hidden = true;
+          pc.BoundsParameter.ActualName = realCreator.BoundsParameter.Name;
+          pc.BoundsParameter.Hidden = true;
+          pc.ProblemSizeParameter.ActualName = paramName + "Length";
+          pc.ProblemSizeParameter.Hidden = true;
+        }
+        Operators.AddRange(particleCreators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+        #endregion
+        #region Wire RealVector ParticleUpdaters
+        Operators.RemoveAll(x => x is IRealVectorParticleUpdater && ((IRealVectorParticleUpdater)x).RealVectorParameter.ActualName != paramName);
+        var particleUpdaters = ApplicationManager.Manager.GetInstances<IRealVectorParticleUpdater>().ToList();
+        foreach (var pu in particleUpdaters) {
+          pu.RealVectorParameter.ActualName = paramName;
+          pu.RealVectorParameter.Hidden = true;
+          pu.BoundsParameter.ActualName = realCreator.BoundsParameter.Name;
+          pu.BoundsParameter.Hidden = true;
+        }
+        Operators.AddRange(particleUpdaters.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+        #endregion
+        #region Wire RealVector SwarmUpdaters
+        Operators.RemoveAll(x => x is IRealVectorSwarmUpdater && ((IRealVectorSwarmUpdater)x).RealVectorParameter.ActualName != paramName);
+        var swarmUpdaters = ApplicationManager.Manager.GetInstances<IRealVectorSwarmUpdater>().ToList();
+        foreach (var su in swarmUpdaters) {
+          su.RealVectorParameter.ActualName = paramName;
+          su.RealVectorParameter.Hidden = true;
+          su.MaximizationParameter.ActualName = MaximizationParameter.Name;
+          su.MaximizationParameter.Hidden = true;
+        }
+        Operators.AddRange(swarmUpdaters.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+        #endregion
+        #region Wire RealVector ShakingOperators
+        Operators.RemoveAll(x => x is IRealVectorMultiNeighborhoodShakingOperator && ((IRealVectorMultiNeighborhoodShakingOperator)x).RealVectorParameter.ActualName != paramName);
+        var shakingOperators = ApplicationManager.Manager.GetInstances<IRealVectorMultiNeighborhoodShakingOperator>().ToList();
+        foreach (var so in shakingOperators) {
+          so.RealVectorParameter.ActualName = paramName;
+          so.RealVectorParameter.Hidden = true;
+        }
+        Operators.AddRange(shakingOperators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+        #endregion
+      } else {
+        Operators.RemoveAll(x => x is IRealVectorCrossover
+          || x is IRealVectorManipulator
+          || x is IRealVectorStdDevStrategyParameterOperator
+          || x is IRealVectorParticleCreator
+          || x is IRealVectorParticleUpdater
+          || x is IRealVectorSwarmUpdater
+          || x is IRealVectorMultiNeighborhoodShakingOperator);
+      }
+      #endregion
+      #region Configure Operators for PermutationEncoding
       var permCreator = newCreator as IPermutationCreator;
       if (permCreator != null) {
@@ -418,17 +545,40 @@
           Operators.Add(SolutionCreator);
         }
-        Operators.RemoveAll(x => x is ICrossover && !(x is IPermutationCrossover) || x is IPermutationCrossover && ((IPermutationCrossover)x).ChildParameter.ActualName != paramName);
-        Operators.RemoveAll(x => x is IManipulator && !(x is IPermutationManipulator) || x is IPermutationManipulator && ((IPermutationManipulator)x).PermutationParameter.ActualName != paramName);
+
+        #region Wire Permutation Crossovers
+        Operators.RemoveAll(x => x is IPermutationCrossover && ((IPermutationCrossover)x).ChildParameter.ActualName != paramName);
         var crossovers = ApplicationManager.Manager.GetInstances<IPermutationCrossover>().ToList();
-        var manipulators = ApplicationManager.Manager.GetInstances<IPermutationManipulator>().ToList();
         foreach (var xo in crossovers) {
           xo.ChildParameter.ActualName = permCreator.PermutationParameter.ActualName;
+          xo.ChildParameter.Hidden = true;
           xo.ParentsParameter.ActualName = permCreator.PermutationParameter.ActualName;
-        }
-        foreach (var m in manipulators)
+          xo.ParentsParameter.Hidden = true;
+        }
+        Operators.AddRange(crossovers.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+        #endregion
+        #region Wire Permutation Manipulators
+        Operators.RemoveAll(x => x is IPermutationManipulator && ((IPermutationManipulator)x).PermutationParameter.ActualName != paramName);
+        var manipulators = ApplicationManager.Manager.GetInstances<IPermutationManipulator>().ToList();
+        foreach (var m in manipulators) {
           m.PermutationParameter.ActualName = permCreator.PermutationParameter.ActualName;
-        Operators.AddRange(crossovers.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+          m.PermutationParameter.Hidden = true;
+        }
         Operators.AddRange(manipulators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
-      }
+        #endregion
+        #region Wire ShakingOperators
+        Operators.RemoveAll(x => x is IPermutationMultiNeighborhoodShakingOperator && ((IPermutationMultiNeighborhoodShakingOperator)x).PermutationParameter.ActualName != paramName);
+        var shakingOperators = ApplicationManager.Manager.GetInstances<IPermutationMultiNeighborhoodShakingOperator>().ToList();
+        foreach (var op in shakingOperators) {
+          op.PermutationParameter.ActualName = paramName;
+          op.PermutationParameter.Hidden = true;
+        }
+        Operators.AddRange(shakingOperators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+        #endregion
+      } else {
+        Operators.RemoveAll(x => x is IPermutationCrossover
+          || x is IPermutationManipulator
+          || x is IPermutationMultiNeighborhoodShakingOperator);
+      }
+      #endregion
     }
 
@@ -437,7 +587,5 @@
       var newCreator = new ParameterVectorCreater();
 
-      /*
-       * Binary Vectors
-       */
+      #region Configure BinaryVector Creator
       var newBinParams = new HashSet<string>(solutionCreators.OfType<IBinaryVectorCreator>().Select(x => x.BinaryVectorParameter.ActualName));
       if (oldCreator != null) {
@@ -463,8 +611,6 @@
         }
       }
-
-      /*
-       * Integer Vectors
-       */
+      #endregion
+      #region Configure IntegerVector Creator
       var newIntParams = new HashSet<string>(solutionCreators.OfType<IIntegerVectorCreator>().Select(x => x.IntegerVectorParameter.ActualName));
       if (oldCreator != null) {
@@ -491,8 +637,6 @@
         }
       }
-
-      /*
-       * Real Vectors
-       */
+      #endregion
+      #region Configure RealVector Creator
       var newRealParams = new HashSet<string>(solutionCreators.OfType<IRealVectorCreator>().Select(x => x.RealVectorParameter.ActualName));
       if (oldCreator != null) {
@@ -519,8 +663,6 @@
         }
       }
-
-      /*
-       * Permutations
-       */
+      #endregion
+      #region Configure Permutation Creator
       var newPermParams = new HashSet<string>(solutionCreators.OfType<IPermutationCreator>().Select(x => x.PermutationParameter.ActualName));
       if (oldCreator != null) {
@@ -556,4 +698,5 @@
         }
       }
+      #endregion
 
       if (oldCreator == null) SolutionCreator = newCreator;
@@ -562,9 +705,8 @@
       // the condition checks if a multi-vector encoding is to be updated (there already exists ParameterVectorCrossover and ParameterVectorManipulator)
       if (Operators.OfType<ParameterVectorCrossover>().Any() && Operators.OfType<ParameterVectorManipulator>().Any()) {
-        // Update the crossovers
+        #region Update existing multi-vector encoding
+        #region Update ParameterVector Crossover ...
         foreach (var oldXo in Operators.OfType<ParameterVectorCrossover>()) {
-          /*
-           * Binary Vectors
-           */
+          #region ... for binary parameters
           var oldBinParams = new HashSet<string>(oldXo.Operators.OfType<IBinaryVectorCrossover>()
             .Select(x => x.ChildParameter.ActualName));
@@ -576,8 +718,6 @@
             if (op != null) oldXo.Operators.Remove(op);
           }
-
-          /*
-           * Integer Vectors
-           */
+          #endregion
+          #region ... for integer parameters
           var oldIntParams = new HashSet<string>(oldXo.Operators.OfType<IIntegerVectorCrossover>()
             .Select(x => x.ChildParameter.ActualName));
@@ -590,8 +730,6 @@
             if (op != null) oldXo.Operators.Remove(op);
           }
-
-          /*
-           * Real Vectors
-           */
+          #endregion
+          #region ... for real parameters
           var oldRealParams = new HashSet<string>(oldXo.Operators.OfType<IRealVectorCrossover>()
             .Select(x => x.ChildParameter.ActualName));
@@ -603,8 +741,6 @@
             if (op != null) oldXo.Operators.Remove(op);
           }
-
-          /*
-           * Permutations
-           */
+          #endregion
+          #region ... for permutation parameters
           var oldPermParams = new HashSet<string>(oldXo.Operators.OfType<IPermutationCrossover>()
             .Select(x => x.ChildParameter.ActualName));
@@ -616,10 +752,10 @@
             if (op != null) oldXo.Operators.Remove(op);
           }
-        }
-        // Update the manipulators
+          #endregion
+        }
+        #endregion
+        #region Update ParameterVector Manipulator ...
         foreach (var oldM in Operators.OfType<ParameterVectorManipulator>()) {
-          /*
-           * Binary Vectors
-           */
+          #region ... for binary parameters
           var oldBinParams = new HashSet<string>(oldM.Operators.OfType<IBinaryVectorManipulator>()
             .Select(x => x.BinaryVectorParameter.ActualName));
@@ -632,8 +768,6 @@
             if (op != null) oldM.Operators.Remove(op);
           }
-
-          /*
-           * Integer Vectors
-           */
+          #endregion
+          #region ... for integer parameters
           var oldIntParams = new HashSet<string>(oldM.Operators.OfType<IIntegerVectorManipulator>()
             .Select(x => x.IntegerVectorParameter.ActualName));
@@ -646,8 +780,6 @@
             if (op != null) oldM.Operators.Remove(op);
           }
-
-          /*
-           * Real Vectors
-           */
+          #endregion
+          #region ... for real parameters
           var oldRealParams = new HashSet<string>(oldM.Operators.OfType<IRealVectorManipulator>()
             .Select(x => x.RealVectorParameter.ActualName));
@@ -660,8 +792,6 @@
             if (op != null) oldM.Operators.Remove(op);
           }
-
-          /*
-           * Permutations
-           */
+          #endregion
+          #region ... for permutation parameters
           var oldPermParams = new HashSet<string>(oldM.Operators.OfType<IPermutationManipulator>()
             .Select(x => x.PermutationParameter.ActualName));
@@ -674,9 +804,18 @@
             if (op != null) oldM.Operators.Remove(op);
           }
-        }
+          #endregion
+        }
+        #endregion
+        #endregion
       } else {
-        // change from single-vector encoding to multi-vector encoding
+        #region Handle transition from single-vector to multi-vector encoding
         Operators.RemoveAll(x => x is ICrossover);
         Operators.RemoveAll(x => x is IManipulator);
+        Operators.RemoveAll(x => x is IStrategyParameterCreator || x is IStrategyParameterManipulator || x is IStrategyParameterCrossover);
+        Operators.RemoveAll(x => x is IParticleCreator);
+        Operators.RemoveAll(x => x is IParticleUpdater);
+        Operators.RemoveAll(x => x is ISwarmUpdater);
+        Operators.RemoveAll(x => x is IMultiNeighborhoodShakingOperator);
+
         var crossover = new ParameterVectorCrossover();
         var manipulator = new ParameterVectorManipulator();
@@ -709,4 +848,5 @@
         Operators.Add(crossover);
         Operators.Add(manipulator);
+        #endregion
       }
     }
@@ -731,4 +871,5 @@
     }
 
+    #region GetDefaultOperators for Crossovers and Manipulators
     // ReSharper disable RedundantNameQualifier
     protected virtual IBinaryVectorCrossover GetDefaultBinaryCrossover(string paramName, Configuration config) {
@@ -797,4 +938,5 @@
     }
     // ReSharper restore RedundantNameQualifier
+    #endregion
   }
 }
