diff --git a/app/assets/javascripts/merge_request.js b/app/assets/javascripts/merge_request.js
index 829e2264152912aa3167097d0af4bc6db4359de7..ff51b14543bec0bb603f494cb0cec7735c6d51c0 100644
--- a/app/assets/javascripts/merge_request.js
+++ b/app/assets/javascripts/merge_request.js
@@ -90,10 +90,13 @@ MergeRequest.prototype.initMRBtnListeners = function () {
             MergeRequest.toggleDraftStatus(data.title, wipEvent === 'unwip');
           })
           .catch(() => {
-            draftToggle.removeAttribute('disabled');
             createFlash({
               message: __('Something went wrong. Please try again.'),
             });
+          })
+          .finally(() => {
+            draftToggle.removeAttribute('disabled');
+            loader.remove();
           });
       });
     });
@@ -162,7 +165,9 @@ MergeRequest.toggleDraftStatus = function (title, isReady) {
       );
 
       draftToggle.setAttribute('href', url);
-      draftToggle.textContent = isReady ? __('Mark as draft') : __('Mark as ready');
+      draftToggle.querySelector('.gl-new-dropdown-item-text-wrapper').textContent = isReady
+        ? __('Mark as draft')
+        : __('Mark as ready');
     });
   }
 };
diff --git a/app/views/projects/merge_requests/_close_reopen_draft_report_toggle.html.haml b/app/views/projects/merge_requests/_close_reopen_draft_report_toggle.html.haml
index f6afac493d592521fdb9be9cead86991ae7b1d7b..df9ef28726a3c8d69810520e44a8449c0f3e1fd4 100644
--- a/app/views/projects/merge_requests/_close_reopen_draft_report_toggle.html.haml
+++ b/app/views/projects/merge_requests/_close_reopen_draft_report_toggle.html.haml
@@ -1,36 +1,40 @@
 - display_issuable_type = issuable_display_type(@merge_request)
-- button_class = "btn gl-button #{!@merge_request.closed? && 'js-draft-toggle-button'}"
-- toggle_class = "btn gl-button dropdown-toggle"
 
-.float-left.btn-group.gl-ml-3.gl-display-none.gl-md-display-flex
-  = link_to @merge_request.closed? ? reopen_issuable_path(@merge_request) : toggle_draft_merge_request_path(@merge_request), method: :put, class: "#{button_class} btn-confirm-secondary" do
-    - if @merge_request.closed?
-      = _('Reopen')
-      = display_issuable_type
-    - else
-      = @merge_request.work_in_progress? ? _('Mark as ready') : _('Mark as draft')
+.float-left.btn-group.gl-md-ml-3.gl-display-flex.dropdown.gl-new-dropdown.gl-md-w-auto.gl-w-full
+  = button_tag type: 'button', class: "btn dropdown-toggle btn-default btn-md gl-button gl-dropdown-toggle btn-default-tertiary dropdown-icon-only dropdown-toggle-no-caret gl-display-none! gl-md-display-inline-flex!", data: { 'toggle' => 'dropdown' } do
+    %span.gl-sr-only= _('Toggle dropdown')
+    = sprite_icon "ellipsis_v", size: 16, css_class: "dropdown-icon gl-icon"
+  = button_tag type: 'button', class: "btn dropdown-toggle btn-default btn-md btn-block gl-button gl-dropdown-toggle gl-md-display-none!", data: { 'toggle' => 'dropdown' } do
+    %span.gl-new-dropdown-button-text= _('Merge request actions')
+    = sprite_icon "chevron-down", size: 16, css_class: "dropdown-icon gl-icon"
+  .dropdown-menu.dropdown-menu-right
+    .gl-new-dropdown-inner
+      .gl-new-dropdown-contents
+        %ul
+          - if can?(current_user, :update_merge_request, @merge_request)
+            %li.gl-new-dropdown-item{ class: "gl-md-display-none!" }
+              = link_to edit_project_merge_request_path(@project, @merge_request), class: 'dropdown-item' do
+                .gl-new-dropdown-item-text-wrapper
+                  = _('Edit')
+          - if @merge_request.open?
+            %li.gl-new-dropdown-item
+              = link_to toggle_draft_merge_request_path(@merge_request), method: :put, class: 'dropdown-item js-draft-toggle-button' do
+                .gl-new-dropdown-item-text-wrapper
+                  = @merge_request.work_in_progress? ? _('Mark as ready') : _('Mark as draft')
+            %li.gl-new-dropdown-item.js-close-item
+              = link_to close_issuable_path(@merge_request), method: :put, class: 'dropdown-item' do
+                .gl-new-dropdown-item-text-wrapper
+                  = _('Close')
+                  = display_issuable_type
+          - elsif !@merge_request.source_project_missing?
+            %li.gl-new-dropdown-item
+              = link_to reopen_issuable_path(@merge_request), method: :put, class: 'dropdown-item' do
+                .gl-new-dropdown-item-text-wrapper
+                  = _('Reopen')
+                  = display_issuable_type
 
