Index: branches/HiveStatistics/sources/HeuristicLab.Services.Hive.Statistics/3.3/App_Code/ChartHelper.cshtml
===================================================================
--- branches/HiveStatistics/sources/HeuristicLab.Services.Hive.Statistics/3.3/App_Code/ChartHelper.cshtml	(revision 11246)
+++ branches/HiveStatistics/sources/HeuristicLab.Services.Hive.Statistics/3.3/App_Code/ChartHelper.cshtml	(revision 11252)
@@ -478,4 +478,8 @@
   var @(destinationTag)PlotOptions = {
     title: "@title",
+    highlighter: {
+      show: true,
+      sizeAdjust: 7.5
+    },
     axes: {
       xaxis: {
@@ -502,5 +506,5 @@
           @:max: window["@(dataName)Data" + 0][window["@(dataName)Data" + 0].length - 1][1] + upperYBuffer,
         }
-        numberTicks: 6
+        numberTicks: 5
       }
     },
@@ -510,4 +514,12 @@
         show: false
       }
+    },
+    cursor: {
+      show: true,
+      showTooltip: false,
+      zoom: true,
+      clickReset: false,
+      dblClickReset: false,
+      constrainZoomTo: 'x'
     }
   };
@@ -836,12 +848,15 @@
             '<button class="collapse" onclick="CollapseSection(this)">-</button>' + 
             '<div id="UserTask@(taskState)Plot" class="noXTicks"></div>' +
+            '<label id="UserTask@(taskState)PlotInfo"></label>' + 
           '</section>'
         );
       }
       var userTasks = [];
+      var userNameLabels = [];
       var userNames = [];
       for (i=0; i < result.length; i++) {
         userTasks[i] = [result[i].Value];
-        userNames[i] = { label: result[i].Key };
+        userNameLabels[i] = { label: result[i].Key };
+        userNames[i] = result[i].Key;
       }
       window["UserTask@(taskState)Plot"] = $.jqplot("UserTask@(taskState)Plot", userTasks, {
@@ -852,5 +867,5 @@
           pointLabels: {show: true, formatString: '%.3f'}
         },
-        series: userNames,
+        series: userNameLabels,
         legend: {
           show: true,
@@ -872,4 +887,9 @@
         }
       });
+      /* Bind a datalistener to each chart and display details of clicked
+        upon data in the label below the chart */
+      $("#UserTask" + "@(taskState)Plot").bind('jqplotDataClick', function (ev, seriesIndex, pointIndex, data) {
+        $(this).next("label").html(userNames[seriesIndex] + " Tasks @(taskState): "  + data[1]);
+      });
     }});
   </text>
Index: branches/HiveStatistics/sources/HeuristicLab.Services.Hive.Statistics/3.3/Content/Site.css
===================================================================
--- branches/HiveStatistics/sources/HeuristicLab.Services.Hive.Statistics/3.3/Content/Site.css	(revision 11246)
+++ branches/HiveStatistics/sources/HeuristicLab.Services.Hive.Statistics/3.3/Content/Site.css	(revision 11252)
@@ -555,4 +555,9 @@
 }
 
+label[id^="UserTask"][id$="PlotInfo"] {
+  margin-top: 2%;
+  padding-left: 2%;
+}
+
 /* User Page Styles*/
 #TasksContainer div[id^="Task"] {
Index: branches/HiveStatistics/sources/HeuristicLab.Services.Hive.Statistics/3.3/Controllers/ChartDataController.cs
===================================================================
--- branches/HiveStatistics/sources/HeuristicLab.Services.Hive.Statistics/3.3/Controllers/ChartDataController.cs	(revision 11246)
+++ branches/HiveStatistics/sources/HeuristicLab.Services.Hive.Statistics/3.3/Controllers/ChartDataController.cs	(revision 11252)
@@ -92,4 +92,22 @@
     }
 
