diff --git a/Gemfile b/Gemfile
index 2f0575e93ca8777353a6cb322b420b3e7c29e724..17dc216379eee0b3d34c72205959f36d34ac1e04 100644
--- a/Gemfile
+++ b/Gemfile
@@ -105,6 +105,8 @@ group :assets do
   gem "coffee-rails", "~> 3.2.2"
   gem "uglifier",     "~> 1.3.0"
   gem "therubyracer"
+  gem 'turbolinks'
+  gem 'jquery-turbolinks'
 
   gem 'chosen-rails',     "0.9.8"
   gem 'select2-rails'
diff --git a/Gemfile.lock b/Gemfile.lock
index 64d351a1f98adf5bebf3c972ccc7f126e9b60fe7..bd52995e617576d87244e13fb82756886c94654d 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -232,6 +232,9 @@ GEM
     jquery-rails (2.1.3)
       railties (>= 3.1.0, < 5.0)
       thor (~> 0.14)
+    jquery-turbolinks (1.0.0)
+      railties (>= 3.1.0)
+      turbolinks
     jquery-ui-rails (2.0.2)
       jquery-rails
       railties (>= 3.1.0)
@@ -461,6 +464,8 @@ GEM
     treetop (1.4.12)
       polyglot
       polyglot (>= 0.3.1)
+    turbolinks (1.1.1)
+      coffee-rails
     tzinfo (0.3.37)
     uglifier (1.3.0)
       execjs (>= 0.3.0)
@@ -521,6 +526,7 @@ DEPENDENCIES
   httparty
   jquery-atwho-rails (= 0.1.7)
   jquery-rails (= 2.1.3)
+  jquery-turbolinks
   jquery-ui-rails (= 2.0.2)
   kaminari (~> 0.14.1)
   launchy
@@ -564,5 +570,6 @@ DEPENDENCIES
   test_after_commit
   therubyracer
   thin
+  turbolinks
   uglifier (~> 1.3.0)
   webmock
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index adb4009fbc2614ecf0beceddad37a63475dadb8d..bbec12ad08c81a08ddb04c61cfb6419afdbacbcb 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -14,6 +14,8 @@
 //= require jquery.waitforimages
 //= require jquery.atwho
 //= require jquery.scrollto
+//= require turbolinks
+//= require jquery.turbolinks
 //= require bootstrap
 //= require modernizr
 //= require chosen-jquery
diff --git a/app/assets/javascripts/main.js.coffee b/app/assets/javascripts/main.js.coffee
index 39ec86e623fd9ce992a69c58aa7008a97e7a510c..fb51d379ebd1288be195871417a7c641e758ca65 100644
--- a/app/assets/javascripts/main.js.coffee
+++ b/app/assets/javascripts/main.js.coffee
@@ -41,6 +41,14 @@ window.linkify = (str) ->
   exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig
   return str.replace(exp,"<a href='$1'>$1</a>")
 
+window.startSpinner = ->
+  $('.turbolink-spinner').fadeIn()
+
+window.stopSpinner = ->
+  $('.turbolink-spinner').fadeOut()
+
+document.addEventListener("page:fetch", startSpinner)
+document.addEventListener("page:receive", stopSpinner)
 
 $ ->
   # Click a .one_click_select field, select the contents
diff --git a/app/views/layouts/_head_panel.html.haml b/app/views/layouts/_head_panel.html.haml
index 8f6873e1dfcf2e13367eb6796f7a480f8dc5dead..0092d8cd5b31f65f2c918ae4a3aeeadcb5de5dcb 100644
--- a/app/views/layouts/_head_panel.html.haml
+++ b/app/views/layouts/_head_panel.html.haml
@@ -8,6 +8,10 @@
         %span.separator
       %h1.project_name= title
       %ul.nav
+        %li
+          %a
+            %div.hide.turbolink-spinner
+              %i.icon-refresh.icon-spin
         %li
           = render "layouts/search"
         %li