-  - if !@merge_request.closed? || !issuable_author_is_current_user(@merge_request)
-    = button_tag type: 'button', class: "#{toggle_class} btn-confirm-secondary btn-icon", data: { 'toggle' => 'dropdown' } do
-      %span.gl-sr-only= _('Toggle dropdown')
-      = sprite_icon "chevron-down", size: 12, css_class: "gl-button-icon"
-
-    %ul.dropdown-menu.dropdown-menu-right
-      - if @merge_request.open?
-        %li
-          = link_to close_issuable_path(@merge_request), method: :put do
-            .description
-              %strong.title
-                = _('Close')
-                = display_issuable_type
-
-      - unless issuable_author_is_current_user(@merge_request)
-        - unless @merge_request.closed?
-          %li.divider.droplab-item-ignore
-
-        %li
-          %a{ href: new_abuse_report_path(user_id: @merge_request.author.id, ref_url: merge_request_url(@merge_request)) }
-            .description
-              %strong.title= _('Report abuse')
-              %p.text.gl-mb-0
-                = _('Report %{display_issuable_type} that are abusive, inappropriate or spam.') % { display_issuable_type: display_issuable_type.pluralize }
+          - unless issuable_author_is_current_user(@merge_request)
+            %li.gl-new-dropdown-item
+              = link_to new_abuse_report_path(user_id: @merge_request.author.id, ref_url: merge_request_url(@merge_request)), class: 'dropdown-item' do
+                .gl-new-dropdown-item-text-wrapper
+                  = _('Report abuse')
diff --git a/app/views/projects/merge_requests/_mr_title.html.haml b/app/views/projects/merge_requests/_mr_title.html.haml
index 49b7320d630b6d321ec31f5ee540d8ceacef01d6..ae44143f2eeebb79e743a191f4a4f8f2f7639c43 100644
--- a/app/views/projects/merge_requests/_mr_title.html.haml
+++ b/app/views/projects/merge_requests/_mr_title.html.haml
@@ -24,29 +24,8 @@
         = sprite_icon('chevron-double-lg-left')
 
     .detail-page-header-actions.js-issuable-actions
-      .clearfix.dropdown
-        %button.gl-button.btn.btn-default.float-left.gl-md-display-none.gl-w-full{ type: "button", data: { toggle: "dropdown" } }
-          Options
-          = sprite_icon('chevron-down', css_class: 'gl-text-gray-500')
-        .dropdown-menu.dropdown-menu-right
-          %ul
-            - if can_update_merge_request
-              %li= link_to _('Edit'), edit_namespace_project_merge_request_path(@project.namespace, @project, @merge_request)
-              - if @merge_request.opened?
-                %li
-                  = link_to @merge_request.work_in_progress? ? _('Mark as ready') : _('Mark as draft'), toggle_draft_merge_request_path(@merge_request), method: :put, class: "js-draft-toggle-button"
-              %li{ class: [merge_request_button_visibility(@merge_request, true), 'js-close-item'] }
-                = link_to _('Close'), merge_request_path(@merge_request, merge_request: { state_event: :close }), method: :put, title: 'Close merge request'
-            - if can_reopen_merge_request
-              %li{ class: merge_request_button_visibility(@merge_request, false) }
-                = link_to _('Reopen'), merge_request_path(@merge_request, merge_request: { state_event: :reopen }), method: :put, title: 'Reopen merge request'
-            - unless @merge_request.merged? || current_user == @merge_request.author
-              %li= link_to _('Report abuse'), new_abuse_report_path(user_id: @merge_request.author.id, ref_url: merge_request_url(@merge_request))
+      - if can_update_merge_request
+        = link_to _('Edit'), edit_project_merge_request_path(@project, @merge_request), class: "gl-display-none gl-md-display-block btn gl-button btn-default btn-grouped js-issuable-edit", data: { qa_selector: "edit_button" }
 
-        - if can_update_merge_request
-          = link_to _('Edit'), edit_project_merge_request_path(@project, @merge_request), class: "gl-display-none gl-md-display-block btn gl-button btn-default btn-grouped js-issuable-edit", data: { qa_selector: "edit_button" }
-
-        - if can_update_merge_request && !are_close_and_open_buttons_hidden
-          = render 'projects/merge_requests/close_reopen_draft_report_toggle'
-        - elsif !@merge_request.merged?
-          = link_to _('Report abuse'), new_abuse_report_path(user_id: @merge_request.author.id, ref_url: merge_request_url(@merge_request)), class: 'gl-display-none gl-md-display-block gl-button btn btn-default gl-float-right gl-ml-3', title: _('Report abuse')
+      - if current_user
+        = render 'projects/merge_requests/close_reopen_draft_report_toggle'
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 0d727e3945ae0de9fb6f8fa6c197f6df3ff8d549..028e5399373fd3e6d213d477debe530487588577 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -23778,6 +23778,9 @@ msgstr ""
 msgid "Merge request %{mr_link} was reviewed by %{mr_author}"
 msgstr ""
 
+msgid "Merge request actions"
+msgstr ""
+
 msgid "Merge request analytics"
 msgstr ""
 
