diff --git a/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/Page.js b/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/Page.js
index d6d7ab2..25b8f22 100644
--- a/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/Page.js
+++ b/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/Page.js
@@ -77,6 +77,19 @@
   this._internalInitDetailForm();
 };
 
+/**
+ * @override TreeNode.js
+ */
+scout.Page.prototype._destroy = function() {
+  scout.Page.parent.prototype._destroy.call(this);
+  if (this.detailTable) {
+    this.detailTable.destroy();
+  }
+  if (this.detailForm) {
+    this.detailForm.destroy();
+  }
+};
+
 scout.Page.prototype._internalInitTable = function() {
   var table = this.detailTable;
   if (table) {
diff --git a/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithNodes.js b/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithNodes.js
index 007dfe7..5317a37 100644
--- a/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithNodes.js
+++ b/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithNodes.js
@@ -39,9 +39,7 @@
 };
 
 scout.PageWithNodes.prototype._onDetailTableRowAction = function(event) {
-  var clickedRow = event.source.rowsMap[event.row.id];
-  var nodeToSelect = clickedRow.node;
-  this.getOutline().selectNode(nodeToSelect);
+  this.getOutline().mediator.onTableRowAction(event, this);
 };
 
 scout.PageWithNodes.prototype._rebuildDetailTable = function(childPages) {
diff --git a/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithTable.js b/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithTable.js
index b7fe6bd..5a89b2a 100644
--- a/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithTable.js
+++ b/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithTable.js
@@ -178,7 +178,12 @@
   this.detailTable.setTableStatus(scout.Status.error({
     message: this.session.text('ErrorWhileLoadingData')
   }));
-  $.log.error('Failed to load tableData. error=', error);
+
+  var handler = scout.create('ErrorHandler', {
+    displayError: false
+  });
+  handler.handle(error);
+  handler.handle('Failed to load tableData, see previous error for details');
 };
 
 scout.PageWithTable.prototype._onLoadTableDataAlways = function() {
diff --git a/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/Route.js b/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/Route.js
index 3bd07d0..b3e976b 100644
--- a/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/Route.js
+++ b/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/Route.js
@@ -36,5 +36,4 @@
  * to perform clean-up operations.
  */
 scout.Route.prototype.deactivate = function() {
-
 };
diff --git a/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/router.js b/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/router.js
index ace9953..ff79378 100644
--- a/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/router.js
+++ b/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/router.js
@@ -37,16 +37,7 @@
   },
 
   activate: function(location) {
-    if (!location) {
-      var regexp = new RegExp('[^/]*$'); // match everything after last slash
-      var matches = regexp.exec(document.location.href);
-      location = matches[0];
-    }
-
-    // no route is set in the URL
-    if (scout.strings.empty(location) || '/' === location) {
-      location = this.defaultLocation;
-    }
+    location = location || (window.location.hash || '') || this.defaultLocation;
 
     var i, route = null;
     for (i = 0; i < this.routes.length; i++) {
@@ -100,6 +91,6 @@
 };
 
 window.addEventListener('popstate', function(event) {
-  scout.router.activate(null);
+  scout.router.activate();
   return false;
 });
