Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataCompletenessView.Designer.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataCompletenessView.Designer.cs	(revision 10877)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataCompletenessView.Designer.cs	(revision 10877)
@@ -0,0 +1,54 @@
+﻿namespace HeuristicLab.DataPreprocessing.Views {
+  partial class DataCompletenessView
+  {
+    /// <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() {
+      this.dataTableView1 = new DataPreprocessing.Views.PreprocessingDataTableView();
+      this.SuspendLayout();
+      // 
+      // dataTableView1
+      // 
+      this.dataTableView1.Caption = "DataTable View";
+      this.dataTableView1.Content = null;
+      this.dataTableView1.Location = new System.Drawing.Point(60, 36);
+      this.dataTableView1.Name = "dataTableView1";
+      this.dataTableView1.ReadOnly = false;
+      this.dataTableView1.Size = new System.Drawing.Size(359, 274);
+      this.dataTableView1.TabIndex = 0;
+      // 
+      // DataCompletenessView
+      // 
+      this.Controls.Add(this.dataTableView1);
+      this.Name = "DataCompletenessView";
+      this.Size = new System.Drawing.Size(493, 344);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private HeuristicLab.DataPreprocessing.Views.PreprocessingDataTableView dataTableView1;
+
+  }
+}
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataCompletenessView.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataCompletenessView.cs	(revision 10877)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataCompletenessView.cs	(revision 10877)
@@ -0,0 +1,41 @@
+﻿using System;
+using System.Windows.Forms;
+using HeuristicLab.Analysis;
+using HeuristicLab.MainForm;
+using HeuristicLab.Core.Views;
+
+namespace HeuristicLab.DataPreprocessing.Views {
+
+  [View("Histogram View")]
+  [Content(typeof(DataCompletenessChartContent), true)]
+  public partial class DataCompletenessView : ItemView {
+
+    protected DataRowVisualProperties.DataRowChartType chartType;
+    protected string chartTitle;
+
+    private const string DEFAULT_CHART_TITLE = "DataCompletenessChart";
+
+    public new DataCompletenessChartContent Content
+    {
+      get { return (DataCompletenessChartContent)base.Content; }
+      set { base.Content = value; }
+    }
+
+
+    public DataCompletenessView()
+    {
+      InitializeComponent();
+      chartType = DataRowVisualProperties.DataRowChartType.Line;
+      chartTitle = DEFAULT_CHART_TITLE;
+    }
+
+    protected override void OnContentChanged()
+    {
+      base.OnContentChanged();
+      if (Content != null)
+      {
+      }
+    }
+
+  }
+}
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataPreprocessingView.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataPreprocessingView.cs	(revision 10876)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataPreprocessingView.cs	(revision 10877)
@@ -52,4 +52,5 @@
         var histogramLogic = new ChartLogic(data);
         var filterLogic = new FilterLogic(data);
+        var dataCompletenessLogic = new ChartLogic(data);
 
         var viewShortcuts = new ItemCollection<IViewShortcut> {
@@ -60,5 +61,6 @@
           new ManipulationContent(manipulationLogic, searchLogic),
           new LineChartContent(lineChartLogic),
-          new HistogramContent(histogramLogic)
+          new HistogramContent(histogramLogic)//,
+          //new DataCompletenessChartContent(dataCompletenessLogic)
         };
 
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/FilterView.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/FilterView.cs	(revision 10876)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/FilterView.cs	(revision 10877)
@@ -20,8 +20,12 @@
       tbFiltered.Text = "0";
       tbPercentage.Text = "0%";
-      checkedFilterView.Content = new CheckedItemCollection<IFilter>();
-      checkedFilterView.Content.ItemsAdded += Content_ItemsAdded;
-      checkedFilterView.Content.ItemsRemoved += Content_ItemsRemoved;
-      checkedFilterView.Content.CheckedItemsChanged += Content_CheckedItemsChanged;
+    }
+
+    private void InitData()
+    {
+        checkedFilterView.Content = Content.Filters;
+        checkedFilterView.Content.ItemsAdded += Content_ItemsAdded;
+        checkedFilterView.Content.ItemsRemoved += Content_ItemsRemoved;
+        checkedFilterView.Content.CheckedItemsChanged += Content_CheckedItemsChanged;
     }
 
