diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index b1fb3ce5d6973cb7bed04829e185c01f0e1f938c..7c8e938df75c56b07cce89067dc4da9dcd36937c 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -666,7 +666,8 @@ class MergeRequest < ActiveRecord::Base
   end
 
   def pipeline
-    @pipeline ||= source_project.pipeline(diff_head_sha, source_branch) if diff_head_sha && source_project
+    return unless diff_head_sha && source_project
+    @pipeline ||= source_project.pipeline_for(source_branch, diff_head_sha)
   end
 
   def merge_commit
diff --git a/app/models/project.rb b/app/models/project.rb
index d306f86f783d80a1e211e1c616f643ab2f9376cb..dc9b4b38a10f2d728e845fdf0b0875f3b884a9cd 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -1086,12 +1086,13 @@ class Project < ActiveRecord::Base
     !namespace.share_with_group_lock
   end
 
-  def pipeline(sha, ref)
+  def pipeline_for(ref, sha)
     pipelines.order(id: :desc).find_by(sha: sha, ref: ref)
   end
 
-  def ensure_pipeline(sha, ref, current_user = nil)
-    pipeline(sha, ref) || pipelines.create(sha: sha, ref: ref, user: current_user)
+  def ensure_pipeline(ref, sha, current_user = nil)
+    pipeline_for(ref, sha) ||
+      pipelines.create(sha: sha, ref: ref, user: current_user)
   end
 
   def enable_ci
diff --git a/app/views/projects/issues/_related_branches.html.haml b/app/views/projects/issues/_related_branches.html.haml
index 6ea9f612d13abe4f6560553acc610fbbf539e4b2..a8eeab3e55e416871021e6b8997f00a968a45a6d 100644
--- a/app/views/projects/issues/_related_branches.html.haml
+++ b/app/views/projects/issues/_related_branches.html.haml
@@ -5,7 +5,7 @@
     - @related_branches.each do |branch|
       %li
         - target = @project.repository.find_branch(branch).target
-        - pipeline = @project.pipeline(target.sha, branch) if target
+        - pipeline = @project.pipeline_for(branch, target.sha) if target
         - if pipeline
           %span.related-branch-ci-status
             = render_pipeline_status(pipeline)
diff --git a/db/fixtures/development/14_builds.rb b/db/fixtures/development/14_builds.rb
index e65abe4ef77e1babe8a8d077716f478d3ad3116d..6cc18bf51ed7b54c6fee4dc124be5a3254514c0d 100644
--- a/db/fixtures/development/14_builds.rb
+++ b/db/fixtures/development/14_builds.rb
@@ -40,7 +40,7 @@ class Gitlab::Seeder::Builds
     commits = @project.repository.commits('master', limit: 5)
     commits_sha = commits.map { |commit| commit.raw.id }
     commits_sha.map do |sha|
-      @project.ensure_pipeline(sha, 'master')
+      @project.ensure_pipeline('master', sha)
     end
   rescue
     []
diff --git a/lib/api/commit_statuses.rb b/lib/api/commit_statuses.rb
index 4df6ca8333ecc10cf05166dd9263e05b8075f4b8..5e3c9563703ad0c25882cc9dec866328ca1eb208 100644
--- a/lib/api/commit_statuses.rb
+++ b/lib/api/commit_statuses.rb
@@ -64,7 +64,7 @@ module API
           ref = branches.first
         end
 
-        pipeline = @project.ensure_pipeline(commit.sha, ref, current_user)
+        pipeline = @project.ensure_pipeline(ref, commit.sha, current_user)
 
         name = params[:name] || params[:context]
         status = GenericCommitStatus.running_or_pending.find_by(pipeline: pipeline, name: name, ref: params[:ref])
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 9c3b4712cab653e0ab4e1087fc17dc5d9315b64c..60819fe02be193b2754502dc22e990ff9d5b1d73 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -688,7 +688,7 @@ describe Project, models: true do
     let(:project) { create :project }
     let(:pipeline) { create :ci_pipeline, project: project, ref: 'master' }
 
-    subject { project.pipeline(pipeline.sha, 'master') }
+    subject { project.pipeline_for('master', pipeline.sha) }
 
     it { is_expected.to eq(pipeline) }
 
diff --git a/spec/requests/api/commits_spec.rb b/spec/requests/api/commits_spec.rb
index 4379fcb3c1ee1c9d6a548aae7f5def76c800d993..60c2f14bd3cab7525bfb22faf6c0c04d32e17f17 100644
--- a/spec/requests/api/commits_spec.rb
+++ b/spec/requests/api/commits_spec.rb
@@ -94,7 +94,7 @@ describe API::API, api: true  do
       end
 
       it "returns status for CI" do
-        pipeline = project.ensure_pipeline(project.repository.commit.sha, 'master')
+        pipeline = project.ensure_pipeline('master', project.repository.commit.sha)
         get api("/projects/#{project.id}/repository/commits/#{project.repository.commit.id}", user)
         expect(response).to have_http_status(200)
         expect(json_response['status']).to eq(pipeline.status)
diff --git a/spec/services/ci/image_for_build_service_spec.rb b/spec/services/ci/image_for_build_service_spec.rb
index 3a3e3efe709ada4756d963b511f126560017fc6a..21e00b11a126eb584eb4c77667c633f1d5ce687b 100644
--- a/spec/services/ci/image_for_build_service_spec.rb
+++ b/spec/services/ci/image_for_build_service_spec.rb
@@ -5,7 +5,7 @@ module Ci
     let(:service) { ImageForBuildService.new }
     let(:project) { FactoryGirl.create(:empty_project) }
     let(:commit_sha) { '01234567890123456789' }
-    let(:commit) { project.ensure_pipeline(commit_sha, 'master') }
+    let(:commit) { project.ensure_pipeline('master', commit_sha) }
     let(:build) { FactoryGirl.create(:ci_build, pipeline: commit) }
 
     describe '#execute' do