Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj	(revision 12559)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj	(revision 12560)
@@ -82,4 +82,5 @@
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApi/DataTransfer/Exception.cs
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApi/DataTransfer/Exception.cs	(revision 12560)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApi/DataTransfer/Exception.cs	(revision 12560)
@@ -0,0 +1,15 @@
+﻿using System;
+
+namespace HeuristicLab.Services.WebApp.Statistics.WebApi.DataTransfer {
+  public class Exception {
+    public Guid TaskId { get; set; }
+    public Guid JobId { get; set; }
+    public string JobName { get; set; }
+    public Guid UserId { get; set; }
+    public string UserName { get; set; }
+    public Guid ClientId { get; set; }
+    public string ClientName { get; set; }
+    public DateTime Date { get; set; }
+    public string Details { get; set; }
+  }
+}
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApi/DataTransfer/ExceptionPage.cs
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApi/DataTransfer/ExceptionPage.cs	(revision 12560)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApi/DataTransfer/ExceptionPage.cs	(revision 12560)
@@ -0,0 +1,9 @@
+﻿
+using System.Collections.Generic;
+
+namespace HeuristicLab.Services.WebApp.Statistics.WebApi.DataTransfer {
+  public class ExceptionPage {
+    public int TotalExceptions { get; set; }
+    public IEnumerable<Exception> Exceptions { get; set; }
+  }
+}
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApi/DataTransfer/UserDetails.cs
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApi/DataTransfer/UserDetails.cs	(revision 12560)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApi/DataTransfer/UserDetails.cs	(revision 12560)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Services.WebApp.Statistics.WebApi.DataTransfer {
+  public class UserDetails {
+    public Guid Id { get; set; }
+    public string Name { get; set; }
+    public IEnumerable<TaskStateCount> TasksStates { get; set; }
+  }
+}
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApi/ExceptionController.cs
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApi/ExceptionController.cs	(revision 12560)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApi/ExceptionController.cs	(revision 12560)
@@ -0,0 +1,49 @@
+﻿
+using System;
+using System.Linq;
+using System.Web.Http;
+using HeuristicLab.Services.Hive;
+using HeuristicLab.Services.Hive.DataAccess.Interfaces;
+using DT = HeuristicLab.Services.WebApp.Statistics.WebApi.DataTransfer;
+
+namespace HeuristicLab.Services.WebApp.Statistics.WebApi {
+  [Authorize(Roles = HiveRoles.Administrator)]
+  public class ExceptionController : ApiController {
+    private IPersistenceManager PersistenceManager {
+      get { return ServiceLocator.Instance.PersistenceManager; }
+    }
+
+    public DT.ExceptionPage GetExceptions(int page, int size) {
+      using (var pm = PersistenceManager) {
+        var dimClientDao = pm.DimClientDao;
+        var dimJobDao = pm.DimJobDao;
+        var factTaskDao = pm.FactTaskDao;
+        var tasks = factTaskDao.GetTasksWithException();
+        return pm.UseTransaction(() => new DT.ExceptionPage {
+          TotalExceptions = tasks.Count(),
+          Exceptions = (from factTask in tasks
+                        join dimJob in dimJobDao.GetAll() on factTask.JobId equals dimJob.JobId
+                        join dimClient in dimClientDao.GetAll() on factTask.LastClientId equals
+                          dimClient.Id into taskClientJoin
+                        from a in taskClientJoin.DefaultIfEmpty()
+                        let endTime = factTask.EndTime ?? DateTime.Now
+                        select new DT.Exception {
+                          TaskId = factTask.TaskId,
+                          JobId = factTask.JobId,
+                          JobName = dimJob.JobName,
+                          UserId = dimJob.UserId,
+                          UserName = dimJob.UserName,
+                          ClientId = factTask.LastClientId ?? default(Guid),
+                          ClientName = a != null ? a.Name : string.Empty,
+                          Date = endTime,
+                          Details = factTask.Exception
+                        })
+                        .OrderByDescending(x => x.Date)
+                        .Skip((page - 1) * size)
+                        .Take(size)
+                        .ToList()
+        });
+      }
+    }
+  }
+}
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/exceptions/exceptionDetailsDialog.cshtml
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/exceptions/exceptionDetailsDialog.cshtml	(revision 12560)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/exceptions/exceptionDetailsDialog.cshtml	(revision 12560)
@@ -0,0 +1,9 @@
+﻿<div class="modal-header">
+    <button type="button" ng-click="close()" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+    <h4 class="modal-title">Exception Details</h4>
+</div>
+<div class="modal-body">
+    <div style="overflow:auto;">
+        <p style="word-wrap: break-word;">{{message}}</p>
+    </div>
+</div>
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/exceptions/exceptionDetailsDialogCtrl.js
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/exceptions/exceptionDetailsDialogCtrl.js	(revision 12560)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/exceptions/exceptionDetailsDialogCtrl.js	(revision 12560)
@@ -0,0 +1,11 @@
+﻿(function () {
+    var module = appStatisticsPlugin.getAngularModule();
+    module.controller('app.statistics.exceptionDetailsDialogCtrl',
+        ['$scope', '$modalInstance', 'message', function ($scope, $modalInstance, message) {
+            $scope.message = message;
+            $scope.close = function () {
+                $modalInstance.dismiss('cancel');
+            };
+        }]
+    );
+})();
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/exceptions/exceptions.cshtml
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/exceptions/exceptions.cshtml	(revision 12560)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/exceptions/exceptions.cshtml	(revision 12560)
@@ -0,0 +1,66 @@
+﻿@using HeuristicLab.Services.Access.DataTransfer
+@using HeuristicLab.Services.Hive
+@if (Request.IsAuthenticated && User.IsInRole(HiveRoles.Administrator)) {
+<header class="view-header">
+    <ul class="nav nav-list nav-list-topbar pull-left">
+        <li>
+            <a ng-href="#/statistics/jobs">Jobs</a>
+        </li>
+        <li>
+            <a ng-href="#/statistics/users">Users</a>
+        </li>
+        <li>
+            <a ng-href="#/statistics/clients">Clients</a>
+        </li>
+        <li>
+            <a ng-href="#/statistics/groups">Groups</a>
+        </li>
+        <li class="active">
+            <a ng-href="#/statistics/exceptions">Exceptions</a>
+        </li>
+    </ul>
+</header>
+
+<div class="default-view-container">
+    <div class="row">
+        <div class="col-lg-12">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h3 class="panel-title">Groups</h3>
+                </div>
+                <div class="panel-body">
+                    <table class="table table-hover table-condensed">
+                        <thead>
+                        <tr>
+                            <th>#</th>
+                            <th>Job</th>
+                            <th>Task</th>
+                            <th>User</th>
+                            <th>Client</th>
+                            <th>Date</th>
+                            <th></th>
+                        </tr>
+                        </thead>
+                        <tr ng-repeat="exception in exceptionPage.Exceptions">
+                            <td>{{($index + 1)+((curExceptionsPage-1)*(exceptionsPageSize))}}</td>
+                            <td><a ng-href="#/statistics/jobs/{{exception.JobId}}">{{exception.JobName}}</a></td>
+                            <td><a ng-href="#/statistics/tasks/{{exception.TaskId}}">{{exception.TaskId}}</a></td>
+                            <td><a ng-href="#/statistics/users/{{exception.UserId}}">{{exception.UserName}}</a></td>
+                            <td><a ng-href="#/statistics/clients/{{exception.ClientId}}">{{exception.ClientName}}</a></td>
+                            <td>{{exception.Date | toDate}}</td>
+                            <td><a class="cursor-pointer" ng-click="openDialog(exception.Details)">Details</a></td>
+                        </tr>
+                        <tr ng-hide="exceptionPage.Exceptions.length">
+                            <td colspan="7" class="text-center">No exceptions found!</td>
+                        </tr>
+                    </table>
+                    <div class="row text-center" ng-show="exceptionPage.TotalExceptions > exceptionPage.Exceptions.length">
+                        <pagination max-size="10" total-items="exceptionPage.TotalExceptions" ng-model="curExceptionsPage" ng-change="changeExceptionsPage()"
+                                    items-per-page="exceptionsPageSize" boundary-links="true" rotate="false" num-pages="numPages"></pagination>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+}
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/exceptions/exceptionsCtrl.js
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/exceptions/exceptionsCtrl.js	(revision 12560)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/exceptions/exceptionsCtrl.js	(revision 12560)
@@ -0,0 +1,49 @@
+﻿(function () {
+    var module = appStatisticsPlugin.getAngularModule();
+    module.controller('app.statistics.exceptionsCtrl',
+        ['$scope', '$interval', '$modal', 'app.statistics.exceptionService',
+            function ($scope, $interval, $modal, exceptionService) {
+                $scope.interval = defaultPageUpdateInterval;
+                $scope.curExceptionsPage = 1;
+                $scope.exceptionsPageSize = 20;
+
+                var getExceptions = function () {
+                    exceptionService.getExceptions({ page: $scope.curExceptionsPage, size: $scope.exceptionsPageSize },
+                        function (exceptionPage) {
+                            $scope.exceptionPage = exceptionPage;
+                        }
+                    );
+                };
+
+                $scope.changeExceptionsPage = function () {
+                    update();
+                };
+
+                var update = function () {
+                    getExceptions();
+                };
+
+                $scope.openDialog = function (message) {
+                    $scope.message = message;
+                    $modal.open({
+                        templateUrl: 'plugin=statistics&view=WebApp/exceptions/exceptionDetailsDialog.cshtml',
+                        controller: 'app.statistics.exceptionDetailsDialogCtrl',
+                        windowClass: 'app-modal-window',
+                        resolve: {
+                            message: function () {
+                                return $scope.message;
+                            }
+                        }
+                    });
+                };
+
+                $scope.updateInterval = $interval(update, $scope.interval);
+                var cancelInterval = $scope.$on('$locationChangeSuccess', function () {
+                    $interval.cancel($scope.updateInterval);
+                    cancelInterval();
+                });
+                update();
+            }
+        ]
+    );
+})();
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/services/exceptionService.js
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/services/exceptionService.js	(revision 12560)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/services/exceptionService.js	(revision 12560)
@@ -0,0 +1,11 @@
+﻿(function () {
+    var module = appStatisticsPlugin.getAngularModule();
+    var apiUrl = 'api/Statistics/Exception/';
+    module.factory('app.statistics.exceptionService',
+        ['$resource', function ($resource) {
+            return $resource(apiUrl + ':action', { page: '@page', size: '@size'}, {
+                getExceptions: { method: 'GET', params: { action: 'GetExceptions' } }
+            });
+        }]
+    );
+})();
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/services/groupService.js
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/services/groupService.js	(revision 12560)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/services/groupService.js	(revision 12560)
@@ -0,0 +1,13 @@
+﻿(function () {
+    var module = appStatisticsPlugin.getAngularModule();
+    var apiUrl = 'api/Statistics/Group/';
+    module.factory('app.statistics.groupService',
+        ['$resource', function ($resource) {
+            return $resource(apiUrl + ':action', { id: '@id', page: '@page', size: '@size', start: '@start', end: '@end' }, {
+                getGroupDetails: { method: 'GET', params: { action: 'GetGroupDetails' } },
+                getGroups: { method: 'GET', params: { action: 'GetGroups' } },
+                getGroupHistory: { method: 'GET', params: { action: 'GetGroupHistory' }, isArray: true }
+            });
+        }]
+    );
+})();
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/statistics.js
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/statistics.js	(revision 12559)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/statistics.js	(revision 12560)
@@ -39,5 +39,5 @@
     ];
     var menu = app.getMenu();
