Index: /trunk/sources/HeuristicLab.Visualization/3.2/AvgAggregator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/3.2/AvgAggregator.cs	(revision 1987)
+++ /trunk/sources/HeuristicLab.Visualization/3.2/AvgAggregator.cs	(revision 1988)
@@ -1,4 +1,5 @@
 ﻿using System;
 using System.Collections.Generic;
+using System.Xml;
 
 namespace HeuristicLab.Visualization {
@@ -147,4 +148,14 @@
     }
 
+    public override XmlNode ToXml(IDataRow row, XmlDocument document)
+    {
+      throw new System.NotImplementedException();
+    }
+
+    public override IDataRow FromXml(XmlNode xmlNode)
+    {
+      throw new System.NotImplementedException();
+    }
+
     #endregion
   }
Index: /trunk/sources/HeuristicLab.Visualization/3.2/AvgLineAggregator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/3.2/AvgLineAggregator.cs	(revision 1987)
+++ /trunk/sources/HeuristicLab.Visualization/3.2/AvgLineAggregator.cs	(revision 1988)
@@ -1,4 +1,5 @@
 ﻿using System;
 using System.Collections.Generic;
+using System.Xml;
 
 namespace HeuristicLab.Visualization {
@@ -158,4 +159,14 @@
     }
 
+    public override XmlNode ToXml(IDataRow row, XmlDocument document)
+    {
+      throw new System.NotImplementedException();
+    }
+
+    public override IDataRow FromXml(XmlNode xmlNode)
+    {
+      throw new System.NotImplementedException();
+    }
+
     #endregion
   }
Index: /trunk/sources/HeuristicLab.Visualization/3.2/ChartDataRowsModel.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/3.2/ChartDataRowsModel.cs	(revision 1987)
+++ /trunk/sources/HeuristicLab.Visualization/3.2/ChartDataRowsModel.cs	(revision 1988)
@@ -1,4 +1,5 @@
 ﻿using System;
 using System.Collections.Generic;
+using System.Drawing;
 using System.Globalization;
 using System.Xml;
@@ -16,5 +17,5 @@
     private ViewSettings viewSettings = new ViewSettings();
     private readonly XAxisDescriptor xAxisDescriptor = new XAxisDescriptor();
-    private readonly YAxisDescriptor defaultYAxisDescriptor = new YAxisDescriptor();
+    private YAxisDescriptor defaultYAxisDescriptor = new YAxisDescriptor();
     private readonly List<IDataRow> rows = new List<IDataRow>();
 
@@ -122,25 +123,31 @@
     public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
       XmlNode node = base.GetXmlNode(name, document, persistedObjects);
-
+      
+      List<YAxisDescriptor> yAxis = new List<YAxisDescriptor>();
+      yAxis.Add(defaultYAxisDescriptor);
       foreach (IDataRow row in rows) {
-        XmlNode columnElement = document.CreateNode(XmlNodeType.Element, "row", null);
-
-        XmlAttribute idAttr = document.CreateAttribute("label");
-        idAttr.Value = row.RowSettings.Label;
-        columnElement.Attributes.Append(idAttr);
-
-        StringBuilder builder = new StringBuilder();
-
-        for (int i = 0; i < row.Count; i++) {
-          if (i == 0) {
-            builder.Append(row[i].ToString(CultureInfo.InvariantCulture.NumberFormat));
-            //columnElement.InnerText += row[i].ToString(CultureInfo.InvariantCulture.NumberFormat);
-          } else {
-            builder.Append(";" + row[i].ToString(CultureInfo.InvariantCulture.NumberFormat));
-            //columnElement.InnerText += ";" + row[i].ToString(CultureInfo.InvariantCulture.NumberFormat);
-          }
-        }
-        columnElement.InnerText += builder.ToString();
-        node.AppendChild(columnElement);
+        XmlNode rowElement = row.ToXml(row, document);
+        
+        if (!yAxis.Contains(row.YAxis)) {
+          yAxis.Add(row.YAxis);
+        }
+        
+        node.AppendChild(rowElement);
+      }
+
+      foreach (YAxisDescriptor axis in yAxis) {
+        XmlNode yAxisElement = document.CreateNode(XmlNodeType.Element, "yAxis", null);
+
+        XmlAttribute attrLabel = document.CreateAttribute("label");
+        attrLabel.Value = axis.Label;
+        yAxisElement.Attributes.Append(attrLabel);
+
+        if (axis == defaultYAxisDescriptor) {
+          XmlAttribute attrDefault = document.CreateAttribute("default");
+          attrDefault.Value = "true";
+          yAxisElement.Attributes.Append(attrDefault);
+        }
+        node.AppendChild(yAxisElement);
+        
       }
 
