Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/MultiScatterPlotView.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/MultiScatterPlotView.cs	(revision 10951)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/MultiScatterPlotView.cs	(revision 10952)
@@ -18,6 +18,12 @@
 
   [View("Multi Scatter Plot View")]
-  [Content(typeof(ScatterPlotContent), true)]
+  [Content(typeof(ScatterPlotContent), false)]
   public partial class MultiScatterPlotView : ItemView {
+
+    private const int HEADER_WIDTH = 50;
+    private const int HEADER_HEIGHT = 50;
+    private const int MAX_AUTO_SIZE_ELEMENTS = 6;
+    private const int FIXED_CHART_WIDTH = 250;
+    private const int FIXED_CHART_HEIGHT = 150;
 
     private IChartLogic logic;
@@ -34,7 +40,5 @@
 
     public void InitData() {
-
       variables = new List<string>(logic.GetVariableNames());
-
     }
 
@@ -45,4 +49,24 @@
         InitData();
         GenerateMultiLayout();
+      }
+    }
+
+    //Add header elements to the table layout panel
+    private void addHeaderToTableLayoutPanels() {
+
+      for (int i = 1; i < variables.Count + 1; i++) {
+        // Use buttons for header elements
+        Button xButton = new Button();
+        xButton.Enabled = false;
+        xButton.BackColor = Color.Gainsboro;
+        xButton.Text = variables[i - 1];
+        xButton.Dock = DockStyle.Fill;
+        tableLayoutPanel.Controls.Add(xButton, 0, i);
+        Button yButton = new Button();
+        yButton.Enabled = false;
+        yButton.BackColor = Color.Gainsboro;
+        yButton.Text = variables[i - 1];
+        yButton.Dock = DockStyle.Fill;
+        tableLayoutPanel.Controls.Add(yButton, i, 0);
       }
     }
@@ -59,45 +83,32 @@
       tableLayoutPanel.RowCount = variables.Count+1;
 
-      int headerSize = 50;
-      int maxAutoSizeElements = 6;
-      int fixedElementSize = 200;
-
-      tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, headerSize));
-      tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, headerSize));
+      tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, HEADER_WIDTH));
+      tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, HEADER_HEIGHT));
       // set column and row layout
       for (int x = 0; x < variables.Count; x++) 
       {
         // auto size
-        if (variables.Count <= maxAutoSizeElements) {
-          tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, (tableLayoutPanel.Width - headerSize) / variables.Count));
-          tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, (tableLayoutPanel.Height - headerSize) / variables.Count));
+        if (variables.Count <= MAX_AUTO_SIZE_ELEMENTS) {
+          tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, (tableLayoutPanel.Width - HEADER_WIDTH) / variables.Count));
+          tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, (tableLayoutPanel.Height - HEADER_HEIGHT) / variables.Count));
         } 
         // fixed size
         else {
-          tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, fixedElementSize));
-          tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, fixedElementSize));
+          tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, FIXED_CHART_WIDTH));
+          tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, FIXED_CHART_HEIGHT));
         }
       }
 
-      // set variable header elements
-      for (int i = 1; i < variables.Count +1; i++)
-      {
-         Button b1 = new Button();
-         b1.Text = variables[i-1];
-         b1.Dock = DockStyle.Fill;
-         tableLayoutPanel.Controls.Add(b1,0,i);
-         Button b2 = new Button();
-         b2.Text = variables[i - 1];
-         b2.Dock = DockStyle.Fill;
-         tableLayoutPanel.Controls.Add(b2, i, 0);
-      }
+      addHeaderToTableLayoutPanels();
+      addChartsToTableLayoutPanel();
+ 
+    }
 
