diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 03166294ddd8d7a6b46649ddfe066a7dd04eac6a..a886af713d5b90a3ef5aa2c0f4ad2685fb482441 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -81,7 +81,13 @@ class Projects::MergeRequestsController < Projects::ApplicationController
   def diffs
     apply_diff_view_cookie!
 
-    @merge_request_diff = @merge_request.merge_request_diff
+    @merge_request_diff =
+      if params[:diff_id]
+        @merge_request.merge_request_diffs.find(params[:diff_id])
+      else
+        @merge_request.merge_request_diff
+      end
+
 
     respond_to do |format|
       format.html { define_discussion_vars }
diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb
index 3f520c8f3ffa8146669e94bebfe992299d72d790..a92f597225a91d67d9952a68075bd4aef213ea61 100644
--- a/app/models/merge_request_diff.rb
+++ b/app/models/merge_request_diff.rb
@@ -96,6 +96,16 @@ class MergeRequestDiff < ActiveRecord::Base
       end
   end
 
+  def diff_refs
+    return unless start_commit || base_commit
+
+    Gitlab::Diff::DiffRefs.new(
+      base_sha:  base_commit_sha,
+      start_sha: start_commit_sha,
+      head_sha:  head_commit_sha
+    )
+  end
+
   private
 
   # Collect array of Git::Commit objects
diff --git a/app/views/projects/merge_requests/show/_diffs.html.haml b/app/views/projects/merge_requests/show/_diffs.html.haml
index 1b0bae86ad4ee46fa06e2fe94cda246c4d2f519c..e26499cc1441e1260a1bb962693b21a4414a71bc 100644
--- a/app/views/projects/merge_requests/show/_diffs.html.haml
+++ b/app/views/projects/merge_requests/show/_diffs.html.haml
@@ -1,6 +1,7 @@
 - if @merge_request_diff.collected?
-  = render "projects/diffs/diffs", diffs: @merge_request.diffs(diff_options),
-    project: @merge_request.project, diff_refs: @merge_request.diff_refs
+  = render 'projects/merge_requests/show/versions'
+  = render "projects/diffs/diffs", diffs: @merge_request_diff.diffs(diff_options),
+    project: @merge_request.project, diff_refs: @merge_request_diff.diff_refs
 - elsif @merge_request_diff.empty?
   .nothing-here-block Nothing to merge from #{@merge_request.source_branch} into #{@merge_request.target_branch}
 - else
diff --git a/app/views/projects/merge_requests/show/_versions.html.haml b/app/views/projects/merge_requests/show/_versions.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..2764786d9bfbe227044aa17e398a52951c496e80
--- /dev/null
+++ b/app/views/projects/merge_requests/show/_versions.html.haml
@@ -0,0 +1,18 @@
+- if @merge_request.merge_request_diffs.size > 1
+  - latest_diff = @merge_request.merge_request_diff
+  .light-well
+    Merge Request version
+
+    %span.dropdown.inline
+      %a.dropdown-toggle{ data: {toggle: :dropdown} }
+        %strong.monospace #{@merge_request_diff.base_commit.short_id}..#{@merge_request_diff.head_commit.short_id}
+        %span.caret
+      %ul.dropdown-menu
+        - @merge_request.merge_request_diffs.each do |merge_request_diff|
+          %li{ class: ('active' if merge_request_diff == latest_diff) }
+            = link_to diffs_namespace_project_merge_request_path(@project.namespace, @project, @merge_request, diff_id: merge_request_diff.id) do
+              %strong.monospace
+                #{merge_request_diff.base_commit.short_id}..#{merge_request_diff.head_commit.short_id}
+              %br
+              %small
+                = time_ago_with_tooltip(merge_request_diff.created_at)