Index: trunk/sources/HeuristicLab.SupportVectorMachines/3.2/HeuristicLab.SupportVectorMachines-3.2.csproj
===================================================================
--- trunk/sources/HeuristicLab.SupportVectorMachines/3.2/HeuristicLab.SupportVectorMachines-3.2.csproj	(revision 1836)
+++ trunk/sources/HeuristicLab.SupportVectorMachines/3.2/HeuristicLab.SupportVectorMachines-3.2.csproj	(revision 1837)
@@ -65,4 +65,6 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="SVMRangeTransform.cs" />
+    <Compile Include="SVMModel.cs" />
     <Compile Include="HeuristicLabSupportVectorMachinesPlugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
@@ -90,7 +92,19 @@
       <Name>HeuristicLab.Data-3.2</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.GP.StructureIdentification\3.3\HeuristicLab.GP.StructureIdentification-3.3.csproj">
+      <Project>{74223A32-C726-4978-BE78-37113A18373C}</Project>
+      <Name>HeuristicLab.GP.StructureIdentification-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Operators\3.2\HeuristicLab.Operators-3.2.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators-3.2</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
       <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.SequentialEngine\3.2\HeuristicLab.SequentialEngine-3.2.csproj">
+      <Project>{B4BE8E53-BA06-4237-9A01-24255F880201}</Project>
+      <Name>HeuristicLab.SequentialEngine-3.2</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\LibSVM\LibSVM.csproj">
@@ -98,7 +112,4 @@
       <Name>LibSVM</Name>
     </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <Folder Include="SVM\" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SVMModel.cs
