Index: /trunk/sources/HeuristicLab.Analysis.Views/3.3/DataTableView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis.Views/3.3/DataTableView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Analysis.Views/3.3/DataTableView.cs	(revision 3454)
@@ -95,14 +95,21 @@
       chart.Titles.Clear();
       chart.Series.Clear();
-      if (Content == null) {
-        Caption = "DataTable";
-        chart.Enabled = false;
-      } else {
+      Caption = "DataTable";
+      if (Content != null) {
         Caption = Content.Name + " (" + Content.GetType().Name + ")";
-        chart.Enabled = true;
         chart.Titles.Add(new Title(Content.Name, Docking.Top));
         foreach (DataRow row in Content.Rows)
           AddDataRow(row);
       }
+      SetEnabledStateOfControls();
+    }
+
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      SetEnabledStateOfControls();
+    }
+
+    private void SetEnabledStateOfControls() {
+      chart.Enabled = Content != null;
     }
 
Index: /trunk/sources/HeuristicLab.CodeEditor/3.2/CodeViewer.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.CodeEditor/3.2/CodeViewer.Designer.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.CodeEditor/3.2/CodeViewer.Designer.cs	(revision 3454)
@@ -62,4 +62,5 @@
       this.Controls.Add(this.textEditorControl1);
       this.Controls.Add(this.button1);
+      this.Icon = HeuristicLab.Common.Resources.Resources.HeuristicLabIcon;
       this.Name = "CodeViewer";
       this.Text = "GeneratedCode";
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemView.cs	(revision 3454)
@@ -65,6 +65,6 @@
       if (Content == null) {
         Caption = "NamedItem";
-        nameTextBox.Text = "-";
-        descriptionTextBox.Text = "";
+        nameTextBox.Text = string.Empty;
+        descriptionTextBox.Text = string.Empty;
         toolTip.SetToolTip(descriptionTextBox, string.Empty);
       } else {
Index: /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleArrayView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleArrayView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleArrayView.cs	(revision 3454)
@@ -86,13 +86,8 @@
     }
     private void SetEnabledStateOfControls() {
-      if (Content == null) {
-        lengthTextBox.Enabled = false;
-        dataGridView.Enabled = false;
-      } else {
-        lengthTextBox.Enabled = true;
-        dataGridView.Enabled = true;
-        lengthTextBox.ReadOnly = ReadOnly;
-        dataGridView.ReadOnly = ReadOnly;
-      }
+      lengthTextBox.Enabled = Content != null;
+      dataGridView.Enabled = Content != null;
+      lengthTextBox.ReadOnly = ReadOnly;
+      dataGridView.ReadOnly = ReadOnly;
     }
 
Index: /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 3454)
@@ -101,16 +101,10 @@
     }
     private void SetEnabledStateOfControls() {
-      if (Content == null) {
-        rowsTextBox.Enabled = false;
-        columnsTextBox.Enabled = false;
-        dataGridView.Enabled = false;
-      } else {
-        rowsTextBox.Enabled = true;
-        columnsTextBox.Enabled = true;
-        dataGridView.Enabled = true;
-        rowsTextBox.ReadOnly = ReadOnly;
-        columnsTextBox.ReadOnly = ReadOnly;
-        dataGridView.ReadOnly = ReadOnly;
-      }
+      rowsTextBox.Enabled = Content != null;
+      columnsTextBox.Enabled = Content != null;
+      dataGridView.Enabled = Content != null;
+      rowsTextBox.ReadOnly = ReadOnly;
+      columnsTextBox.ReadOnly = ReadOnly;
+      dataGridView.ReadOnly = ReadOnly;
     }
 
Index: /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleValueView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleValueView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleValueView.cs	(revision 3454)
@@ -80,9 +80,6 @@
     }
     private void SetEnabledStateOfControls() {
-      if (Content == null) valueTextBox.Enabled = false;
-      else {
-        valueTextBox.Enabled = true;
-        valueTextBox.ReadOnly = ReadOnly;
-      }
+      valueTextBox.Enabled = Content != null;
+      valueTextBox.ReadOnly = ReadOnly;
     }
 
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/GraphicalSymbolicExpressionTreeView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/GraphicalSymbolicExpressionTreeView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/GraphicalSymbolicExpressionTreeView.cs	(revision 3454)
@@ -60,4 +60,14 @@
         symbolicExpressionTreeChart.Tree = Content;
       }
+      SetEnabledStateOfControls();
+    }
+
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      SetEnabledStateOfControls();
+    }
+
+    private void SetEnabledStateOfControls() {
+      symbolicExpressionTreeChart.Enabled = Content != null;
     }
   }
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/SymbolicExpressionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/SymbolicExpressionView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/SymbolicExpressionView.cs	(revision 3454)
@@ -35,9 +35,18 @@
         Caption = "SymbolicExpression View";
         textBox.Text = string.Empty;
-        textBox.Enabled = false;
       } else {
         textBox.Text = SymbolicExpression(Content.Root, 0);
-        textBox.Enabled = true;
       }
+      SetEnabledStateOfControls();
+    }
+
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      SetEnabledStateOfControls();
+    }
+
+    private void SetEnabledStateOfControls() {
+      textBox.Enabled = Content != null;
+      textBox.ReadOnly = ReadOnly;
     }
 
Index: /trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperator.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperator.cs	(revision 3454)
@@ -132,10 +132,4 @@
     }
 
