diff --git a/Gemfile b/Gemfile
index 194379dd687b668529eea386ee1ed5d0980d26a0..968410138152db3614dcdfcca6a1420262e379c8 100644
--- a/Gemfile
+++ b/Gemfile
@@ -97,9 +97,6 @@ gem 'fog-rackspace', '~> 0.1.1'
 # for aws storage
 gem 'unf', '~> 0.1.4'
 
-# Authorization
-gem 'six', '~> 0.2.0'
-
 # Seed data
 gem 'seed-fu', '~> 2.3.5'
 
diff --git a/Gemfile.lock b/Gemfile.lock
index 0c28975060cfea0762871c5d1b89ae14919dfb88..1d0fcfd3c3adab17b2058b9d6ffa193641429840 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -683,7 +683,6 @@ GEM
       rack (~> 1.5)
       rack-protection (~> 1.4)
       tilt (>= 1.3, < 3)
-    six (0.2.0)
     slack-notifier (1.2.1)
     slop (3.6.0)
     spinach (0.8.10)
@@ -954,7 +953,6 @@ DEPENDENCIES
   sidekiq-cron (~> 0.4.0)
   simplecov (= 0.12.0)
   sinatra (~> 1.4.4)
-  six (~> 0.2.0)
   slack-notifier (~> 1.2.0)
   spinach-rails (~> 0.2.1)
   spinach-rerun-reporter (~> 0.0.2)
diff --git a/app/models/ability.rb b/app/models/ability.rb
index fcd7740d79fc701c9a545719f2530b946bb05b9a..622f481a4fcf9bbfafdd75e87d3cb1b3d5820632 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -1,7 +1,23 @@
 class Ability
   class << self
+
+    end
+
+    def allowed?(user, action, subject)
+      allowed(user, subject).include?(action)
+    end
+
     def allowed(user, subject)
-      return anonymous_abilities(user, subject) if user.nil?
+      return uncached_allowed(user, subject) unless RequestStore.active?
+
+      user_key = user ? user.id : 'anonymous'
+      subject_key = subject ? "#{subject.class.name}/#{subject.id}" : 'global'
+      key = "/ability/#{user_key}/#{subject_key}"
+      RequestStore[key] ||= Set.new(uncached_allowed(user, subject)).freeze
+    end
+
+    def uncached_allowed(user, subject)
+      return anonymous_abilities(subject) if user.nil?
       return [] unless user.is_a?(User)
       return [] if user.blocked?
 
@@ -586,11 +602,8 @@ class Ability
     end
 
     def abilities
-      @abilities ||= begin
-        abilities = Six.new
-        abilities << self
-        abilities
-      end
+      warn 'Ability.abilities is deprecated, use Ability.allowed?(user, action, subject) instead'
+      self
     end
 
     private
diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb
index da4b1bf9902c8493fcaa3fb49dd96e79efad0622..1afca5fe2e8f94abb754c73ed47a25c7ac0261ab 100644
--- a/lib/api/helpers.rb
+++ b/lib/api/helpers.rb
@@ -409,11 +409,7 @@ module API
     end
 
     def abilities
-      @abilities ||= begin
-                       abilities = Six.new
-                       abilities << Ability
-                       abilities
-                     end
+      Ability
     end
 
     def secret_token
diff --git a/spec/models/members/project_member_spec.rb b/spec/models/members/project_member_spec.rb
index 913d74645a7fd8ac04eb78a2358c0fa61e24c073..c2bf48da44e34607b7b2daf23a50aace68661f92 100644
--- a/spec/models/members/project_member_spec.rb
+++ b/spec/models/members/project_member_spec.rb
@@ -71,8 +71,7 @@ describe ProjectMember, models: true do
 
   describe :import_team do
     before do
-      @abilities = Six.new
-      @abilities << Ability
+      @abilities = Ability
 
       @project_1 = create :project
       @project_2 = create :project
diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb
index 9e8ae07e0b2e108a923b19f08558973bb9997442..f4b9fa270e4f06ae77cf9975d4f52e7e639302af 100644
--- a/spec/models/note_spec.rb
+++ b/spec/models/note_spec.rb
@@ -85,8 +85,7 @@ describe Note, models: true do
       @u1 = create(:user)
       @u2 = create(:user)
       @u3 = create(:user)
-      @abilities = Six.new
-      @abilities << Ability
+      @abilities = Ability
     end
 
     describe 'read' do