Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/AfterCrossoverCombinedOperator.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/AfterCrossoverCombinedOperator.cs	(revision 9050)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/AfterCrossoverCombinedOperator.cs	(revision 9053)
@@ -48,6 +48,6 @@
     protected AfterCrossoverCombinedOperator(AfterCrossoverCombinedOperator original, Cloner cloner)
       : base(original, cloner) {
-      cxAnalyzer = (CrossoverPerformanceAnalyzer)original.cxAnalyzer.Clone(cloner);
-      varDuplicator = (VariableDuplicator)original.cxAnalyzer.Clone(cloner);
+      cxAnalyzer = original.cxAnalyzer != null ? (CrossoverPerformanceAnalyzer)original.cxAnalyzer.Clone(cloner) : null;
+      varDuplicator = original.varDuplicator != null ? (VariableDuplicator)original.cxAnalyzer.Clone(cloner) : null;
     }
 
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/AfterMutationCombinedOperator.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/AfterMutationCombinedOperator.cs	(revision 9050)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/AfterMutationCombinedOperator.cs	(revision 9053)
@@ -49,6 +49,6 @@
     protected AfterMutationCombinedOperator(AfterMutationCombinedOperator original, Cloner cloner)
       : base(original, cloner) {
-      this.mAnalyzer = (MutationPerformanceAnalyzer)original.mAnalyzer.Clone(cloner);
-      this.varRemover = (VariableRemover)original.varRemover.Clone(cloner);
+      this.mAnalyzer = original.mAnalyzer != null ? (MutationPerformanceAnalyzer)original.mAnalyzer.Clone(cloner) : null;
+      this.varRemover = original.varRemover != null ? (VariableRemover)original.varRemover.Clone(cloner) : null;
     }
 
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers-3.3.csproj
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers-3.3.csproj	(revision 9050)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers-3.3.csproj	(revision 9053)
@@ -91,4 +91,9 @@
       <Private>False</Private>
     </Reference>
+    <Reference Include="HeuristicLab.Optimizer-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimizer-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
     <Reference Include="HeuristicLab.Parameters-3.3">
       <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Parameters-3.3.dll</HintPath>
@@ -148,4 +153,11 @@
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="VariableDuplicator.cs" />
+    <Compile Include="Views\SuccessorConfigurator.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Views\SuccessorConfigurator.Designer.cs">
+      <DependentUpon>SuccessorConfigurator.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\SuccessorConfiguratorMenuItem.cs" />
     <Compile Include="WeightedParentsQualityComparer.cs" />
   </ItemGroup>
@@ -155,5 +167,4 @@
     <None Include="Properties\AssemblyInfo.cs.frame" />
   </ItemGroup>
-  <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/Plugin.cs.frame
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/Plugin.cs.frame	(revision 9050)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/Plugin.cs.frame	(revision 9053)
@@ -37,4 +37,5 @@
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
   [PluginDependency("HeuristicLab.Problems.TravelingSalesman", "3.3")]
