Index: /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableView.cs
===================================================================
--- /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableView.cs	(revision 6019)
+++ /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableView.cs	(revision 6020)
@@ -164,4 +164,9 @@
       series.BorderWidth = 1;
       series.BorderDashStyle = ChartDashStyle.Solid;
+      series.BorderColor = Color.Empty;
+
+      if (row.VisualProperties.Color != Color.Empty)
+        series.Color = row.VisualProperties.Color;
+      else series.Color = Color.Empty;
 
       switch (row.VisualProperties.ChartType) {
@@ -172,4 +177,5 @@
           break;
         case DataRowVisualProperties.DataRowChartType.Bars:
+          // Bar is incompatible with anything but Bar and StackedBar*
           if (!chart.Series.Any(x => x.ChartType != SeriesChartType.Bar && x.ChartType != SeriesChartType.StackedBar && x.ChartType != SeriesChartType.StackedBar100))
             series.ChartType = SeriesChartType.Bar;
@@ -188,4 +194,7 @@
           series.ChartType = SeriesChartType.Column;
           series.SetCustomProperty("PointWidth", "1");
+          if (!series.Color.IsEmpty && series.Color.GetBrightness() < 0.25)
+            series.BorderColor = Color.White;
+          else series.BorderColor = Color.Black;
           break;
         default:
@@ -195,15 +204,37 @@
       series.YAxisType = row.VisualProperties.SecondYAxis ? AxisType.Secondary : AxisType.Primary;
       series.XAxisType = row.VisualProperties.SecondXAxis ? AxisType.Secondary : AxisType.Primary;
-      if (row.VisualProperties.Color != Color.Empty)
-        series.Color = row.VisualProperties.Color;
-      else series.Color = Color.Empty;
       series.ToolTip = row.Name + " X = #INDEX, Y = #VAL";
     }
 
     private void ConfigureChartArea(ChartArea area) {
+      if (Content.VisualProperties.TitleFont != null)
+        chart.Titles[0].Font = Content.VisualProperties.TitleFont;
+      if (!Content.VisualProperties.TitleColor.IsEmpty)
+        chart.Titles[0].ForeColor = Content.VisualProperties.TitleColor;
+
+      if (Content.VisualProperties.AxisTitleFont != null)
+        area.AxisX.TitleFont = Content.VisualProperties.AxisTitleFont;
+      if (!Content.VisualProperties.AxisTitleColor.IsEmpty)
+        area.AxisX.TitleForeColor = Content.VisualProperties.AxisTitleColor;
       area.AxisX.Title = Content.VisualProperties.XAxisTitle;
+
+      if (Content.VisualProperties.AxisTitleFont != null)
+        area.AxisX2.TitleFont = Content.VisualProperties.AxisTitleFont;
+      if (!Content.VisualProperties.AxisTitleColor.IsEmpty)
+        area.AxisX2.TitleForeColor = Content.VisualProperties.AxisTitleColor;
       area.AxisX2.Title = Content.VisualProperties.SecondXAxisTitle;
+
+      if (Content.VisualProperties.AxisTitleFont != null)
+        area.AxisY.TitleFont = Content.VisualProperties.AxisTitleFont;
+      if (!Content.VisualProperties.AxisTitleColor.IsEmpty)
+        area.AxisY.TitleForeColor = Content.VisualProperties.AxisTitleColor;
       area.AxisY.Title = Content.VisualProperties.YAxisTitle;
+
+      if (Content.VisualProperties.AxisTitleFont != null)
+        area.AxisY2.TitleFont = Content.VisualProperties.AxisTitleFont;
+      if (!Content.VisualProperties.AxisTitleColor.IsEmpty)
+        area.AxisY2.TitleForeColor = Content.VisualProperties.AxisTitleColor;
       area.AxisY2.Title = Content.VisualProperties.SecondYAxisTitle;
+
       area.RecalculateAxesScale();
       area.AxisX.Minimum = Content.VisualProperties.XAxisMinimumFixedValue;
Index: /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesControl.Designer.cs
===================================================================
--- /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesControl.Designer.cs	(revision 6019)
+++ /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesControl.Designer.cs	(revision 6020)
@@ -77,4 +77,11 @@
       this.xAxisSecondaryMinimumAutoRadioButton = new System.Windows.Forms.RadioButton();
       this.axisTabControl = new System.Windows.Forms.TabControl();
+      this.mainTabPage = new System.Windows.Forms.TabPage();
+      this.axisFontLabel = new System.Windows.Forms.Label();
+      this.titleFontLabel = new System.Windows.Forms.Label();
+      this.axisFontButton = new System.Windows.Forms.Button();
+      this.label3 = new System.Windows.Forms.Label();
+      this.titleFontButton = new System.Windows.Forms.Button();
+      this.label2 = new System.Windows.Forms.Label();
       this.xAxisTabPage = new System.Windows.Forms.TabPage();
       this.yAxisTabPage = new System.Windows.Forms.TabPage();
@@ -102,4 +109,6 @@
       this.yAxisPrimaryMinimumAutoRadioButton = new System.Windows.Forms.RadioButton();
       this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
+      this.titleFontDialog = new System.Windows.Forms.FontDialog();
+      this.axisFontDialog = new System.Windows.Forms.FontDialog();
       this.xAxisPrimaryGroupBox.SuspendLayout();
       this.xAxisPrimaryMaximumPanel.SuspendLayout();
@@ -109,4 +118,5 @@
       this.xAxisSecondaryMinimumPanel.SuspendLayout();
       this.axisTabControl.SuspendLayout();
+      this.mainTabPage.SuspendLayout();
       this.xAxisTabPage.SuspendLayout();
       this.yAxisTabPage.SuspendLayout();
@@ -435,4 +445,5 @@
                   | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
+      this.axisTabControl.Controls.Add(this.mainTabPage);
       this.axisTabControl.Controls.Add(this.xAxisTabPage);
       this.axisTabControl.Controls.Add(this.yAxisTabPage);
@@ -442,4 +453,75 @@
       this.axisTabControl.Size = new System.Drawing.Size(336, 257);
       this.axisTabControl.TabIndex = 0;
+      // 
+      // mainTabPage
+      // 
+      this.mainTabPage.Controls.Add(this.axisFontLabel);
+      this.mainTabPage.Controls.Add(this.titleFontLabel);
+      this.mainTabPage.Controls.Add(this.axisFontButton);
+      this.mainTabPage.Controls.Add(this.label3);
+      this.mainTabPage.Controls.Add(this.titleFontButton);
+      this.mainTabPage.Controls.Add(this.label2);
+      this.mainTabPage.Location = new System.Drawing.Point(4, 22);
+      this.mainTabPage.Name = "mainTabPage";
+      this.mainTabPage.Size = new System.Drawing.Size(328, 231);
+      this.mainTabPage.TabIndex = 2;
+      this.mainTabPage.Text = "Main";
+      this.mainTabPage.UseVisualStyleBackColor = true;
+      // 
+      // axisFontLabel
+      // 
+      this.axisFontLabel.AutoSize = true;
+      this.axisFontLabel.Location = new System.Drawing.Point(101, 44);
+      this.axisFontLabel.Name = "axisFontLabel";
+      this.axisFontLabel.Size = new System.Drawing.Size(13, 13);
+      this.axisFontLabel.TabIndex = 2;
+      this.axisFontLabel.Text = "()";
+      // 
+      // titleFontLabel
+      // 
+      this.titleFontLabel.AutoSize = true;
+      this.titleFontLabel.Location = new System.Drawing.Point(101, 15);
+      this.titleFontLabel.Name = "titleFontLabel";
+      this.titleFontLabel.Size = new System.Drawing.Size(13, 13);
+      this.titleFontLabel.TabIndex = 2;
+      this.titleFontLabel.Text = "()";
+      // 
+      // axisFontButton
+      // 
+      this.axisFontButton.Location = new System.Drawing.Point(69, 39);
+      this.axisFontButton.Name = "axisFontButton";
+      this.axisFontButton.Size = new System.Drawing.Size(26, 23);
+      this.axisFontButton.TabIndex = 1;
+      this.axisFontButton.Text = "...";
+      this.axisFontButton.UseVisualStyleBackColor = true;
+      this.axisFontButton.Click += new System.EventHandler(this.axisFontButton_Click);
+      // 
+      // label3
+      // 
+      this.label3.AutoSize = true;
+      this.label3.Location = new System.Drawing.Point(9, 44);
+      this.label3.Name = "label3";
+      this.label3.Size = new System.Drawing.Size(53, 13);
+      this.label3.TabIndex = 0;
+      this.label3.Text = "Axis Font:";
+      // 
+      // titleFontButton
+      // 
+      this.titleFontButton.Location = new System.Drawing.Point(69, 10);
+      this.titleFontButton.Name = "titleFontButton";
+      this.titleFontButton.Size = new System.Drawing.Size(26, 23);
+      this.titleFontButton.TabIndex = 1;
+      this.titleFontButton.Text = "...";
+      this.titleFontButton.UseVisualStyleBackColor = true;
+      this.titleFontButton.Click += new System.EventHandler(this.titleFontButton_Click);
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(9, 15);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(54, 13);
+      this.label2.TabIndex = 0;
+      this.label2.Text = "Title Font:";
       // 
       // xAxisTabPage
@@ -704,4 +786,9 @@
       // 
       this.errorProvider.ContainerControl = this;
+      // 
+      // titleFontDialog
+      // 
+      this.titleFontDialog.FontMustExist = true;
+      this.titleFontDialog.ShowColor = true;
       // 
       // DataTableVisualPropertiesControl
@@ -725,4 +812,6 @@
       this.xAxisSecondaryMinimumPanel.PerformLayout();
       this.axisTabControl.ResumeLayout(false);
+      this.mainTabPage.ResumeLayout(false);
+      this.mainTabPage.PerformLayout();
       this.xAxisTabPage.ResumeLayout(false);
       this.yAxisTabPage.ResumeLayout(false);
@@ -802,4 +891,13 @@
     private System.Windows.Forms.RadioButton yAxisPrimaryMinimumAutoRadioButton;
     private System.Windows.Forms.ErrorProvider errorProvider;
+    private System.Windows.Forms.TabPage mainTabPage;
+    private System.Windows.Forms.FontDialog titleFontDialog;
+    private System.Windows.Forms.Button titleFontButton;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.Button axisFontButton;
+    private System.Windows.Forms.Label label3;
+    private System.Windows.Forms.Label axisFontLabel;
+    private System.Windows.Forms.Label titleFontLabel;
+    private System.Windows.Forms.FontDialog axisFontDialog;
   }
 }
