diff --git a/app/assets/javascripts/merge_request.js.coffee b/app/assets/javascripts/merge_request.js.coffee
index b8f916b52231f4484f436f32f3bfa09ef85c8c7d..5e440f3b1d1def493d7c50d5c762ed1a85bbec07 100644
--- a/app/assets/javascripts/merge_request.js.coffee
+++ b/app/assets/javascripts/merge_request.js.coffee
@@ -27,14 +27,11 @@ class @MergeRequest
     this.bindEvents()
     this.activateTabFromPath()
 
-    this.initMergeWidget()
     this.$('.show-all-commits').on 'click', =>
       this.showAllCommits()
 
     modal = $('#modal_merge_info').modal(show: false)
 
-    disableButtonIfEmptyField '#commit_message', '.accept_merge_request'
-
     # Prevent duplicate event bindings
     @disableTaskList()
 
@@ -63,14 +60,11 @@ class @MergeRequest
     $(".context .inline-update").on "change", "#merge_request_assignee_id", ->
       $(this).submit()
 
-  initMergeWidget: ->
-    this.showState( @opts.current_status )
-
-    if this.$('.automerge_widget').length and @opts.check_enable
-      $.get @opts.url_to_automerge_check, (data) =>
-        this.showState( data.merge_status )
-      , 'json'
+  getMergeStatus: ->
+    $.get @opts.url_to_automerge_check, (data) ->
+      $('.mr-state-widget').replaceWith(data)
 
+  getCiStatus: ->
     if @opts.ci_enable
       $.get @opts.url_to_ci_check, (data) =>
         this.showCiState data.status
@@ -92,10 +86,6 @@ class @MergeRequest
       unless @opts.action == 'new'
         @setCurrentAction(tab_action)
 
-    this.$('.accept_merge_request').on 'click', ->
-      $('.automerge_widget.can_be_merged').hide()
-      $('.merge-in-progress').show()
-
     this.$('.remove_source_branch').on 'click', ->
       $('.remove_source_branch_widget').hide()
       $('.remove_source_branch_in_progress').show()
@@ -157,10 +147,6 @@ class @MergeRequest
     # See https://github.com/rails/turbolinks/issues/363
     history.replaceState {turbolinks: true, url: new_state}, '', new_state
 
-  showState: (state) ->
-    $('.automerge_widget').hide()
-    $('.automerge_widget.' + state).show()
-
   showCiState: (state) ->
     $('.ci_widget').hide()
     allowed_states = ["failed", "canceled", "running", "pending", "success"]
@@ -198,11 +184,6 @@ class @MergeRequest
     this.$('.first-commits').remove()
     this.$('.all-commits').removeClass 'hide'
 
-  alreadyOrCannotBeMerged: ->
-    this.$('.automerge_widget').hide()
-    this.$('.merge-in-progress').hide()
-    this.$('.automerge_widget.already_cannot_be_merged').show()
-
   setMergeButtonClass: (css_class) ->
     $('.accept_merge_request').removeClass("btn-create").addClass(css_class)
 
diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss
index f5ac7bd880546403df5ec97a44b613ae5b88a185..61071320973c4417e023e4ea2c60dd98fbcac2be 100644
--- a/app/assets/stylesheets/pages/merge_requests.scss
+++ b/app/assets/stylesheets/pages/merge_requests.scss
@@ -3,7 +3,7 @@
    * MR -> show: Automerge widget
  *
  */