-    public void SetDescription(string description) {
-      if (description == null)
-        throw new NullReferenceException("description must not be null");
-      Description = description;
-    }
-
     public IEnumerable<string> GetAllNamespaces(bool selectedAssembliesOnly) {
       var namespaces = new HashSet<string>();
@@ -223,4 +217,5 @@
       typeof(System.Text.StringBuilder).Assembly,
       typeof(System.Data.Linq.DataContext).Assembly,
+      typeof(HeuristicLab.Common.IDeepCloneable).Assembly,
       typeof(HeuristicLab.Core.Item).Assembly,
       typeof(HeuristicLab.Data.IntValue).Assembly,
@@ -258,4 +253,5 @@
         "System.Linq",
         "System.Data.Linq",
+        "HeuristicLab.Common",
         "HeuristicLab.Core",
         "HeuristicLab.Data",
@@ -419,5 +415,4 @@
     public override IDeepCloneable Clone(Cloner cloner) {
       ProgrammableOperator clone = (ProgrammableOperator)base.Clone(cloner);
-      clone.description = description;
       clone.code = Code;
       clone.executeMethod = executeMethod;
Index: /trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.Designer.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.Designer.cs	(revision 3454)
@@ -78,5 +78,4 @@
       // 
       this.descriptionTextBox.Size = new System.Drawing.Size(913, 20);
-      this.descriptionTextBox.TextChanged += new System.EventHandler(this.descriptionTextBox_TextChanged);
       // 
       // tabPage2
Index: /trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.cs	(revision 3454)
@@ -60,5 +60,4 @@
       base.RegisterContentEvents();
       ProgrammableOperator.CodeChanged += ProgrammableOperator_CodeChanged;
-      ProgrammableOperator.DescriptionChanged += ProgrammableOperator_DescriptionChanged;
       ProgrammableOperator.SignatureChanged += ProgrammableOperator_SignatureChanged;
     }
@@ -66,5 +65,4 @@
     protected override void DeregisterContentEvents() {
       ProgrammableOperator.CodeChanged -= ProgrammableOperator_CodeChanged;
-      ProgrammableOperator.DescriptionChanged -= ProgrammableOperator_DescriptionChanged;
       ProgrammableOperator.SignatureChanged -= ProgrammableOperator_SignatureChanged;
       base.DeregisterContentEvents();
@@ -75,13 +73,7 @@
       if (ProgrammableOperator == null) {
         codeEditor.Text = "";
-        codeEditor.Enabled = false;
-        descriptionTextBox.Text = "";
-        descriptionTextBox.Enabled = false;
         assembliesTreeView.Nodes.Clear();
         parameterCollectionView.Content = null;
       } else {
-        codeEditor.Enabled = true;
-        descriptionTextBox.Text = ProgrammableOperator.Description;
-        descriptionTextBox.Enabled = true;
         codeEditor.Prefix = GetGeneratedPrefix();
         codeEditor.Suffix = @"
@@ -104,4 +96,19 @@
         parameterCollectionView.Content = ProgrammableOperator.Parameters;
       }
+      SetEnabledStateOfControls();
+    }
+
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      SetEnabledStateOfControls();
+    }
+
+    private void SetEnabledStateOfControls() {
+      parameterCollectionView.Enabled = Content != null;
+      parameterCollectionView.ReadOnly = ReadOnly;
+      assembliesTreeView.Enabled = Content != null && !ReadOnly;
+      namespacesTreeView.Enabled = Content != null && !ReadOnly;
+      compileButton.Enabled = Content != null && !ReadOnly;
+      codeEditor.Enabled = Content != null && !ReadOnly;
     }
 
@@ -141,7 +148,4 @@
     private void ProgrammableOperator_CodeChanged(object sender, EventArgs e) {
       codeEditor.Text = ProgrammableOperator.Code;
-    }
-    private void ProgrammableOperator_DescriptionChanged(object sender, EventArgs e) {
-      descriptionTextBox.Text = ProgrammableOperator.Description;
     }
     private void ProgrammableOperator_SignatureChanged(object sender, EventArgs args) {
@@ -279,10 +283,4 @@
       new CodeViewer(ProgrammableOperator.CompilationUnitCode).ShowDialog(this);
     }
-
-    private void descriptionTextBox_TextChanged(object sender, EventArgs e) {
-      ProgrammableOperator.SetDescription(descriptionTextBox.Text);
-    }
-
-
   }
 }
Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/AlgorithmOperatorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/AlgorithmOperatorView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/AlgorithmOperatorView.cs	(revision 3454)
@@ -75,16 +75,26 @@
       if (Content == null) {
         breakpointCheckBox.Checked = false;
-        breakpointCheckBox.Enabled = false;
         parameterCollectionView.Content = null;
         operatorGraphViewHost.Content = null;
-        tabControl.Enabled = false;
       } else {
         breakpointCheckBox.Checked = Content.Breakpoint;
-        breakpointCheckBox.Enabled = true;
         parameterCollectionView.Content = ((IOperator)Content).Parameters;
         operatorGraphViewHost.ViewType = null;
         operatorGraphViewHost.Content = Content.OperatorGraph;
-        tabControl.Enabled = true;
       }
+      SetEnabledStateOfControls();
+    }
+
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      SetEnabledStateOfControls();
+    }
+
+    private void SetEnabledStateOfControls() {
+      breakpointCheckBox.Enabled = Content != null && !ReadOnly;
+      parameterCollectionView.Enabled = Content != null;
+      parameterCollectionView.ReadOnly = ReadOnly;
+      operatorGraphViewHost.Enabled = Content != null;
+      operatorGraphViewHost.ReadOnly = ReadOnly;
     }
 
Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/MultiOperatorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/MultiOperatorView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/MultiOperatorView.cs	(revision 3454)
@@ -75,15 +75,25 @@
       if (Content == null) {
         breakpointCheckBox.Checked = false;
-        breakpointCheckBox.Enabled = false;
         operatorListView.Content = null;
         parameterCollectionView.Content = null;
-        tabControl.Enabled = false;
       } else {
         breakpointCheckBox.Checked = Content.Breakpoint;
-        breakpointCheckBox.Enabled = true;
         operatorListView.Content = Content.Operators;
         parameterCollectionView.Content = ((IOperator)Content).Parameters;
-        tabControl.Enabled = true;
       }
