Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/HeuristicLab.DataPreprocessing.Views-3.3.csproj
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/HeuristicLab.DataPreprocessing.Views-3.3.csproj	(revision 10627)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/HeuristicLab.DataPreprocessing.Views-3.3.csproj	(revision 10628)
@@ -97,4 +97,10 @@
     </Compile>
     <Compile Include="Plugin.cs" />
+    <Compile Include="PreprocessingCheckedItemListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="PreprocessingCheckedItemListView.Designer.cs">
+      <DependentUpon>PreprocessingCheckedItemListView.cs</DependentUpon>
+    </Compile>
     <Compile Include="PreprocessingDataTableView.cs">
       <SubType>UserControl</SubType>
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/LineChartView.Designer.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/LineChartView.Designer.cs	(revision 10627)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/LineChartView.Designer.cs	(revision 10628)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Data;
 namespace HeuristicLab.DataPreprocessing.Views {
   partial class LineChartView {
@@ -46,14 +47,12 @@
     private void InitializeComponent() {
       this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.variablesListBox = new System.Windows.Forms.CheckedListBox();
-      this.groupBoxAttributs = new System.Windows.Forms.GroupBox();
       this.groupBoxOptions = new System.Windows.Forms.GroupBox();
-      this.groupBoxAttributs.SuspendLayout();
+      this.checkedItemList = new HeuristicLab.DataPreprocessing.Views.PreprocessingCheckedItemListView();
       this.SuspendLayout();
       // 
       // viewHost
       // 
-      this.viewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-            | System.Windows.Forms.AnchorStyles.Left)
+      this.viewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
       this.viewHost.Caption = "View";
@@ -68,28 +67,4 @@
       this.viewHost.ViewType = null;
       // 
-      // variablesListBox
-      // 
-      this.variablesListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-            | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.variablesListBox.FormattingEnabled = true;
-      this.variablesListBox.Location = new System.Drawing.Point(6, 19);
-      this.variablesListBox.Name = "variablesListBox";
-      this.variablesListBox.Size = new System.Drawing.Size(141, 229);
-      this.variablesListBox.TabIndex = 1;
-      this.variablesListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.variablesListBox_ItemCheck);
-      // 
-      // groupBoxAttributs
-      // 
-      this.groupBoxAttributs.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-            | System.Windows.Forms.AnchorStyles.Left)));
-      this.groupBoxAttributs.Controls.Add(this.variablesListBox);
-      this.groupBoxAttributs.Location = new System.Drawing.Point(3, 4);
-      this.groupBoxAttributs.Name = "groupBoxAttributs";
-      this.groupBoxAttributs.Size = new System.Drawing.Size(153, 252);
-      this.groupBoxAttributs.TabIndex = 2;
-      this.groupBoxAttributs.TabStop = false;
-      this.groupBoxAttributs.Text = "Attributes";
-      // 
       // groupBoxOptions
       // 
@@ -102,14 +77,25 @@
       this.groupBoxOptions.Text = "Options";
       // 
+      // checkedItemList
+      // 
+      this.checkedItemList.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left)));
+      this.checkedItemList.Caption = "View";
+      this.checkedItemList.Content = null;
+      this.checkedItemList.Location = new System.Drawing.Point(4, 4);
+      this.checkedItemList.Name = "checkedItemList";
+      this.checkedItemList.ReadOnly = false;
+      this.checkedItemList.Size = new System.Drawing.Size(152, 252);
+      this.checkedItemList.TabIndex = 4;
+      // 
       // LineChartView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.checkedItemList);
       this.Controls.Add(this.groupBoxOptions);
-      this.Controls.Add(this.groupBoxAttributs);
       this.Controls.Add(this.viewHost);
       this.Name = "LineChartView";
       this.Size = new System.Drawing.Size(654, 403);
-      this.groupBoxAttributs.ResumeLayout(false);
       this.ResumeLayout(false);
 
@@ -119,7 +105,6 @@
 
     private MainForm.WindowsForms.ViewHost viewHost;
-    private System.Windows.Forms.CheckedListBox variablesListBox;
-    private System.Windows.Forms.GroupBox groupBoxAttributs;
     private System.Windows.Forms.GroupBox groupBoxOptions;
+    private PreprocessingCheckedItemListView checkedItemList;
   }
 }
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/LineChartView.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/LineChartView.cs	(revision 10627)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/LineChartView.cs	(revision 10628)
@@ -21,5 +21,9 @@
 
 using System.Windows.Forms;
+using HeuristicLab.Analysis;
+using HeuristicLab.Collections;
+using HeuristicLab.Core;
 using HeuristicLab.Core.Views;
+using HeuristicLab.Data;
 using HeuristicLab.MainForm;
 
