diff --git a/res/search.js b/res/search.js
index 8afc883830de039be34d46eaa6490f60406b36e6..05968f5d531b87c6fc2ecaa8fd9e4f6eb58df306 100644
--- a/res/search.js
+++ b/res/search.js
@@ -326,7 +326,6 @@ var search = function () {
     var results = $("#results");
     results.children().remove();
     $("#q").blur();
-    show_loader();
     buffers = {};
     open = [];
     results.click(wrap_click_handler(deselect_buffers));
@@ -334,10 +333,13 @@ var search = function () {
         "query": $("#q").val(),
         "selected_history_entry": -1
     };
-    location.hash = state.query;
-    load_search_overview(state.query, show_overview);
-    add_to_history(state.query);
-    update_history();
+    location = "#"+encodeURIComponent(state.query);
+    if (state.query) {
+        show_loader();
+        load_search_overview(state.query, show_overview);
+        add_to_history(state.query);
+        update_history();
+    }
 };
 
 var more_buffer = function (id, limit) {
@@ -472,6 +474,9 @@ $("nav").click(function (e) {
     e.stopPropagation();
 });
 
-$("#q").val(location.hash.substr(1));
-if ($("#q").val())
-    search();
\ No newline at end of file
+var hashChange = function() {
+    $("#q").val(decodeURIComponent(location.hash.substr(1)));
+    search();
+};
+hashChange();
+$(window).on("hashchange", hashChange);
\ No newline at end of file