Index: branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis.Views/3.3/DataTableHistoryView.cs
===================================================================
--- branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis.Views/3.3/DataTableHistoryView.cs	(revision 16148)
+++ branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis.Views/3.3/DataTableHistoryView.cs	(revision 16149)
@@ -37,5 +37,5 @@
       DataTable current = viewHost.Content as DataTable;
       if (current == null) return;
-      using (DataTableVisualPropertiesDialog dialog = new DataTableVisualPropertiesDialog(current)) {
+      using (var dialog = new DataTableVisualPropertiesDialog<DataRow>(current)) {
         if (dialog.ShowDialog(this) != DialogResult.OK) return;
         HashSet<string> modifiedDisplayNames = new HashSet<string>(dialog.RowsWithModifiedDisplayNames);
Index: branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis.Views/3.3/DataTableView.cs
===================================================================
--- branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis.Views/3.3/DataTableView.cs	(revision 16148)
+++ branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis.Views/3.3/DataTableView.cs	(revision 16149)
@@ -128,5 +128,5 @@
     public void ShowConfiguration() {
       if (Content != null) {
-        using (var dialog = new DataTableVisualPropertiesDialog(Content)) {
+        using (var dialog = new DataTableVisualPropertiesDialog<DataRow>(Content)) {
           dialog.ShowDialog(this);
         }
Index: branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesDialog.Designer.cs
===================================================================
--- branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesDialog.Designer.cs	(revision 16148)
+++ branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesDialog.Designer.cs	(revision 16149)
@@ -21,5 +21,5 @@
 
 namespace HeuristicLab.Analysis.Views {
-  partial class DataTableVisualPropertiesDialog {
+  partial class DataTableVisualPropertiesDialog<TDataRow> {
     /// <summary>
     /// Required designer variable.
Index: branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesDialog.cs
===================================================================
--- branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesDialog.cs	(revision 16148)
+++ branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesDialog.cs	(revision 16149)
@@ -27,7 +27,7 @@
 
 namespace HeuristicLab.Analysis.Views {
-  public partial class DataTableVisualPropertiesDialog : Form {
+  public partial class DataTableVisualPropertiesDialog<TDataRow> : Form where TDataRow : class, IDataRow {
     protected bool SuppressEvents { get; set; }
-    protected DataTable Content { get; private set; }
+    protected IDataTable<TDataRow> Content { get; private set; }
     private DataTableVisualProperties originalDataTableVPs;
     private Dictionary<string, DataRowVisualProperties> originalDataRowVPs;
@@ -36,5 +36,5 @@
     public IEnumerable<string> RowsWithModifiedDisplayNames { get { return modifiedDisplayNames.AsEnumerable(); } }
 
-    public DataTableVisualPropertiesDialog(DataTable dataTable) {
+    public DataTableVisualPropertiesDialog(IDataTable<TDataRow> dataTable) {
       InitializeComponent();
       #region Prepare controls
@@ -51,5 +51,5 @@
       originalDataTableVPs = (DataTableVisualProperties)Content.VisualProperties.Clone();
       originalDataRowVPs = new Dictionary<string, DataRowVisualProperties>();
-      foreach (DataRow row in Content.Rows)
+      foreach (var row in Content.Rows)
         originalDataRowVPs.Add(row.Name, (DataRowVisualProperties)row.VisualProperties.Clone());
 
@@ -62,5 +62,5 @@
 
     private void RegisterContentEvents() {
-      foreach (DataRow row in Content.Rows) {
+      foreach (var row in Content.Rows) {
         row.VisualProperties.PropertyChanged += new PropertyChangedEventHandler(Row_VisualProperties_PropertyChanged);
       }
@@ -68,5 +68,5 @@
 
     private void DeregisterContentEvents() {
-      foreach (DataRow row in Content.Rows) {
+      foreach (var row in Content.Rows) {
         row.VisualProperties.PropertyChanged -= new PropertyChangedEventHandler(Row_VisualProperties_PropertyChanged);
       }
@@ -80,5 +80,5 @@
 
     private void Row_VisualProperties_PropertyChanged(object sender, PropertyChangedEventArgs e) {
-      foreach (DataRow row in Content.Rows) {
+      foreach (var row in Content.Rows) {
         if (e.PropertyName == "DisplayName" && row.VisualProperties == sender) {
           modifiedDisplayNames.Add(row.Name);
@@ -109,5 +109,5 @@
     private void cancelButton_Click(object sender, System.EventArgs e) {
       DialogResult = DialogResult.Cancel;
-      foreach (DataRow row in Content.Rows) {
+      foreach (var row in Content.Rows) {
         row.VisualProperties = originalDataRowVPs[row.Name];
       }
@@ -160,5 +160,5 @@
     private void FillSeriesListView() {
       seriesListView.SelectedIndices.Clear();
-      foreach (DataRow row in Content.Rows) {
+      foreach (var row in Content.Rows) {
         seriesListView.Items.Add(new ListViewItem(row.Name, 0));
       }
@@ -168,5 +168,5 @@
 
     private void UpdateAllSeriesPositions() {
-      Dictionary<string, DataRow> rows = Content.Rows.ToDictionary(x => x.Name);
+      var rows = Content.Rows.ToDictionary(x => x.Name);
       Content.Rows.Clear();
       for (int i = 0; i < seriesListView.Items.Count; i++) {
Index: branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis.Views/3.3/IndexedDataTableView.cs
===================================================================
--- branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis.Views/3.3/IndexedDataTableView.cs	(revision 16148)
+++ branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis.Views/3.3/IndexedDataTableView.cs	(revision 16149)
@@ -20,7 +20,4 @@
 #endregion
 
-using HeuristicLab.Collections;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
 using System;
 using System.Collections.Generic;
@@ -29,9 +26,12 @@
 using System.Windows.Forms;
 using System.Windows.Forms.DataVisualization.Charting;
+using HeuristicLab.Collections;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
 
 namespace HeuristicLab.Analysis.Views {
   [View("IndexedDataTable View")]
   [Content(typeof(IndexedDataTable<>), true)]
-  public partial class IndexedDataTableView<T> : NamedItemView {
+  public partial class IndexedDataTableView<T> : NamedItemView, IConfigureableView {
     protected List<Series> invisibleSeries;
     protected Dictionary<IObservableList<Tuple<T, double>>, IndexedDataRow<T>> valuesRowsTable;
@@ -131,4 +131,12 @@
       base.SetEnabledStateOfControls();
       chart.Enabled = Content != null;
+    }
+
+    public void ShowConfiguration() {
+      if (Content != null) {
+        using (var dialog = new DataTableVisualPropertiesDialog<IndexedDataRow<T>>(Content)) {
+          dialog.ShowDialog(this);
+        }
+      } else MessageBox.Show("Nothing to configure.");
     }
 
@@ -211,4 +219,6 @@
       if (Content.VisualProperties.TitleFont != null) chart.Titles[0].Font = Content.VisualProperties.TitleFont;
       if (!Content.VisualProperties.TitleColor.IsEmpty) chart.Titles[0].ForeColor = Content.VisualProperties.TitleColor;
+      chart.Titles[0].Text = Content.VisualProperties.Title;
+      chart.Titles[0].Visible = !string.IsNullOrEmpty(Content.VisualProperties.Title);
 
       if (Content.VisualProperties.AxisTitleFont != null) area.AxisX.TitleFont = Content.VisualProperties.AxisTitleFont;
Index: branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/DataVisualization/DataRow.cs
===================================================================
--- branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/DataVisualization/DataRow.cs	(revision 16148)
+++ branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/DataVisualization/DataRow.cs	(revision 16149)
@@ -34,5 +34,5 @@
   [Item("DataRow", "A row of data values.")]
   [StorableClass]
-  public class DataRow : NamedItem {
+  public class DataRow : NamedItem , IDataRow {
     private DataRowVisualProperties visualProperties;
     public DataRowVisualProperties VisualProperties {
Index: branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/DataVisualization/DataTable.cs
===================================================================
--- branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/DataVisualization/DataTable.cs	(revision 16148)
+++ branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/DataVisualization/DataTable.cs	(revision 16149)
@@ -37,5 +37,5 @@
   [Item("DataTable", "A table of data values.")]
   [StorableClass]
-  public class DataTable : NamedItem, IStringConvertibleMatrix {
+  public class DataTable : NamedItem, IStringConvertibleMatrix, IDataTable<DataRow> {
     public static new Image StaticItemImage {
       get { return HeuristicLab.Common.Resources.VSImageLibrary.Performance; }
Index: branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/DataVisualization/IndexedDataTable.cs
===================================================================
--- branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/DataVisualization/IndexedDataTable.cs	(revision 16148)
+++ branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/DataVisualization/IndexedDataTable.cs	(revision 16149)
@@ -34,5 +34,5 @@
   [Item("IndexedDataTable", "A data table where the points are also given with a certain index.")]
   [StorableClass]
-  public class IndexedDataTable<T> : NamedItem, IStringConvertibleMatrix {
+  public class IndexedDataTable<T> : NamedItem, IStringConvertibleMatrix, IDataTable<IndexedDataRow<T>> {
     public static new Image StaticItemImage {
       get { return HeuristicLab.Common.Resources.VSImageLibrary.Performance; }
Index: branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/DataVisualization/Interfaces/IDataRow.cs
===================================================================
--- branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/DataVisualization/Interfaces/IDataRow.cs	(revision 16149)
+++ branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/DataVisualization/Interfaces/IDataRow.cs	(revision 16149)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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 HeuristicLab.Core;
+
+namespace HeuristicLab.Analysis {
+  public interface IDataRow : INamedItem {
+    DataRowVisualProperties VisualProperties { get; set; }
+  }
+}
Index: branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/DataVisualization/Interfaces/IDataTable.cs
===================================================================
--- branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/DataVisualization/Interfaces/IDataTable.cs	(revision 16149)
+++ branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/DataVisualization/Interfaces/IDataTable.cs	(revision 16149)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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 HeuristicLab.Core;
+
+namespace HeuristicLab.Analysis {
+  public interface IDataTable<TDataRow> : INamedItem where TDataRow : class, IDataRow {
+    DataTableVisualProperties VisualProperties { get; set; }
+    NamedItemCollection<TDataRow> Rows { get; }
+  }
+}
Index: branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj
===================================================================
--- branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj	(revision 16148)
+++ branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj	(revision 16149)
@@ -134,4 +134,6 @@
     <Compile Include="DataVisualization\IndexedDataRow.cs" />
     <Compile Include="DataVisualization\IndexedDataTable.cs" />
+    <Compile Include="DataVisualization\Interfaces\IDataRow.cs" />
+    <Compile Include="DataVisualization\Interfaces\IDataTable.cs" />
     <Compile Include="DataVisualization\ScatterPlotDataRowVisualProperties.cs" />
     <Compile Include="DataVisualization\ScatterPlotDataRow.cs" />