@@ -30,11 +34,42 @@
   public partial class LineChartView : ItemView {
 
+    private ILineChartLogic logic;
+    private DataTable dataTable;
+    private ICheckedItemList<StringValue> itemList;
+    private const string LINE_CHART_TITLE = "LineChart";
+
     public LineChartView() {
       InitializeComponent();
     }
 
+    private void CheckedItemsChanged(object sender, CollectionItemsChangedEventArgs<IndexedItem<StringValue>> checkedItems) {
+      foreach(IndexedItem<StringValue> item in checkedItems.Items)
+      {
+        string variableName = item.Value.Value;
+        if (VariableIsDisplayed(variableName)) {
+          dataTable.Rows.Remove(variableName);
+        } else {
+          dataTable.Rows.Add(logic.CreateDataRow(variableName));
+        }
+      }
+    }
+
+    public bool VariableIsDisplayed(string name) {
+
+      foreach (var item in dataTable.Rows) {
+        if (item.Name == name)
+          return true;
+      }
+      return false;
+    }
+
     private void InitDataTable() {
-      ILineChartLogic logic = Content.LineChartLogic;
-      viewHost.Content = logic.GetDataTable();
+      dataTable = logic.CreateDataTable(LINE_CHART_TITLE);
+      viewHost.Content = dataTable;
+    }
+
+    private void InitVariablesListBox() {
+      itemList = logic.CreateVariableItemList();
+      checkedItemList.Content = itemList;
     }
 
@@ -61,26 +96,58 @@
       base.OnContentChanged();
       if (Content != null) {
+        logic = Content.LineChartLogic;
         InitDataTable();
         InitVariablesListBox();
+        itemList.CheckedItemsChanged += CheckedItemsChanged;
+        logic.Changed += PreprocessingData_Changed;
       }
     }
 
