Index: /trunk/sources/HeuristicLab.Visualization/HorizontalLineShape.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/HorizontalLineShape.cs	(revision 1241)
+++ /trunk/sources/HeuristicLab.Visualization/HorizontalLineShape.cs	(revision 1242)
@@ -2,44 +2,23 @@
 
 namespace HeuristicLab.Visualization {
-  public class MinMaxLineShape : WorldShape {
-    private readonly LineShape minLineShape;
-    private readonly LineShape maxLineShape;
-
+  public class HorizontalLineShape : LineShape {
     /// <summary>
-    /// Initializes the HorizontalLineShape.
+    /// Initializes the LineShape.
     /// </summary>
+    /// <param name="x1">x coordinate of left lineEndPoind</param>
+    /// <param name="y1">y coordinate of left lineEndPoind</param>
+    /// <param name="x2">x coordinate of right lineEndPoind</param>
+    /// <param name="y2">y coordinate of right lineEndPoind</param>
     /// <param name="color">color for the LineShape</param>
-    /// <param name="yMin">y value for lower line</param>
-    /// <param name="yMax">y value for upper line</param>
-    /// <param name="thickness">line thickness</param>
-    /// <param name="style">line style</param>
-    public MinMaxLineShape(double yMin, double yMax, Color color, int thickness, DrawingStyle style) {
-      minLineShape = new LineShape(0, yMin, 1, yMin, color, thickness, style);
-      maxLineShape = new LineShape(0, yMax, 1, yMax, color, thickness, style);
-      AddShape(minLineShape);
-      AddShape(maxLineShape);
-    }
+    /// <param name="thickness">tickness of the line in pixels</param>
+    /// <param name="drawingStyle">drawing style of the line (solid, dashed, dotted,...)</param>
+    public HorizontalLineShape(double x1, double y1, double x2, double y2, Color color, int thickness,
+                               DrawingStyle drawingStyle) : base(x1, y1, x2, y2, color, thickness, drawingStyle) {}
 
     public override void Draw(Graphics graphics) {
-      minLineShape.X1 = ClippingArea.X1;
-      minLineShape.X2 = ClippingArea.X2;
-      maxLineShape.X1 = ClippingArea.X1;
-      maxLineShape.X2 = ClippingArea.X2;
+      X1 = Parent.ClippingArea.X1;
+      X2 = Parent.ClippingArea.X2;
+      Y2 = Y1;
       base.Draw(graphics);
-    }
-
-
-    public double YMin {
-      set {
-        minLineShape.Y1 = value;
-        minLineShape.Y2 = value;
-      }
-    }
-
-    public double YMax {
-      set {
-        maxLineShape.Y1 = value;
-        maxLineShape.Y2 = value;
-      }
     }
   }
Index: /trunk/sources/HeuristicLab.Visualization/LineChart.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/LineChart.cs	(revision 1241)
+++ /trunk/sources/HeuristicLab.Visualization/LineChart.cs	(revision 1242)
@@ -10,5 +10,4 @@
   public partial class LineChart : ViewBase {
     internal class LinesShape : WorldShape {}
-
     private readonly IChartDataRowsModel model;
     private readonly Canvas canvas;
@@ -18,7 +17,5 @@
     private double minDataValue;
     private double maxDataValue;
-    private bool minMaxLineEnabled;
-    private MinMaxLineShape minMaxLineShape;
-    private IShape minLineShape;
+  
 
     private readonly TextShape titleShape;
@@ -49,6 +46,5 @@
       }
 
-      minMaxLineEnabled = true;
-
+    
       canvas = canvasUI.Canvas;
 
@@ -68,6 +64,6 @@
       canvas.AddShape(titleShape);
 
-      minMaxLineShape = new MinMaxLineShape(this.minDataValue, this.maxDataValue, Color.Yellow, 4, DrawingStyle.Solid);
-      canvas.AddShape(minMaxLineShape);
+      //  horizontalLineShape = new HorizontalLineShape(this.maxDataValue, Color.Yellow, 4, DrawingStyle.Solid);
+      //  root.AddShape(horizontalLineShape);
 
       legendShape = new LegendShape();
@@ -111,5 +107,4 @@
       grid.BoundingBox = linesShape.BoundingBox;
 
-      minMaxLineShape.BoundingBox = linesShape.BoundingBox;
 
       yAxis.BoundingBox = new RectangleD(0,
@@ -135,5 +130,22 @@
     }
 
+    private void optionsToolStripMenuItem_Click(object sender, EventArgs e) {
+      var optionsdlg = new OptionsDialog(this.model);
+      optionsdlg.ShowDialog(this);
+    }
+
+    public void OnDataRowChanged(IDataRow row) {
+      foreach (LineShape ls in rowToLineShapes[row]) {
+        ls.LSColor = row.Color;
+        ls.LSThickness = row.Thickness;
+        ls.LSDrawingStyle = row.Style;
+      }
+      canvasUI.Invalidate();
+    }
+
     #region Add-/RemoveItemEvents
+
+    private readonly IDictionary<IDataRow, List<LineShape>> rowToLineShapes =
+      new Dictionary<IDataRow, List<LineShape>>();
 
     protected override void AddItemEvents() {
@@ -164,4 +176,5 @@
       if (row.Count > maxDataRowCount) {
         maxDataRowCount = row.Count;
+        //   UpdateSingleValueRows();
       }
 
@@ -183,8 +196,8 @@
         return;
       }
-      RectangleD newClippingArea = new RectangleD(-0.1,
-                                                  minDataValue - ((maxDataValue - minDataValue)*0.05),
-                                                  maxDataRowCount - 0.9,
-                                                  maxDataValue + ((maxDataValue - minDataValue)*0.05));
+      var newClippingArea = new RectangleD(-0.1,
+                                           minDataValue - ((maxDataValue - minDataValue)*0.05),
+                                           maxDataRowCount - 0.9,
+                                           maxDataValue + ((maxDataValue - minDataValue)*0.05));
 
       SetLineClippingArea(newClippingArea);
@@ -201,5 +214,6 @@
       grid.ClippingArea = linesShape.ClippingArea;
 
-      minMaxLineShape.ClippingArea = linesShape.ClippingArea;
+      // horizontalLineShape.ClippingArea = linesShape.ClippingArea;
+
 
       xAxis.ClippingArea = new RectangleD(linesShape.ClippingArea.X1,
@@ -215,23 +229,33 @@
 
     private void InitLineShapes(IDataRow row) {
-      List<LineShape> lineShapes = new List<LineShape>();
+      var lineShapes = new List<LineShape>();
       if (rowToLineShapes.Count == 0) {
         minDataValue = Double.PositiveInfinity;
         maxDataValue = Double.NegativeInfinity;
       }
-      if (row.Count > 0) {
+      if ((row.Count > 0)) {
         maxDataValue = Math.Max(row[0], maxDataValue);
         minDataValue = Math.Min(row[0], minDataValue);
       }
-      for (int i = 1; i < row.Count; i++) {
-        LineShape lineShape = new LineShape(i - 1, row[i - 1], i, row[i], row.Color, row.Thickness, row.Style);
-        lineShapes.Add(lineShape);
-        // TODO each DataRow needs its own WorldShape so Y Axes can be zoomed independently.
-        linesShape.AddShape(lineShape);
-        maxDataValue = Math.Max(row[i], maxDataValue);
-        minDataValue = Math.Min(row[i], minDataValue);
-      }
-      minMaxLineShape.YMax = maxDataValue;
-      minMaxLineShape.YMin = minDataValue;
+      if ((row.LineType == DataRowType.SingleValue)) {
+        if (row.Count > 0) {
+          LineShape lineShape = new HorizontalLineShape(0, row[0], double.MaxValue, row[0], row.Color, row.Thickness,
+                                                        row.Style);
+          lineShapes.Add(lineShape);
+          // TODO each DataRow needs its own WorldShape so Y Axes can be zoomed independently.
+          linesShape.AddShape(lineShape);
+        }
+      }
+      else {
+        for (int i = 1; i < row.Count; i++) {
+          var lineShape = new LineShape(i - 1, row[i - 1], i, row[i], row.Color, row.Thickness, row.Style);
+          lineShapes.Add(lineShape);
+          // TODO each DataRow needs its own WorldShape so Y Axes can be zoomed independently.
+          linesShape.AddShape(lineShape);
+          maxDataValue = Math.Max(row[i], maxDataValue);
+          minDataValue = Math.Min(row[i], minDataValue);
+        }
+      }
+      //horizontalLineShape.YVal = maxDataValue;
       rowToLineShapes[row] = lineShapes;
       ZoomToFullView();
@@ -239,7 +263,4 @@
       canvasUI.Invalidate();
     }
-
-    private readonly IDictionary<IDataRow, List<LineShape>> rowToLineShapes =
-      new Dictionary<IDataRow, List<LineShape>>();
 
     // TODO use action parameter
@@ -248,33 +269,49 @@
       maxDataValue = Math.Max(value, maxDataValue);
       minDataValue = Math.Min(value, minDataValue);
-      minMaxLineShape.YMax = maxDataValue;
-      minMaxLineShape.YMin = minDataValue;
-      if (index > lineShapes.Count + 1) {
-        throw new NotImplementedException();
-      }
-
-      // new value was added
-      if (index > 0 && index == lineShapes.Count + 1) {
-        if (maxDataRowCount < row.Count) {
-          maxDataRowCount = row.Count;
-        }
-        LineShape lineShape = new LineShape(index - 1, row[index - 1], index, row[index], row.Color, row.Thickness,
-                                            row.Style);
-        lineShapes.Add(lineShape);
-        // TODO each DataRow needs its own WorldShape so Y Axes can be zoomed independently.
-        linesShape.AddShape(lineShape);
-      }
-
-      // not the first value
-      if (index > 0) {
-        lineShapes[index - 1].Y2 = value;
-      }
-
-      // not the last value
-      if (index > 0 && index < row.Count - 1) {
-        lineShapes[index].Y1 = value;
-      }
+      if (row.LineType == DataRowType.SingleValue) {
+        if (action == Action.Added) {
+          LineShape lineShape = new HorizontalLineShape(0, row[0], double.MaxValue, row[0], row.Color, row.Thickness,
+                                                        row.Style);
+          lineShapes.Add(lineShape);
+          // TODO each DataRow needs its own WorldShape so Y Axes can be zoomed independently.
+          linesShape.AddShape(lineShape);
+        }
+        else {
+          // lineShapes[0].X2 = maxDataRowCount;
+          lineShapes[0].Y1 = value;
+          lineShapes[0].Y2 = value;
+        }
+      }
+      else {
+        //  horizontalLineShape.YVal = maxDataValue;
+        if (index > lineShapes.Count + 1) {
+          throw new NotImplementedException();
+        }
+
+        // new value was added
+        if (index > 0 && index == lineShapes.Count + 1) {
+          if (maxDataRowCount < row.Count) {
+            maxDataRowCount = row.Count;
+            //  UpdateSingleValueRows();
+          }
+          var lineShape = new LineShape(index - 1, row[index - 1], index, row[index], row.Color, row.Thickness,
+                                        row.Style);
+          lineShapes.Add(lineShape);
+          // TODO each DataRow needs its own WorldShape so Y Axes can be zoomed independently.
+          linesShape.AddShape(lineShape);
+        }
+
+        // not the first value
+        if (index > 0) {
+          lineShapes[index - 1].Y2 = value;
+        }
+
+        // not the last value
+        if (index > 0 && index < row.Count - 1) {
+          lineShapes[index].Y1 = value;
+        }
+      }
+
       ZoomToFullView();
-
       canvasUI.Invalidate();
     }
@@ -299,16 +336,8 @@
     }
 
-    public void OnDataRowChanged(IDataRow row) {
-      foreach (LineShape ls in rowToLineShapes[row]) {
-        ls.LSColor = row.Color;
-        ls.LSThickness = row.Thickness;
-        ls.LSDrawingStyle = row.Style;
-      }
-      canvasUI.Invalidate();
-    }
-
+  
     #region Begin-/EndUpdate
 
-    private int beginUpdateCount = 0;
+    private int beginUpdateCount;
 
     public void BeginUpdate() {
@@ -349,7 +378,5 @@
       Focus();
       if (e.Button == MouseButtons.Right) {
-     
-          this.contextMenuStrip1.Show(PointToScreen(e.Location));
-     
+        contextMenuStrip1.Show(PointToScreen(e.Location));
       }
       else {
@@ -383,5 +410,5 @@
 
     private void CreateZoomListener(MouseEventArgs e) {
-      ZoomListener zoomListener = new ZoomListener(e.Location);
+      var zoomListener = new ZoomListener(e.Location);
       zoomListener.DrawRectangle += DrawRectangle;
       zoomListener.OnMouseUp += OnZoom_MouseUp;
@@ -436,8 +463,5 @@
     #endregion
 
-    private void optionsToolStripMenuItem_Click(object sender, EventArgs e) {
-      OptionsDialog optionsdlg = new OptionsDialog(this);
-      optionsdlg.ShowDialog(this);
-    }
+   
   }
 }
Index: /trunk/sources/HeuristicLab.Visualization/LineShape.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/LineShape.cs	(revision 1241)
+++ /trunk/sources/HeuristicLab.Visualization/LineShape.cs	(revision 1242)
@@ -32,4 +32,5 @@
     public RectangleD BoundingBox {
       get { return boundingBox; }
+      set { boundingBox = value; }
     }
 
@@ -71,5 +72,5 @@
     /// </summary>
     /// <param name="graphics">graphics handle to draw to</param>
-    public void Draw(Graphics graphics) {
+    public virtual void Draw(Graphics graphics) {
       Rectangle screenRect = Transform.ToScreen(boundingBox, Parent.Viewport, Parent.ClippingArea);
 
Index: /trunk/sources/HeuristicLab.Visualization/Options/OptionsDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/Options/OptionsDialog.cs	(revision 1241)
+++ /trunk/sources/HeuristicLab.Visualization/Options/OptionsDialog.cs	(revision 1242)
@@ -5,9 +5,9 @@
 namespace HeuristicLab.Visualization.Options {
   public partial class OptionsDialog : Form {
-    private readonly LineChart lc;
+    private readonly IChartDataRowsModel model;
 
-    public OptionsDialog(LineChart lc) {
+    public OptionsDialog(IChartDataRowsModel model) {
       InitializeComponent();
-      this.lc = lc;
+      this.model = model;
     }
 
@@ -27,6 +27,6 @@
 
     private void OptionsDialog_Load(object sender, EventArgs e) {
-      if (lc.GetRows().Count != 0) {
-        LineSelectCB.DataSource = lc.GetRows();
+      if (model.Rows.Count != 0) {
+        LineSelectCB.DataSource = model.Rows;
         LineSelectCB.DisplayMember = "Label";
 