===================================================================
--- trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SVMModel.cs	(revision 1837)
+++ trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SVMModel.cs	(revision 1837)
@@ -0,0 +1,92 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using System.Globalization;
+using System.IO;
+
+namespace HeuristicLab.Data {
+  public class SVMModel : ObjectData {
+    /// <summary>
+    /// Gets or sets the SVM model.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ObjectData.Data"/> of base class <see cref="ObjectData"></see>. 
+    /// No own data storage present.</remarks>
+    public new SVM.Model Data {
+      get { return (SVM.Model)base.Data; }
+      set { base.Data = value; }
+    }
+
+    /// <summary>
+    /// Clones the current instance and adds it to the dictionary <paramref name="clonedObjects"/>.
+    /// </summary>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects.</param>
+    /// <returns>The cloned instance as <see cref="DoubleData"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      SVMModel clone = new SVMModel();
+      clonedObjects.Add(Guid, clone);
+      // beware we are only using a shallow copy here! (gkronber)
+      clone.Data = Data;
+      return clone;
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The actual model is saved in the node's inner text as string, 
+    /// its format depending on the local culture info and its number format.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode data = document.CreateElement("Data");
+
+      using (MemoryStream stream = new MemoryStream()) {
+        SVM.Model.Write(stream, Data);
+        stream.Seek(0, System.IO.SeekOrigin.Begin);
+        StreamReader reader = new StreamReader(stream);
+        data.InnerText = reader.ReadToEnd();
+        node.AppendChild(data);
+      }
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted SVM model from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The serialized SVM model must be saved in the node's inner text as a string  
+    /// (see <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the SVM model is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      XmlNode data = node.SelectSingleNode("Data");
+      using (MemoryStream stream = new MemoryStream(Encoding.ASCII.GetBytes(data.InnerText))) {
+        Data = SVM.Model.Read(stream);
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SVMRangeTransform.cs
===================================================================
--- trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SVMRangeTransform.cs	(revision 1837)
+++ trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SVMRangeTransform.cs	(revision 1837)
@@ -0,0 +1,92 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using System.Globalization;
+using System.IO;
+
+namespace HeuristicLab.Data {
+  public class SVMRangeTransform : ObjectData {
+    /// <summary>
+    /// Gets or sets the SVM range transformation.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ObjectData.Data"/> of base class <see cref="ObjectData"></see>. 
+    /// No own data storage present.</remarks>
+    public new SVM.RangeTransform Data {
+      get { return (SVM.RangeTransform)base.Data; }
+      set { base.Data = value; }
+    }
+
+    /// <summary>
+    /// Clones the current instance and adds it to the dictionary <paramref name="clonedObjects"/>.
+    /// </summary>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects.</param>
+    /// <returns>The cloned instance as <see cref="DoubleData"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      SVMRangeTransform clone = new SVMRangeTransform();
+      clonedObjects.Add(Guid, clone);
+      // beware we are only using a shallow copy here! (gkronber)
+      clone.Data = Data;
+      return clone;
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The actual range transformation is saved in the node's inner text as string, 
+    /// its format depending on the local culture info and its number format.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode data = document.CreateElement("Data");
+
+      using (MemoryStream stream = new MemoryStream()) {
+        SVM.RangeTransform.Write(stream, Data);
+        stream.Seek(0, System.IO.SeekOrigin.Begin);
+        StreamReader reader = new StreamReader(stream);
+        data.InnerText = reader.ReadToEnd();
+        node.AppendChild(data);
+      }
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted SVM range transformation from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The serialized SVM range transformation must be saved in the node's inner text as a string  
+    /// (see <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the SVM range transformation is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      XmlNode data = node.SelectSingleNode("Data");
+      using (MemoryStream stream = new MemoryStream(Encoding.ASCII.GetBytes(data.InnerText))) {
+        Data = SVM.RangeTransform.Read(stream);
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorCreator.cs	(revision 1836)
+++ trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorCreator.cs	(revision 1837)
@@ -48,6 +48,6 @@
       AddVariableInfo(new VariableInfo("SVMNu", "Nu parameter of nu-SVC, one-class SVM and nu-SVR", typeof(DoubleData), VariableKind.In));
       AddVariableInfo(new VariableInfo("SVMGamma", "Gamma parameter in kernel function", typeof(DoubleData), VariableKind.In));
-      AddVariableInfo(new VariableInfo("SVMModel", "Represent the model learned by the SVM", typeof(ObjectData), VariableKind.New | VariableKind.Out));
-      AddVariableInfo(new VariableInfo("SVMRangeTransform", "The applied transformation during the learning the model", typeof(ObjectData), VariableKind.New | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("SVMModel", "Represent the model learned by the SVM", typeof(SVMModel), VariableKind.New | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("SVMRangeTransform", "The applied transformation during the learning the model", typeof(SVMRangeTransform), VariableKind.New | VariableKind.Out));
 
     }
@@ -77,10 +77,10 @@
 
       //persist variables in scope
-      ObjectData objectData = new ObjectData();
-      objectData.Data = model;
-      scope.AddVariable(new Variable(scope.TranslateName("SVMModel"),objectData));
-      objectData = new ObjectData();
-      objectData.Data = rangeTransform;
-      scope.AddVariable(new Variable(scope.TranslateName("SVMRangeTransform"),objectData));
+      SVMModel modelData = new SVMModel();
+      modelData.Data = model;
+      scope.AddVariable(new Variable(scope.TranslateName("SVMModel"),modelData));
+      SVMRangeTransform rangeTransformData = new SVMRangeTransform();
+      rangeTransformData.Data = rangeTransform;
+      scope.AddVariable(new Variable(scope.TranslateName("SVMRangeTransform"),rangeTransformData));
 
       return null;
Index: trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorEvaluator.cs	(revision 1836)
+++ trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorEvaluator.cs	(revision 1837)
@@ -40,6 +40,6 @@
       AddVariableInfo(new VariableInfo("SamplesEnd", "End index of samples in dataset to evaluate", typeof(IntData), VariableKind.In));
 
-      AddVariableInfo(new VariableInfo("SVMModel", "Represent the model learned by the SVM", typeof(ObjectData), VariableKind.In));
-      AddVariableInfo(new VariableInfo("SVMRangeTransform", "The applied transformation during the learning the model", typeof(ObjectData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("SVMModel", "Represent the model learned by the SVM", typeof(SVMModel), VariableKind.In));
+      AddVariableInfo(new VariableInfo("SVMRangeTransform", "The applied transformation during the learning the model", typeof(SVMRangeTransform), VariableKind.In));
 
       AddVariableInfo(new VariableInfo("Values", "Target vs predicted values", typeof(ItemList), VariableKind.New | VariableKind.Out));
@@ -54,6 +54,6 @@
       int end = GetVariableValue<IntData>("SamplesEnd", scope, true).Data;
 
-      SVM.Model model = (SVM.Model)GetVariableValue<ObjectData>("SVMModel", scope, true).Data;
-      SVM.RangeTransform rangeTransform = (SVM.RangeTransform)GetVariableValue<ObjectData>("SVMRangeTransform", scope, true).Data;
+      SVM.Model model = GetVariableValue<SVMModel>("SVMModel", scope, true).Data;
+      SVM.RangeTransform rangeTransform = GetVariableValue<SVMRangeTransform>("SVMRangeTransform", scope, true).Data;
 
       SVM.Problem problem = SVMHelper.CreateSVMProblem(dataset, allowedFeatures, targetVariable, start, end);
