Index: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/DispatcherView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/DispatcherView.cs	(revision 2376)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/DispatcherView.cs	(revision 2377)
@@ -101,4 +101,7 @@
       testSamplesStartTextBox.Text = selectedSpec.TestSamplesStart.ToString();
       testSamplesEndTextBox.Text = selectedSpec.TestSamplesEnd.ToString();
+      minTimeOffsetTextBox.Text = selectedSpec.MinTimeOffset.ToString();
+      maxTimeOffsetTextBox.Text = selectedSpec.MaxTimeOffset.ToString();
+      autoregressiveCheckBox.Checked = selectedSpec.AutoRegressive;
     }
 
@@ -134,5 +137,4 @@
 
     private void radioButton_CheckedChanged(object sender, EventArgs e) {
-      string selectedTarget = (string)targetVariableList.SelectedItem;
       minTimeOffsetLabel.Enabled = timeSeriesRadioButton.Checked;
       minTimeOffsetTextBox.Enabled = timeSeriesRadioButton.Checked;
@@ -144,4 +146,8 @@
       else if (classificationRadioButton.Checked) selectedSpec.LearningTask = LearningTask.Classification;
       else if (regressionRadioButton.Checked) selectedSpec.LearningTask = LearningTask.Regression;
+      var allowedAlgorithms = dispatcher.GetAllowedAlgorithms(selectedSpec.TargetVariable);
+      foreach (var algo in allowedAlgorithms) {
+        dispatcher.DisableAlgorithm(selectedSpec.TargetVariable, algo);
+      }
       UpdateAlgorithms();
     }
Index: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/SimpleDispatcher.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/SimpleDispatcher.cs	(revision 2376)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/SimpleDispatcher.cs	(revision 2377)
@@ -145,4 +145,6 @@
       if (possibleAlgos.Count() > 0) selectedAlgorithm = possibleAlgos.ElementAt(random.Next(possibleAlgos.Count()));
       if (selectedAlgorithm != null) {
+        // create a clone of the algorithm template before setting the parameters
+        selectedAlgorithm = (HeuristicLab.Modeling.IAlgorithm)selectedAlgorithm.Clone(); 
         SetProblemParameters(selectedAlgorithm, problemSpecifications[targetVariable]);
         if (!(selectedAlgorithm is IStochasticAlgorithm))
Index: /trunk/sources/HeuristicLab.GP.Algorithms/3.2/AlgorithmBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.Algorithms/3.2/AlgorithmBase.cs	(revision 2376)
+++ /trunk/sources/HeuristicLab.GP.Algorithms/3.2/AlgorithmBase.cs	(revision 2377)
@@ -106,10 +106,8 @@
     }
 
-    private IOperator algorithm;
-
-    private SequentialEngine.SequentialEngine engine;
+    private IEngine engine;
     public IEngine Engine {
       get { return engine; }
-      protected set { engine = (SequentialEngine.SequentialEngine)value; }
+      protected set { engine = value; }
     }
 
@@ -158,5 +156,4 @@
       algo.OperatorGraph.AddOperator(seq);
       algo.OperatorGraph.InitialOperator = seq;
-      this.algorithm = seq;
       return algo;
     }
@@ -466,12 +463,4 @@
     }
 
-
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
-      AlgorithmBase clone = (AlgorithmBase)base.Clone(clonedObjects);
-      clonedObjects.Add(Guid, clone);
-      clone.engine = (SequentialEngine.SequentialEngine)Auxiliary.Clone(Engine, clonedObjects);
-      return clone;
-    }
-
     protected virtual IOperator GetVariableInjector() {
       CombinedOperator init = (CombinedOperator)GetInitializationOperator();
@@ -485,8 +474,15 @@
 
     protected virtual IOperator GetInitializationOperator() {
-      return algorithm.SubOperators[0];
+      CombinedOperator algo = (CombinedOperator)Engine.OperatorGraph.InitialOperator;
+      return algo.OperatorGraph.InitialOperator.SubOperators[0];
     }
 
     #region Persistence Methods
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      AlgorithmBase clone = (AlgorithmBase)base.Clone(clonedObjects);
+      clone.engine = (IEngine)Auxiliary.Clone(Engine, clonedObjects);
+      return clone;
+    }
+
     public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
       XmlNode node = base.GetXmlNode(name, document, persistedObjects);