-.automerge_widget {
+.mr-state-widget {
   form {
     margin-bottom: 0;
     .clearfix {
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 71d3051ab884738f0901a0e4332697f795ac0f7c..a7dfedf7f708fb6809357b0f5f60fc94ef8314a1 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -139,7 +139,11 @@ class Projects::MergeRequestsController < Projects::ApplicationController
       @merge_request.check_if_can_be_merged
     end
 
-    render json: { merge_status: @merge_request.automerge_status }
+    @allowed_to_merge = allowed_to_merge?
+    closes_issues
+
+    render partial: "projects/merge_requests/widget/show.html.haml",
+      layout: false
   end
 
   def automerge
@@ -151,6 +155,10 @@ class Projects::MergeRequestsController < Projects::ApplicationController
     else
       @status = false
     end
+
+    respond_to do |format|
+      format.js
+    end
   end
 
   def branch_from
diff --git a/app/views/projects/merge_requests/automerge.js.haml b/app/views/projects/merge_requests/automerge.js.haml
index a53cbb150a41fc7f5e3a004c86496127789406da..26db408a5766c3ad3e34ada6c9047f5d19d62e61 100644
--- a/app/views/projects/merge_requests/automerge.js.haml
+++ b/app/views/projects/merge_requests/automerge.js.haml
@@ -1,6 +1,6 @@
--if @status
+- if @status
   :plain
-    merge_request.mergeInProgress();
--else
+    merge_request.getMergeStatus();
+- else
   :plain
-    merge_request.alreadyOrCannotBeMerged()
+    $('.mr-widget-body').html("#{escape_javascript(render('projects/merge_requests/widget/open/reload'))}");
diff --git a/app/views/projects/merge_requests/widget/_closed.html.haml b/app/views/projects/merge_requests/widget/_closed.html.haml
index 3561eae03248464abd49e62200904a2c7b962f90..18164ba771f1d1dc2c5059ff91efac0d282a8288 100644
--- a/app/views/projects/merge_requests/widget/_closed.html.haml
+++ b/app/views/projects/merge_requests/widget/_closed.html.haml
@@ -1,5 +1,5 @@
 .mr-state-widget
-  = render 'heading'
+  = render 'projects/merge_requests/widget/heading'
   .mr-widget-body
     %h4
       Rejected
diff --git a/app/views/projects/merge_requests/widget/_heading.html.haml b/app/views/projects/merge_requests/widget/_heading.html.haml
index a17078213349e346937117c3a3cfdae67eeb7c46..0cbd88157ca4fda7375967184220563b51d2a66c 100644
--- a/app/views/projects/merge_requests/widget/_heading.html.haml
+++ b/app/views/projects/merge_requests/widget/_heading.html.haml
@@ -32,3 +32,7 @@
     .ci_widget.ci-error{style: "display:none"}
       = icon("times")
       %span Cannot connect to the CI server. Please check your settings and try again.
+
+  :coffeescript
+    $ ->
+      merge_request.getCiStatus()
diff --git a/app/views/projects/merge_requests/widget/_locked.html.haml b/app/views/projects/merge_requests/widget/_locked.html.haml
index 67f841db5203b00c9d3fb063d4e0ffc451e574da..13ec278847bcf64d51fe7b9476330b5bd0546704 100644
--- a/app/views/projects/merge_requests/widget/_locked.html.haml
+++ b/app/views/projects/merge_requests/widget/_locked.html.haml
@@ -1,5 +1,5 @@
 .mr-state-widget
-  = render 'heading'
+  = render 'projects/merge_requests/widget/heading'
   .mr-widget-body
     %h4
       Merge in progress...
diff --git a/app/views/projects/merge_requests/widget/_merged.html.haml b/app/views/projects/merge_requests/widget/_merged.html.haml
index bd1bc660b9b54058d0bc180e4c5bf2a67e7fe1df..7fdeb3a96a371dcd50718db64ae08e389b572467 100644
--- a/app/views/projects/merge_requests/widget/_merged.html.haml
+++ b/app/views/projects/merge_requests/widget/_merged.html.haml
@@ -1,5 +1,5 @@
 .mr-state-widget
-  = render 'heading'
+  = render 'projects/merge_requests/widget/heading'
   .mr-widget-body
     %h4
       Accepted
diff --git a/app/views/projects/merge_requests/widget/_mr_accept.html.haml b/app/views/projects/merge_requests/widget/_mr_accept.html.haml
deleted file mode 100644
index d3f7a09144ed34840d3f87430242028200a7747e..0000000000000000000000000000000000000000
--- a/app/views/projects/merge_requests/widget/_mr_accept.html.haml
+++ /dev/null
@@ -1,20 +0,0 @@
-- if @show_merge_controls
-  .automerge_widget.can_be_merged.hide
-    .clearfix
-
-  .automerge_widget.cannot_be_merged.hide
-
-    %p
-      %button.btn.disabled{:type => 'button'}
-        %i.fa.fa-warning
-        Accept Merge Request
-      &nbsp;
-      This happens when Git is not able to automatically resolve conflicts between branches.
-
-
-  .automerge_widget.unchecked
-
-  .automerge_widget.already_cannot_be_merged.hide
-    %p
-      %strong This merge request cannot be merged. Try to reload the page.
-
diff --git a/app/views/projects/merge_requests/widget/_open.html.haml b/app/views/projects/merge_requests/widget/_open.html.haml
index 645ad6e9e49a05553f30960b81eaddfd4b8c9aed..a9d8e3084ce95935237abbc890447d591a647dff 100644
--- a/app/views/projects/merge_requests/widget/_open.html.haml
+++ b/app/views/projects/merge_requests/widget/_open.html.haml
@@ -5,7 +5,7 @@
       = render 'projects/merge_requests/widget/open/archived'
     - elsif !@project.satellite.exists?
       = render 'projects/merge_requests/widget/open/no_satellite'
-    - elsif @commits.blank?
+    - elsif @merge_request.commits.blank?
       = render 'projects/merge_requests/widget/open/nothing'
     - elsif @merge_request.branch_missing?
       = render 'projects/merge_requests/widget/open/missing_branch'
diff --git a/app/views/projects/merge_requests/widget/open/_accept.html.haml b/app/views/projects/merge_requests/widget/open/_accept.html.haml
index aa14b0cf21e501548850cc51886a1d2bbaa3dead..b2ea57126ee5f991efde1c07ee718d7f6b35b3b3 100644
--- a/app/views/projects/merge_requests/widget/open/_accept.html.haml
+++ b/app/views/projects/merge_requests/widget/open/_accept.html.haml
@@ -1,4 +1,5 @@
 = form_for [:automerge, @project.namespace.becomes(Namespace), @project, @merge_request], remote: true, method: :post do |f|
+  = hidden_field_tag :authenticity_token, form_authenticity_token
   .accept-merge-holder.clearfix.js-toggle-container
     .accept-action
       = f.submit "Accept Merge Request", class: "btn btn-create accept_merge_request"
@@ -22,3 +23,8 @@
     %strong
       = link_to "command line", "#modal_merge_info", class: "how_to_merge_link vlink", title: "How To Merge", "data-toggle" => "modal"
 
+  :coffeescript
+    disableButtonIfEmptyField '#commit_message', '.accept_merge_request'
+
+    $('.accept_merge_request').on 'click', ->
+      $('.mr-widget-body').html("#{escape_javascript(render('projects/merge_requests/widget/open/mip'))}")
diff --git a/app/views/projects/merge_requests/widget/open/_check.html.haml b/app/views/projects/merge_requests/widget/open/_check.html.haml
index 95a5bcd03c34432efe30e44badb451dce069b9e3..0ca54f3941e8090c5a0d66111c1ad0ed77418ec4 100644
--- a/app/views/projects/merge_requests/widget/open/_check.html.haml
+++ b/app/views/projects/merge_requests/widget/open/_check.html.haml
@@ -2,3 +2,7 @@
   %strong
     %i.fa.fa-spinner.fa-spin
     Checking automatic merge鈥�
+
+:coffeescript
+  $ ->
+    merge_request.getMergeStatus()
diff --git a/app/views/projects/merge_requests/widget/open/_conflict.html.haml b/app/views/projects/merge_requests/widget/open/_conflict.html.haml
deleted file mode 100644
index 3fc294bc0b584ac48b30588b2da930b700f078c2..0000000000000000000000000000000000000000
--- a/app/views/projects/merge_requests/widget/open/_conflict.html.haml
+++ /dev/null
@@ -1,5 +0,0 @@
-%h4
-  This merge request contains merge conflicts that must be resolved.
-  You can try it manually on the
-  %strong
-    = link_to "command line", "#modal_merge_info", class: "how_to_merge_link vlink", title: "How To Merge", "data-toggle" => "modal"
diff --git a/app/views/projects/merge_requests/widget/open/_conflicts.html.haml b/app/views/projects/merge_requests/widget/open/_conflicts.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..9e0c8a9e06f98bfb3a0bafb5a463103caf2cd7e2
--- /dev/null
+++ b/app/views/projects/merge_requests/widget/open/_conflicts.html.haml
@@ -0,0 +1,9 @@
+- if @allowed_to_merge
+  %h4
+    This merge request contains merge conflicts that must be resolved.
+    You can try it manually on the
+    %strong
+      = link_to "command line", "#modal_merge_info", class: "how_to_merge_link vlink", title: "How To Merge", "data-toggle" => "modal"
+- else
+  %strong This merge request contains merge conflicts that must be resolved.
+  Only those with write access to this repository can merge merge requests.
diff --git a/app/views/projects/merge_requests/widget/open/_not_allowed.html.haml b/app/views/projects/merge_requests/widget/open/_not_allowed.html.haml
index 3989009c36ece68a975921ae319073b5164592ef..82f6ffd8fcbe69331b49f4cb0d90366e2608a9b0 100644
--- a/app/views/projects/merge_requests/widget/open/_not_allowed.html.haml
+++ b/app/views/projects/merge_requests/widget/open/_not_allowed.html.haml
@@ -1,9 +1,2 @@
-.automerge_widget.cannot_be_merged.hide
-  %strong This merge request contains merge conflicts that must be resolved.
-  Only those with write access to this repository can merge merge requests.
-.automerge_widget.work_in_progress.hide
-  %strong This merge request is marked as Work In Progress.
-  Only those with write access to this repository can merge merge requests.
-.automerge_widget.can_be_merged.hide
-  %strong This request can be merged automatically.
-  Only those with write access to this repository can merge merge requests.
+%strong This request can be merged automatically.
+Only those with write access to this repository can merge merge requests.
diff --git a/app/views/projects/merge_requests/widget/open/_reload.html.haml b/app/views/projects/merge_requests/widget/open/_reload.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..5787f6efea457e6ca16c31d7504c8eceb8a97d8c
--- /dev/null
+++ b/app/views/projects/merge_requests/widget/open/_reload.html.haml
@@ -0,0 +1 @@
+This merge request cannot be merged. Try to reload the page.
diff --git a/app/views/projects/merge_requests/widget/open/_wip.html.haml b/app/views/projects/merge_requests/widget/open/_wip.html.haml
index 9268d68ba3458aeaa9fbfeb7b402b511f48ddc1c..30482bce7505cbab8e5994150b039d19c4e69083 100644
--- a/app/views/projects/merge_requests/widget/open/_wip.html.haml
+++ b/app/views/projects/merge_requests/widget/open/_wip.html.haml
@@ -1,9 +1,13 @@
-%h4
-  This merge request cannot be accepted because it is marked as Work In Progress.
+- if @allowed_to_merge
+  %h4
+    This merge request cannot be accepted because it is marked as Work In Progress.
 
-%p
-  %button.btn.disabled{:type => 'button'}
-    %i.fa.fa-warning
-    Accept Merge Request
-  &nbsp;
-  When the merge request is ready, remove the "WIP" prefix from the title to allow it to be accepted.
+  %p
+    %button.btn.disabled{:type => 'button'}
+      %i.fa.fa-warning
+      Accept Merge Request
+    &nbsp;
+    When the merge request is ready, remove the "WIP" prefix from the title to allow it to be accepted.
+- else
+  %strong This merge request is marked as Work In Progress.
+  Only those with write access to this repository can merge merge requests.