Index: /trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 2856)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 2857)
@@ -52,4 +52,8 @@
     <None Include="HeuristicLabOptimizationPlugin.cs.frame" />
     <Compile Include="Algorithm.cs" />
+    <Compile Include="IManipulationOperator.cs" />
+    <Compile Include="ICrossoverOperator.cs" />
+    <Compile Include="IStochasticSolutionCreator.cs" />
+    <Compile Include="IStochasticOperator.cs" />
     <Compile Include="ISolutionCreator.cs" />
     <Compile Include="SingleObjectiveProblem.cs" />
Index: /trunk/sources/HeuristicLab.Optimization/3.3/ICrossoverOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/ICrossoverOperator.cs	(revision 2857)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/ICrossoverOperator.cs	(revision 2857)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// An interface which represents an operator for crossing solutions.
+  /// </summary>
+  public interface ICrossoverOperator : IStochasticOperator { }
+}
Index: /trunk/sources/HeuristicLab.Optimization/3.3/IManipulationOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/IManipulationOperator.cs	(revision 2857)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/IManipulationOperator.cs	(revision 2857)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// An interface which represents an operator for manipulating solutions.
+  /// </summary>
+  public interface IManipulationOperator : IStochasticOperator { }
+}
Index: /trunk/sources/HeuristicLab.Optimization/3.3/IProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/IProblem.cs	(revision 2856)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/IProblem.cs	(revision 2857)
@@ -22,4 +22,5 @@
 using HeuristicLab.Core;
 using System;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Optimization {
@@ -33,4 +34,5 @@
     event EventHandler SolutionCreatorChanged;
     event EventHandler EvaluatorChanged;
+    event EventHandler<EventArgs<Type>> OperatorsChanged;
   }
 }
Index: /trunk/sources/HeuristicLab.Optimization/3.3/ISolutionCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/ISolutionCreator.cs	(revision 2856)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/ISolutionCreator.cs	(revision 2857)
@@ -27,6 +27,4 @@
   /// An interface which represents an operator for creating new solutions.
   /// </summary>
-  public interface ISolutionCreator : IOperator {
-    ILookupParameter<IRandom> RandomParameter { get; }
-  }
+  public interface ISolutionCreator : IOperator { }
 }
Index: /trunk/sources/HeuristicLab.Optimization/3.3/IStochasticOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/IStochasticOperator.cs	(revision 2857)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/IStochasticOperator.cs	(revision 2857)
@@ -0,0 +1,32 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// An interface which represents a stochastic operator.
+  /// </summary>
+  public interface IStochasticOperator : IOperator {
+    ILookupParameter<IRandom> RandomParameter { get; }
+  }
+}
Index: /trunk/sources/HeuristicLab.Optimization/3.3/IStochasticSolutionCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/IStochasticSolutionCreator.cs	(revision 2857)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/IStochasticSolutionCreator.cs	(revision 2857)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// An interface which represents an operator for creating new solutions.
+  /// </summary>
+  public interface IStochasticSolutionCreator : IStochasticOperator, ISolutionCreator { }
+}
Index: /trunk/sources/HeuristicLab.Optimization/3.3/Problem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/Problem.cs	(revision 2856)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/Problem.cs	(revision 2857)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using System;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Optimization {
@@ -100,4 +101,9 @@
         EvaluatorChanged(this, EventArgs.Empty);
     }
+    public event EventHandler<EventArgs<Type>> OperatorsChanged;
+    protected virtual void OnOperatorsChanged(Type operatorType) {
+      if (OperatorsChanged != null)
+        OperatorsChanged(this, new EventArgs<Type>(operatorType));
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.Permutation/3.3/HeuristicLab.Permutation-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Permutation/3.3/HeuristicLab.Permutation-3.3.csproj	(revision 2856)
+++ /trunk/sources/HeuristicLab.Permutation/3.3/HeuristicLab.Permutation-3.3.csproj	(revision 2857)
@@ -90,4 +90,6 @@
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="IPermutationCrossoverOperator.cs" />
+    <Compile Include="IPermutationManipulationOperator.cs" />
     <Compile Include="MaximalPreservativeCrossover.cs" />
     <Compile Include="OrderBasedCrossover.cs" />
Index: /trunk/sources/HeuristicLab.Permutation/3.3/IPermutationCrossoverOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Permutation/3.3/IPermutationCrossoverOperator.cs	(revision 2857)
+++ /trunk/sources/HeuristicLab.Permutation/3.3/IPermutationCrossoverOperator.cs	(revision 2857)
@@ -0,0 +1,31 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// An interface which represents an operator for crossing permutations.
+  /// </summary>
+  public interface IPermutationCrossoverOperator : ICrossoverOperator { }
+}
Index: /trunk/sources/HeuristicLab.Permutation/3.3/IPermutationManipulationOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Permutation/3.3/IPermutationManipulationOperator.cs	(revision 2857)
+++ /trunk/sources/HeuristicLab.Permutation/3.3/IPermutationManipulationOperator.cs	(revision 2857)
@@ -0,0 +1,31 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// An interface which represents an operator for manipulating solutions.
+  /// </summary>
+  public interface IPermutationManipulationOperator : IManipulationOperator { }
+}
Index: /trunk/sources/HeuristicLab.Permutation/3.3/PermutationCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Permutation/3.3/PermutationCrossover.cs	(revision 2856)
+++ /trunk/sources/HeuristicLab.Permutation/3.3/PermutationCrossover.cs	(revision 2857)
@@ -22,4 +22,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -31,6 +32,6 @@
   [Item("PermutationCrossover", "A base class for permutation crossover operators.")]
   [EmptyStorableClass]
