diff --git a/features/project/issues/references.feature b/features/project/issues/references.feature
index bf7a4c6cb91cd77314bb0e59c01e3d1ef5e205e3..4ae2d653337f23c3b8546b720f9170e990e04dc6 100644
--- a/features/project/issues/references.feature
+++ b/features/project/issues/references.feature
@@ -2,30 +2,32 @@
 Feature: Project Issues References
   Background:
     Given I sign in as "John Doe"
+    And public project "Community"
     And "John Doe" owns public project "Community"
-    And project "Community" has "Public Issue 01" open issue
+    And project "Community" has "Community issue" open issue
     And I logout
     And I sign in as "Mary Jane"
-    And "Mary Jane" owns private project "Private Library"
-    And project "Private Library" has "Fix NS-01" open merge request
-    And project "Private Library" has "Private Issue 01" open issue
-    And I visit merge request page "Fix NS-01"
-    And I leave a comment referencing issue "Public Issue 01" from "Fix NS-01" merge request
-    And I visit issue page "Private Issue 01"
-    And I leave a comment referencing issue "Public Issue 01" from "Private Issue 01" issue
+    And private project "Enterprise"
+    And "Mary Jane" owns private project "Enterprise"
+    And project "Enterprise" has "Enterprise issue" open issue
+    And project "Enterprise" has "Enterprise fix" open merge request
+    And I visit issue page "Enterprise issue"
+    And I leave a comment referencing issue "Community issue"
+    And I visit merge request page "Enterprise fix"
+    And I leave a comment referencing issue "Community issue"
     And I logout
 
   @javascript
   Scenario: Viewing the public issue as a "John Doe"
     Given I sign in as "John Doe"
-    When I visit issue page "Public Issue 01"
+    When I visit issue page "Community issue"
     Then I should not see any related merge requests
     And I should see no notes at all
 
   @javascript
   Scenario: Viewing the public issue as "Mary Jane"
     Given I sign in as "Mary Jane"
-    When I visit issue page "Public Issue 01"
-    Then I should see the "Fix NS-01" related merge request
-    And I should see a note linking to "Fix NS-01" merge request
-    And I should see a note linking to "Private Issue 01" issue
+    When I visit issue page "Community issue"
+    Then I should see the "Enterprise fix" related merge request
+    And I should see a note linking to "Enterprise fix" merge request
+    And I should see a note linking to "Enterprise issue" issue
diff --git a/features/project/merge_requests/references.feature b/features/project/merge_requests/references.feature
new file mode 100644
index 0000000000000000000000000000000000000000..571612261a90531e53af6fa83f6805d79c0266cc
--- /dev/null
+++ b/features/project/merge_requests/references.feature
@@ -0,0 +1,31 @@
+@project_merge_requests
+Feature: Project Merge Requests References
+  Background:
+    Given I sign in as "John Doe"
+    And public project "Community"
+    And "John Doe" owns public project "Community"
+    And project "Community" has "Community fix" open merge request
+    And I logout
+    And I sign in as "Mary Jane"
+    And private project "Enterprise"
+    And "Mary Jane" owns private project "Enterprise"
+    And project "Enterprise" has "Enterprise issue" open issue
+    And project "Enterprise" has "Enterprise fix" open merge request
+    And I visit issue page "Enterprise issue"
+    And I leave a comment referencing issue "Community fix"
+    And I visit merge request page "Enterprise fix"
+    And I leave a comment referencing issue "Community fix"
+    And I logout
+
+  @javascript
+  Scenario: Viewing the public issue as a "John Doe"
+    Given I sign in as "John Doe"
+    When I visit issue page "Community fix"
+    Then I should see no notes at all
+
+  @javascript
+  Scenario: Viewing the public issue as "Mary Jane"
+    Given I sign in as "Mary Jane"
+    When I visit issue page "Community fix"
+    And I should see a note linking to "Enterprise fix" merge request
+    And I should see a note linking to "Enterprise issue" issue
diff --git a/features/steps/project/issues/references.rb b/features/steps/project/issues/references.rb
index 9c7725e8c14f0c8cfb6f5f8414c4716579fbacb6..69e8b5cbde58f651e53bdcc294baeac06f634563 100644
--- a/features/steps/project/issues/references.rb
+++ b/features/steps/project/issues/references.rb
@@ -1,106 +1,7 @@
 class Spinach::Features::ProjectIssuesReferences < Spinach::FeatureSteps
   include SharedAuthentication
