Index: /trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotControl.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotControl.Designer.cs	(revision 14859)
+++ /trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotControl.Designer.cs	(revision 14860)
@@ -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.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.chart_MouseDoubleClick);
       this.chart.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chart_MouseDown);
       this.chart.MouseMove += new System.Windows.Forms.MouseEventHandler(this.chart_MouseMove);
Index: /trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotControl.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotControl.cs	(revision 14859)
+++ /trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotControl.cs	(revision 14860)
@@ -29,4 +29,5 @@
 using HeuristicLab.Collections;
 using HeuristicLab.Common;
+using HeuristicLab.MainForm;
 using HeuristicLab.MainForm.WindowsForms;
 
@@ -122,9 +123,9 @@
       foreach (var row in rows) {
         RegisterScatterPlotDataRowEvents(row);
-        Series series = new Series(row.Name) {
-          Tag = row
-        };
+        Series series = new Series(row.Name) { Tag = row };
+
         if (row.VisualProperties.DisplayName.Trim() != String.Empty) series.LegendText = row.VisualProperties.DisplayName;
         else series.LegendText = row.Name;
+
         var regressionSeries = new Series(row.Name + "_Regression") {
           Tag = row,
@@ -134,7 +135,9 @@
           Color = Color.Transparent // to avoid auto color assignment via color palette 
         };
+
         seriesToRegressionSeriesTable.Add(series, regressionSeries);
         ConfigureSeries(series, regressionSeries, row);
         FillSeriesWithRowValues(series, row);
+
         chart.Series.Add(series);
         chart.Series.Add(regressionSeries);
@@ -439,4 +442,19 @@
 
     #region Chart Event Handlers
+    private void chart_MouseDoubleClick(object sender, MouseEventArgs e) {
+      HitTestResult result = chart.HitTest(e.X, e.Y,ChartElementType.DataPoint);
+      if (result.ChartElementType != ChartElementType.DataPoint) return;
+
+      var series = result.Series;
+      var dataPoint = series.Points[result.PointIndex];
+      var tag = dataPoint.Tag;
+      var content = tag as IContent;
+
+      if (tag == null) return;
+      if (content == null) return;
+
+      MainFormManager.MainForm.ShowContent(content);
+    }
+
     private void chart_MouseDown(object sender, MouseEventArgs e) {
       HitTestResult result = chart.HitTest(e.X, e.Y);
@@ -511,4 +529,5 @@
           point.YValues = new double[] { value.Y };
         }
+        point.Tag = value.Tag;
         series.Points.Add(point);
         if (value.X != 0.0f)
@@ -604,7 +623,7 @@
       double cov = sxy / n - sx * sy / n / n;
       // standard error of x
-      double sigmaX = Math.Sqrt(sxx / n -  sx * sx / n / n);
+      double sigmaX = Math.Sqrt(sxx / n - sx * sx / n / n);
       // standard error of y
-      double sigmaY = Math.Sqrt(syy / n -  sy * sy / n / n);
+      double sigmaY = Math.Sqrt(syy / n - sy * sy / n / n);
 
       // correlation
Index: /trunk/sources/HeuristicLab.Common/3.3/Point2D.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.3/Point2D.cs	(revision 14859)
+++ /trunk/sources/HeuristicLab.Common/3.3/Point2D.cs	(revision 14860)
@@ -26,5 +26,5 @@
 namespace HeuristicLab.Common {
   [Serializable]
-  public struct Point2D<T> where T : struct {
+  public struct Point2D<T> where T : struct, IEquatable<T> {
     public static readonly Point2D<T> Empty = new Point2D<T>();
 
@@ -38,4 +38,9 @@
     }
 
+    private object tag;
+    public object Tag {
+      get { return tag; }
+    }
+
     [Browsable(false)]
     public bool IsEmpty {
@@ -43,11 +48,12 @@
     }
 
-    public Point2D(T x, T y) {
+    public Point2D(T x, T y, object tag = null) {
       this.x = x;
       this.y = y;
+      this.tag = tag;
     }
 
     public static bool operator ==(Point2D<T> left, Point2D<T> right) {
-      return left.x.Equals(right.x) && left.y.Equals(right.y);
+      return left.x.Equals(right.x) && left.y.Equals(right.y) && left.tag == right.tag;
     }
     public static bool operator !=(Point2D<T> left, Point2D<T> right) {
@@ -59,5 +65,6 @@
         return false;
       Point2D<T> point = (Point2D<T>)obj;
-      return x.Equals(point.x) && y.Equals(point.y) && GetType().Equals(point.GetType());
+      return GetType() == point.GetType() && x.Equals(point.x) && y.Equals(point.y) &&
+             ((tag != null && tag.Equals(point.tag)) || tag == point.tag);
     }
     public override int GetHashCode() {
