Index: branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/Evaluators/OnlineMeanFractionalDistanceEvaluator.cs
===================================================================
--- branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/Evaluators/OnlineMeanFractionalDistanceEvaluator.cs	(revision 5275)
+++ branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/Evaluators/OnlineMeanFractionalDistanceEvaluator.cs	(revision 5275)
@@ -0,0 +1,50 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Problems.DataAnalysis.Evaluators;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Parameters;
+
+namespace HeuristicLab.Problems.DataAnalysis.MultiVariate.Evaluators {
+  public class OnlineMeanFractionalDistanceEvaluator : IMultiVariateOnlineEvaluator {
+    private OnlineMeanAndVarianceCalculator meanEvaluator;
+    private readonly double d;
+    public OnlineMeanFractionalDistanceEvaluator(double d) {
+      this.d = d;
+      meanEvaluator = new OnlineMeanAndVarianceCalculator();
+      Reset();
+    }
+
+    public double MeanFractionalDistance {
+      get { return meanEvaluator.Mean ; }
+    }
+
+    #region IMultiVariateOnlineEvaluator Members
+    public double Value {
+      get { return MeanFractionalDistance; }
+    }
+
+    public void Add(IEnumerable<double> original, IEnumerable<double> estimated) {
+      var originalEnumerator = original.GetEnumerator();
+      var estimatedEnumerator = estimated.GetEnumerator();
+      double sum = 0.0;
+      while (originalEnumerator.MoveNext() & estimatedEnumerator.MoveNext()) {
+        sum += Math.Pow(Math.Abs(originalEnumerator.Current - estimatedEnumerator.Current), 1.0 / d);
+      }
+      if (originalEnumerator.MoveNext() | estimatedEnumerator.MoveNext()) {
+        throw new ArgumentException("Number of elements in original and estimated does not match.");
+      }
+      double fracDist = Math.Pow(sum, d);
+      meanEvaluator.Add(fracDist);
+    }
+
+    public void Reset() {
+      meanEvaluator.Reset();
+    }
+
+    #endregion
+  }
+}
Index: branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/Evaluators/OnlineMeanMahalanobisDistanceEvaluator.cs
===================================================================
--- branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/Evaluators/OnlineMeanMahalanobisDistanceEvaluator.cs	(revision 5265)
+++ branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/Evaluators/OnlineMeanMahalanobisDistanceEvaluator.cs	(revision 5275)
@@ -60,5 +60,5 @@
         // calculate mahalanobis distance using covariance matrix
         // covMatrix^(-1) * diff => target
-        alglib.ablas.rmatrixmv(covMatrix.GetLength(0), covMatrix.GetLength(1), ref covMatrix, 0, 0, 0, ref diff, 0, ref target, 0);
+        alglib.ablas.rmatrixmv(covMatrix.GetLength(0), covMatrix.GetLength(1), covMatrix, 0, 0, 0, diff, 0, ref target, 0);
 
         // diff^T * (covMatrix^(-1) * diff) => sum
@@ -102,5 +102,5 @@
       int info = 0;
       alglib.matinv.matinvreport report = new alglib.matinv.matinvreport();
-      alglib.matinv.rmatrixinverse(ref covMatrix, covMatrix.GetLength(0), ref info, ref report);
+      alglib.matinv.rmatrixinverse(ref covMatrix, covMatrix.GetLength(0), ref info, report);
       if (info != 1) throw new InvalidOperationException("Can't invert covariance matrix.");
       diff = new double[samples.Length];
Index: branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/HeuristicLab.Problems.DataAnalysis.MultiVariate-3.3.csproj
===================================================================
--- branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/HeuristicLab.Problems.DataAnalysis.MultiVariate-3.3.csproj	(revision 5265)
+++ branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/HeuristicLab.Problems.DataAnalysis.MultiVariate-3.3.csproj	(revision 5275)
@@ -92,4 +92,46 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="ALGLIB-3.1.0">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\ALGLIB-3.1.0.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.ALGLIB-3.1.0">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.ALGLIB-3.1.0.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Operators-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Operators-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Optimization-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Parameters-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Random-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Random-3.3.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core">
@@ -110,4 +152,5 @@
     <None Include="HeuristicLabProblemsDataAnalysisMultiVariatePlugin.cs.frame" />
     <None Include="Properties\AssemblyInfo.frame" />
+    <Compile Include="Evaluators\OnlineMeanFractionalDistanceEvaluator.cs" />
     <Compile Include="Evaluators\OnlineMultiVariateEvaluator.cs" />
     <Compile Include="Evaluators\OnlineMeanMahalanobisDistanceEvaluator.cs" />
Index: branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/MultiVariateDataAnalysisProblem.cs
===================================================================
--- branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/MultiVariateDataAnalysisProblem.cs	(revision 5265)
+++ branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/MultiVariateDataAnalysisProblem.cs	(revision 5275)
@@ -54,4 +54,9 @@
     [StorableConstructor]
     protected MultiVariateDataAnalysisProblem(bool deserializing) : base(deserializing) { }