+  include SharedIssuable
   include SharedNote
   include SharedProject
   include SharedUser
-
-  step 'project "Community" has "Public Issue 01" open issue' do
-    project = Project.find_by(name: 'Community')
-    create(:issue,
-           title: 'Public Issue 01',
-           project: project,
-           author: project.users.first,
-           description: '# Description header'
-          )
-  end
-
-  step 'project "Private Library" has "Fix NS-01" open merge request' do
-    project = Project.find_by(name: 'Private Library')
-    create(:merge_request,
-           title: 'Fix NS-01',
-           source_project: project,
-           target_project: project,
-           source_branch: 'fix',
-           target_branch: 'master',
-           author: project.users.first,
-           description: '# Description header'
-          )
-  end
-
-  step 'project "Private Library" has "Private Issue 01" open issue' do
-    project = Project.find_by(name: 'Private Library')
-    create(:issue,
-           title: 'Private Issue 01',
-           project: project,
-           author: project.users.first,
-           description: '# Description header'
-          )
-  end
-
-  step 'I leave a comment referencing issue "Public Issue 01" from "Fix NS-01" merge request' do
-    project = Project.find_by(name: 'Private Library')
-    issue = Issue.find_by!(title: 'Public Issue 01')
-
-    page.within(".js-main-target-form") do
-      fill_in "note[note]", with: "##{issue.to_reference(project)}"
-      click_button "Add Comment"
-    end
-  end
-
-  step 'I leave a comment referencing issue "Public Issue 01" from "Private Issue 01" issue' do
-    project = Project.find_by(name: 'Private Library')
-    issue = Issue.find_by!(title: 'Public Issue 01')
-
-    page.within(".js-main-target-form") do
-      fill_in "note[note]", with: "##{issue.to_reference(project)}"
-      click_button "Add Comment"
-    end
-  end
-
-  step 'I visit merge request page "Fix NS-01"' do
-    mr = MergeRequest.find_by(title: "Fix NS-01")
-    visit namespace_project_merge_request_path(mr.target_project.namespace, mr.target_project, mr)
-  end
-
-  step 'I visit issue page "Private Issue 01"' do
-    issue = Issue.find_by(title: "Private Issue 01")
-    visit namespace_project_issue_path(issue.project.namespace, issue.project, issue)
-  end
-
-  step 'I visit issue page "Public Issue 01"' do
-    issue = Issue.find_by(title: "Public Issue 01")
-    visit namespace_project_issue_path(issue.project.namespace, issue.project, issue)
-  end
-
-  step 'I should not see any related merge requests' do
-    page.within '.issue-details' do
-      expect(page).not_to have_content('.merge-requests')
-    end
-  end
-
-  step 'I should see the "Fix NS-01" related merge request' do
-    page.within '.merge-requests' do
-      expect(page).to have_content("1 Related Merge Request")
-      expect(page).to have_content('Fix NS-01')
-    end
-  end
-
-  step 'I should see a note linking to "Fix NS-01" merge request' do
-    project = Project.find_by(name: 'Community')
-    mr = MergeRequest.find_by(title: 'Fix NS-01')
-    page.within('.notes') do
-      expect(page).to have_content('Mary Jane')
-      expect(page).to have_content("mentioned in merge request #{mr.to_reference(project)}")
-    end
-  end
-
-  step 'I should see a note linking to "Private Issue 01" issue' do
-    project = Project.find_by(name: 'Community')
-    issue = Issue.find_by(title: 'Private Issue 01')
-    page.within('.notes') do
-      expect(page).to have_content('Mary Jane')
-      expect(page).to have_content("mentioned in issue #{issue.to_reference(project)}")
-    end
-  end
-
 end