-    var section = menu.getSection('Menü', 1);
+    var section = menu.getSection('Menu', 1);
     section.addEntry({
         name: 'Statistics',
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp/3.3/WebApp/libs/angularjs/fittext/ng-FitText.js
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp/3.3/WebApp/libs/angularjs/fittext/ng-FitText.js	(revision 12560)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp/3.3/WebApp/libs/angularjs/fittext/ng-FitText.js	(revision 12560)
@@ -0,0 +1,76 @@
+﻿/* ng-FitText.js v3.3.3
+ * https://github.com/patrickmarabeas/ng-FitText.js
+ *
+ * Original jQuery project: https://github.com/davatron5000/FitText.js
+ *
+ * Copyright 2015, Patrick Marabeas http://marabeas.io
+ * Released under the MIT license
+ * http://opensource.org/licenses/mit-license.php
+ *
+ * Date: 06/05/2015
+ */
+
+(function (window, document, angular, undefined) {
+
+    'use strict';
+
+    angular.module('ngFitText', [])
+      .value('config', {
+          'debounce': false,
+          'delay': 250,
+          'loadDelay': 10,
+          'min': undefined,
+          'max': undefined
+      })
+
+      .directive('fittext', ['$timeout', 'config', 'fitTextConfig', function ($timeout, config, fitTextConfig) {
+          return {
+              restrict: 'A',
+              scope: true,
+              link: function (scope, element, attrs) {
+                  angular.extend(config, fitTextConfig.config);
+
+                  element[0].style.display = 'inline-block';
+                  element[0].style.lineHeight = '1';
+
+                  var parent = element.parent();
+                  var compressor = attrs.fittext || 1;
+                  var loadDelay = attrs.fittextLoadDelay || config.loadDelay;
+                  var nl = element[0].querySelectorAll('[fittext-nl],[data-fittext-nl]').length || 1;
+                  var minFontSize = attrs.fittextMin || config.min || Number.NEGATIVE_INFINITY;
+                  var maxFontSize = attrs.fittextMax || config.max || Number.POSITIVE_INFINITY;
+
+                  var resizer = function () {
+                      element[0].style.fontSize = '10px';
+                      var ratio = element[0].offsetHeight / element[0].offsetWidth / nl;
+                      element[0].style.fontSize = Math.max(
+                        Math.min((parent[0].offsetWidth - 6) * ratio * compressor,
+                          parseFloat(maxFontSize)
+                        ),
+                        parseFloat(minFontSize)
+                      ) + 'px';
+                  };
+
+                  $timeout(function () { resizer() }, loadDelay);
+
+                  scope.$watch(attrs.ngModel, function () { resizer() });
+
+                  config.debounce
+                    ? angular.element(window).bind('resize', config.debounce(function () { scope.$apply(resizer) }, config.delay))
+                    : angular.element(window).bind('resize', function () { scope.$apply(resizer) });
+              }
+          }
+      }])
+
+      .provider('fitTextConfig', function () {
+          var self = this;
+          this.config = {};
+          this.$get = function () {
+              var extend = {};
+              extend.config = self.config;
+              return extend;
+          };
+          return this;
+      });
+
+})(window, document, angular);
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.cshtml
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.cshtml	(revision 12559)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.cshtml	(revision 12560)
@@ -8,5 +8,5 @@
                 <div class="panel-body">
                     <p>
-                        Heuristic and Evolutionary Algorithms Laboratory (HEAL)<br />
+                        <strong>Heuristic and Evolutionary Algorithms Laboratory (HEAL)</strong><br />
                         School of Informatics, Communications and Media<br />
                         University of Applied Sciences Upper Austria<br />
@@ -27,12 +27,13 @@
                 </div>
                 <div class="panel-body">
-                    <p><strong>Support and Inquiries</strong>: ​<a href="mailto:#">support@heuristiclab.com</a></p>
-                    <p><strong>Heuristic and Evolutionary Algorithms Laboratory (HEAL)</strong>: <a href="​http://heal.heuristiclab.com">​http://heal.heuristiclab.com</a></p>
+                    <p><strong>Support and Inquiries</strong>: ​<a href="mailto:support@heuristiclab.com">support@heuristiclab.com</a></p>
+                    <p><strong>Heuristic and Evolutionary Algorithms Laboratory (HEAL)</strong>: <a href="App/RedirectUrl?url=http://heal.heuristiclab.com">​http://heal.heuristiclab.com</a></p>
+                    <p><strong>HeuristicLab development site</strong>: <a href="App/RedirectUrl?url=http://dev.heuristiclab.com">http://dev.heuristiclab.com</a></p>
                     <p>
-                        <strong>Head of HeuristicLab</strong>:<br />
+                        <strong>Head of HeuristicLab</strong>: <br />
                         FH-Prof. DI Dr. Stefan Wagner<br />
-                        Phone: +43 50804 22030<br />
-                        Fax: +43 50804 21599<br />
-                        E-mail: <a href="mailto:#">stefan.wagner@heuristiclab.com</a><br />
+                        <span class="glyphicon glyphicon-phone-alt"></span> +43 50804 22030<br />
+                        <span class="glyphicon glyphicon-print"></span> +43 50804 21599<br />
+                        <span class="glyphicon glyphicon-envelope"></span> <a href="mailto:stefan.wagner@heuristiclab.com">stefan.wagner@heuristiclab.com</a><br />
                     </p>
                 </div>
@@ -45,8 +46,8 @@
             <div class="panel panel-default">
                 <div class="panel-heading">
-                    <h3 class="panel-title">Disclaimer of Liability and Endorsement</h3>
+                    <h3 class="panel-title">Disclaimer</h3>
                 </div>
                 <div class="panel-body">
-                    <p style="text-align:justify">HeuristicLab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details (http://www.gnu.org/licenses). All contents on the development homepage and wiki of the HeuristicLab have been compiled carefully. Still, the Heuristic and Evolutionary Algorithms Laboratory (HEAL) makes no guarantees of accuracy, completeness and timeliness of the information on this website. Therefore HEAL accepts no responsibility or liability for damages or losses resulting from the use of this website and/or the software.</p>
+                    <p style="text-align: justify">HeuristicLab, Hive and HeuristicLab WebApp are distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details (<a href="App/RedirectUrl?url=http://www.gnu.org/licenses">http://www.gnu.org/licenses</a>). </p>
                 </div>
             </div>
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.js
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.js	(revision 12559)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.js	(revision 12560)
@@ -9,5 +9,5 @@
 
     var menu = app.getMenu();
-    var section = menu.getSection('Menü', -1);
+    var section = menu.getSection('Menu', -1);
     section.addEntry({
         index: 10000,
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/plugins/pluginsExceptionCtrl.js
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/plugins/pluginsExceptionCtrl.js	(revision 12560)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/plugins/pluginsExceptionCtrl.js	(revision 12560)
@@ -0,0 +1,14 @@
+﻿(function () {
+    var module = appPluginsPlugin.getAngularModule();
+    module.controller('app.plugins.pluginsExceptionCtrl',
+        ['$scope', '$modalInstance', 'pluginName', 'exception',
+            function ($scope, $modalInstance, pluginName, exception) {
+                $scope.pluginName = pluginName;
+                $scope.exception = exception;
+                $scope.close = function () {
+                    $modalInstance.dismiss('cancel');
+                };
+            }
+        ]
+    );
+})();
Index: /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp/3.3/WebApp/shared/filter/filters.js
===================================================================
--- /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp/3.3/WebApp/shared/filter/filters.js	(revision 12559)
+++ /branches/HiveStatistics/sources/HeuristicLab.Services.WebApp/3.3/WebApp/shared/filter/filters.js	(revision 12560)
@@ -1,3 +1,3 @@
-﻿(function () {
+﻿(function() {
     var module = appMainPlugin.getAngularModule();
     module.filter('kbToGB', function () {
