Index: /trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChart.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChart.cs	(revision 1423)
+++ /trunk/sources/HeuristicLab.CEDMA.Charting/BubbleChart.cs	(revision 1424)
@@ -118,15 +118,12 @@
       double maxSize = 1;
       double minSize = 1;
-      try {
-        if (sizeDimension != null && results.OrdinalVariables.Contains(sizeDimension)) {
-          var sizes = records
-            .Select(x => Convert.ToDouble(x.Get(sizeDimension)))
-            .Where(size => !double.IsInfinity(size) && size != double.MaxValue && size != double.MinValue)
-            .OrderBy(r => r);
-          minSize = sizes.ElementAt((int)(sizes.Count() * 0.1));
-          maxSize = sizes.ElementAt((int)(sizes.Count() * 0.9));
-        }
-      }
-      catch (InvalidCastException) {
+      if (sizeDimension != null && results.OrdinalVariables.Contains(sizeDimension)) {
+        var sizes = records
+          .Select(x => Convert.ToDouble(x.Get(sizeDimension)))
+          .Where(size => !double.IsInfinity(size) && size != double.MaxValue && size != double.MinValue)
+          .OrderBy(r => r);
+        minSize = sizes.ElementAt((int)(sizes.Count() * 0.1));
+        maxSize = sizes.ElementAt((int)(sizes.Count() * 0.9));
+      } else {
         minSize = 1;
         maxSize = 1;
@@ -142,14 +139,20 @@
         double x, y;
         int size;
-        try {
+        if (results.OrdinalVariables.Contains(xDimension)) {
           x = Convert.ToDouble(r.Get(xDimension)) + (double)r.Get(X_JITTER) * xJitterFactor;
+        } else if (results.CategoricalVariables.Contains(xDimension)) {
+          x = results.IndexOfCategoricalValue(xDimension, r.Get(xDimension)) + (double)r.Get(X_JITTER) * xJitterFactor;
+        } else {
+          x = double.NaN;
+        }
+        if (results.OrdinalVariables.Contains(yDimension)) {
           y = Convert.ToDouble(r.Get(yDimension)) + (double)r.Get(Y_JITTER) * yJitterFactor;
-          size = CalculateSize(Convert.ToDouble(r.Get(sizeDimension)), minSize, maxSize);
-        }
-        catch (InvalidCastException) {
-          x = double.NaN;
+        } else if (results.CategoricalVariables.Contains(yDimension)) {
+          y = results.IndexOfCategoricalValue(yDimension, r.Get(yDimension)) + (double)r.Get(Y_JITTER) * yJitterFactor;
+        } else {
           y = double.NaN;
-          size = minBubbleSize;
-        }
+        }
+        size = CalculateSize(Convert.ToDouble(r.Get(sizeDimension)), minSize, maxSize);
+
         if (double.IsInfinity(x) || x == double.MaxValue || x == double.MinValue) x = double.NaN;
         if (double.IsInfinity(y) || y == double.MaxValue || y == double.MinValue) y = double.NaN;
@@ -221,5 +224,4 @@
     }
 
-
     public override void MouseDrag(Point start, Point end, MouseButtons button) {
       if (button == MouseButtons.Left && Mode == ChartMode.Select) {
@@ -251,6 +253,8 @@
       if (button == MouseButtons.Left) {
         ResultsEntry r = GetResultsEntry(point);
-        if (r != null) r.ToggleSelected();
-        results.FireChanged();
+        if (r != null) {
+          r.ToggleSelected();
+          results.FireChanged();
+        }
       } else {
         base.MouseClick(point, button);
Index: /trunk/sources/HeuristicLab.CEDMA.Core/Results.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/Results.cs	(revision 1423)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/Results.cs	(revision 1424)
@@ -137,4 +137,8 @@
         .ToArray();
     }
+
+    public double IndexOfCategoricalValue(string variable, object value) {
+      return 1.0; // TODO
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.CEDMA.Core/ResultsEntry.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Core/ResultsEntry.cs	(revision 1423)
+++ /trunk/sources/HeuristicLab.CEDMA.Core/ResultsEntry.cs	(revision 1424)
@@ -37,11 +37,11 @@
 
     private bool selected = false;
-    public bool Selected { 
+    public bool Selected {
       get { return selected; }
-      set { selected = value; } 
+      set { selected = value; }
     }
 
     private string uri;
-    public string Uri { 
+    public string Uri {
       get { return uri; }
       set { uri = value; }
@@ -64,16 +64,10 @@
       StringBuilder b = new StringBuilder();
       foreach (KeyValuePair<string, object> v in values) {
-        b.Append(v.Key).Append(" = ").Append(v.Value).AppendLine();
+        string val = v.Value.ToString();
+        if (val.Length > 40) val = val.Substring(0, 38) + "...";
+        b.Append(v.Key).Append(" = ").Append(val).AppendLine();
       }
       return b.ToString();
     }
-
-    //internal void OpenModel() {
-    //  resultList.OpenModel(this);
-    //}
-
-    //internal void OpenGeneratingAlgorithm() {
-    //  resultList.OpenAlgorithm(this);
-    //}
   }
 }