+    public JsonResult CurrentCpuUtilization()
+    {
+      using (var db = new HiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString))
+      {
+        var currentCpuUtil = (from client in db.FactClientInfos
+                             join clients in db.DimClients
+                               on client.ClientId equals clients.Id
+                             where clients.ExpirationTime == null
+                             select new { client.ClientId, client.CpuUtilization, client.Time })
+                             .OrderBy(c => c.Time).GroupBy(c => c.ClientId).ToList();
+
+        List<double> result = new List<double>();
+        result.Add(Math.Round(currentCpuUtil.Average(s => s.Last().CpuUtilization), 2));
+
+        return Json(result, JsonRequestBehavior.AllowGet);
+      }
+    }
+
     public JsonResult CurrentCores()
     {
@@ -97,10 +115,13 @@
       {
         var currentCores = (from client in db.FactClientInfos
-                            select new { client.NumTotalCores, client.NumUsedCores })
-                            .ToList();
+                            join clients in db.DimClients
+                              on client.ClientId equals clients.Id
+                            where clients.ExpirationTime == null
+                            select new { client.ClientId, client.NumTotalCores, client.NumUsedCores, client.Time })
+                            .OrderBy(c => c.Time).GroupBy(c => c.ClientId).ToList();
 
         List<int> result = new List<int>();
-        result.Add(currentCores.Sum(c => c.NumTotalCores));
-        result.Add(currentCores.Sum(s => s.NumUsedCores));
+        result.Add(currentCores.Sum(c => c.Last().NumTotalCores));
+        result.Add(currentCores.Sum(s => s.Last().NumUsedCores));
 
         return Json(result, JsonRequestBehavior.AllowGet);
@@ -108,19 +129,4 @@
     }
 
-    public JsonResult CurrentCpuUtilization()
-    {
-      using (var db = new HiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString))
-      {
-        var currentCpuUtil = (from client in db.FactClientInfos
-                            select new { client.CpuUtilization })
-                            .ToList();
-
-        List<double> result = new List<double>();
-        result.Add(Math.Round(currentCpuUtil.Average(s => s.CpuUtilization), 2));
-
-        return Json(result, JsonRequestBehavior.AllowGet);
-      }
-    }
-
     public JsonResult CurrentMemory()
     {
@@ -128,10 +134,13 @@
       {
         var currentMemory = (from client in db.FactClientInfos
-                            select new { client.TotalMemory, client.UsedMemory })
-                            .ToList();
+                            join clients in db.DimClients
+                              on client.ClientId equals clients.Id
+                            where clients.ExpirationTime == null
+                            select new { client.ClientId, client.TotalMemory, client.UsedMemory, client.Time })
+                            .OrderBy(c => c.Time).GroupBy(c => c.ClientId).ToList();
 
         List<int> result = new List<int>();
-        result.Add(currentMemory.Sum(c => c.TotalMemory)/1000);
-        result.Add(currentMemory.Sum(s => s.UsedMemory)/1000);
+        result.Add(currentMemory.Sum(c => c.Last().TotalMemory)/1000);
+        result.Add(currentMemory.Sum(s => s.Last().UsedMemory)/1000);
 
         return Json(result, JsonRequestBehavior.AllowGet);
Index: branches/HiveStatistics/sources/HeuristicLab.Services.Hive.Statistics/3.3/Views/Home/Index.cshtml
===================================================================
--- branches/HiveStatistics/sources/HeuristicLab.Services.Hive.Statistics/3.3/Views/Home/Index.cshtml	(revision 11246)
+++ branches/HiveStatistics/sources/HeuristicLab.Services.Hive.Statistics/3.3/Views/Home/Index.cshtml	(revision 11252)
@@ -104,7 +104,4 @@
         RefreshCharts();
       });
-
-      @ChartHelper.UserTasks(Url.Action("UserTasks", "ChartData"), "section.currentStats", "Calculating");
-      @ChartHelper.UserTasks(Url.Action("UserTasks", "ChartData"), "section.currentStats", "Waiting");
     });
 
@@ -119,5 +116,8 @@
 
     $(document).ready(function () {
-      @ChartHelper.SetStreamingProperties(1000,20,10)
+      @ChartHelper.UserTasks(Url.Action("UserTasks", "ChartData"), "section.currentStats", "Calculating");
+      @ChartHelper.UserTasks(Url.Action("UserTasks", "ChartData"), "section.currentStats", "Waiting");
+
+      @ChartHelper.SetStreamingProperties(1000,20,5)
 
       @ChartHelper.CreateStreamChart("CurrentCPU", "CurrentCPUUtilization",Url.Action("CurrentCpuUtilization","ChartData"),"Current CPU Utilization","%.2f%%",100.00)