+    private void addChartsToTableLayoutPanel() {
       //set scatter plots and histograms
-      for (int x = 1; x < variables.Count + 1; x++) 
-      {
+      for (int x = 1; x < variables.Count + 1; x++) {
 
-        for (int y = 1; y < variables.Count + 1; y++) 
-        {
-          // use historgram if x variable equals y variable
+        for (int y = 1; y < variables.Count + 1; y++) {
+          // use historgram if x and y variable are equal
           if (x == y) {
             PreprocessingDataTable dataTable = new PreprocessingDataTable();
@@ -105,16 +116,16 @@
             dataTable.Rows.Add(dataRow);
             PreprocessingDataTableView pcv = new PreprocessingDataTableView();
-            pcv.DoubleClick += tableLayoutElementDoubleClick;
+            pcv.ChartDoubleClick += HistogramDoubleClick;
             pcv.Content = dataTable;
             tableLayoutPanel.Controls.Add(pcv, y, x);
           }
           //scatter plot
-          else {   
-            ScatterPlot scatterPlot = logic.CreateScatterPlot(variables[x - 1], variables[y-1]);   
+          else {
+            ScatterPlot scatterPlot = logic.CreateScatterPlot(variables[x - 1], variables[y - 1]);
             PreprocessingScatterPlotView pspv = new PreprocessingScatterPlotView();
-            pspv.DoubleClick += tableLayoutElementDoubleClick;
+            pspv.ChartDoubleClick += ScatterPlotDoubleClick;
             pspv.Content = scatterPlot;
             pspv.Dock = DockStyle.Fill;
-            tableLayoutPanel.Controls.Add(pspv, y, x);
+            tableLayoutPanel.Controls.Add(pspv, x, y);
           }
         }
@@ -122,20 +133,54 @@
     }
 
-    private void tableLayoutElementDoubleClick(object sender, EventArgs e) {
+    //Open scatter plot in new tab with new content when double clicked
+    private void ScatterPlotDoubleClick(object sender, EventArgs e) {
+      PreprocessingScatterPlotView pspv = (PreprocessingScatterPlotView)sender;
+      ScatterPlotContent scatterContent = new ScatterPlotContent(logic);  // create new content
+      ScatterPlot scatterPlot = pspv.Content;
+      setVariablesInContentFromScatterPlot(scatterContent, scatterPlot);
 
-       //histogram clicked
-       if(sender.GetType() == typeof(PreprocessingDataTableView))
-       {
-         PreprocessingDataTableView pcv = (PreprocessingDataTableView)sender;
-         //ScatterPlotContent spc = new ScatterPlotContent(
-         
-       } 
-       // scatter plot clicked
-       else if (sender.GetType() == typeof(PreprocessingScatterPlotView)) {
-         PreprocessingScatterPlotView pspv = (PreprocessingScatterPlotView)sender;
-         MainFormManager.MainForm.ShowContent(this.Content, typeof(SingleScatterPlotView));
-       }
+      MainFormManager.MainForm.ShowContent(scatterContent, typeof(SingleScatterPlotView));  // open in new tab
+    }
 
-       
+    //Extract variable names from scatter plot and set them in content
+    private void setVariablesInContentFromScatterPlot(ScatterPlotContent scatterContent, ScatterPlot scatterPlot) {
+
+      // only one data row should be in scatter plot
+      if (scatterPlot.Rows.Count == 1) {
+        // TODO -> find better way to get variable names
+        string[] variables = scatterPlot.Rows.ElementAt(0).Name.Split(new string[]{" - "},StringSplitOptions.None); // extract variable names from string
+        scatterContent.SelectedXVariable = variables[0];
+        scatterContent.SelectedYVariable = variables[1];
+      }
+    }
+
+    //Set variable item list from with variable from data table
+    private void setVariableItemListFromDataTable(HistogramContent histoContent, PreprocessingDataTable dataTable) {
+
+      // only one data row should be in data table 
+      if (dataTable.Rows.Count == 1) {
+        string variableName = dataTable.Rows.ElementAt(0).Name;
+
+        // set only variable name checked
+        foreach(var checkedItem in histoContent.VariableItemList)
+        {
+          if(checkedItem.Value == variableName)
+            histoContent.VariableItemList.SetItemCheckedState(checkedItem,true);
+          else
+            histoContent.VariableItemList.SetItemCheckedState(checkedItem,false);
+            
+        }
+      }
+    }
+
+    //open histogram in new tab with new content when double clicked
+    private void HistogramDoubleClick(object sender, EventArgs e) {
+      PreprocessingDataTableView pcv = (PreprocessingDataTableView)sender;
+      HistogramContent histoContent = new HistogramContent(logic);  // create new content
+      histoContent.VariableItemList = logic.CreateVariableItemList();
+      PreprocessingDataTable dataTable = pcv.Content;
+      setVariableItemListFromDataTable(histoContent, dataTable);
+
+      MainFormManager.MainForm.ShowContent(histoContent, typeof(HistogramView));  // open in new tab
     }
     
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingChartView.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingChartView.cs	(revision 10951)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingChartView.cs	(revision 10952)
@@ -373,5 +373,4 @@
 
 
-
   }
 }
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingDataTableView.Designer.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingDataTableView.Designer.cs	(revision 10951)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingDataTableView.Designer.cs	(revision 10952)
@@ -73,5 +73,5 @@
       legend1.Name = "Default";
       this.chart.Legends.Add(legend1);
-      this.chart.Location = new System.Drawing.Point(0, 3);
+      this.chart.Location = new System.Drawing.Point(0, 0);
       this.chart.Name = "chart";
       series1.ChartArea = "Default";
@@ -79,5 +79,5 @@
       series1.Name = "Default";
       this.chart.Series.Add(series1);
-      this.chart.Size = new System.Drawing.Size(359, 271);
+      this.chart.Size = new System.Drawing.Size(359, 274);
       this.chart.TabIndex = 3;
       this.chart.Text = "chart";
@@ -88,4 +88,5 @@
       this.chart.Titles.Add(title1);
       this.chart.CustomizeLegend += new System.EventHandler<System.Windows.Forms.DataVisualization.Charting.CustomizeLegendEventArgs>(this.chart_CustomizeLegend);
+      this.chart.DoubleClick += new System.EventHandler(this.chart_DoubleClick);
       this.chart.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chart_MouseDown);
       this.chart.MouseMove += new System.Windows.Forms.MouseEventHandler(this.chart_MouseMove);
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingDataTableView.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingDataTableView.cs	(revision 10951)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingDataTableView.cs	(revision 10952)
@@ -39,4 +39,5 @@
     protected List<Series> invisibleSeries;
     protected Dictionary<IObservableList<double>, DataRow> valuesRowsTable;
+    private event EventHandler chartDoubleClick;
 
     public new PreprocessingDataTable Content {
@@ -759,4 +760,9 @@
     }
 
+    public event EventHandler ChartDoubleClick {
+      add { chartDoubleClick += value; }
+      remove { chartDoubleClick -= value; }
+    }
+
     #region Helpers
     public static IEnumerable<double> DoubleRange(double min, double max, double step) {
@@ -816,4 +822,10 @@
     }
     #endregion
+
+    //bubble double click event with data table view as sender
+    private void chart_DoubleClick(object sender, EventArgs e) {
+      if (chartDoubleClick != null)
+        chartDoubleClick(this, e);
+    }
   }
 }
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingScatterPlotView.Designer.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingScatterPlotView.Designer.cs	(revision 10951)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingScatterPlotView.Designer.cs	(revision 10952)
@@ -72,5 +72,5 @@
       legend1.Name = "Default";
       this.chart.Legends.Add(legend1);