+      SetEnabledStateOfControls();
+    }
+
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      SetEnabledStateOfControls();
+    }
+
+    private void SetEnabledStateOfControls() {
+      breakpointCheckBox.Enabled = Content != null && !ReadOnly;
+      operatorListView.Enabled = Content != null;
+      operatorListView.ReadOnly = ReadOnly;
+      parameterCollectionView.Enabled = Content != null;
+      parameterCollectionView.ReadOnly = ReadOnly;
     }
 
Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorView.cs	(revision 3454)
@@ -76,9 +76,17 @@
       if (Content == null) {
         breakpointCheckBox.Checked = false;
-        breakpointCheckBox.Enabled = false;
       } else {
         breakpointCheckBox.Checked = Content.Breakpoint;
-        breakpointCheckBox.Enabled = true;
       }
+      SetEnabledStateOfControls();
+    }
+
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      SetEnabledStateOfControls();
+    }
+
+    private void SetEnabledStateOfControls() {
+      breakpointCheckBox.Enabled = Content != null && !ReadOnly;
     }
 
Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/ValuesCollectorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/ValuesCollectorView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/ValuesCollectorView.cs	(revision 3454)
@@ -75,15 +75,25 @@
       if (Content == null) {
         breakpointCheckBox.Checked = false;
-        breakpointCheckBox.Enabled = false;
         collectedValuesView.Content = null;
         parameterCollectionView.Content = null;
-        tabControl.Enabled = false;
       } else {
         breakpointCheckBox.Checked = Content.Breakpoint;
-        breakpointCheckBox.Enabled = true;
         collectedValuesView.Content = Content.CollectedValues;
         parameterCollectionView.Content = ((IOperator)Content).Parameters;
-        tabControl.Enabled = true;
       }
+      SetEnabledStateOfControls();
+    }
+
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      SetEnabledStateOfControls();
+    }
+
+    private void SetEnabledStateOfControls() {
+      breakpointCheckBox.Enabled = Content != null && !ReadOnly;
+      collectedValuesView.Enabled = Content != null;
+      collectedValuesView.ReadOnly = ReadOnly;
+      parameterCollectionView.Enabled = Content != null;
+      parameterCollectionView.ReadOnly = ReadOnly;
     }
 
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.Designer.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.Designer.cs	(revision 3454)
@@ -52,5 +52,4 @@
       this.problemPanel = new System.Windows.Forms.Panel();
       this.problemViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.saveProblemButton = new System.Windows.Forms.Button();
       this.openProblemButton = new System.Windows.Forms.Button();
       this.newProblemButton = new System.Windows.Forms.Button();
@@ -65,5 +64,4 @@
       this.executionTimeTextBox = new System.Windows.Forms.TextBox();
       this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
-      this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
       this.stopButton = new System.Windows.Forms.Button();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
@@ -127,5 +125,4 @@
       // 
       this.problemTabPage.Controls.Add(this.problemPanel);
-      this.problemTabPage.Controls.Add(this.saveProblemButton);
       this.problemTabPage.Controls.Add(this.openProblemButton);
       this.problemTabPage.Controls.Add(this.newProblemButton);
@@ -163,15 +160,4 @@
       this.problemViewHost.ViewType = null;
       // 
-      // saveProblemButton
-      // 
-      this.saveProblemButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Save;
-      this.saveProblemButton.Location = new System.Drawing.Point(66, 6);
-      this.saveProblemButton.Name = "saveProblemButton";
-      this.saveProblemButton.Size = new System.Drawing.Size(24, 24);
-      this.saveProblemButton.TabIndex = 2;
-      this.toolTip.SetToolTip(this.saveProblemButton, "Save Problem");
-      this.saveProblemButton.UseVisualStyleBackColor = true;
-      this.saveProblemButton.Click += new System.EventHandler(this.saveProblemButton_Click);
-      // 
       // openProblemButton
       // 
@@ -303,12 +289,4 @@
       this.openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
       this.openFileDialog.Title = "Open Problem";
-      // 
-      // saveFileDialog
-      // 
-      this.saveFileDialog.DefaultExt = "hl";
-      this.saveFileDialog.FileName = "Problem";
-      this.saveFileDialog.Filter = "Uncompressed HeuristicLab Files|*.hl|HeuristicLab Files|*.hl|All Files|*.*";
-      this.saveFileDialog.FilterIndex = 2;
-      this.saveFileDialog.Title = "Save Problem";
       // 
       // stopButton
@@ -368,5 +346,4 @@
     protected HeuristicLab.MainForm.WindowsForms.ViewHost problemViewHost;
     protected System.Windows.Forms.Button newProblemButton;
-    protected System.Windows.Forms.Button saveProblemButton;
     protected System.Windows.Forms.Button openProblemButton;
     protected System.Windows.Forms.Button startButton;
@@ -376,5 +353,4 @@
     protected System.Windows.Forms.TextBox executionTimeTextBox;
     protected System.Windows.Forms.OpenFileDialog openFileDialog;
-    protected System.Windows.Forms.SaveFileDialog saveFileDialog;
     protected System.Windows.Forms.TabPage resultsTabPage;
     protected HeuristicLab.Optimization.Views.ResultCollectionView resultsView;
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs	(revision 3454)
@@ -97,19 +97,12 @@
         resultsView.Content = null;
         runsView.Content = null;
-        tabControl.Enabled = false;
-        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = false;
         executionTimeTextBox.Text = "-";
-        executionTimeTextBox.Enabled = false;
       } else {
         parameterCollectionView.Content = Content.Parameters;
-        saveProblemButton.Enabled = Content.Problem != null;
         problemViewHost.ViewType = null;
         problemViewHost.Content = Content.Problem;
         resultsView.Content = Content.Results.AsReadOnly();
         runsView.Content = Content.Runs;
-        tabControl.Enabled = true;
-        EnableDisableButtons();
         executionTimeTextBox.Text = Content.ExecutionTime.ToString();
-        executionTimeTextBox.Enabled = true;
       }
       SetEnableStateOfControls();