-    private void InitVariablesListBox() {
-      ILineChartLogic logic = Content.LineChartLogic;
-
-      foreach (var variableName in logic.GetVariableNames()) {
-        variablesListBox.Items.Add(variableName, true);
+    //TODO: refactor: possible code duplication with HistogramLogic
+    void PreprocessingData_Changed(object sender, DataPreprocessingChangedEventArgs e) {
+      switch (e.Type) {
+        case DataPreprocessingChangedEventType.DeleteColumn:
+          RemoveVariable(logic.GetVariableNameByIndex(e.Column));
+          break;
+        case DataPreprocessingChangedEventType.AddColumn:
+          AddVariable(logic.GetVariableNameByIndex(e.Column));
+          break;
+        case DataPreprocessingChangedEventType.ChangeColumn:
+        case DataPreprocessingChangedEventType.ChangeItem:
+          dataTable.Rows.Remove(logic.GetVariableNameByIndex(e.Column));
+          dataTable.Rows.Add(logic.CreateDataRow((logic.GetVariableNameByIndex(e.Column))));
+          break;
+        case DataPreprocessingChangedEventType.DeleteRow:
+        case DataPreprocessingChangedEventType.AddRow:
+          InitDataTable();
+          break;
       }
     }
 
-    private void variablesListBox_ItemCheck(object sender, ItemCheckEventArgs e) {
-      string item = variablesListBox.Items[e.Index] as string;
+    // add variable to data table and item list
+    private void AddVariable(string name) {
+      dataTable.Rows.Add(logic.CreateDataRow(name));
+      itemList.Add(new StringValue(name));
+    }
+
+    // remove variable from data table and item list
+    private void RemoveVariable(string name) {
+      dataTable.Rows.Remove(name);
+
+      StringValue stringValue = FindVariableItemList(name);
+      if (stringValue != null)
+        itemList.Remove(stringValue);
+
+    }
+
+    private StringValue FindVariableItemList(string name) {
+      foreach (StringValue stringValue in itemList) {
+        if (stringValue.Value == name)
+          return stringValue;
+      }
+      return null;
+    }
 
 
-      if (e.NewValue == CheckState.Checked && !Content.LineChartLogic.VariableIsDisplayed(item))
-        Content.LineChartLogic.AddVariable(item);
-      else if (e.NewValue == CheckState.Unchecked && Content.LineChartLogic.VariableIsDisplayed(item))
-        Content.LineChartLogic.RemoveVariable(item);
-    }
   }
 }
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingCheckedItemListView.Designer.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingCheckedItemListView.Designer.cs	(revision 10628)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingCheckedItemListView.Designer.cs	(revision 10628)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.DataPreprocessing.Views {
+  partial class PreprocessingCheckedItemListView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingCheckedItemListView.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingCheckedItemListView.cs	(revision 10628)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingCheckedItemListView.cs	(revision 10628)
@@ -0,0 +1,45 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.Data;
+using HeuristicLab.MainForm;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.DataPreprocessing.Views {
+
+  [View("PreprocessingCheckedItemList View")]
+  [Content(typeof(CheckedItemList<StringValue>), true)]
+  [Content(typeof(ICheckedItemList<StringValue>), true)]
+  public partial class PreprocessingCheckedItemListView : CheckedItemListView<StringValue> {
+
+    public new ICheckedItemList<StringValue> Content {
+      get { return (ICheckedItemList<StringValue>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public PreprocessingCheckedItemListView()
+      : base() {
+      InitializeComponent();
+      DisableDetails();     
+    }
+
+    private void DisableDetails() {
+        splitContainer.Panel2Collapsed = true;
+        viewHost.Content = null;
+        showDetailsCheckBox.Visible = false;
+        
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+    }
+  }
+
+
+}
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/LineChartLogic.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/LineChartLogic.cs	(revision 10627)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/LineChartLogic.cs	(revision 10628)
@@ -23,29 +23,34 @@
 using System.Collections.Generic;
 using HeuristicLab.Analysis;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
 
 namespace HeuristicLab.DataPreprocessing {
   public class LineChartLogic : ILineChartLogic {
+ 
     private ITransactionalPreprocessingData preprocessingData;
-    private DataTable dataTable;
 
     public LineChartLogic(ITransactionalPreprocessingData preprocessingData) {
       this.preprocessingData = preprocessingData;
-      dataTable = new DataTable("LineChart");
-      FillDataTable();
-      preprocessingData.Changed += PreprocessingData_Changed;
     }
 
-    private void FillDataTable() {
-      IEnumerable<string> variableNames = preprocessingData.VariableNames;
+    public DataTable CreateDataTable(String title) {
+      DataTable dataTable = new DataTable(title);
+      IEnumerable<string> variableNames = GetVariableNames();
 
       foreach (string variableName in variableNames) {
-        IList<double> values = preprocessingData.GetValues<double>(variableName);
-        DataRow row = new DataRow(variableName, "", values);
+        DataRow row = CreateDataRow(variableName);
         dataTable.Rows.Add(row);
       }
-
+      return dataTable;
     }
 
-    public IEnumerable<object> GetVariableNames() {
+    public DataRow CreateDataRow(string variableName) {
+      IList<double> values = preprocessingData.GetValues<double>(variableName);
+      DataRow row = new DataRow(variableName, "", values);
+      return row;
+    }
+
+    private IEnumerable<string> GetVariableNames() {
       List<string> doubleVariableNames = new List<string>();
 
@@ -59,47 +64,10 @@
     }
 
-    public DataTable GetDataTable() {
-      return dataTable;
-    }
-
-    public void RemoveVariable(string name) {
-      dataTable.Rows.Remove(name);
-    }
-
-    public void AddVariable(string name) {
-      IList<double> values = preprocessingData.GetValues<double>(name);
-      DataRow row = new DataRow(name, "", values);
-      dataTable.Rows.Add(row);
-    }
-
-    public bool VariableIsDisplayed(string name) {
-
-      foreach (var item in dataTable.Rows) {
-        if (item.Name == name)
-          return true;
+    public ICheckedItemList<StringValue> CreateVariableItemList() {
+      ICheckedItemList<StringValue> itemList = new CheckedItemList<StringValue>();
+      foreach (string name in GetVariableNames()) {
+        itemList.Add(new StringValue(name), true);
       }
-      return false;
-    }
-
-    //TODO: refactor: possible code duplication with HistogramLogic
-    void PreprocessingData_Changed(object sender, DataPreprocessingChangedEventArgs e) {
-      switch (e.Type) {
-        case DataPreprocessingChangedEventType.DeleteColumn:
-          dataTable.Rows.Remove(preprocessingData.GetVariableName(e.Column));
-          break;
-        case DataPreprocessingChangedEventType.AddColumn:
-          dataTable.Rows.Add(new DataRow(preprocessingData.GetVariableName(e.Column), String.Empty, preprocessingData.GetValues<double>(e.Column)));
-          break;
-        case DataPreprocessingChangedEventType.ChangeColumn:
-        case DataPreprocessingChangedEventType.ChangeItem:
-          dataTable.Rows.Remove(preprocessingData.GetVariableName(e.Column));
-          dataTable.Rows.Add(new DataRow(preprocessingData.GetVariableName(e.Column), String.Empty, preprocessingData.GetValues<double>(e.Column)));
-          break;
-        case DataPreprocessingChangedEventType.DeleteRow:
-        case DataPreprocessingChangedEventType.AddRow:
-          dataTable.Rows.Clear();
-          FillDataTable();
-          break;
-      }
+      return new ReadOnlyCheckedItemList<StringValue>(itemList);
     }
 
@@ -108,4 +76,9 @@
       remove { preprocessingData.Changed -= value; }
     }
+
+    public string GetVariableNameByIndex(int index) {
+      return preprocessingData.GetVariableName(index);
+    }
+
   }
 }
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Interfaces/ILineChartLogic.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Interfaces/ILineChartLogic.cs	(revision 10627)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Interfaces/ILineChartLogic.cs	(revision 10628)
@@ -22,19 +22,19 @@
 using System.Collections.Generic;
 using HeuristicLab.Analysis;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
 
 namespace HeuristicLab.DataPreprocessing {
   public interface ILineChartLogic {
 
-    void RemoveVariable(string name);
-
-    void AddVariable(string name);
-
-    IEnumerable<object> GetVariableNames();
-
-    DataTable GetDataTable();
-
-    bool VariableIsDisplayed(string name);
+    DataTable CreateDataTable(string title);
 
     event DataPreprocessingChangedEventHandler Changed;
+
+    ICheckedItemList<StringValue> CreateVariableItemList();
+
+    DataRow CreateDataRow(string variableName);
+
+    string GetVariableNameByIndex(int index);
   }
 }