@@ -36,5 +40,5 @@
       if (Content != null)
       {
-        ImportFiltersFromContent();
+        InitData();
         UpdateFilterInfo();
       }
@@ -42,88 +46,79 @@
 
     private void Content_CheckedItemsChanged(object sender, Collections.CollectionItemsChangedEventArgs<IFilter> e) {
-      
-      foreach (IFilter filter in e.Items)
+      if (Content != null)
       {
-        filter.Active = checkedFilterView.Content.ItemChecked(filter);
+        foreach (IFilter filter in e.Items)
+        {
+          filter.Active = checkedFilterView.Content.ItemChecked(filter);
+        }
+        UpdateFilterInfo();
       }
-      UpdateFilterInfo();
-      ExportFiltersToContent();
-      Refresh();
-      ResumeRepaint(true);
     }
 
     private void UpdateFilterInfo() {
-      List<IFilter> filters = checkedFilterView.ItemCollection.ToList<IFilter>();
+        //List<IFilter> filters = checkedFilterView.ItemCollection.ToList<IFilter>();
+        List<IFilter> filters = Content.Filters.ToList();
 
-      int activeFilters = filters.Count(c => c.Active);
+        int activeFilters = filters.Count(c => c.Active);
 
-      applyFilterButton.Enabled = (activeFilters > 0);
-      rBtnAnd.Enabled = (activeFilters > 0);
-      rBtnOr.Enabled = (activeFilters > 0);
-      btnReset.Enabled = (activeFilters > 0);
-      Content.FilterLogic.Reset();
-      bool[] result = Content.FilterLogic.Preview(filters, rBtnAnd.Checked);
-      
-      int filteredCnt = result.Count(c => c);
-  
-      tbFiltered.Text = filteredCnt.ToString();
-      double percentage = result.Length == 0 ? 0.0 : filteredCnt * 100 / result.Length;
-      tbPercentage.Text = percentage.ToString() + "%";
-      tbTotal.Text = result.Length.ToString();
+        applyFilterButton.Enabled = (activeFilters > 0);
+        rBtnAnd.Enabled = (activeFilters > 0);
+        rBtnOr.Enabled = (activeFilters > 0);
+        btnReset.Enabled = (activeFilters > 0);
+        Content.FilterLogic.Reset();
+        bool[] result = Content.FilterLogic.Preview(filters, rBtnAnd.Checked);
+
+        int filteredCnt = result.Count(c => c);
+
+        tbFiltered.Text = filteredCnt.ToString();
+        double percentage = result.Length == 0 ? 0.0 : filteredCnt * 100 / result.Length;
+        tbPercentage.Text = percentage.ToString() + "%";
+        tbTotal.Text = result.Length.ToString();
     }
 
     private void applyFilterButton_Click(object sender, EventArgs e) {
-      List<IFilter> filters = checkedFilterView.ItemCollection.ToList<IFilter>();
-      Content.FilterLogic.Apply(filters, rBtnAnd.Checked);
+      if (Content != null)
+      {
+        List<IFilter> filters = Content.Filters.ToList();
+        Content.FilterLogic.Apply(filters, rBtnAnd.Checked);
+      }
     }
 
     //whenever a new filter is added the preprocessing data is set to the filter
     private void Content_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IFilter> e) {
-      foreach (IFilter filter in e.Items) {
-        filter.ConstrainedValue = Content.FilterLogic.PreprocessingData;
+      if (Content != null)
+      {
+        foreach (IFilter filter in e.Items)
+        {
+          filter.ConstrainedValue = Content.FilterLogic.PreprocessingData;
+        }
+        UpdateFilterInfo();
       }
-      UpdateFilterInfo();
-      ExportFiltersToContent();
     }
 
     private void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IFilter> e) {
-      UpdateFilterInfo();
-      ExportFiltersToContent();
+      if (Content != null)
+      {
+        UpdateFilterInfo();
+      }
     }
 
     private void rBtnAnd_CheckedChanged(object sender, EventArgs e)
     {
-      UpdateFilterInfo();
-      ExportFiltersToContent();
-      Content.isAndCombination = rBtnAnd.Checked;
+      if (Content != null)
+      {
+        UpdateFilterInfo();
+        Content.isAndCombination = rBtnAnd.Checked;
+      }
     }
 
     private void btnReset_Click(object sender, EventArgs e)
     {
-      Content.FilterLogic.Reset();
-    }
-
-    private void ImportFiltersFromContent()
-    {
-      checkedFilterView.ItemCollection.AddRange(Content.Filters);
-
-      foreach (IFilter filter in checkedFilterView.ItemCollection) {
-        if (filter.Active)
-        {
-          checkedFilterView.Content.SetItemCheckedState(filter, true);
-        }
-        else
-        {
-          checkedFilterView.Content.SetItemCheckedState(filter, false);
-        }
-        rBtnAnd.Checked = Content.isAndCombination;
-        rBtnOr.Checked = !Content.isAndCombination;
+      if (Content != null)
+      {
+        Content.FilterLogic.Reset();
       }
     }
 
-    private void ExportFiltersToContent()
-    {
-      Content.Filters = checkedFilterView.ItemCollection.ToList<IFilter>();
-    }
   }
 }
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 10876)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/HeuristicLab.DataPreprocessing.Views-3.3.csproj	(revision 10877)
@@ -82,4 +82,10 @@
       <DependentUpon>ComparisonFilterView.cs</DependentUpon>
     </Compile>