@@ -121,8 +114,16 @@
     }
     private void SetEnableStateOfControls() {
+      parameterCollectionView.Enabled = Content != null;
       parameterCollectionView.ReadOnly = ReadOnly;
+      newProblemButton.Enabled = Content != null && !ReadOnly;
+      openProblemButton.Enabled = Content != null && !ReadOnly;
+      problemViewHost.Enabled = Content != null;
       problemViewHost.ReadOnly = ReadOnly;
+      resultsView.Enabled = Content != null;
       resultsView.ReadOnly = ReadOnly;
+      runsView.Enabled = Content != null;
       runsView.ReadOnly = ReadOnly;
+      executionTimeTextBox.Enabled = Content != null;
+      SetEnabledStateOfExecutableButtons();
     }
 
@@ -139,5 +140,4 @@
         problemViewHost.ViewType = null;
         problemViewHost.Content = Content.Problem;
-        saveProblemButton.Enabled = Content.Problem != null;
       }
     }
@@ -152,7 +152,7 @@
         Invoke(new EventHandler(Content_ExecutionStateChanged), sender, e);
       else {
-        this.ReadOnly = Content.ExecutionState == ExecutionState.Started;
+        ReadOnly = Content.ExecutionState == ExecutionState.Started;
         Locked = Content.ExecutionState == ExecutionState.Started;
-        EnableDisableButtons();
+        SetEnabledStateOfExecutableButtons();
       }
     }
@@ -192,5 +192,5 @@
       if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
         this.Cursor = Cursors.AppStarting;
-        newProblemButton.Enabled = openProblemButton.Enabled = saveProblemButton.Enabled = false;
+        newProblemButton.Enabled = openProblemButton.Enabled = false;
         problemViewHost.Enabled = false;
 
@@ -211,30 +211,5 @@
               Content.Problem = problem;
             problemViewHost.Enabled = true;
