Index: /trunk/sources/HeuristicLab.Visualization/ChartDataRowsModel.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/ChartDataRowsModel.cs	(revision 1384)
+++ /trunk/sources/HeuristicLab.Visualization/ChartDataRowsModel.cs	(revision 1385)
@@ -204,4 +204,8 @@
         node.AppendChild(columnElement);
       }
+
+      XmlNode labelProviderNode = document.ImportNode(labelProvider.GetLabelProviderXmlNode(), true);
+      node.AppendChild(labelProviderNode);
+
       return node;    
     }
@@ -211,24 +215,27 @@
 
       foreach (XmlNode dataRow in node.ChildNodes) {
-        XmlAttributeCollection attrs = dataRow.Attributes;
-        XmlAttribute rowIdAttr = (XmlAttribute)attrs.GetNamedItem("label");
-        string rowLabel = rowIdAttr.Value;
-        DataRow row = new DataRow();
-        row.Label = rowLabel;
-
-        string[] tokens = dataRow.InnerText.Split(';');
-        double[] data = new double[tokens.Length];
-        for (int i = 0; i < data.Length; i++) {
-          if (tokens[i].Length != 0) {
-            if (
-              double.TryParse(tokens[i], NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out data[i]) ==
-              false) {
-              throw new FormatException("Can't parse " + tokens[i] + " as double value.");
+        if (dataRow.Name.Equals("LabelProvider")) {
+          labelProvider = labelProvider.PopulateLabelProviderXmlNode(dataRow);
+        } else {
+          XmlAttributeCollection attrs = dataRow.Attributes;
+          XmlAttribute rowIdAttr = (XmlAttribute)attrs.GetNamedItem("label");
+          string rowLabel = rowIdAttr.Value;
+          DataRow row = new DataRow();
+          row.Label = rowLabel;
+
+          string[] tokens = dataRow.InnerText.Split(';');
+          double[] data = new double[tokens.Length];
+          for (int i = 0; i < data.Length; i++) {
+            if (tokens[i].Length != 0) {
+              if (
+                double.TryParse(tokens[i], NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out data[i]) ==
+                false) {
+                throw new FormatException("Can't parse " + tokens[i] + " as double value.");
+              }
             }
           }
-        }
-        row.AddValues(data);
-
-        AddDataRow(row);
+          row.AddValues(data);
+          AddDataRow(row);
+        }
       }
     }
Index: /trunk/sources/HeuristicLab.Visualization/LabelProvider/ContinuousLabelProvider.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/LabelProvider/ContinuousLabelProvider.cs	(revision 1384)
+++ /trunk/sources/HeuristicLab.Visualization/LabelProvider/ContinuousLabelProvider.cs	(revision 1385)
@@ -1,3 +1,4 @@
 using System.Globalization;
+using System.Xml;
 
 namespace HeuristicLab.Visualization.LabelProvider {
@@ -14,4 +15,24 @@
       return value.ToString(format, CultureInfo.InvariantCulture);
     }
+
+    public XmlNode GetLabelProviderXmlNode()
+    {
+      XmlDocument Xdoc = new XmlDocument();
+
+      XmlNode lblProvInfo = Xdoc.CreateNode(XmlNodeType.Element, "LabelProvider", null);
+      lblProvInfo.InnerText = "ContinuousLabelProvider";
+
+      XmlAttribute idFormat = Xdoc.CreateAttribute("format");
+      idFormat.Value = this.format;
+
+      lblProvInfo.Attributes.Append(idFormat);
+
+      return lblProvInfo;
+    }
+
+    public ILabelProvider PopulateLabelProviderXmlNode(XmlNode node) {
+      var labelProvider = new ContinuousLabelProvider(node.SelectSingleNode("//LabelProvider").Attributes[0].Value);
+      return labelProvider;
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.Visualization/LabelProvider/DiscreteLabelProvider.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/LabelProvider/DiscreteLabelProvider.cs	(revision 1384)
+++ /trunk/sources/HeuristicLab.Visualization/LabelProvider/DiscreteLabelProvider.cs	(revision 1385)
@@ -1,3 +1,4 @@
 using System;
+using System.Xml;
 
 namespace HeuristicLab.Visualization.LabelProvider {
@@ -12,4 +13,19 @@
         return string.Empty;
     }
+
+    public XmlNode GetLabelProviderXmlNode()
+    {
+      XmlDocument Xdoc = new XmlDocument();
+
+      XmlNode lblProvInfo = Xdoc.CreateNode(XmlNodeType.Element, "LabelProvider", null);
+      lblProvInfo.InnerText = "DiscreteLabelProvider";
+
+      return lblProvInfo;
+    }
+
+    public ILabelProvider PopulateLabelProviderXmlNode(XmlNode node) {
+      var labelProvider = new DiscreteLabelProvider();
+      return labelProvider;
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.Visualization/LabelProvider/ILabelProvider.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/LabelProvider/ILabelProvider.cs	(revision 1384)
+++ /trunk/sources/HeuristicLab.Visualization/LabelProvider/ILabelProvider.cs	(revision 1385)
@@ -1,5 +1,9 @@
+using System.Xml;
+
 namespace HeuristicLab.Visualization.LabelProvider {
   public interface ILabelProvider {
     string GetLabel(double value);
+    XmlNode GetLabelProviderXmlNode();
+    ILabelProvider PopulateLabelProviderXmlNode(XmlNode node);
   }
 }
Index: /trunk/sources/HeuristicLab.Visualization/LabelProvider/StringLabelProvider.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/LabelProvider/StringLabelProvider.cs	(revision 1384)
+++ /trunk/sources/HeuristicLab.Visualization/LabelProvider/StringLabelProvider.cs	(revision 1385)
@@ -2,4 +2,5 @@
 using System.Collections.Generic;
 using HeuristicLab.Visualization.LabelProvider;
+using System.Xml;
 
 namespace HeuristicLab.Visualization.LabelProvider {
@@ -26,4 +27,34 @@
         return string.Empty;
     }
+
+    public XmlNode GetLabelProviderXmlNode() {
+      XmlDocument Xdoc = new XmlDocument();
+
+      XmlNode lblProvInfo = Xdoc.CreateNode(XmlNodeType.Element, "LabelProvider", null);
+      lblProvInfo.InnerText = "StringLabelProvider";
+
+      foreach (KeyValuePair<int, string> pair in labels)
+      {
+        XmlNode strLbl = Xdoc.CreateNode(XmlNodeType.Element, "String", null);
+
+        XmlAttribute idStrLbl = Xdoc.CreateAttribute("id");
+        idStrLbl.Value = pair.Key.ToString();
+        strLbl.Attributes.Append(idStrLbl);
+
+        strLbl.InnerText = pair.Value;
+        lblProvInfo.AppendChild(strLbl);
+      }
+      return lblProvInfo;
+    }
+
+    public ILabelProvider PopulateLabelProviderXmlNode(XmlNode node) {
+      var labelProvider = new StringLabelProvider();
+
+      foreach (XmlNode strLbl in node.SelectNodes("//String"))
+      {
+        labelProvider.SetLabel(int.Parse(strLbl.Attributes[0].Value), strLbl.InnerText);
+      }
+      return labelProvider;
+    }
   }
 }