-      this.chart.Location = new System.Drawing.Point(0, 3);
+      this.chart.Location = new System.Drawing.Point(0, 0);
       this.chart.Name = "chart";
       series1.ChartArea = "Default";
@@ -78,5 +78,5 @@
       series1.Name = "Default";
       this.chart.Series.Add(series1);
-      this.chart.Size = new System.Drawing.Size(359, 271);
+      this.chart.Size = new System.Drawing.Size(359, 274);
       this.chart.TabIndex = 3;
       this.chart.Text = "chart";
@@ -87,4 +87,5 @@
       this.chart.Titles.Add(title1);
       this.chart.CustomizeLegend += new System.EventHandler<System.Windows.Forms.DataVisualization.Charting.CustomizeLegendEventArgs>(this.chart_CustomizeLegend);
+      this.chart.DoubleClick += new System.EventHandler(this.chart_DoubleClick);
       this.chart.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chart_MouseDown);
       this.chart.MouseMove += new System.Windows.Forms.MouseEventHandler(this.chart_MouseMove);
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingScatterPlotView.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingScatterPlotView.cs	(revision 10951)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingScatterPlotView.cs	(revision 10952)
@@ -39,4 +39,5 @@
     protected List<Series> invisibleSeries;
     protected Dictionary<IObservableList<Point2D<double>>, ScatterPlotDataRow> pointsRowsTable;