-  public abstract class PermutationCrossover : SingleSuccessorOperator {
-    public LookupParameter<IRandom> RandomParameter {
+  public abstract class PermutationCrossover : SingleSuccessorOperator, IPermutationCrossoverOperator {
+    public ILookupParameter<IRandom> RandomParameter {
       get { return (LookupParameter<IRandom>)Parameters["Random"]; }
     }
Index: /trunk/sources/HeuristicLab.Permutation/3.3/PermutationManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Permutation/3.3/PermutationManipulator.cs	(revision 2856)
+++ /trunk/sources/HeuristicLab.Permutation/3.3/PermutationManipulator.cs	(revision 2857)
@@ -22,4 +22,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -31,6 +32,6 @@
   [Item("PermutationManipulator", "A base class for permutation manipulation operators.")]
   [EmptyStorableClass]
-  public abstract class PermutationManipulator : SingleSuccessorOperator {
-    public LookupParameter<IRandom> RandomParameter {
+  public abstract class PermutationManipulator : SingleSuccessorOperator, IPermutationManipulationOperator {
+    public ILookupParameter<IRandom> RandomParameter {
       get { return (LookupParameter<IRandom>)Parameters["Random"]; }
     }
Index: /trunk/sources/HeuristicLab.Permutation/3.3/Tests/HeuristicLab.Permutation-3.3.Tests.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Permutation/3.3/Tests/HeuristicLab.Permutation-3.3.Tests.csproj	(revision 2856)
+++ /trunk/sources/HeuristicLab.Permutation/3.3/Tests/HeuristicLab.Permutation-3.3.Tests.csproj	(revision 2857)
@@ -86,4 +86,8 @@
       <Name>HeuristicLab.Operators-3.3</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
       <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
Index: /trunk/sources/HeuristicLab.Routing.TSP/3.3/TSP.cs
===================================================================
--- /trunk/sources/HeuristicLab.Routing.TSP/3.3/TSP.cs	(revision 2856)
+++ /trunk/sources/HeuristicLab.Routing.TSP/3.3/TSP.cs	(revision 2857)
@@ -26,4 +26,5 @@
 using HeuristicLab.Permutation;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System;
 
 namespace HeuristicLab.Routing.TSP {
Index: /trunk/sources/HeuristicLab.SGA/3.3/SGA.cs
===================================================================
--- /trunk/sources/HeuristicLab.SGA/3.3/SGA.cs	(revision 2856)
+++ /trunk/sources/HeuristicLab.SGA/3.3/SGA.cs	(revision 2857)
@@ -106,5 +106,5 @@
 
     protected override void OnProblemChanged() {
-      Problem.SolutionCreator.RandomParameter.ActualName = "Random";
+      if (Problem.SolutionCreator is IStochasticSolutionCreator) ((IStochasticSolutionCreator)Problem.SolutionCreator).RandomParameter.ActualName = "Random";
       populationCreator.SolutionCreatorParameter.Value = Problem.SolutionCreator;
       populationCreator.SolutionEvaluatorParameter.Value = Problem.Evaluator;
@@ -115,5 +115,5 @@
     }
     protected override void Problem_SolutionCreatorChanged(object sender, EventArgs e) {
-      Problem.SolutionCreator.RandomParameter.ActualName = "Random";
+      if (Problem.SolutionCreator is IStochasticSolutionCreator) ((IStochasticSolutionCreator)Problem.SolutionCreator).RandomParameter.ActualName = "Random";
       populationCreator.SolutionCreatorParameter.Value = Problem.SolutionCreator;
       base.Problem_SolutionCreatorChanged(sender, e);