+  [PluginDependency("HeuristicLab.Optimizer", "3.3")]
   public class HeuristicLabAnalysisAlgorithmBehaviorAnalyzersPlugin : PluginBase {
   }
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/Views/SuccessorConfigurator.Designer.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/Views/SuccessorConfigurator.Designer.cs	(revision 9053)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/Views/SuccessorConfigurator.Designer.cs	(revision 9053)
@@ -0,0 +1,147 @@
+﻿namespace HeuristicLab.Analysis.AlgorithmBehavior.Analyzers.Views {
+  partial class SuccessorConfigurator {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.okButton = new System.Windows.Forms.Button();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.label1 = new System.Windows.Forms.Label();
+      this.operatorNameTextBox = new System.Windows.Forms.TextBox();
+      this.label2 = new System.Windows.Forms.Label();
+      this.successorTextBox = new System.Windows.Forms.TextBox();
+      this.chooseSuccessorButton = new System.Windows.Forms.Button();
+      this.chooseOperatorTypeButton = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.Location = new System.Drawing.Point(306, 66);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 0;
+      this.okButton.Text = "OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      this.okButton.Click += new System.EventHandler(this.okButton_Click);
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.Location = new System.Drawing.Point(387, 66);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 1;
+      this.cancelButton.Text = "Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(12, 9);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(82, 13);
+      this.label1.TabIndex = 2;
+      this.label1.Text = "Operator Name:";
+      // 
+      // operatorNameTextBox
+      // 
+      this.operatorNameTextBox.Location = new System.Drawing.Point(100, 6);
+      this.operatorNameTextBox.Name = "operatorNameTextBox";
+      this.operatorNameTextBox.Size = new System.Drawing.Size(216, 20);
+      this.operatorNameTextBox.TabIndex = 3;
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(12, 35);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(60, 13);
+      this.label2.TabIndex = 4;
+      this.label2.Text = "Successor:";
+      // 
+      // successorTextBox
+      // 
+      this.successorTextBox.Location = new System.Drawing.Point(100, 32);
+      this.successorTextBox.Name = "successorTextBox";
+      this.successorTextBox.Size = new System.Drawing.Size(216, 20);
+      this.successorTextBox.TabIndex = 5;
+      // 
+      // chooseSuccessorButton
+      // 
+      this.chooseSuccessorButton.Location = new System.Drawing.Point(322, 30);
+      this.chooseSuccessorButton.Name = "chooseSuccessorButton";
+      this.chooseSuccessorButton.Size = new System.Drawing.Size(135, 23);
+      this.chooseSuccessorButton.TabIndex = 6;
+      this.chooseSuccessorButton.Text = "Choose Successor";
+      this.chooseSuccessorButton.UseVisualStyleBackColor = true;
+      this.chooseSuccessorButton.Click += new System.EventHandler(this.chooseSuccessorButton_Click);
+      // 
+      // chooseOperatorTypeButton
+      // 
+      this.chooseOperatorTypeButton.Location = new System.Drawing.Point(322, 4);
+      this.chooseOperatorTypeButton.Name = "chooseOperatorTypeButton";
+      this.chooseOperatorTypeButton.Size = new System.Drawing.Size(135, 23);
+      this.chooseOperatorTypeButton.TabIndex = 7;
+      this.chooseOperatorTypeButton.Text = "Choose Operator Type";
+      this.chooseOperatorTypeButton.UseVisualStyleBackColor = true;
+      this.chooseOperatorTypeButton.Click += new System.EventHandler(this.chooseOperatorTypeButton_Click);
+      // 
+      // SuccessorConfigurator
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(474, 101);
+      this.Controls.Add(this.chooseOperatorTypeButton);
+      this.Controls.Add(this.chooseSuccessorButton);
+      this.Controls.Add(this.successorTextBox);
+      this.Controls.Add(this.label2);
+      this.Controls.Add(this.operatorNameTextBox);
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "SuccessorConfigurator";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Successor Configurator";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.TextBox operatorNameTextBox;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.TextBox successorTextBox;
+    private System.Windows.Forms.Button chooseSuccessorButton;
+    private System.Windows.Forms.Button chooseOperatorTypeButton;
+  }
+}
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/Views/SuccessorConfigurator.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/Views/SuccessorConfigurator.cs	(revision 9053)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/Views/SuccessorConfigurator.cs	(revision 9053)
@@ -0,0 +1,85 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Analysis.AlgorithmBehavior.Analyzers.Views {
+  public partial class SuccessorConfigurator : Form {
+
+    public HeuristicOptimizationEngineAlgorithm Content { get; set; }
+    private CombinedOperator currentSuccessor = null;
+    private Type operatorType = null;
+
+    public SuccessorConfigurator() {
+      InitializeComponent();
+    }
+
+    private void chooseSuccessorButton_Click(object sender, System.EventArgs e) {
+      using (TypeSelectorDialog dialog = new TypeSelectorDialog()) {
+        dialog.Caption = "Select Successor";
+        dialog.TypeSelector.Caption = "Available Successor Operators";
+        dialog.TypeSelector.Configure(typeof(CombinedOperator), false, true);
+
+        if (dialog.ShowDialog() == DialogResult.OK) {
+          currentSuccessor = (CombinedOperator)dialog.TypeSelector.CreateInstanceOfSelectedType();
+          successorTextBox.Text = currentSuccessor.ToString();
+        }
+      }
+    }
+
+    private void okButton_Click(object sender, System.EventArgs e) {
+      ParametrizeOperators();
+      Close();
+    }
+
+    private void cancelButton_Click(object sender, System.EventArgs e) {
+      Close();
+    }
+
+    private void chooseOperatorTypeButton_Click(object sender, System.EventArgs e) {
+      using (TypeSelectorDialog dialog = new TypeSelectorDialog()) {
+        dialog.Caption = "Select Operator Type";
+        dialog.TypeSelector.Caption = "Available Operator Types";
+        dialog.TypeSelector.Configure(typeof(IOperator), true, true);
+
+        if (dialog.ShowDialog() == DialogResult.OK) {
+          operatorType = dialog.TypeSelector.SelectedType;
+          operatorNameTextBox.Text = operatorType.ToString();
+        }
+      }
+    }
+
+    private void ParametrizeOperators() {
+      foreach (var op in Content.Problem.Operators.OfType<SingleSuccessorOperator>()) {
+        if (op.GetType().GetInterfaces().Any(x => x == operatorType)) {
+          op.Successor = (IOperator)currentSuccessor.Clone(new Cloner());
+        }
+      }
+    }
+  }
+}
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/Views/SuccessorConfiguratorMenuItem.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/Views/SuccessorConfiguratorMenuItem.cs	(revision 9053)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/Views/SuccessorConfiguratorMenuItem.cs	(revision 9053)
@@ -0,0 +1,54 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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 HeuristicLab.MainForm;
+using HeuristicLab.Optimization;
+using HeuristicLab.Optimizer;
+
+namespace HeuristicLab.Analysis.AlgorithmBehavior.Analyzers.Views {
+  internal class SuccessorConfiguratorMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "&Configure Successors for Operators"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&Edit" }; }
+    }
+    public override int Position {
+      get { return 4220; }
+    }
+
+    protected override void OnActiveViewChanged(object sender, EventArgs e) {
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+      ToolStripItem.Enabled = (activeView != null) && (activeView.Content != null) && (activeView.Content is HeuristicOptimizationEngineAlgorithm) && !activeView.Locked;
+    }
+
+    public override void Execute() {
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+      using (SuccessorConfigurator configurator = new SuccessorConfigurator()) {
+        configurator.Content = activeView.Content as HeuristicOptimizationEngineAlgorithm;
+        configurator.ShowDialog();
+      }
+    }
+  }
+}
+