Index: /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesControl.cs
===================================================================
--- /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesControl.cs	(revision 6019)
+++ /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesControl.cs	(revision 6020)
@@ -20,4 +20,5 @@
 #endregion
 
+using System.Drawing;
 using System.Windows.Forms;
 using HeuristicLab.MainForm;
@@ -47,4 +48,7 @@
       try {
         if (Content == null) {
+          titleFontLabel.Text = "(  )";
+          axisFontLabel.Text = "(  )";
+
           xAxisPrimaryTitleTextBox.Text = string.Empty;
           xAxisPrimaryMinimumAutoRadioButton.Checked = false;
@@ -77,4 +81,7 @@
           yAxisSecondaryMaximumFixedTextBox.Text = string.Empty;
         } else {
+          titleFontLabel.Text = "( " + FormatFont(Content.TitleFont) + " )";
+          axisFontLabel.Text = "( " + FormatFont(Content.AxisTitleFont) + " )";
+
           xAxisPrimaryTitleTextBox.Text = Content.XAxisTitle;
           xAxisPrimaryMinimumAutoRadioButton.Checked = Content.XAxisMinimumAuto;
@@ -348,5 +355,30 @@
       }
     }
+
+    private void titleFontButton_Click(object sender, System.EventArgs e) {
+      titleFontDialog.Font = Content.TitleFont;
+      titleFontDialog.Color = Content.TitleColor;
+      if (titleFontDialog.ShowDialog() == DialogResult.OK) {
+        Content.TitleFont = titleFontDialog.Font;
+        Content.TitleColor = titleFontDialog.Color;
+        titleFontLabel.Text = "( " + FormatFont(Content.TitleFont) + " )";
+      }
+    }
+
+    private void axisFontButton_Click(object sender, System.EventArgs e) {
+      axisFontDialog.Font = Content.AxisTitleFont;
+      axisFontDialog.Color = Content.AxisTitleColor;
+      if (axisFontDialog.ShowDialog() == DialogResult.OK) {
+        Content.AxisTitleFont = axisFontDialog.Font;
+        Content.AxisTitleColor = axisFontDialog.Color;
+        axisFontLabel.Text = "( " + FormatFont(Content.AxisTitleFont) + " )";
+      }
+    }
     #endregion
