Index: /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/1.6.3/LibSVM-1.6.3/Model.cs
===================================================================
--- /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/1.6.3/LibSVM-1.6.3/Model.cs	(revision 5691)
+++ /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/1.6.3/LibSVM-1.6.3/Model.cs	(revision 5692)
@@ -31,5 +31,4 @@
     private int _numberOfClasses;
     private int _supportVectorCount;
-    private int[] _supportVectorIndizes;
     private Node[][] _supportVectors;
     private double[][] _supportVectorCoefficients;
@@ -77,16 +76,4 @@
       set {
         _supportVectorCount = value;
-      }
-    }
-
-    /// <summary>
-    /// Indizes of support vectors identified in the training.
-    /// </summary>
-    public int[] SupportVectorIndizes {
-      get {
-        return _supportVectorIndizes;
-      }
-      set {
-        _supportVectorIndizes = value;
       }
     }
@@ -215,5 +202,4 @@
       model.ClassLabels = null;
       model.NumberOfSVPerClass = null;
-      model.SupportVectorIndizes = new int[0];
 
       bool headerFinished = false;
@@ -416,5 +402,5 @@
         output.Write("nr_sv");
         for (int i = 0; i < nr_class; i++)
-          output.Write(" " + model.NumberOfSVPerClass[i].ToString("r"));
+          output.Write(" " + model.NumberOfSVPerClass[i]);
         output.Write(Environment.NewLine);
       }
Index: /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/1.6.3/LibSVM-1.6.3/Solver.cs
===================================================================
--- /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/1.6.3/LibSVM-1.6.3/Solver.cs	(revision 5691)
+++ /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/1.6.3/LibSVM-1.6.3/Solver.cs	(revision 5692)
@@ -1460,5 +1460,4 @@
           if (Math.Abs(f.alpha[i]) > 0) ++nSV;
         model.SupportVectorCount = nSV;
-        model.SupportVectorIndizes = new int[nSV];
         model.SupportVectors = new Node[nSV][];
         model.SupportVectorCoefficients[0] = new double[nSV];
