Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/GraphVisualizationInfoView.Designer.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/GraphVisualizationInfoView.Designer.cs	(revision 7215)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/GraphVisualizationInfoView.Designer.cs	(revision 7270)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/GraphVisualizationInfoView.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/GraphVisualizationInfoView.cs	(revision 7215)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/GraphVisualizationInfoView.cs	(revision 7270)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorGraphView.Designer.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorGraphView.Designer.cs	(revision 7215)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorGraphView.Designer.cs	(revision 7270)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorGraphView.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorGraphView.cs	(revision 7215)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorGraphView.cs	(revision 7270)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorShape.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorShape.cs	(revision 7215)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorShape.cs	(revision 7270)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -79,4 +79,6 @@
     }
 
+    public string Subtitle { get; set; }
+
     private IconMaterial iconMaterial;
     public Bitmap Icon {
@@ -216,63 +218,88 @@
       g.SmoothingMode = SmoothingMode.HighQuality;
 
-      Pen pen = new Pen(lineColor, lineWidth);
-
-      SizeF titleSize = g.MeasureString(this.Title, ArtPalette.DefaultBoldFont, Rectangle.Width - 45);
-      if (titleSize.Height + 10 > Rectangle.Height) {
-        headerHeight = (int)titleSize.Height + 10;
-        this.UpdateLabels();
-      }
-
-      GraphicsPath path = new GraphicsPath();
-      path.AddArc(Rectangle.X, Rectangle.Y, 20, 20, -180, 90);
-      path.AddLine(Rectangle.X + 10, Rectangle.Y, Rectangle.X + Rectangle.Width - 10, Rectangle.Y);
-      path.AddArc(Rectangle.X + Rectangle.Width - 20, Rectangle.Y, 20, 20, -90, 90);
-      path.AddLine(Rectangle.X + Rectangle.Width, Rectangle.Y + 10, Rectangle.X + Rectangle.Width, Rectangle.Y + Rectangle.Height - 10);
-      path.AddArc(Rectangle.X + Rectangle.Width - 20, Rectangle.Y + Rectangle.Height - 20, 20, 20, 0, 90);
-      path.AddLine(Rectangle.X + Rectangle.Width - 10, Rectangle.Y + Rectangle.Height, Rectangle.X + 10, Rectangle.Y + Rectangle.Height);
-      path.AddArc(Rectangle.X, Rectangle.Y + Rectangle.Height - 20, 20, 20, 90, 90);
-      path.AddLine(Rectangle.X, Rectangle.Y + Rectangle.Height - 10, Rectangle.X, Rectangle.Y + 10);
-      //shadow
-      if (ArtPalette.EnableShadows) {
-        Region darkRegion = new Region(path);
-        darkRegion.Translate(5, 5);
-        g.FillRegion(ArtPalette.ShadowBrush, darkRegion);
-      }
-      //background
-      g.FillPath(Brush, path);
-
-      using (LinearGradientBrush gradientBrush = new LinearGradientBrush(Rectangle.Location, new Point(Rectangle.X + Rectangle.Width, Rectangle.Y), this.Color, Color.White)) {
-        Region gradientRegion = new Region(path);
-        g.FillRegion(gradientBrush, gradientRegion);
-      }
-
-      if (!this.Collapsed) {
-        TextStyle textStyle = new TextStyle(Color.Black, new Font("Arial", 7), StringAlignment.Near, StringAlignment.Near);
-        StringFormat stringFormat = textStyle.StringFormat;
-        stringFormat.Trimming = StringTrimming.EllipsisWord;
-        stringFormat.FormatFlags = StringFormatFlags.LineLimit;
-        Rectangle rect;
-
-        for (int i = 0; i < this.labels.Count; i++) {
-          rect = new Rectangle(Rectangle.X + 25, Rectangle.Y + headerHeight + i * (LABEL_HEIGHT + LABEL_SPACING), LABEL_WIDTH, LABEL_HEIGHT);
-          g.DrawString(textStyle.GetFormattedText(this.labels[i]), textStyle.Font, textStyle.GetBrush(), rect, stringFormat);
-        }
-      }
-
-      //the border
-      g.DrawPath(pen, path);
-
-      //the title
-      g.DrawString(this.Title, ArtPalette.DefaultBoldFont, Brushes.Black, new Rectangle(Rectangle.X + 25, Rectangle.Y + 5, Rectangle.Width - 45, Rectangle.Height - 5));
-
-
-      //the material
-      foreach (IPaintable material in Children)
-        material.Paint(g);
-
-      //the connectors
-      if (this.ShowConnectors) {
-        for (int k = 0; k < Connectors.Count; k++)
-          Connectors[k].Paint(g);
+      using (Pen pen = new Pen(lineColor, lineWidth)) {
+
+        SizeF titleSize = g.MeasureString(this.Title, ArtPalette.DefaultBoldFont, Rectangle.Width - 45);
+        titleSize.Height += 10; //add spacing
+        SizeF subtitleSize = g.MeasureString(this.Subtitle, ArtPalette.DefaultFont, Rectangle.Width - 45);
+        subtitleSize.Height += 5; //add spacing
+        if (this.Title == this.Subtitle || string.IsNullOrEmpty(this.Subtitle)) subtitleSize = new SizeF(0, 0);
+
+        if ((int)titleSize.Height + (int)subtitleSize.Height != Rectangle.Height) {
+          headerHeight = (int)titleSize.Height + (int)subtitleSize.Height;
+          this.UpdateLabels();
+        }
+
+        GraphicsPath path = new GraphicsPath();
+        path.AddArc(Rectangle.X, Rectangle.Y, 20, 20, -180, 90);
+        path.AddLine(Rectangle.X + 10, Rectangle.Y, Rectangle.X + Rectangle.Width - 10, Rectangle.Y);
+        path.AddArc(Rectangle.X + Rectangle.Width - 20, Rectangle.Y, 20, 20, -90, 90);
+        path.AddLine(Rectangle.X + Rectangle.Width, Rectangle.Y + 10, Rectangle.X + Rectangle.Width, Rectangle.Y + Rectangle.Height - 10);
+        path.AddArc(Rectangle.X + Rectangle.Width - 20, Rectangle.Y + Rectangle.Height - 20, 20, 20, 0, 90);
+        path.AddLine(Rectangle.X + Rectangle.Width - 10, Rectangle.Y + Rectangle.Height, Rectangle.X + 10, Rectangle.Y + Rectangle.Height);
+        path.AddArc(Rectangle.X, Rectangle.Y + Rectangle.Height - 20, 20, 20, 90, 90);
+        path.AddLine(Rectangle.X, Rectangle.Y + Rectangle.Height - 10, Rectangle.X, Rectangle.Y + 10);
+        //shadow
+        if (ArtPalette.EnableShadows) {
+          Region darkRegion = new Region(path);
+          darkRegion.Translate(5, 5);
+          g.FillRegion(ArtPalette.ShadowBrush, darkRegion);
+        }
+        //background
+        g.FillPath(Brush, path);
+
+        using (LinearGradientBrush gradientBrush = new LinearGradientBrush(Rectangle.Location, new Point(Rectangle.X + Rectangle.Width, Rectangle.Y), this.Color, Color.White)) {
+          Region gradientRegion = new Region(path);
+          g.FillRegion(gradientBrush, gradientRegion);
+        }
+
+        if (!this.Collapsed) {
+          TextStyle textStyle = new TextStyle(Color.Black, new Font("Arial", 7), StringAlignment.Near, StringAlignment.Near);
+          StringFormat stringFormat = textStyle.StringFormat;
+          stringFormat.Trimming = StringTrimming.EllipsisWord;
+          stringFormat.FormatFlags = StringFormatFlags.LineLimit;
+          Rectangle rect;
+
+          const int verticalHeaderSpacing = 5;
+          Point separationLineStart = new Point(Rectangle.X + 25, Rectangle.Y + headerHeight - verticalHeaderSpacing);
+          Point separationLineEnd = new Point(Rectangle.X + Rectangle.Width - 25, Rectangle.Y + headerHeight - verticalHeaderSpacing);
+          using (LinearGradientBrush brush = new LinearGradientBrush(separationLineStart, separationLineEnd, Color.Black, Color.White)) {
+            using (Pen separationLinePen = new Pen(brush)) {
+              g.DrawLine(separationLinePen, separationLineStart, separationLineEnd);
+            }
+          }
+
+
+          for (int i = 0; i < this.labels.Count; i++) {
+            rect = new Rectangle(Rectangle.X + 25, Rectangle.Y + headerHeight + i * (LABEL_HEIGHT + LABEL_SPACING), LABEL_WIDTH, LABEL_HEIGHT);
+            g.DrawString(textStyle.GetFormattedText(this.labels[i]), textStyle.Font, textStyle.GetBrush(), rect, stringFormat);
+          }
+        }
+
+        //the border
+        g.DrawPath(pen, path);
+
+        //the title
+        g.DrawString(this.Title, ArtPalette.DefaultBoldFont, Brushes.Black,
+                     new Rectangle(Rectangle.X + 25, Rectangle.Y + 5,
+                                   Rectangle.Width - 45, Rectangle.Height - 5 - (int)subtitleSize.Height));
+
+        //the subtitle
+        if (this.Title != this.Subtitle || string.IsNullOrEmpty(this.Subtitle)) {
+          g.DrawString(this.Subtitle, ArtPalette.DefaultFont, Brushes.Black,
+                       new Rectangle(Rectangle.X + 25, Rectangle.Y + (int)titleSize.Height -5 ,
+                                     Rectangle.Width - 45, Rectangle.Height - 5));
+        }
+
+
+        //the material
+        foreach (IShapeMaterial material in Children)
+          material.Paint(g);
+
+        //the connectors
+        if (this.ShowConnectors) {
+          foreach (IConnector t in Connectors)
+            t.Paint(g);
+        }
       }
     }
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/Plugin.cs.frame
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/Plugin.cs.frame	(revision 7215)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/Plugin.cs.frame	(revision 7270)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Operators.Views.GraphVisualization.Views {
-  [Plugin("HeuristicLab.Operators.Views.GraphVisualization.Views-3.3", "3.3.5.$WCREV$")]
+  [Plugin("HeuristicLab.Operators.Views.GraphVisualization.Views-3.3", "3.3.6.$WCREV$")]
   [PluginFile("HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 7215)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 7270)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -32,5 +32,5 @@
 [assembly: AssemblyCompany("HEAL")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2012 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
@@ -55,3 +55,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.6.$WCREV$")]
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/ShapeInfoExtensions.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/ShapeInfoExtensions.cs	(revision 7215)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/ShapeInfoExtensions.cs	(revision 7270)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -50,4 +50,5 @@
       shape.Location = shapeInfo.Location;
       shape.Title = shapeInfo.Title;
+      shape.Subtitle = shapeInfo.TypeName;
       shape.Color = shapeInfo.Color;
       shape.LineColor = shapeInfo.LineColor;
@@ -65,4 +66,5 @@
     public static void UpdateShape(IOperatorShapeInfo operatorShapeInfo, OperatorShape operatorShape) {
       operatorShape.Title = operatorShapeInfo.Title;
+      operatorShape.Subtitle = operatorShapeInfo.TypeName;
       operatorShape.Color = operatorShapeInfo.Color;
       operatorShape.LineColor = operatorShapeInfo.LineColor;
@@ -105,4 +107,5 @@
     public static void UpdateShapeInfo(IOperatorShapeInfo operatorShapeInfo, OperatorShape operatorShape) {
       operatorShapeInfo.Title = operatorShape.Title;
+      operatorShapeInfo.TypeName = operatorShape.Subtitle;
       operatorShapeInfo.Color = operatorShape.Color;
       operatorShapeInfo.LineColor = operatorShape.LineColor;