-            newProblemButton.Enabled = openProblemButton.Enabled = saveProblemButton.Enabled = true;
-            this.Cursor = Cursors.Default;
-          }));
-        }, null);
-      }
-    }
-    protected virtual void saveProblemButton_Click(object sender, EventArgs e) {
-      saveFileDialog.Title = "Save Problem";
-      if (saveFileDialog.ShowDialog(this) == DialogResult.OK) {
-        this.Cursor = Cursors.AppStarting;
-        newProblemButton.Enabled = openProblemButton.Enabled = saveProblemButton.Enabled = false;
-        problemViewHost.Enabled = false;
-
-        var call = new Action<IProblem, string, int>(XmlGenerator.Serialize);
-        int compression = 9;
-        if (saveFileDialog.FilterIndex == 1) compression = 0;
-        call.BeginInvoke(Content.Problem, saveFileDialog.FileName, compression, delegate(IAsyncResult a) {
-          try {
-            call.EndInvoke(a);
-          }
-          catch (Exception ex) {
-            Auxiliary.ShowErrorMessageBox(ex);
-          }
-          Invoke(new Action(delegate() {
-            problemViewHost.Enabled = true;
-            newProblemButton.Enabled = openProblemButton.Enabled = saveProblemButton.Enabled = true;
+            newProblemButton.Enabled = openProblemButton.Enabled = true;
             this.Cursor = Cursors.Default;
           }));
@@ -282,9 +257,13 @@
 
     #region Helpers
-    private void EnableDisableButtons() {
-      startButton.Enabled = (Content.ExecutionState == ExecutionState.Prepared) || (Content.ExecutionState == ExecutionState.Paused);
-      pauseButton.Enabled = Content.ExecutionState == ExecutionState.Started;
-      stopButton.Enabled = (Content.ExecutionState == ExecutionState.Started) || (Content.ExecutionState == ExecutionState.Paused);
-      resetButton.Enabled = Content.ExecutionState != ExecutionState.Started;
+    private void SetEnabledStateOfExecutableButtons() {
+      if (Content == null) {
+        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = false;
+      } else {
+        startButton.Enabled = (Content.ExecutionState == ExecutionState.Prepared) || (Content.ExecutionState == ExecutionState.Paused);
+        pauseButton.Enabled = Content.ExecutionState == ExecutionState.Started;
+        stopButton.Enabled = (Content.ExecutionState == ExecutionState.Started) || (Content.ExecutionState == ExecutionState.Paused);
+        resetButton.Enabled = Content.ExecutionState != ExecutionState.Started;
+      }
     }
     #endregion
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.Designer.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.Designer.cs	(revision 3454)
@@ -50,5 +50,4 @@
       this.algorithmPanel = new System.Windows.Forms.Panel();
       this.algorithmViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.saveAlgorithmButton = new System.Windows.Forms.Button();
       this.openAlgorithmButton = new System.Windows.Forms.Button();
       this.newAlgorithmButton = new System.Windows.Forms.Button();
@@ -61,5 +60,4 @@
       this.executionTimeTextBox = new System.Windows.Forms.TextBox();
       this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
-      this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
       this.repetitionsLabel = new System.Windows.Forms.Label();
       this.repetitionsNumericUpDown = new System.Windows.Forms.NumericUpDown();
@@ -99,5 +97,4 @@
       // 
       this.algorithmTabPage.Controls.Add(this.algorithmPanel);
-      this.algorithmTabPage.Controls.Add(this.saveAlgorithmButton);
       this.algorithmTabPage.Controls.Add(this.openAlgorithmButton);
       this.algorithmTabPage.Controls.Add(this.newAlgorithmButton);
@@ -135,15 +132,4 @@
       this.algorithmViewHost.ViewType = null;
       // 
-      // saveAlgorithmButton
-      // 
-      this.saveAlgorithmButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Save;
-      this.saveAlgorithmButton.Location = new System.Drawing.Point(66, 6);
-      this.saveAlgorithmButton.Name = "saveAlgorithmButton";
-      this.saveAlgorithmButton.Size = new System.Drawing.Size(24, 24);
-      this.saveAlgorithmButton.TabIndex = 2;
-      this.toolTip.SetToolTip(this.saveAlgorithmButton, "Save Problem");
-      this.saveAlgorithmButton.UseVisualStyleBackColor = true;
-      this.saveAlgorithmButton.Click += new System.EventHandler(this.saveAlgorithmButton_Click);
-      // 
       // openAlgorithmButton
       // 
@@ -252,12 +238,4 @@
       this.openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
       this.openFileDialog.Title = "Open Algorithm";
-      // 
-      // saveFileDialog
-      // 
-      this.saveFileDialog.DefaultExt = "hl";
-      this.saveFileDialog.FileName = "Algorithm";
-      this.saveFileDialog.Filter = "Uncompressed HeuristicLab Files|*.hl|HeuristicLab Files|*.hl|All Files|*.*";
-      this.saveFileDialog.FilterIndex = 2;
-      this.saveFileDialog.Title = "Save Algorithm";
       // 
       // repetitionsLabel
@@ -353,5 +331,4 @@
     private HeuristicLab.MainForm.WindowsForms.ViewHost algorithmViewHost;
     private System.Windows.Forms.Button newAlgorithmButton;
-    private System.Windows.Forms.Button saveAlgorithmButton;
     private System.Windows.Forms.Button openAlgorithmButton;
     private System.Windows.Forms.Button startButton;
@@ -361,5 +338,4 @@
     private System.Windows.Forms.TextBox executionTimeTextBox;
     private System.Windows.Forms.OpenFileDialog openFileDialog;
-    private System.Windows.Forms.SaveFileDialog saveFileDialog;
     private System.Windows.Forms.TabPage runsTabPage;
     private System.Windows.Forms.Label repetitionsLabel;
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs	(revision 3454)
@@ -78,22 +78,13 @@
       if (Content == null) {
         repetitionsNumericUpDown.Value = 1;
-        repetitionsNumericUpDown.Enabled = false;
         algorithmViewHost.Content = null;
         runsView.Content = null;
-        tabControl.Enabled = false;
-        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = false;
         executionTimeTextBox.Text = "-";
-        executionTimeTextBox.Enabled = false;
       } else {
         repetitionsNumericUpDown.Value = Content.Repetitions;
-        repetitionsNumericUpDown.Enabled = true;
-        saveAlgorithmButton.Enabled = Content.Algorithm != null;
         algorithmViewHost.ViewType = null;
         algorithmViewHost.Content = Content.Algorithm;
         runsView.Content = Content.Runs;
-        tabControl.Enabled = true;
-        EnableDisableButtons();
         executionTimeTextBox.Text = Content.ExecutionTime.ToString();
-        executionTimeTextBox.Enabled = true;
       }
       SetEnableStateOfControls();
@@ -104,7 +95,13 @@
     }
     private void SetEnableStateOfControls() {
-      repetitionsNumericUpDown.ReadOnly = ReadOnly;
+      repetitionsNumericUpDown.Enabled = Content != null && !ReadOnly;
+      newAlgorithmButton.Enabled = Content != null && !ReadOnly;
+      openAlgorithmButton.Enabled = Content != null && !ReadOnly;
+      algorithmViewHost.Enabled = Content != null;
       algorithmViewHost.ReadOnly = ReadOnly;
+      runsView.Enabled = Content != null;
       runsView.ReadOnly = ReadOnly;
+      executionTimeTextBox.Enabled = Content != null;
+      SetEnabledStateOfExecutableButtons();
     }
 
@@ -121,6 +118,5 @@
         this.ReadOnly = Content.ExecutionState == ExecutionState.Started;
         Locked = Content.ExecutionState == ExecutionState.Started;
-        newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = saveAlgorithmButton.Enabled = Content.ExecutionState != ExecutionState.Started;
-        EnableDisableButtons();
+        SetEnabledStateOfExecutableButtons();
       }
     }
@@ -143,5 +139,4 @@
         algorithmViewHost.ViewType = null;
         algorithmViewHost.Content = Content.Algorithm;
-        saveAlgorithmButton.Enabled = Content.Algorithm != null;
       }
     }
@@ -182,5 +177,5 @@
       if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
         this.Cursor = Cursors.AppStarting;
-        newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = saveAlgorithmButton.Enabled = false;
+        newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = false;
         algorithmViewHost.Enabled = false;
 
@@ -199,30 +194,5 @@
               Content.Algorithm = algorithm;
             algorithmViewHost.Enabled = true;