diff --git a/features/steps/project/merge_requests/references.rb b/features/steps/project/merge_requests/references.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ab2ae6847a2dfeaf331a6bd7d69780b59d8f437b
--- /dev/null
+++ b/features/steps/project/merge_requests/references.rb
@@ -0,0 +1,7 @@
+class Spinach::Features::ProjectMergeRequestsReferences < Spinach::FeatureSteps
+  include SharedAuthentication
+  include SharedIssuable
+  include SharedNote
+  include SharedProject
+  include SharedUser
+end
diff --git a/features/steps/shared/issuable.rb b/features/steps/shared/issuable.rb
index e6d1b8b8efc6b238c193097445dc86fd9d4d5d6d..4c5f7488efbd8383572c9bd1c277a33d32a7cc18 100644
--- a/features/steps/shared/issuable.rb
+++ b/features/steps/shared/issuable.rb
@@ -5,6 +5,99 @@ module SharedIssuable
     find(:css, '.issuable-edit').click
   end
 
+  step 'project "Community" has "Community issue" open issue' do
+    create_issuable_for_project(
+      project_name: 'Community',
+      title: 'Community issue'
+    )
+  end
+
+  step 'project "Community" has "Community fix" open merge request' do
+    create_issuable_for_project(
+      project_name: 'Community',
+      type: :merge_request,
+      title: 'Community fix'
+    )
+  end
+
+  step 'project "Enterprise" has "Enterprise issue" open issue' do
+    create_issuable_for_project(
+      project_name: 'Enterprise',
+      title: 'Enterprise issue'
+    )
+  end
+
+  step 'project "Enterprise" has "Enterprise fix" open merge request' do
+    create_issuable_for_project(
+      project_name: 'Enterprise',
+      type: :merge_request,
+      title: 'Enterprise fix'
+    )
+  end
+
+  step 'I leave a comment referencing issue "Community issue"' do
+    leave_reference_comment(
+      issuable: Issue.find_by(title: 'Community issue'),
+      from_project_name: 'Enterprise'
+    )
+  end
+
+  step 'I leave a comment referencing issue "Community fix"' do
+    leave_reference_comment(
+      issuable: MergeRequest.find_by(title: 'Community fix'),
+      from_project_name: 'Enterprise'
+    )
+  end
+
+  step 'I visit issue page "Enterprise issue"' do
+    issue = Issue.find_by(title: 'Enterprise issue')
+    visit namespace_project_issue_path(issue.project.namespace, issue.project, issue)
+  end
+
+  step 'I visit merge request page "Enterprise fix"' do
+    mr = MergeRequest.find_by(title: 'Enterprise fix')
+    visit namespace_project_merge_request_path(mr.target_project.namespace, mr.target_project, mr)
+  end
+
+  step 'I visit issue page "Community issue"' do
+    issue = Issue.find_by(title: 'Community issue')
+    visit namespace_project_issue_path(issue.project.namespace, issue.project, issue)
+  end
+
+  step 'I visit issue page "Community fix"' do
+    mr = MergeRequest.find_by(title: 'Community fix')
+    visit namespace_project_merge_request_path(mr.target_project.namespace, mr.target_project, mr)
+  end
+
+  step 'I should not see any related merge requests' do
+    page.within '.issue-details' do
+      expect(page).not_to have_content('.merge-requests')
+    end
+  end
+
+  step 'I should see the "Enterprise fix" related merge request' do
+    page.within '.merge-requests' do
+      expect(page).to have_content('1 Related Merge Request')
+      expect(page).to have_content('Enterprise fix')
+    end
+  end
+
+  step 'I should see a note linking to "Enterprise fix" merge request' do
+    visible_note(
+      issuable: MergeRequest.find_by(title: 'Enterprise fix'),
+      from_project_name: 'Community',
+      user_name: 'Mary Jane'
+    )
+  end
+
+  step 'I should see a note linking to "Enterprise issue" issue' do
+    visible_note(
+      issuable: Issue.find_by(title: 'Enterprise issue'),
+      from_project_name: 'Community',
+      user_name: 'Mary Jane'
+    )
+  end
+
   step 'I click link "Edit" for the merge request' do
     edit_issuable
   end
@@ -12,4 +105,45 @@ module SharedIssuable
   step 'I click link "Edit" for the issue' do
     edit_issuable
   end
