diff --git a/Gemfile b/Gemfile
index e032b877936cb0fe37350ce0ed698f11dfb7257f..86f8edbdad462fed921966a3c2c9e894526c3f9c 100644
--- a/Gemfile
+++ b/Gemfile
@@ -173,6 +173,7 @@ gem "font-awesome-rails", '~> 3.2'
 gem "gitlab_emoji", "~> 0.0.1.1"
 gem "gon", '~> 5.0.0'
 gem 'nprogress-rails'
+gem 'request_store'
 
 group :development do
   gem "annotate", "~> 2.6.0.beta2"
diff --git a/Gemfile.lock b/Gemfile.lock
index 97d3d8bab641c0ab5b90ceb8d5cf03483c46186f..363987bea12faf32417c13b565efb22d354786b5 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -409,6 +409,7 @@ GEM
     redis-store (1.1.4)
       redis (>= 2.2)
     ref (1.0.5)
+    request_store (1.0.5)
     require_all (1.3.2)
     rest-client (1.6.7)
       mime-types (>= 1.16)
@@ -647,6 +648,7 @@ DEPENDENCIES
   rb-inotify
   redcarpet (~> 2.2.2)
   redis-rails
+  request_store
   rspec-rails
   sanitize (~> 2.0)
   sass-rails (~> 4.0.2)
diff --git a/app/models/ability.rb b/app/models/ability.rb
index 234578b5e18b65dd9b32154fc05326d7a5ab89be..d33ca41118a537370b5d8d008a9c8b240a54bf7a 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -67,40 +67,42 @@ class Ability
 
     def project_abilities(user, project)
       rules = []
+      key = "/user/#{user.id}/project/#{project.id}"
+      RequestStore.store[key] ||= begin
+        team = project.team
 
-      team = project.team
+        # Rules based on role in project
+        if team.master?(user)
+          rules += project_master_rules
 
-      # Rules based on role in project
-      if team.master?(user)
-        rules += project_master_rules
+        elsif team.developer?(user)
+          rules += project_dev_rules
 
-      elsif team.developer?(user)
-        rules += project_dev_rules
+        elsif team.reporter?(user)
+          rules += project_report_rules
 
-      elsif team.reporter?(user)
-        rules += project_report_rules
+        elsif team.guest?(user)
+          rules += project_guest_rules
+        end
 
-      elsif team.guest?(user)
-        rules += project_guest_rules
-      end
+        if project.public? || project.internal?
+          rules += public_project_rules
+        end
 
-      if project.public? || project.internal?
-        rules += public_project_rules
-      end
+        if project.owner == user || user.admin?
+          rules += project_admin_rules
+        end
 
-      if project.owner == user || user.admin?
-        rules += project_admin_rules
-      end
+        if project.group && project.group.has_owner?(user)
+          rules += project_admin_rules
+        end
 
-      if project.group && project.group.has_owner?(user)
-        rules += project_admin_rules
-      end
+        if project.archived?
+          rules -= project_archived_rules
+        end
 
-      if project.archived?
-        rules -= project_archived_rules
+        rules
       end
-
-      rules
     end
 
     def public_project_rules