+    <Compile Include="DataCompletenessView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DataCompletenessView.Designer.cs">
+      <DependentUpon>DataCompletenessView.cs</DependentUpon>
+    </Compile>
     <Compile Include="DataGridContentView.cs">
       <SubType>UserControl</SubType>
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingChartView.Designer.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingChartView.Designer.cs	(revision 10876)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingChartView.Designer.cs	(revision 10877)
@@ -46,5 +46,5 @@
     /// </summary>
     private void InitializeComponent() {
-      this.dataTableView = new HeuristicLab.Analysis.Views.PreprocessingDataTableView();
+      this.dataTableView = new DataPreprocessing.Views.PreprocessingDataTableView();
       this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
       this.checkedItemList = new HeuristicLab.DataPreprocessing.Views.PreprocessingCheckedItemListView();
@@ -108,5 +108,5 @@
 
     private PreprocessingCheckedItemListView checkedItemList;
-    private Analysis.Views.PreprocessingDataTableView dataTableView;
+    private DataPreprocessing.Views.PreprocessingDataTableView dataTableView;
     private System.Windows.Forms.TableLayoutPanel tableLayoutPanel;
   }
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingDataTableView.Designer.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingDataTableView.Designer.cs	(revision 10876)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingDataTableView.Designer.cs	(revision 10877)
@@ -20,5 +20,6 @@
 #endregion
 
-namespace HeuristicLab.Analysis.Views {
+namespace HeuristicLab.DataPreprocessing.Views
+{
   partial class PreprocessingDataTableView {
     /// <summary> 
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingDataTableView.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingDataTableView.cs	(revision 10876)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingDataTableView.cs	(revision 10877)
@@ -30,6 +30,8 @@
 using HeuristicLab.DataPreprocessing.Implementations;
 using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Analysis.Views
+using HeuristicLab.Analysis;
+using HeuristicLab.Analysis.Views;
+
+namespace HeuristicLab.DataPreprocessing.Views
 {
   [View("Preprocessing DataTable View")]
@@ -150,5 +152,5 @@
           dialog.ShowDialog(this);
         }
-      }
+    }
       else MessageBox.Show("Nothing to configure.");
     }
@@ -166,6 +168,6 @@
         if (classification == null)
         {
-          chart.Series.Add(series);
-        }
+        chart.Series.Add(series);
+      }
       }
 
@@ -182,15 +184,15 @@
         // add dummy series for selction entry in legend
         if (rows.Count() > 0 && chart.Series.FindByName("(Selection)") == null) {
-          Series series = new Series("(Selection)");
-          series.IsVisibleInLegend = true;
-          series.Color = Color.Green;
-          series.BorderWidth = 1;
-          series.BorderDashStyle = ChartDashStyle.Solid;
-          series.BorderColor = Color.Empty;
-          series.ChartType = SeriesChartType.FastLine;
-          chart.Series.Add(series);
-        }
-
-        foreach (var row in rows) {
+        Series series = new Series("(Selection)");
+        series.IsVisibleInLegend = true;
+        series.Color = Color.Green;
+        series.BorderWidth = 1;
+        series.BorderDashStyle = ChartDashStyle.Solid;
+        series.BorderColor = Color.Empty;
+        series.ChartType = SeriesChartType.FastLine;
+        chart.Series.Add(series);
+      }
+
+      foreach (var row in rows) {
           row.VisualProperties.IsVisibleInLegend = false;
           row.VisualProperties.Color = Color.Green;
@@ -201,8 +203,8 @@
 
           if (classification == null) {
-            chart.Series.Add(series);
-          }
-        }
-      }
+          chart.Series.Add(series);
+        }
+      }
+    }
     }
 
