diff --git a/app/models/ci/commit.rb b/app/models/ci/commit.rb
index 296890c5e7cb3c8aa1078dd57deba5045a842286..f6fc4645947d48b9887ffe5355db4c986ca931cb 100644
--- a/app/models/ci/commit.rb
+++ b/app/models/ci/commit.rb
@@ -82,7 +82,7 @@ module Ci
     end
 
     def stage
-      running_or_pending = statuses.latest.running_or_pending
+      running_or_pending = statuses.latest.running_or_pending.ordered
       running_or_pending.first.try(:stage)
     end
 
@@ -189,7 +189,7 @@ module Ci
     end
 
     def matrix_for_ref?(ref)
-      latest_builds_for_ref(ref).size > 1
+      builds_without_retry_for_ref(ref).size > 1
     end
 
     def config_processor
diff --git a/lib/api/commit_statuses.rb b/lib/api/commit_statuses.rb
index 50ca89079e07b2184553d38460faf7ab335a0cb6..2c0596c9dfb64cf730fada8ac4bf16157677294d 100644
--- a/lib/api/commit_statuses.rb
+++ b/lib/api/commit_statuses.rb
@@ -43,7 +43,7 @@ module API
       # Examples:
       #   POST /projects/:id/statuses/:sha
       post ':id/statuses/:sha' do
-        authorize! :create_commit_statuses, user_project
+        authorize! :create_commit_status, user_project
         required_attributes! [:state]
         attrs = attributes_for_keys [:ref, :target_url, :description, :context, :name]
         commit = @project.commit(params[:sha])
diff --git a/spec/models/ci/commit_spec.rb b/spec/models/ci/commit_spec.rb
index 371add4ee5988f4e7f81cf82e1306991ff2d1cc7..330971174fbb38c4afb11dcf080d8fd5f3478c77 100644
--- a/spec/models/ci/commit_spec.rb
+++ b/spec/models/ci/commit_spec.rb
@@ -125,7 +125,7 @@ describe Ci::Commit do
     end
 
     it 'returns all refs' do
-      is_expected.to contain_exactly('master', 'develop')
+      is_expected.to contain_exactly('master', 'develop', nil)
     end
   end
 
@@ -225,9 +225,10 @@ describe Ci::Commit do
         it 'rebuilds commit' do
           expect(commit.status).to eq('skipped')
           expect(create_builds(trigger_request)).to be_truthy
-          commit.builds.reload
-          expect(commit.builds.size).to eq(2)
-          expect(commit.status).to eq('pending')
+
+          # since everything in Ci::Commit is cached we need to fetch a new object
+          new_commit = Ci::Commit.find_by_id(commit.id)
+          expect(new_commit.status).to eq('pending')
         end
       end
     end