@@ -1468,5 +1467,4 @@
           if (Math.Abs(f.alpha[i]) > 0) {
             model.SupportVectors[j] = prob.X[i];
-            model.SupportVectorIndizes[j] = i;
             model.SupportVectorCoefficients[0][j] = f.alpha[i];
 
@@ -1596,10 +1594,8 @@
         model.SupportVectorCount = nnz;
         model.SupportVectors = new Node[nnz][];
-        model.SupportVectorIndizes = new int[nnz];
         p = 0;
         for (i = 0; i < l; i++) {
           if (nonzero[i]) {
             model.SupportVectors[p] = x[i];
-            model.SupportVectorIndizes[p] = i;
             p++;
           }
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/SupportVectorRegression/SupportVectorRegressionSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/SupportVectorRegression/SupportVectorRegressionSolution.cs	(revision 5691)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/SupportVectorRegression/SupportVectorRegressionSolution.cs	(revision 5692)
@@ -46,8 +46,4 @@
     }
 
-    public Dataset SupportVectors {
-      get { return CalculateSupportVectors(); }
-    }
-
     private List<double> estimatedValues;
     public override IEnumerable<double> EstimatedValues {
@@ -70,32 +66,44 @@
     }
 
+    public Dataset SupportVectors {
+      get {
+        int nCol = inputVariables.Count;
+        double[,] data = new double[Model.Model.SupportVectorCount, nCol];
+        int row = 0;
+        foreach (var sv in Model.SupportVectors) {
+          for (int col = 0; col < nCol; col++) {
+            data[row, col] = sv[col];
+          }
+          row++;
+        }
+        return new Dataset(inputVariables, data);
+      }
+    }
+
+    [Storable]
+    private List<string> inputVariables;
+
     [StorableConstructor]
     private SupportVectorRegressionSolution(bool deserializing) : base(deserializing) { }
-    private SupportVectorRegressionSolution(SupportVectorRegressionSolution original, Cloner cloner) : base(original, cloner) { }
+    private SupportVectorRegressionSolution(SupportVectorRegressionSolution original, Cloner cloner)
+      : base(original, cloner) {
+      this.inputVariables = new List<string>(original.inputVariables);
+    }
     public SupportVectorRegressionSolution() : base() { }
     public SupportVectorRegressionSolution(DataAnalysisProblemData problemData, SupportVectorMachineModel model, IEnumerable<string> inputVariables, double lowerEstimationLimit, double upperEstimationLimit)
       : base(problemData, lowerEstimationLimit, upperEstimationLimit) {
       this.Model = model;
+      this.inputVariables = new List<string>(inputVariables);
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      #region backwards compatibility
+      if (inputVariables == null) inputVariables = ProblemData.InputVariables.CheckedItems.Select(x => x.Value.Value).ToList();
+      #endregion
     }
 
     public override IDeepCloneable Clone(Cloner cloner) {
       return new SupportVectorRegressionSolution(this, cloner);
-    }
-
-    protected override void OnProblemDataChanged() {
-      Model.Model.SupportVectorIndizes = new int[0];
-      base.OnProblemDataChanged();
-    }
-
-    private Dataset CalculateSupportVectors() {
-      if (Model.Model.SupportVectorIndizes.Length == 0)
-        return new Dataset(new List<string>(), new double[0, 0]);
-
-      double[,] data = new double[Model.Model.SupportVectorIndizes.Length, ProblemData.Dataset.Columns];
-      for (int i = 0; i < Model.Model.SupportVectorIndizes.Length; i++) {
-        for (int column = 0; column < ProblemData.Dataset.Columns; column++)
-          data[i, column] = ProblemData.Dataset[Model.Model.SupportVectorIndizes[i], column];
-      }
-      return new Dataset(ProblemData.Dataset.VariableNames, data);
     }
 
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/SupportVectorMachine/SupportVectorMachineModel.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/SupportVectorMachine/SupportVectorMachineModel.cs	(revision 5691)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/SupportVectorMachine/SupportVectorMachineModel.cs	(revision 5692)
@@ -37,14 +37,4 @@
   [Item("SupportVectorMachineModel", "Represents a support vector machine model.")]
   public sealed class SupportVectorMachineModel : NamedItem, IDataAnalysisModel {
-    [StorableConstructor]
-    private SupportVectorMachineModel(bool deserializing) : base(deserializing) { }
-    private SupportVectorMachineModel(SupportVectorMachineModel original, Cloner cloner)
-      : base(original, cloner) {
-      // only using a shallow copy here! (gkronber)
-      this.model = original.model;
-      this.rangeTransform = original.rangeTransform;
-    }
-    public SupportVectorMachineModel() : base() { }
-
     private SVM.Model model;
     /// <summary>
@@ -77,4 +67,22 @@
     }
 
+    public IEnumerable<double[]> SupportVectors {
+      get {
+        return from sv in Model.SupportVectors
+               select (from svx in sv
+                       select svx.Value).ToArray();
+      }
+    }
+
+    [StorableConstructor]
+    private SupportVectorMachineModel(bool deserializing) : base(deserializing) { }
+    private SupportVectorMachineModel(SupportVectorMachineModel original, Cloner cloner)
+      : base(original, cloner) {
+      // only using a shallow copy here! (gkronber)
+      this.model = original.model;
+      this.rangeTransform = original.rangeTransform;
+    }
+    public SupportVectorMachineModel() : base() { }
+
     public IEnumerable<double> GetEstimatedValues(DataAnalysisProblemData problemData, int start, int end) {
       SVM.Problem problem = SupportVectorMachineUtil.CreateSvmProblem(problemData, Enumerable.Range(start, end - start));
@@ -96,10 +104,4 @@
 
     #region persistence
-    [Storable]
-    private int[] SupportVectorIndizes {
-      get { return this.Model.SupportVectorIndizes; }
-      set { this.Model.SupportVectorIndizes = value; }
-    }
-
     [Storable]
     private string ModelAsString {