@@ -212,15 +214,15 @@
       if (rows.Count() > 0 && rows.ElementAt(0).VisualProperties.ChartType == DataRowVisualProperties.DataRowChartType.Line) 
       {
-        //remove selection entry in legend
-        if (Content.SelectedRows.Count == 0) {
-          Series series = chart.Series["(Selection)"];
-          chart.Series.Remove(series);
-        }
-
-        foreach (var row in rows) {
-          Series series = chart.Series[row.Name + "(Selected)"];
-          chart.Series.Remove(series);
-        }
-      }
+      //remove selection entry in legend
+      if (Content.SelectedRows.Count == 0) {
+        Series series = chart.Series["(Selection)"];
+        chart.Series.Remove(series);
+      }
+
+      foreach (var row in rows) {
+        Series series = chart.Series[row.Name + "(Selected)"];
+        chart.Series.Remove(series);
+      }
+    }
     }
 
@@ -755,5 +757,5 @@
       else
       {
-        series.Points.Clear();
+      series.Points.Clear();
         ConfigureSeries(series, row);
         AddPointsToHistogramSeries(series, row, null);
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/HeuristicLab.DataPreprocessing-3.3.csproj
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/HeuristicLab.DataPreprocessing-3.3.csproj	(revision 10876)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/HeuristicLab.DataPreprocessing-3.3.csproj	(revision 10877)
@@ -72,4 +72,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Implementations\DataCompletenessChartContent.cs" />
     <Compile Include="Implementations\FilteredPreprocessingData.cs" />
     <Compile Include="Implementations\ManipulationContent.cs" />
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/DataCompletenessChartContent.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/DataCompletenessChartContent.cs	(revision 10877)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/DataCompletenessChartContent.cs	(revision 10877)
@@ -0,0 +1,45 @@
+﻿using HeuristicLab.Common;
+using HeuristicLab.Core;
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.DataPreprocessing
+{
+  [Item("DataCompletenessChart", "Represents a datacompleteness chart.")]
+  public class DataCompletenessChartContent : Item, IViewShortcut
+  {
+
+    private readonly IChartLogic chartLogic;
+
+    public DataCompletenessChartContent(IChartLogic chartLogic)
+    {
+      this.chartLogic = chartLogic;
+    }
+
+    public DataCompletenessChartContent(DataCompletenessChartContent content, Cloner cloner)
+      : base(content, cloner)
+    {
+    }
+
+    public IChartLogic ChartLogic
+    {
+      get
+      {
+        return chartLogic;
+      }
+    }
+
+    public static new Image StaticItemImage
+    {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.EditBrightnessContrast; }
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner)
+    {
+      return new DataCompletenessChartContent(this, cloner);
+    }
+  }
+}
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/FilterContent.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/FilterContent.cs	(revision 10876)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/FilterContent.cs	(revision 10877)
@@ -30,5 +30,5 @@
   public class FilterContent : Item, IViewShortcut {
 
-    private IList<IFilter> filters = new List<IFilter>();
+    private ICheckedItemCollection<IFilter> filters = new CheckedItemCollection<IFilter>();
 
     public static new Image StaticItemImage {
@@ -50,5 +50,5 @@
     }
 
-    public IList<IFilter> Filters
+    public ICheckedItemCollection<IFilter> Filters
     {
       get
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/PreprocessingChartContent.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/PreprocessingChartContent.cs	(revision 10876)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/PreprocessingChartContent.cs	(revision 10877)
@@ -37,4 +37,6 @@
 
     private readonly IChartLogic chartLogic;
+
+
     public PreprocessingChartContent(IChartLogic chartLogic) {
       this.chartLogic = chartLogic;
