Index: branches/New Persistence Exploration/Persistence/HeuristicLab.Persistence.GUI/PersistenceConfigurationForm.Designer.cs
===================================================================
--- branches/New Persistence Exploration/Persistence/HeuristicLab.Persistence.GUI/PersistenceConfigurationForm.Designer.cs	(revision 1382)
+++ branches/New Persistence Exploration/Persistence/HeuristicLab.Persistence.GUI/PersistenceConfigurationForm.Designer.cs	(revision 1398)
@@ -25,7 +25,7 @@
     private void InitializeComponent() {
       System.Windows.Forms.TabPage nullFormatterConfig;
-      System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("Bli");
-      System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem("Bla");
-      System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem("Blo");
+      System.Windows.Forms.ListViewItem listViewItem4 = new System.Windows.Forms.ListViewItem("Bli");
+      System.Windows.Forms.ListViewItem listViewItem5 = new System.Windows.Forms.ListViewItem("Bla");
+      System.Windows.Forms.ListViewItem listViewItem6 = new System.Windows.Forms.ListViewItem("Blo");
       this.dataGridView1 = new System.Windows.Forms.DataGridView();
       this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
@@ -100,15 +100,15 @@
       this.decomposerList.GridLines = true;
       this.decomposerList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
-      listViewItem1.Checked = true;
-      listViewItem1.StateImageIndex = 1;
-      listViewItem1.Tag = "";
-      listViewItem2.Checked = true;
-      listViewItem2.StateImageIndex = 1;
-      listViewItem3.Checked = true;
-      listViewItem3.StateImageIndex = 1;
+      listViewItem4.Checked = true;
+      listViewItem4.StateImageIndex = 1;
+      listViewItem4.Tag = "";
+      listViewItem5.Checked = true;
+      listViewItem5.StateImageIndex = 1;
+      listViewItem6.Checked = true;
+      listViewItem6.StateImageIndex = 1;
       this.decomposerList.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
-            listViewItem1,
-            listViewItem2,
-            listViewItem3});
+            listViewItem4,
+            listViewItem5,
+            listViewItem6});
       this.decomposerList.Location = new System.Drawing.Point(0, 0);
       this.decomposerList.Name = "decomposerList";
@@ -167,4 +167,5 @@
       // 
       this.checkbox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.checkbox.Enabled = false;
       this.checkbox.FormattingEnabled = true;
       this.checkbox.Location = new System.Drawing.Point(0, 0);