-            newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = saveAlgorithmButton.Enabled = true;
-            this.Cursor = Cursors.Default;
-          }));
-        }, null);
-      }
-    }
-    private void saveAlgorithmButton_Click(object sender, EventArgs e) {
-      saveFileDialog.Title = "Save Algorithm";
-      if (saveFileDialog.ShowDialog(this) == DialogResult.OK) {
-        this.Cursor = Cursors.AppStarting;
-        newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = saveAlgorithmButton.Enabled = false;
-        algorithmViewHost.Enabled = false;
-
-        var call = new Action<IAlgorithm, string, int>(XmlGenerator.Serialize);
-        int compression = 9;
-        if (saveFileDialog.FilterIndex == 1) compression = 0;
-        call.BeginInvoke(Content.Algorithm, saveFileDialog.FileName, compression, delegate(IAsyncResult a) {
-          try {
-            call.EndInvoke(a);
-          }
-          catch (Exception ex) {
-            Auxiliary.ShowErrorMessageBox(ex);
-          }
-          Invoke(new Action(delegate() {
-            algorithmViewHost.Enabled = true;
-            newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = saveAlgorithmButton.Enabled = true;
+            newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = true;
             this.Cursor = Cursors.Default;
           }));
@@ -272,9 +242,13 @@
 
     #region Helpers
-    private void EnableDisableButtons() {
-      startButton.Enabled = (Content.ExecutionState == ExecutionState.Prepared) || (Content.ExecutionState == ExecutionState.Paused);
-      pauseButton.Enabled = Content.ExecutionState == ExecutionState.Started;
-      stopButton.Enabled = (Content.ExecutionState == ExecutionState.Started) || (Content.ExecutionState == ExecutionState.Paused);
-      resetButton.Enabled = Content.ExecutionState != ExecutionState.Started;
+    private void SetEnabledStateOfExecutableButtons() {
+      if (Content == null) {
+        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = false;
+      } else {
+        startButton.Enabled = (Content.ExecutionState == ExecutionState.Prepared) || (Content.ExecutionState == ExecutionState.Paused);
+        pauseButton.Enabled = Content.ExecutionState == ExecutionState.Started;
+        stopButton.Enabled = (Content.ExecutionState == ExecutionState.Started) || (Content.ExecutionState == ExecutionState.Paused);
+        resetButton.Enabled = Content.ExecutionState != ExecutionState.Started;
+      }
     }
     #endregion
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.Designer.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.Designer.cs	(revision 3454)
@@ -52,5 +52,4 @@
       this.engineViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
       this.operatorGraphTabPage = new System.Windows.Forms.TabPage();
-      this.saveOperatorGraphButton = new System.Windows.Forms.Button();
       this.openOperatorGraphButton = new System.Windows.Forms.Button();
       this.newOperatorGraphButton = new System.Windows.Forms.Button();
@@ -99,8 +98,4 @@
       this.toolTip.SetToolTip(this.newProblemButton, "New Problem");
       // 
-      // saveProblemButton
-      // 
-      this.toolTip.SetToolTip(this.saveProblemButton, "Save Problem");
-      // 
       // openProblemButton
       // 
@@ -228,5 +223,4 @@
       // operatorGraphTabPage
       // 
-      this.operatorGraphTabPage.Controls.Add(this.saveOperatorGraphButton);
       this.operatorGraphTabPage.Controls.Add(this.openOperatorGraphButton);
       this.operatorGraphTabPage.Controls.Add(this.newOperatorGraphButton);
@@ -238,15 +232,4 @@
       this.operatorGraphTabPage.Text = "Operator Graph";
       this.operatorGraphTabPage.UseVisualStyleBackColor = true;
-      // 
-      // saveOperatorGraphButton
-      // 
-      this.saveOperatorGraphButton.Enabled = false;
-      this.saveOperatorGraphButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Save;
-      this.saveOperatorGraphButton.Location = new System.Drawing.Point(63, 3);
-      this.saveOperatorGraphButton.Name = "saveOperatorGraphButton";
-      this.saveOperatorGraphButton.Size = new System.Drawing.Size(24, 24);
-      this.saveOperatorGraphButton.TabIndex = 1;
-      this.toolTip.SetToolTip(this.saveOperatorGraphButton, "Save Operator Graph");
-      this.saveOperatorGraphButton.UseVisualStyleBackColor = true;
       // 
       // openOperatorGraphButton
@@ -328,5 +311,4 @@
     protected System.Windows.Forms.TabPage operatorGraphTabPage;
     protected HeuristicLab.MainForm.WindowsForms.ViewHost operatorGraphViewHost;
-    protected System.Windows.Forms.Button saveOperatorGraphButton;
     protected System.Windows.Forms.Button openOperatorGraphButton;
     protected System.Windows.Forms.Button newOperatorGraphButton;
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.cs	(revision 3454)
@@ -88,5 +88,4 @@
       if (Content == null) {
         engineViewHost.Content = null;
-        createUserDefinedAlgorithmButton.Enabled = false;
         operatorGraphViewHost.Content = null;
       } else {
@@ -99,5 +98,4 @@
         operatorGraphViewHost.ViewType = null;
         operatorGraphViewHost.Content = Content.OperatorGraph;
-        createUserDefinedAlgorithmButton.Enabled = true;
       }
       SetEnableStateOfControls();
@@ -108,20 +106,18 @@
       SetEnableStateOfControls();
     }
+    protected override void OnLockedChanged() {
+      base.OnLockedChanged();
+      SetEnableStateOfControls();
+    }
     private void SetEnableStateOfControls() {
+      engineViewHost.Enabled = Content != null;
       engineViewHost.ReadOnly = ReadOnly;
-      if (Content == null)
-        engineComboBox.Enabled = false;
-      else
-        engineComboBox.Enabled = Content.ExecutionState != ExecutionState.Started;
+      newOperatorGraphButton.Enabled = false;
+      openOperatorGraphButton.Enabled = false;
+      operatorGraphViewHost.Enabled = Content != null;
+      engineComboBox.Enabled = Content != null && !ReadOnly;
+      createUserDefinedAlgorithmButton.Enabled = Content != null && !Locked;
     }
 
-    protected override void Content_ExecutionStateChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_ExecutionStateChanged), sender, e);
-      else {
-        createUserDefinedAlgorithmButton.Enabled = Content.ExecutionState != ExecutionState.Started;
-        base.Content_ExecutionStateChanged(sender, e);
-      }
-    }
     protected virtual void Content_EngineChanged(object sender, System.EventArgs e) {
       if (InvokeRequired)
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/ExperimentView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/ExperimentView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/ExperimentView.cs	(revision 3454)
@@ -72,15 +72,9 @@
         optimizerListView.Content = null;
         runsViewHost.Content = null;
-        tabControl.Enabled = false;
-        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = false;
         executionTimeTextBox.Text = "-";
-        executionTimeTextBox.Enabled = false;
       } else {
         optimizerListView.Content = Content.Optimizers;
         runsViewHost.Content = Content.Runs;
-        tabControl.Enabled = true;
-        EnableDisableButtons();
         executionTimeTextBox.Text = Content.ExecutionTime.ToString();
-        executionTimeTextBox.Enabled = true;
       }
       SetEnableStateOfControls();
@@ -92,5 +86,10 @@
     }
     private void SetEnableStateOfControls() {
+      optimizerListView.Enabled = Content != null;
       optimizerListView.ReadOnly = ReadOnly;
+      runsViewHost.Enabled = Content != null;
+      runsViewHost.ReadOnly = ReadOnly;
+      executionTimeTextBox.Enabled = Content != null;
+      SetEnabledStateOfExecutableButtons();
     }
 