@@ -148,19 +155,49 @@
       node.AppendChild(labelProviderNode);
 
-      return node;    
+      return node;
     }
 
     public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
       base.Populate(node, restoredObjects);
+
+      List<YAxisDescriptor> yAxis = new List<YAxisDescriptor>();
+      foreach (XmlNode dataRow in node.ChildNodes)
+      {
+        if (dataRow.Name.Equals("yAxis"))
+        {
+          XmlAttributeCollection attrs = dataRow.Attributes;
+
+          XmlAttribute attrYAxisLabel = (XmlAttribute)attrs.GetNamedItem("label");
+          string axisLabel = attrYAxisLabel.Value;
+          YAxisDescriptor axis = new YAxisDescriptor();
+          axis.Label = axisLabel;
+          yAxis.Add(axis);
+
+          XmlAttribute attrDefault = (XmlAttribute)attrs.GetNamedItem("default");
+          if (attrDefault != null) {
+            defaultYAxisDescriptor = axis;
+          }
+        }
+      }
 
       foreach (XmlNode dataRow in node.ChildNodes) {
         if (dataRow.Name.Equals("LabelProvider")) {
           XAxis.LabelProvider = XAxis.LabelProvider.PopulateLabelProviderXmlNode(dataRow);
-        } else {
+        } else if (dataRow.Name.Equals("row")) {
           XmlAttributeCollection attrs = dataRow.Attributes;
           XmlAttribute rowIdAttr = (XmlAttribute)attrs.GetNamedItem("label");
           string rowLabel = rowIdAttr.Value;
+          string rowColor = attrs.GetNamedItem("color").Value;
+
           DataRow row = new DataRow();
           row.RowSettings.Label = rowLabel;
+          row.RowSettings.Color = Color.FromName(rowColor);
+
+          string yAxisLabel = attrs.GetNamedItem("yAxis").Value;
+          foreach (YAxisDescriptor axis in yAxis) {
+            if (axis.Label.Equals(yAxisLabel)) {
+              row.YAxis = axis;
+            }
+          }
 
           string[] tokens = dataRow.InnerText.Split(';');
Index: /trunk/sources/HeuristicLab.Visualization/3.2/DataRow.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/3.2/DataRow.cs	(revision 1987)
+++ /trunk/sources/HeuristicLab.Visualization/3.2/DataRow.cs	(revision 1988)
@@ -2,4 +2,7 @@
 using System.Drawing;
 using System.Collections.Generic;
+using System.Globalization;
+using System.Text;
+using System.Xml;
 
 namespace HeuristicLab.Visualization {
@@ -174,4 +177,44 @@
     }
 
+    public override XmlNode ToXml(IDataRow row, XmlDocument document)
+    {
+      XmlNode columnElement = document.CreateNode(XmlNodeType.Element, "row", null);
+
+      XmlAttribute idAttr = document.CreateAttribute("label");
+      idAttr.Value = row.RowSettings.Label;
+      columnElement.Attributes.Append(idAttr);
+
+      XmlAttribute attrColor = document.CreateAttribute("color");
+      attrColor.Value = row.RowSettings.Color.Name;
+      columnElement.Attributes.Append(attrColor);
+
+      XmlAttribute attrYAxis = document.CreateAttribute("yAxis");
+      attrYAxis.Value = row.YAxis.Label;
+      columnElement.Attributes.Append(attrYAxis);
+
+      StringBuilder builder = new StringBuilder();
+
+      for (int i = 0; i < row.Count; i++)
+      {
+        if (i == 0)
+        {
+          builder.Append(row[i].ToString(CultureInfo.InvariantCulture.NumberFormat));
+          //columnElement.InnerText += row[i].ToString(CultureInfo.InvariantCulture.NumberFormat);
+        }
+        else
+        {
+          builder.Append(";" + row[i].ToString(CultureInfo.InvariantCulture.NumberFormat));
+          //columnElement.InnerText += ";" + row[i].ToString(CultureInfo.InvariantCulture.NumberFormat);
+        }
+      }
+      columnElement.InnerText += builder.ToString();
+      return columnElement;
+    }
+
+    public override IDataRow FromXml(XmlNode xmlNode)
+    {
+      throw new System.NotImplementedException();
+    }
+
     private void UpdateMinMaxValue(double newValue, int oldValueIndex) {
       if (minValue != dataRow[oldValueIndex] && maxValue != dataRow[oldValueIndex])
Index: /trunk/sources/HeuristicLab.Visualization/3.2/DataRowBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/3.2/DataRowBase.cs	(revision 1987)
+++ /trunk/sources/HeuristicLab.Visualization/3.2/DataRowBase.cs	(revision 1988)
@@ -1,2 +1,3 @@
+using System.Xml;
 using HeuristicLab.Visualization.Options;
 
@@ -128,4 +129,8 @@
     public abstract double MaxValue { get; }
 
+    public abstract XmlNode ToXml(IDataRow row, XmlDocument document);
+    public abstract IDataRow FromXml(XmlNode xmlNode);
+   
+
     public event ValuesChangedHandler ValuesChanged;
 
Index: /trunk/sources/HeuristicLab.Visualization/3.2/FloatingAvgAggregator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/3.2/FloatingAvgAggregator.cs	(revision 1987)
+++ /trunk/sources/HeuristicLab.Visualization/3.2/FloatingAvgAggregator.cs	(revision 1988)
@@ -1,4 +1,5 @@
 ﻿using System;
 using System.Collections.Generic;
+using System.Xml;
 
 namespace HeuristicLab.Visualization {
@@ -181,4 +182,14 @@
     }
 
+    public override XmlNode ToXml(IDataRow row, XmlDocument document)
+    {
+      throw new System.NotImplementedException();
+    }
+
+    public override IDataRow FromXml(XmlNode xmlNode)
+    {
+      throw new System.NotImplementedException();
+    }
+
     #endregion
   }
Index: /trunk/sources/HeuristicLab.Visualization/3.2/IDataRow.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/3.2/IDataRow.cs	(revision 1987)
+++ /trunk/sources/HeuristicLab.Visualization/3.2/IDataRow.cs	(revision 1988)
@@ -1,2 +1,3 @@
+using System.Xml;
 using HeuristicLab.Visualization.Options;
 
@@ -35,4 +36,7 @@
     double MaxValue { get; }
 
+    XmlNode ToXml(IDataRow row, XmlDocument document);
+    IDataRow FromXml(XmlNode xmlNode);
+
     event ValuesChangedHandler ValuesChanged;
     event ValueChangedHandler ValueChanged;
Index: /trunk/sources/HeuristicLab.Visualization/3.2/MaxAggregator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/3.2/MaxAggregator.cs	(revision 1987)
+++ /trunk/sources/HeuristicLab.Visualization/3.2/MaxAggregator.cs	(revision 1988)
@@ -1,4 +1,5 @@
 ﻿using System;
 using System.Collections.Generic;
+using System.Xml;
 
 namespace HeuristicLab.Visualization {
@@ -115,4 +116,14 @@
     }
 
+    public override XmlNode ToXml(IDataRow row, XmlDocument document)
+    {
+      throw new System.NotImplementedException();
+    }
+
+    public override IDataRow FromXml(XmlNode xmlNode)
+    {
+      throw new System.NotImplementedException();
+    }
+
     #endregion
   }
Index: /trunk/sources/HeuristicLab.Visualization/3.2/MinAggregator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/3.2/MinAggregator.cs	(revision 1987)
+++ /trunk/sources/HeuristicLab.Visualization/3.2/MinAggregator.cs	(revision 1988)
@@ -1,4 +1,5 @@
 ﻿using System;
 using System.Collections.Generic;
+using System.Xml;
 
 namespace HeuristicLab.Visualization {
@@ -116,4 +117,14 @@
     }
 
+    public override XmlNode ToXml(IDataRow row, XmlDocument document)
+    {
+      throw new System.NotImplementedException();
+    }
+
+    public override IDataRow FromXml(XmlNode xmlNode)
+    {
+      throw new System.NotImplementedException();
+    }
+
     #endregion
   }
