diff --git a/lib/exe/js.php b/lib/exe/js.php
index f1ac86c829eb0120804a5447f3abcdb91c3c4fec..f2f9dfe6b0285429f85c6713c6e36f1250518e1b 100644
--- a/lib/exe/js.php
+++ b/lib/exe/js.php
@@ -113,6 +113,8 @@ function js_out(){
     }
     js_runonstart('scrollToMarker()');
     js_runonstart('focusMarker()');
+    // init hotkeys - must have been done after init of toolbar
+    js_runonstart('initializeHotkeys()');
 
     // end output buffering and get contents
     $js = ob_get_contents();
diff --git a/lib/scripts/hotkeys.js b/lib/scripts/hotkeys.js
index d062118fb1f0515dc7c197f82c537be581c2f7e6..9e2b9cb8303a1eb4bb643e91ec638bce1ba671dc 100644
--- a/lib/scripts/hotkeys.js
+++ b/lib/scripts/hotkeys.js
@@ -27,6 +27,9 @@ function Hotkeys() {
      * (at anchor elements and input elements [type="submit"]) and registers
      * appropriate shortcuts.
      *
+     * Secondly, initialization registers listeners on document to catch all
+     * keyboard events.
+     *
      * @author Marek Sacha <sachamar@fel.cvut.cz>
      */
     this.initialize = function() {
@@ -39,7 +42,7 @@ function Hotkeys() {
         t.each(anchors, function(a) {
             if (a.accessKey != "") {
                 t.addShortcut(t.modifier + '+' + a.accessKey, function() {
-                    window.location.href = a.href;
+                    a.click();
                 });
             }
         });
@@ -50,12 +53,41 @@ function Hotkeys() {
          */
         var inputs = document.getElementsByTagName("input");
         t.each(inputs, function(i) {
-            if (i.type == "submit") {
+            if (i.type == "submit" && i.accessKey != "") {
                 t.addShortcut(t.modifier + '+' + i.accessKey, function() {
                     i.click();
                 });
             }
         });
+
+        /**
+         * Lookup all buttons with accesskey and register event -
+         * perform "click" on a button.
+         */
+        var buttons = document.getElementsByTagName("button");
+        t.each(buttons, function(b) {
+            if (b.accessKey != "") {
+                t.addShortcut(t.modifier + '+' + b.accessKey, function() {
+                    b.click();
+                });
+            }
+        });
+
+        /**
+         * Register listeners on document to catch keyboard events.
+         */
+
+        addEvent(document,'keyup',function (e) {
+            return t.onkeyup.call(t,e);
+        });
+
+        addEvent(document,'keypress',function (e) {
+            return t.onkeypress.call(t,e);
+        });
+
+        addEvent(document,'keydown',function (e) {
+            return t.onkeydown.call(t,e);
+        });
     };
 
     /**
@@ -247,19 +279,13 @@ function Hotkeys() {
     };
 }
 
-addInitEvent(function(){
+/**
+ * Init function for hotkeys. Called from js.php, to ensure hotkyes are initialized after toolbar.
+ * Call of addInitEvent(initializeHotkeys) is unnecessary now.
+ *
+ * @author Marek Sacha <sachamar@fel.cvut.cz>
+ */
+function initializeHotkeys() {
     var hotkeys = new Hotkeys();
     hotkeys.initialize();
-
-    addEvent(document,'keyup',function (e) {
-        return hotkeys.onkeyup.call(hotkeys,e);
-    });
-
-    addEvent(document,'keypress',function (e) {
-        return hotkeys.onkeypress.call(hotkeys,e);
-    });
-
-    addEvent(document,'keydown',function (e) {
-        return hotkeys.onkeydown.call(hotkeys,e);
-    });
-});
\ No newline at end of file
+}
\ No newline at end of file