@@ -108,5 +107,5 @@
         descriptionTextBox.Enabled = Content.ExecutionState != ExecutionState.Started;
         Locked = Content.ExecutionState == ExecutionState.Started;
-        EnableDisableButtons();
+        SetEnabledStateOfExecutableButtons();
       }
     }
@@ -148,9 +147,13 @@
 
     #region Helpers
-    private void EnableDisableButtons() {
-      startButton.Enabled = (Content.ExecutionState == ExecutionState.Prepared) || (Content.ExecutionState == ExecutionState.Paused);
-      pauseButton.Enabled = Content.ExecutionState == ExecutionState.Started;
-      stopButton.Enabled = (Content.ExecutionState == ExecutionState.Started) || (Content.ExecutionState == ExecutionState.Paused);
-      resetButton.Enabled = Content.ExecutionState != ExecutionState.Started;
+    private void SetEnabledStateOfExecutableButtons() {
+      if (Content == null) {
+        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = false;
+      } else {
+        startButton.Enabled = (Content.ExecutionState == ExecutionState.Prepared) || (Content.ExecutionState == ExecutionState.Paused);
+        pauseButton.Enabled = Content.ExecutionState == ExecutionState.Started;
+        stopButton.Enabled = (Content.ExecutionState == ExecutionState.Started) || (Content.ExecutionState == ExecutionState.Paused);
+        resetButton.Enabled = Content.ExecutionState != ExecutionState.Started;
+      }
     }
     #endregion
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/ResultView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/ResultView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/ResultView.cs	(revision 3454)
@@ -104,14 +104,7 @@
     }
     private void SetEnabledStateOfControls() {
-      if (Content == null) {
-        dataTypeTextBox.Enabled = false;
-        valueGroupBox.Enabled = false;
-        viewHost.Enabled = false;
-      } else {
-        dataTypeTextBox.Enabled = true;
-        valueGroupBox.Enabled = true;
-        viewHost.Enabled = true;
-        viewHost.ReadOnly = ReadOnly;
-      }
+      dataTypeTextBox.Enabled = Content != null;
+      viewHost.Enabled = Content != null;
+      viewHost.ReadOnly = ReadOnly;
     }
 
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionBubbleChartView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionBubbleChartView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionBubbleChartView.cs	(revision 3454)
@@ -69,6 +69,4 @@
       this.chart.ChartAreas[0].CursorX.Interval = 0;
       this.chart.ChartAreas[0].CursorY.Interval = 0;
-
-      base.ReadOnly = true;
     }
 
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunView.cs	(revision 3454)
@@ -82,13 +82,13 @@
       SetEnabledStateOfControls();
     }
+    protected override void OnLockedChanged() {
+      base.OnLockedChanged();
+      SetEnabledStateOfControls();
+    }
     private void SetEnabledStateOfControls() {
-      if (Content == null) {
-        parametersResultsGroupBox.Enabled = false;
-        viewHost.Enabled = false;
-      } else {
-        parametersResultsGroupBox.Enabled = true;
-        viewHost.Enabled = true;
-        viewHost.ReadOnly = ReadOnly;
-      }
+      listView.Enabled = Content != null;
+      viewHost.Enabled = Content != null;
+      viewHost.ReadOnly = ReadOnly;
+      showAlgorithmButton.Enabled = Content != null && !Locked;
     }
 
@@ -147,9 +147,11 @@
     }
     private void showAlgorithmButton_Click(object sender, EventArgs e) {
-      IContentView view = MainFormManager.CreateDefaultView(Content.Algorithm.Clone());
-      if (view != null) {
-        view.ReadOnly = ReadOnly;
-        view.Locked = Locked;
-        view.Show();
+      if (!Locked) {
+        IContentView view = MainFormManager.CreateDefaultView(Content.Algorithm.Clone());
+        if (view != null) {
+          view.ReadOnly = ReadOnly;
+          view.Locked = Locked;
+          view.Show();
+        }
       }
     }
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/UserDefinedAlgorithmView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/UserDefinedAlgorithmView.Designer.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/UserDefinedAlgorithmView.Designer.cs	(revision 3454)
@@ -79,8 +79,4 @@
       this.toolTip.SetToolTip(this.newProblemButton, "New Problem");
       // 
-      // saveProblemButton
-      // 
-      this.toolTip.SetToolTip(this.saveProblemButton, "Save Problem");
-      // 
       // openProblemButton
       // 
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/UserDefinedAlgorithmView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/UserDefinedAlgorithmView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/UserDefinedAlgorithmView.cs	(revision 3454)
@@ -69,10 +69,9 @@
     }
     private void SetEnableStateOfControls() {
+      globalScopeView.Enabled = Content != null;
       globalScopeView.ReadOnly = ReadOnly;
+      newOperatorGraphButton.Enabled = Content != null && !ReadOnly;
+      openOperatorGraphButton.Enabled = Content != null && !ReadOnly;
       operatorGraphViewHost.ReadOnly = ReadOnly;
-      if (Content == null) 
-        newOperatorGraphButton.Enabled = openOperatorGraphButton.Enabled = saveOperatorGraphButton.Enabled = false;
-      else
-        newOperatorGraphButton.Enabled = openOperatorGraphButton.Enabled = saveOperatorGraphButton.Enabled = Content.ExecutionState != ExecutionState.Started;
     }
 