+
+    private string FormatFont(Font f) {
+      if (f == null) return string.Empty;
+      else return f.Name + ", " + f.SizeInPoints.ToString() + "pt, " + f.Style.ToString();
+    }
   }
 }
Index: /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesControl.resx
===================================================================
--- /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesControl.resx	(revision 6019)
+++ /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesControl.resx	(revision 6020)
@@ -121,3 +121,9 @@
     <value>17, 17</value>
   </metadata>
+  <metadata name="titleFontDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>140, 17</value>
+  </metadata>
+  <metadata name="axisFontDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>272, 17</value>
+  </metadata>
 </root>
Index: /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesDialog.cs
===================================================================
--- /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesDialog.cs	(revision 6019)
+++ /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesDialog.cs	(revision 6020)
@@ -21,10 +21,11 @@
 
 using System.Collections.Generic;
+using System.Linq;
 using System.Windows.Forms;
 using HeuristicLab.Common.Resources;
-using HeuristicLab.Core;
 
 namespace HeuristicLab.Analysis.Views {
   public partial class DataTableVisualPropertiesDialog : Form {
+    protected bool SuppressEvents { get; set; }
     protected DataTable Content { get; private set; }
     private DataTableVisualProperties originalDataTableVPs;
@@ -58,7 +59,12 @@
 
     private void seriesListView_SelectedIndexChanged(object sender, System.EventArgs e) {
-      if (seriesListView.SelectedItems.Count == 0) return;
-      string rowName = seriesListView.SelectedItems[0].Text;
-      dataRowVisualPropertiesControl.Content = Content.Rows[rowName].VisualProperties;
+      if (!SuppressEvents) {
+        if (seriesListView.SelectedItems.Count != 1) {
+          dataRowVisualPropertiesControl.Content = null;
+        } else {
+          string rowName = seriesListView.SelectedItems[0].Text;
+          dataRowVisualPropertiesControl.Content = Content.Rows[rowName].VisualProperties;
+        }
+      }
     }
 
@@ -80,12 +86,17 @@
       if (seriesListView.SelectedIndices.Count == 1 && seriesListView.SelectedIndices[0] > 0) {
         int index = seriesListView.SelectedIndices[0];
-        seriesListView.BeginUpdate();
-        ListViewItem selectedSeriesItem = seriesListView.Items[index];
-        seriesListView.Items.RemoveAt(index);
-        ListViewItem temp = seriesListView.Items[index - 1];
-        seriesListView.Items.RemoveAt(index - 1);
-        seriesListView.Items.Insert(index - 1, selectedSeriesItem);
-        seriesListView.Items.Insert(index, temp);
-        seriesListView.EndUpdate();
+        SuppressEvents = true;
+        try {
+          seriesListView.BeginUpdate();
+          ListViewItem selectedSeriesItem = seriesListView.Items[index];
+          seriesListView.Items.RemoveAt(index);
+          ListViewItem temp = seriesListView.Items[index - 1];
+          seriesListView.Items.RemoveAt(index - 1);
+          seriesListView.Items.Insert(index - 1, selectedSeriesItem);
+          seriesListView.Items.Insert(index, temp);
+          seriesListView.SelectedIndices.Clear();
+          seriesListView.EndUpdate();
+        } finally { SuppressEvents = false; }
+        seriesListView.SelectedIndices.Add(index - 1);
         UpdateAllSeriesPositions();
       }
@@ -95,12 +106,17 @@
       if (seriesListView.SelectedIndices.Count == 1 && seriesListView.SelectedIndices[0] < seriesListView.Items.Count - 1) {
         int index = seriesListView.SelectedIndices[0];
-        seriesListView.BeginUpdate();
-        ListViewItem temp = seriesListView.Items[index + 1];
-        seriesListView.Items.RemoveAt(index + 1);
-        ListViewItem selectedSeriesItem = seriesListView.Items[index];
-        seriesListView.Items.RemoveAt(index);
-        seriesListView.Items.Insert(index, temp);
-        seriesListView.Items.Insert(index + 1, selectedSeriesItem);
-        seriesListView.EndUpdate();
+        SuppressEvents = true;
+        try {
+          seriesListView.BeginUpdate();
+          ListViewItem temp = seriesListView.Items[index + 1];
+          seriesListView.Items.RemoveAt(index + 1);
+          ListViewItem selectedSeriesItem = seriesListView.Items[index];
+          seriesListView.Items.RemoveAt(index);
+          seriesListView.Items.Insert(index, temp);
+          seriesListView.Items.Insert(index + 1, selectedSeriesItem);
+          seriesListView.SelectedIndices.Clear();
+          seriesListView.EndUpdate();
+        } finally { SuppressEvents = false; }
+        seriesListView.SelectedIndices.Add(index + 1);
         UpdateAllSeriesPositions();
       }
@@ -109,5 +125,5 @@
     #region Helpers
     private void UpdateAllSeriesPositions() {
-      NamedItemCollection<DataRow> rows = (NamedItemCollection<DataRow>)Content.Rows.Clone();
+      Dictionary<string, DataRow> rows = Content.Rows.ToDictionary(x => x.Name);
       Content.Rows.Clear();
       for (int i = 0; i < seriesListView.Items.Count; i++) {
Index: /branches/histogram/HeuristicLab.Analysis/3.3/DataVisualization/DataTableVisualProperties.cs
===================================================================
--- /branches/histogram/HeuristicLab.Analysis/3.3/DataVisualization/DataTableVisualProperties.cs	(revision 6019)
+++ /branches/histogram/HeuristicLab.Analysis/3.3/DataVisualization/DataTableVisualProperties.cs	(revision 6020)
@@ -21,4 +21,5 @@
 
 using System.ComponentModel;
+using System.Drawing;
 using HeuristicLab.Common;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -30,4 +31,46 @@
   [StorableClass]
   public class DataTableVisualProperties : DeepCloneable, INotifyPropertyChanged {
+    private Font titleFont;
+    public Font TitleFont {
+      get { return titleFont; }
+      set {
+        if (titleFont == null || value == null
+          || titleFont.Name != value.Name || titleFont.Size != value.Size || titleFont.Style != value.Style) {
+          titleFont = value;
+          OnPropertyChanged("TitleFont");
+        }
+      }
+    }
+    private Color titleColor;
+    public Color TitleColor {
+      get { return titleColor; }
+      set {
+        if (titleColor != value) {
+          titleColor = value;
+          OnPropertyChanged("TitleFontColor");
+        }
+      }
+    }
+    private Font axisTitleFont;
+    public Font AxisTitleFont {
+      get { return axisTitleFont; }
+      set {
+        if (axisTitleFont == null || axisTitleFont == null
+          || axisTitleFont.Name != value.Name || axisTitleFont.Size != value.Size || axisTitleFont.Style != value.Style) {
+          axisTitleFont = value;
+          OnPropertyChanged("AxisTitleFont");
+        }
+      }
+    }
+    private Color axisTitleColor;
+    public Color AxisTitleColor {
+      get { return axisTitleColor; }
+      set {
+        if (axisTitleColor != value) {
+          axisTitleColor = value;
+          OnPropertyChanged("AxisTitleColor");
+        }
+      }
+    }
     private string xAxisTitle;
     public string XAxisTitle {
@@ -263,4 +306,24 @@
 
     #region Persistence Properties
+    [Storable(Name = "TitleFont")]
+    private Font StorableTitleFont {
+      get { return titleFont; }
+      set { titleFont = value; }
+    }
+    [Storable(Name = "TitleColor")]
+    private Color StorableTitleColor {
+      get { return titleColor; }
+      set { titleColor = value; }
+    }
+    [Storable(Name = "AxisTitleFont")]
+    private Font StorableAxisTitleFont {
+      get { return axisTitleFont; }
+      set { axisTitleFont = value; }
+    }
+    [Storable(Name = "AxisTitleColor")]
+    private Color StorableAxisTitleColor {
+      get { return axisTitleColor; }
+      set { axisTitleColor = value; }
+    }
     [Storable(Name = "XAxisTitle")]
     private string StorableXAxisTitle {
@@ -369,4 +432,8 @@
     protected DataTableVisualProperties(DataTableVisualProperties original, Cloner cloner)
       : base(original, cloner) {
+      if (original.titleFont != null)
+        this.titleFont = (Font)original.titleFont.Clone();
+      if (original.axisTitleFont != null)
+        this.axisTitleFont = (Font)original.axisTitleFont.Clone();
       this.xAxisTitle = original.xAxisTitle;
       this.yAxisTitle = original.yAxisTitle;
@@ -391,4 +458,6 @@
     }
     public DataTableVisualProperties() {
+      titleColor = Color.Black;
+      axisTitleColor = Color.Black;
       this.xAxisTitle = string.Empty;
       this.yAxisTitle = string.Empty;
Index: /branches/histogram/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/System.Drawing/Font2XmlSerializer.cs
===================================================================
--- /branches/histogram/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/System.Drawing/Font2XmlSerializer.cs	(revision 6020)
+++ /branches/histogram/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/System.Drawing/Font2XmlSerializer.cs	(revision 6020)
@@ -0,0 +1,55 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Drawing;
+using System.Xml;
+
+namespace HeuristicLab.Persistence.Default.Xml.Primitive {
+  internal sealed class Font2XmlSerializer : PrimitiveXmlSerializerBase<Font> {
+
+    public override XmlString Format(Font font) {
+      XmlDocument doc = new XmlDocument();
+      XmlNode fontNode = doc.CreateElement("Font");
+      fontNode.Attributes.Append(doc.CreateAttribute("Name"));
+      fontNode.Attributes.Append(doc.CreateAttribute("Size"));
+      fontNode.Attributes.Append(doc.CreateAttribute("Style"));
+      if (font != null) {
+        fontNode.Attributes["Name"].Value = font.Name;
+        fontNode.Attributes["Size"].Value = font.Size.ToString();
+        fontNode.Attributes["Style"].Value = font.Style.ToString("d");
+      }
+      return new XmlString(fontNode.OuterXml);
+    }
+
+    public override Font Parse(XmlString fontData) {
+      XmlTextReader tr = new XmlTextReader(fontData.Data, XmlNodeType.Element, null);
+      if (!tr.Read() || tr.Name != "Font") return null;
+      string name = tr.GetAttribute("Name");
+      if (string.IsNullOrEmpty(name)) return null;
+      float size = 12.0f;
+      if (!float.TryParse(tr.GetAttribute("Size"), out size)) return null;
+      FontStyle style = FontStyle.Regular;
+      if (!Enum.TryParse<FontStyle>(tr.GetAttribute("Style"), out style)) return null;
+      return new Font(name, size, style);
+    }
+  }
+}
Index: /branches/histogram/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj
===================================================================
--- /branches/histogram/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 6019)
+++ /branches/histogram/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 6020)
@@ -208,4 +208,5 @@
     <Compile Include="Default\Xml\Primitive\SimpleNumber2XmlSerializerBase.cs" />
     <Compile Include="Default\Xml\Primitive\String2XmlSerializer.cs" />
+    <Compile Include="Default\Xml\Primitive\System.Drawing\Font2XmlSerializer.cs" />
     <Compile Include="Default\Xml\Primitive\TimeSpan2XmlSerializer.cs" />
     <Compile Include="Default\Xml\Primitive\UInt2XmlSerializer.cs" />