@@ -496,9 +492,7 @@
     public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
       base.Populate(node, restoredObjects);
-      engine = (SequentialEngine.SequentialEngine)PersistenceManager.Restore(node.SelectSingleNode("Engine"), restoredObjects);
+      engine = (IEngine)PersistenceManager.Restore(node.SelectSingleNode("Engine"), restoredObjects);
     }
     #endregion
-
-
   }
 }
Index: /trunk/sources/HeuristicLab.LinearRegression/3.2/LinearRegression.cs
===================================================================
--- /trunk/sources/HeuristicLab.LinearRegression/3.2/LinearRegression.cs	(revision 2376)
+++ /trunk/sources/HeuristicLab.LinearRegression/3.2/LinearRegression.cs	(revision 2377)
@@ -42,5 +42,5 @@
     public virtual string Description { get { return "TODO"; } }
 
-    private SequentialEngine.SequentialEngine engine;
+    private IEngine engine;
     public virtual IEngine Engine {
       get { return engine; }
@@ -135,5 +135,4 @@
 
       HL3TreeEvaluatorInjector treeEvaluatorInjector = new HL3TreeEvaluatorInjector();
-
 
       LinearRegressionOperator lrOperator = new LinearRegressionOperator();
@@ -250,7 +249,26 @@
 
     public virtual IEditor CreateEditor() {
-      return engine.CreateEditor();
-    }
-
+      return ((SequentialEngine.SequentialEngine)engine).CreateEditor();
+    }
+
+    #endregion
+
+    #region persistence
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      LinearRegression clone = (LinearRegression) base.Clone(clonedObjects);
+      clone.engine = (IEngine)Auxiliary.Clone(Engine, clonedObjects);
+      return clone;
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("Engine", engine, document, persistedObjects));
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      engine = (IEngine)PersistenceManager.Restore(node.SelectSingleNode("Engine"), restoredObjects);
+    }
     #endregion
   }
Index: /trunk/sources/HeuristicLab.Modeling/3.2/IAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Modeling/3.2/IAlgorithm.cs	(revision 2376)
+++ /trunk/sources/HeuristicLab.Modeling/3.2/IAlgorithm.cs	(revision 2377)
@@ -27,5 +27,5 @@
 
 namespace HeuristicLab.Modeling {
-  public interface IAlgorithm {
+  public interface IAlgorithm : ICloneable {
     string Name { get; }
     string Description { get; }
Index: /trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorRegression.cs
===================================================================
--- /trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorRegression.cs	(revision 2376)
+++ /trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorRegression.cs	(revision 2377)
@@ -42,5 +42,5 @@
     public virtual string Description { get { return "TODO"; } }
 
-    private SequentialEngine.SequentialEngine engine;
+    private IEngine engine;
     public IEngine Engine {
       get { return engine; }
@@ -490,7 +490,26 @@
 
     public IEditor CreateEditor() {
-      return engine.CreateEditor();
-    }
-
+      return ((SequentialEngine.SequentialEngine)engine).CreateEditor();
+    }
+
+    #endregion
+
+    #region persistence
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      SupportVectorRegression clone = (SupportVectorRegression) base.Clone(clonedObjects);
+      clone.engine = (IEngine)Auxiliary.Clone(Engine, clonedObjects);
+      return clone;
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("Engine", engine, document, persistedObjects));
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      engine = (IEngine)PersistenceManager.Restore(node.SelectSingleNode("Engine"), restoredObjects);
+    }
     #endregion
   }