@@ -31661,9 +31664,6 @@ msgstr ""
 msgid "Repo by URL"
 msgstr ""
 
-msgid "Report %{display_issuable_type} that are abusive, inappropriate or spam."
-msgstr ""
-
 msgid "Report abuse"
 msgstr ""
 
diff --git a/spec/features/merge_request/close_reopen_report_toggle_spec.rb b/spec/features/merge_request/close_reopen_report_toggle_spec.rb
index 8a4277d87c9b500dd500d2748854c4f536816eb1..dea9a10a4ec31ffdf45f0dd4ac69b9df8cbc1c70 100644
--- a/spec/features/merge_request/close_reopen_report_toggle_spec.rb
+++ b/spec/features/merge_request/close_reopen_report_toggle_spec.rb
@@ -28,7 +28,6 @@
 
           expect(container).to have_link("Close merge request")
           expect(container).to have_link('Report abuse')
-          expect(container).to have_text("Report merge requests that are abusive, inappropriate or spam.")
         end
 
         it 'links to Report Abuse' do
@@ -43,10 +42,12 @@
         let(:issuable) { create(:merge_request, :opened, source_project: project) }
 
         it 'shows the `Edit` and `Mark as draft` buttons' do
+          click_button 'Toggle dropdown'
+
           expect(container).to have_link('Edit')
           expect(container).to have_link('Mark as draft')
-          expect(container).not_to have_button('Report abuse')
-          expect(container).not_to have_button('Close merge request')
+          expect(container).to have_link('Close merge request')
+          expect(container).to have_link('Report abuse')
           expect(container).not_to have_link('Reopen merge request')
         end
       end
@@ -55,21 +56,24 @@
         let(:issuable) { create(:merge_request, :closed, source_project: project) }
 
         it 'shows both the `Edit` and `Reopen` button' do
+          click_button 'Toggle dropdown'
+
           expect(container).to have_link('Edit')
-          expect(container).not_to have_button('Report abuse')
-          expect(container).not_to have_button('Close merge request')
+          expect(container).to have_link('Report abuse')
           expect(container).to have_link('Reopen merge request')
+          expect(container).not_to have_link('Close merge request')
         end
 
         context 'when the merge request author is the current user' do
           let(:issuable) { create(:merge_request, :closed, source_project: project, author: user) }
 
           it 'shows both the `Edit` and `Reopen` button' do
+            click_button 'Toggle dropdown'
+
             expect(container).to have_link('Edit')
-            expect(container).not_to have_link('Report abuse')
-            expect(container).not_to have_selector('button.dropdown-toggle')
-            expect(container).not_to have_button('Close merge request')
             expect(container).to have_link('Reopen merge request')
+            expect(container).not_to have_link('Close merge request')
+            expect(container).not_to have_link('Report abuse')
           end
         end
       end
diff --git a/spec/features/merge_request/user_marks_merge_request_as_draft_spec.rb b/spec/features/merge_request/user_marks_merge_request_as_draft_spec.rb
index f5bca7cf01535c8780a6b48890b0cd55621c9fa8..c3a614764428651fd758a6a1031e4c84a4e385c0 100644
--- a/spec/features/merge_request/user_marks_merge_request_as_draft_spec.rb
+++ b/spec/features/merge_request/user_marks_merge_request_as_draft_spec.rb
@@ -16,10 +16,13 @@
   end
 
   it 'toggles draft status' do
+    click_button 'Toggle dropdown'
     click_link 'Mark as draft'
 
     expect(page).to have_content("Draft: #{merge_request.title}")
 
+    click_button 'Toggle dropdown'
+
     page.within('.detail-page-header-actions') do
       click_link 'Mark as ready'
     end
diff --git a/spec/views/projects/merge_requests/show.html.haml_spec.rb b/spec/views/projects/merge_requests/show.html.haml_spec.rb
index 6ffd0936003f990813389617966ba0d2d498962b..86a4b25f7467b56129e87fc3a2f38d0f8144bd6e 100644
--- a/spec/views/projects/merge_requests/show.html.haml_spec.rb
+++ b/spec/views/projects/merge_requests/show.html.haml_spec.rb
@@ -16,7 +16,6 @@
       render
 
       expect(rendered).to have_css('a', visible: true, text: 'Mark as draft')
-      expect(rendered).to have_css('a', visible: false, text: 'Reopen')
       expect(rendered).to have_css('a', visible: true, text: 'Close')
     end
   end
@@ -31,7 +30,6 @@
 
       expect(rendered).not_to have_css('a', visible: true, text: 'Mark as draft')
       expect(rendered).to have_css('a', visible: true, text: 'Reopen')
-      expect(rendered).to have_css('a', visible: false, text: 'Close')
     end
 
     context 'when source project does not exist' do
@@ -40,8 +38,7 @@
 
         render
 
-        expect(rendered).to have_css('a', visible: false, text: 'Reopen')
-        expect(rendered).to have_css('a', visible: false, text: 'Close')
+        expect(rendered).not_to have_css('a', visible: false, text: 'Reopen')
       end
     end
   end