+    private event EventHandler chartDoubleClick;
 
     public new ScatterPlot Content {
@@ -220,4 +221,10 @@
       double yZoomInterval = Math.Pow(10, digits);
       this.chart.ChartAreas[0].CursorY.Interval = yZoomInterval;
+    }
+
+
+    public event EventHandler ChartDoubleClick {
+      add { chartDoubleClick += value; }
+      remove { chartDoubleClick -= value; }
     }
 
@@ -450,4 +457,10 @@
     }
     #endregion
+
+    //bubble double click event with scatter plot view as sender
+    private void chart_DoubleClick(object sender, EventArgs e) {
+      if (chartDoubleClick != null)
+        chartDoubleClick(this, e);
+    }
   }
 }
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/SingleScatterPlotView.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/SingleScatterPlotView.cs	(revision 10951)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/SingleScatterPlotView.cs	(revision 10952)
@@ -19,5 +19,5 @@
 
   [View("Single Scatter Plot View")]
-  [Content(typeof(ScatterPlotContent), false)]
+  [Content(typeof(ScatterPlotContent), true)]
   public partial class SingleScatterPlotView : ItemView {
 
@@ -42,9 +42,15 @@
       comboBoxYVariable.Items.AddRange(variables.ToArray());
 
-      if (variables.Count() >= 2) {
-        comboBoxXVariable.SelectedIndex = 0;
-        comboBoxYVariable.SelectedIndex = 1;
-        UpdateScatterPlot();
-        
+      // use x and y variable from content
+      if (Content.SelectedXVariable != null && Content.SelectedYVariable != null) {
+        comboBoxXVariable.SelectedItem = Content.SelectedXVariable;
+        comboBoxYVariable.SelectedItem = Content.SelectedYVariable;
+      } else {
+        if (variables.Count() >= 2) {
+          comboBoxXVariable.SelectedIndex = 0;
+          comboBoxYVariable.SelectedIndex = 1;
+          UpdateScatterPlot();
+
+        }
       }
 
@@ -67,4 +73,8 @@
         ScatterPlot scatterPlot = logic.CreateScatterPlot((string)comboBoxXVariable.SelectedItem, (string)comboBoxYVariable.SelectedItem);
         scatterPlotView.Content = scatterPlot;
+
+        //save selected x and y variable in content
+        this.Content.SelectedXVariable = (string)comboBoxXVariable.SelectedItem;
+        this.Content.SelectedYVariable = (string)comboBoxYVariable.SelectedItem;
       }
     }
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/ViewShortcutListView.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/ViewShortcutListView.cs	(revision 10951)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/ViewShortcutListView.cs	(revision 10952)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Core;
 using HeuristicLab.Core.Views;
@@ -33,4 +34,21 @@
       itemsGroupBox.Text = "View Shortcuts";
     }
+
+    protected override void itemsListView_DoubleClick(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count == 1) {
+        IViewShortcut item = itemsListView.SelectedItems[0].Tag as IViewShortcut;
+        if (item != null) {
+
+          if (item is IViewChartShortcut)
+            item = (IViewChartShortcut)item.Clone();
+
+          IContentView view = MainFormManager.MainForm.ShowContent(item);
+          if (view != null) {
+            view.ReadOnly = ReadOnly;
+            view.Locked = Locked;
+          }
+        }
+      }
+    }
   }
 }