+
+  def create_issuable_for_project(project_name:, title:, type: :issue)
+    project = Project.find_by(name: project_name)
+
+    attrs = {
+      title: title,
+      author: project.users.first,
+      description: '# Description header'
+    }
+
+    case type
+    when :issue
+      attrs.merge!(project: project)
+    when :merge_request
+      attrs.merge!(
+        source_project: project,
+        target_project: project,
+        source_branch: 'fix',
+        target_branch: 'master'
+      )
+    end
+
+    create(type, attrs)
+  end
+
+  def leave_reference_comment(issuable:, from_project_name:)
+    project = Project.find_by(name: from_project_name)
+
+    page.within('.js-main-target-form') do
+      fill_in 'note[note]', with: "##{issuable.to_reference(project)}"
+      click_button 'Add Comment'
+    end
+  end
+
+  def visible_note(issuable:, from_project_name:, user_name:)
+    project = Project.find_by(name: from_project_name)
+
+    expect(page).to have_content(user_name)
+    expect(page).to have_content("mentioned in #{issuable.class.to_s.titleize.downcase} #{issuable.to_reference(project)}")
+  end
+
 end
diff --git a/features/steps/shared/note.rb b/features/steps/shared/note.rb
index 6de58c6e2b1818b81879fbb1767d372ac0eb63c5..444d6726f99af7cdd1153c88b08415404c103213 100644
--- a/features/steps/shared/note.rb
+++ b/features/steps/shared/note.rb
@@ -107,9 +107,7 @@ module SharedNote
   end
 
   step 'I should see no notes at all' do
-    page.within('.notes') do
-      expect(page).to_not have_css('.note')
-    end
+    expect(page).to_not have_css('.note')
   end
 
   # Markdown
diff --git a/features/steps/shared/project.rb b/features/steps/shared/project.rb
index 43a15f434709b6fe7448777f3c604a0c4fb8f0be..5420c451519ec43c328fb01a589d6397db16e6c7 100644
--- a/features/steps/shared/project.rb
+++ b/features/steps/shared/project.rb
@@ -161,31 +161,33 @@ module SharedProject
   end
 
   step '"John Doe" owns private project "Enterprise"' do
-    user = user_exists("John Doe", username: "john_doe")
-    project = Project.find_by(name: "Enterprise")
-    project ||= create(:empty_project, name: "Enterprise", namespace: user.namespace)
-    project.team << [user, :master]
+    user_owns_project(
+      user_name: 'John Doe',
+      project_name: 'Enterprise'
+    )
   end
 
-  step '"John Doe" owns internal project "Internal"' do
-    user = user_exists("John Doe", username: "john_doe")
-    project = Project.find_by(name: "Internal")
-    project ||= create :empty_project, :internal, name: 'Internal', namespace: user.namespace
-    project.team << [user, :master]
+  step '"Mary Jane" owns private project "Enterprise"' do
+    user_owns_project(
+      user_name: 'Mary Jane',
+      project_name: 'Enterprise'
+    )
   end
 
-  step '"John Doe" owns public project "Community"' do
-    user = user_exists("John Doe", username: "john_doe")
-    project = Project.find_by(name: "Community")
-    project ||= create :empty_project, :public, name: 'Community', namespace: user.namespace
-    project.team << [user, :master]
+  step '"John Doe" owns internal project "Internal"' do
+    user_owns_project(
+      user_name: 'John Doe',
+      project_name: 'Internal',
+      visibility: :internal
+    )
   end
 
-  step '"Mary Jane" owns private project "Private Library"' do
-    user = user_exists('Mary Jane', username: 'mary_jane')
-    project = Project.find_by(name: 'Private Library')
-    project ||= create(:project, name: 'Private Library', namespace: user.namespace)
-    project.team << [user, :master]
+  step '"John Doe" owns public project "Community"' do
+    user_owns_project(
+      user_name: 'John Doe',
+      project_name: 'Community',
+      visibility: :public
+    )
   end
 
   step 'public empty project "Empty Public Project"' do
@@ -220,4 +222,12 @@ module SharedProject
       expect(page).to have_content("skipped")
     end
   end
+
+  def user_owns_project(user_name:, project_name:, visibility: :private)
+    user = user_exists(user_name, username: user_name.underscore)
+    project = Project.find_by(name: project_name)
+    project ||= create(:empty_project, visibility, name: project_name, namespace: user.namespace)
+    project.team << [user, :master]
+  end
+
 end