@@ -84,5 +83,5 @@
       if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
         this.Cursor = Cursors.AppStarting;
-        newOperatorGraphButton.Enabled = openOperatorGraphButton.Enabled = saveOperatorGraphButton.Enabled = false;
+        newOperatorGraphButton.Enabled = openOperatorGraphButton.Enabled = false;
         operatorGraphViewHost.Enabled = false;
 
@@ -102,30 +101,5 @@
               Content.OperatorGraph = operatorGraph;
             operatorGraphViewHost.Enabled = true;
-            newOperatorGraphButton.Enabled = openOperatorGraphButton.Enabled = saveOperatorGraphButton.Enabled = true;
-            this.Cursor = Cursors.Default;
-          }));
-        }, null);
-      }
-    }
-    private void saveOperatorGraphButton_Click(object sender, EventArgs e) {
-      saveFileDialog.Title = "Save Operator Graph";
-      if (saveFileDialog.ShowDialog(this) == DialogResult.OK) {
-        this.Cursor = Cursors.AppStarting;
-        newOperatorGraphButton.Enabled = openOperatorGraphButton.Enabled = saveOperatorGraphButton.Enabled = false;
-        operatorGraphViewHost.Enabled = false;
-
-        var call = new Action<OperatorGraph, string, int>(XmlGenerator.Serialize);
-        int compression = 9;
-        if (saveFileDialog.FilterIndex == 1) compression = 0;
-        call.BeginInvoke(Content.OperatorGraph, saveFileDialog.FileName, compression, delegate(IAsyncResult a) {
-          try {
-            call.EndInvoke(a);
-          }
-          catch (Exception ex) {
-            Auxiliary.ShowErrorMessageBox(ex);
-          }
-          Invoke(new Action(delegate() {
-            operatorGraphViewHost.Enabled = true;
-            newOperatorGraphButton.Enabled = openOperatorGraphButton.Enabled = saveOperatorGraphButton.Enabled = true;
+            newOperatorGraphButton.Enabled = openOperatorGraphButton.Enabled = true;
             this.Cursor = Cursors.Default;
           }));
Index: /trunk/sources/HeuristicLab.Problems.ArtificialAnt.Views/3.3/AntTrailView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ArtificialAnt.Views/3.3/AntTrailView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Problems.ArtificialAnt.Views/3.3/AntTrailView.cs	(revision 3454)
@@ -60,13 +60,22 @@
       if (Content == null) {
         pictureBox.Image = null;
-        pictureBox.Enabled = false;
       } else {
-        pictureBox.Enabled = true;
         GenerateImage();
       }
+      SetEnabledStateOfControls();
+    }
+
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      SetEnabledStateOfControls();
+    }
+
+    private void SetEnabledStateOfControls() {
+      pictureBox.Enabled = Content != null;
+      playButton.Enabled = Content != null && !ReadOnly;
     }
 
     private void GenerateImage() {
-      playButton.Enabled = this.Enabled;
+      playButton.Enabled = this.Enabled && !ReadOnly;
       animationTimer.Stop();
       if ((pictureBox.Width > 0) && (pictureBox.Height > 0)) {
@@ -219,5 +228,5 @@
         } else {
           animationTimer.Stop();
-          playButton.Enabled = this.Enabled;
+          playButton.Enabled = this.Enabled && !ReadOnly;
         }
       }
@@ -226,5 +235,5 @@
 
     private void AntTrailView_EnabledChanged(object sender, EventArgs e) {
-      if (this.Enabled) playButton.Enabled = true;
+      if (this.Enabled) playButton.Enabled = !ReadOnly;
       else playButton.Enabled = false;
     }
Index: /trunk/sources/HeuristicLab.Problems.TravelingSalesman.Views/3.3/PathTSPTourView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TravelingSalesman.Views/3.3/PathTSPTourView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Problems.TravelingSalesman.Views/3.3/PathTSPTourView.cs	(revision 3454)
@@ -70,9 +70,17 @@
       if (Content == null) {
         pictureBox.Image = null;
-        pictureBox.Enabled = false;
       } else {
-        pictureBox.Enabled = true;
         GenerateImage();
       }
+      SetEnabledStateOfControls();
+    }
+
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      SetEnabledStateOfControls();
+    }
+
+    private void SetEnabledStateOfControls() {
+      pictureBox.Enabled = Content != null;
     }
 
Index: /trunk/sources/HeuristicLab.Problems.TravelingSalesman.Views/3.3/TravelingSalesmanProblemView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TravelingSalesman.Views/3.3/TravelingSalesmanProblemView.cs	(revision 3453)
+++ /trunk/sources/HeuristicLab.Problems.TravelingSalesman.Views/3.3/TravelingSalesmanProblemView.cs	(revision 3454)
@@ -71,15 +71,23 @@
       if (Content == null) {
         parameterCollectionView.Content = null;
-        parameterCollectionView.Enabled = false;
         pathTSPTourView.Content = null;
-        pathTSPTourView.Enabled = false;
-        importButton.Enabled = false;
       } else {
         parameterCollectionView.Content = ((IParameterizedNamedItem)Content).Parameters;
-        parameterCollectionView.Enabled = true;
         pathTSPTourView.Content = new PathTSPTour(Content.Coordinates, Content.BestKnownSolution);
-        pathTSPTourView.Enabled = true;
-        importButton.Enabled = true;
       }
+      SetEnabledStateOfControls();
+    }
+
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      SetEnabledStateOfControls();
+    }
+
+    private void SetEnabledStateOfControls() {
+      parameterCollectionView.Enabled = Content != null;
+      parameterCollectionView.ReadOnly = ReadOnly;
+      pathTSPTourView.Enabled = Content != null;
+      pathTSPTourView.ReadOnly = ReadOnly;
+      importButton.Enabled = Content != null && !ReadOnly;
     }
 