+    protected MultiVariateDataAnalysisProblem(MultiVariateDataAnalysisProblem original, Cloner cloner)
+      : base(original, cloner) {
+        RegisterParameterEvents();
+        RegisterParameterValueEvents();
+    }
     public MultiVariateDataAnalysisProblem()
       : base() {
@@ -90,8 +95,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      MultiVariateDataAnalysisProblem clone = (MultiVariateDataAnalysisProblem)base.Clone(cloner);
-      clone.RegisterParameterEvents();
-      clone.RegisterParameterValueEvents();
-      return clone;
+      return new MultiVariateDataAnalysisProblem(this, cloner);
     }
 
Index: branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/MultiVariateDataAnalysisProblemData.cs
===================================================================
--- branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/MultiVariateDataAnalysisProblemData.cs	(revision 5265)
+++ branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/MultiVariateDataAnalysisProblemData.cs	(revision 5275)
@@ -166,4 +166,12 @@
     #endregion
 
+
+    [StorableConstructor]
+    private MultiVariateDataAnalysisProblemData(bool deserializing) : base() { }
+    protected MultiVariateDataAnalysisProblemData(MultiVariateDataAnalysisProblemData original, Cloner cloner)
+      : base(original, cloner) {
+        RegisterParameterEventHandlers();
+        RegisterParameterValueEventHandlers();
+    }
     public MultiVariateDataAnalysisProblemData()
       : base() {
@@ -187,10 +195,10 @@
     }
 
-
-    [StorableConstructor]
-    private MultiVariateDataAnalysisProblemData(bool deserializing) : base() { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MultiVariateDataAnalysisProblemData(this, cloner);
+    }
 
     [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserializationHook() {
+    private void AfterDeserialization() {
       RegisterParameterEventHandlers();
       RegisterParameterValueEventHandlers();
@@ -395,28 +403,22 @@
 
     public virtual void ImportFromFile(string fileName) {
-      var csvFileParser = new CsvFileParser();
-      csvFileParser.Parse(fileName);
+      var tableFileParser = new TableFileParser();
+      tableFileParser.Parse(fileName);
       suppressEvents = true;
       Name = "Data imported from " + Path.GetFileName(fileName);
-      Dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
+      Dataset = new Dataset(tableFileParser.VariableNames, tableFileParser.Values);
       Dataset.Name = Path.GetFileName(fileName);
       var variableNames = Dataset.VariableNames.Select(x => new StringValue(x).AsReadOnly()).ToList();
       InputVariables = new CheckedItemList<StringValue>(variableNames).AsReadOnly();
       TargetVariables = new CheckedItemList<StringValue>(variableNames).AsReadOnly();
-      int middle = (int)(csvFileParser.Rows * 0.5);
+      int middle = (int)(tableFileParser.Rows * 0.5);
       TrainingSamplesStart = new IntValue(0);
       TrainingSamplesEnd = new IntValue(middle);
       TestSamplesStart = new IntValue(middle);
-      TestSamplesEnd = new IntValue(csvFileParser.Rows);
+      TestSamplesEnd = new IntValue(tableFileParser.Rows);
       suppressEvents = false;
       OnProblemDataChanged(EventArgs.Empty);
     }
 
-    public override IDeepCloneable Clone(Cloner cloner) {
-      MultiVariateDataAnalysisProblemData clone = (MultiVariateDataAnalysisProblemData)base.Clone(cloner);
-      clone.RegisterParameterEventHandlers();
-      clone.RegisterParameterValueEventHandlers();
-      return clone;
-    }
 
     public DataAnalysisProblemData ConvertToDataAnalysisProblemData(string targetVariable) {
Index: branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/Symbolic/MultiVariateExpressionGrammar.cs
===================================================================
--- branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/Symbolic/MultiVariateExpressionGrammar.cs	(revision 5265)
+++ branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate/3.3/Symbolic/MultiVariateExpressionGrammar.cs	(revision 5275)
@@ -37,6 +37,11 @@
     }
 
+    [StorableConstructor]
+    protected MultiVariateExpressionGrammar(bool deserializing) : base(deserializing) { }
+    protected MultiVariateExpressionGrammar(MultiVariateExpressionGrammar original, Cloner cloner)
+      : base(original, cloner) {
+        dimension = original.dimension;
+    }
     public MultiVariateExpressionGrammar() : this(2) { }
-
     public MultiVariateExpressionGrammar(int dimension)
       : base() {
@@ -50,5 +55,5 @@
 
       foreach (Symbol s in Symbols) {
-        if (s != StartSymbol)
+        if (s != StartSymbol) 
           for (int i = 0; i < n; i++) {
             SetAllowedChild(StartSymbol, s, i);
@@ -58,7 +63,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      MultiVariateExpressionGrammar clone = (MultiVariateExpressionGrammar)base.Clone(cloner);
-      clone.dimension = this.dimension;
-      return clone;
+      return new MultiVariateExpressionGrammar(this, cloner);
     }
   }