Index: branches/New Persistence Exploration/Persistence/HeuristicLab.Persistence.GUI/PersistenceConfigurationForm.cs
===================================================================
--- branches/New Persistence Exploration/Persistence/HeuristicLab.Persistence.GUI/PersistenceConfigurationForm.cs	(revision 1382)
+++ branches/New Persistence Exploration/Persistence/HeuristicLab.Persistence.GUI/PersistenceConfigurationForm.cs	(revision 1398)
@@ -10,8 +10,14 @@
 namespace HeuristicLab.Persistence.GUI {
 
-  public partial class PersistenceConfigurationForm : Form {    
+  public partial class PersistenceConfigurationForm : Form {
+
+    private readonly Dictionary<string, IFormatter> formatterTable;
+    private readonly Dictionary<string, Type> typeNameTable;    
+
     public PersistenceConfigurationForm() {
       InitializeComponent();
-      decomposerList.Items.Clear();            
+      formatterTable = new Dictionary<string, IFormatter>();
+      typeNameTable = new Dictionary<string, Type>();
+      decomposerList.Items.Clear();
       foreach ( IDecomposer decomposer in ConfigurationService.Instance.AllDecomposers ) {
         var item = decomposerList.Items.Add(decomposer.GetType().Name);
@@ -19,7 +25,7 @@
         item.Tag = decomposer;
       }
-      
+
       foreach ( var formats in ConfigurationService.Instance.AllFormatters ) {
-        TabPage page = new TabPage(formats.Key.Name);
+        TabPage page = new TabPage(formats.Key.Name) {Tag = formats.Key};
         formatterTabs.TabPages.Add(page);
         DataGridView gridView = new DataGridView {
@@ -28,10 +34,9 @@
           AllowUserToAddRows = false,
           AllowUserToDeleteRows = false,
-          AllowUserToResizeRows = false,                                        
+          AllowUserToResizeRows = false,
+          Name = "GridView",
         };
-        //gridView.CellValueChanged += gridView_CellValueChanged;
-        //gridView.DataError += gridView_DataError;
-        //gridView.CellFormatting += gridView_CellFormatting;
-        page.Controls.Add(gridView);
+        gridView.CellValueChanged += gridView_CellValueChanged;
+        page.Controls.Add(gridView);        
         gridView.Columns.Add(new DataGridViewTextBoxColumn {
           Name = "Type", ReadOnly = true,
@@ -42,19 +47,48 @@
         gridView.Columns.Add(new DataGridViewComboBoxColumn
           { AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill });                
-        var formatterMap = new Dictionary<Type, List<IFormatter>>();
+        var formatterMap = new Dictionary<string, List<string>>();
         foreach (var formatter in formats.Value) {
-          if (!formatterMap.ContainsKey(formatter.Type))
-            formatterMap.Add(formatter.Type, new List<IFormatter>());
-          formatterMap[formatter.Type].Add(formatter);
+          string formatterName = formatter.GetType().Name;
+          if (formatterTable.ContainsKey(formatterName)) {
+            IFormatter otherFormatter = formatterTable[formatterName];
+            formatterTable.Remove(formatterName);
+            formatterTable.Add(otherFormatter.GetType().FullName, otherFormatter);
+            formatterName = formatter.GetType().FullName;
+          }
+          formatterTable.Add(formatterName, formatter);
+          string typeName = formatter.Type.Name;
+          if (typeNameTable.ContainsKey(typeName)) {
+            Type otherType = typeNameTable[typeName];
+            if (otherType != formatter.Type) {
+              typeNameTable.Remove(typeName);
+              typeNameTable.Add(otherType.FullName, otherType);
+              typeName = formatter.Type.FullName;
+              typeNameTable.Add(typeName, formatter.Type);
+            }
+          } else {
+            typeNameTable.Add(typeName, formatter.Type);
+          }          
+        }
+        foreach (var formatter in formats.Value) {          
+          string formatterName = 
+            formatterTable.ContainsKey(formatter.GetType().Name) ?
+            formatter.GetType().Name :
+            formatter.GetType().FullName;
+          string typeName =
+            typeNameTable.ContainsKey(formatter.Type.Name) ?
+            formatter.Type.Name :
+            formatter.Type.FullName;          
+          if (!formatterMap.ContainsKey(typeName))
+            formatterMap.Add(typeName, new List<string>());
+          formatterMap[typeName].Add(formatterName);
         }
         foreach ( var formatterMapping in formatterMap ) {
           var row = gridView.Rows[gridView.Rows.Add()];
-          row.Cells[0].Value = formatterMapping.Key.SimpleFullName();
-          row.Cells[0].ToolTipText = formatterMapping.Key.AssemblyQualifiedName;
+          row.Cells[0].Value = formatterMapping.Key;
+          row.Cells[0].ToolTipText = formatterMapping.Key;
           row.Cells[1].Value = true;
-          var comboBoxCell = (DataGridViewComboBoxCell) row.Cells[2];
-          //comboBoxCell.ValueType = typeof(IFormatter);          
-          foreach ( var formatter in formatterMapping.Value ) {            
-            comboBoxCell.Items.Add(formatter.GetType().Name);
+          var comboBoxCell = (DataGridViewComboBoxCell) row.Cells[2];          
+          foreach ( var formatter in formatterMapping.Value ) {
+            comboBoxCell.Items.Add(formatter);
           }          
           comboBoxCell.Value = comboBoxCell.Items[0];          
@@ -68,7 +102,6 @@
     }
 
-    void gridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
-      e.Value = e.Value.ToString();
-      e.FormattingApplied = true;
+    void gridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
+      UpdatePreview();
     }    
 
@@ -105,5 +138,5 @@
         i++;
       }
-      Update();
+      UpdatePreview();
     }
 
@@ -121,12 +154,40 @@
     }
 
-    private void Update() {
-      checkbox.Items.Clear();
+    private void UpdatePreview() {
+      checkbox.Items.Clear();      
       foreach (var decomposer in GetDecomposers())
-        checkbox.Items.Add(decomposer.GetType().Name);      
+        checkbox.Items.Add(decomposer.GetType().Name + " (D)");
+      IFormat activeFormat = (IFormat) formatterTabs.SelectedTab.Tag;
+      if (activeFormat != null) {
+        foreach (var formatter in GetCurrentConfiguration(activeFormat).Formatters) {
+          checkbox.Items.Add(formatter.GetType().Name + " (F)");
+        }
+      }
     }
 
     private void decomposerList_ItemChecked(object sender, ItemCheckedEventArgs e) {
-      Update();
+      UpdatePreview();
+    }
+
+    public Configuration GetCurrentConfiguration(IFormat format) {      
+      Dictionary<Type, IFormatter> formatters = new Dictionary<Type, IFormatter>();
+      foreach ( TabPage page in formatterTabs.TabPages ) {
+        if ( page.Text == format.Name ) {
+          Control[] controls = page.Controls.Find("GridView", false);
+          if (controls.Length == 1) {
+            foreach (DataGridViewRow row in ((DataGridView) controls[0]).Rows) {
+              if ( row.Cells[1].Value != null &&
+                row.Cells[0].Value != null &&
+                row.Cells[2].Value != null &&
+                (bool)row.Cells[1].Value == true ) {                
+                formatters.Add(
+                  typeNameTable[(string)row.Cells[0].Value],                  
+                  formatterTable[(string)row.Cells[2].Value]);
+              }
+            }
+          }
+        }
+      }
+      return new Configuration(formatters, GetDecomposers());
     }
     
Index: branches/New Persistence Exploration/Persistence/HeuristicLab.Persistence.GUI/PersistenceConfigurationForm.resx
===================================================================
--- branches/New Persistence Exploration/Persistence/HeuristicLab.Persistence.GUI/PersistenceConfigurationForm.resx	(revision 1382)
+++ branches/New Persistence Exploration/Persistence/HeuristicLab.Persistence.GUI/PersistenceConfigurationForm.resx	(revision 1398)
@@ -130,3 +130,12 @@
     <value>True</value>
   </metadata>
+  <metadata name="Column1.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="Column2.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="Column3.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
 </root>
Index: branches/New Persistence Exploration/Persistence/Persistence/Core/PersistenceConfiguration.cs
===================================================================
--- branches/New Persistence Exploration/Persistence/Persistence/Core/PersistenceConfiguration.cs	(revision 1382)
+++ branches/New Persistence Exploration/Persistence/Persistence/Core/PersistenceConfiguration.cs	(revision 1398)
@@ -1,3 +1,4 @@
 ﻿using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Reflection;
@@ -25,5 +26,9 @@
       this.decomposers = new List<IDecomposer>(decomposers);
       decomposerCache = new Dictionary<Type, IDecomposer>();      
-    }    
+    }
+
+    public IEnumerable Formatters {
+      get { return formatters.Values; }
+    }
 
     public IFormatter GetFormatter(Type type) {
