diff --git a/app/assets/javascripts/merge_request.js.coffee b/app/assets/javascripts/merge_request.js.coffee
index 8c321319b309f60c8ce3d36650e8f87fc695618c..c6c7f37707f95a37ca099128cc6692286ed24462 100644
--- a/app/assets/javascripts/merge_request.js.coffee
+++ b/app/assets/javascripts/merge_request.js.coffee
@@ -63,12 +63,18 @@ class @MergeRequest
               $('a.btn-reopen').removeClass('hidden')
               $('div.status-box-closed').removeClass('hidden')
               $('div.status-box-open').addClass('hidden')
+
+              $('div.mr-state-widget-closed').removeClass('hidden')
+              $('div.mr-state-widget-opened').addClass('hidden')
             else
               $('a.btn-reopen').addClass('hidden')
               $('a.issuable-edit').removeClass('hidden')
               $('a.btn-close').removeClass('hidden')
               $('div.status-box-closed').addClass('hidden')
               $('div.status-box-open').removeClass('hidden')
+
+              $('div.mr-state-widget-closed').addClass('hidden')
+              $('div.mr-state-widget-opened').removeClass('hidden')
           else
             new Flash(mergeRequestFailMessage, 'alert')
           $this.prop('disabled', false)
diff --git a/app/assets/javascripts/merge_request_widget.js.coffee b/app/assets/javascripts/merge_request_widget.js.coffee
index 738ffc8343bfd34437915c56f7148ec2cbc8f5cc..f0a687f79b1bc0b5783714f10ae8f45a48624448 100644
--- a/app/assets/javascripts/merge_request_widget.js.coffee
+++ b/app/assets/javascripts/merge_request_widget.js.coffee
@@ -28,8 +28,9 @@ class @MergeRequestWidget
 
   getMergeStatus: ->
     $.get @opts.url_to_automerge_check, (data) ->
-      $('.mr-state-widget').replaceWith(data)
-
+      console.log("data",data);
+      # $('div.mr-state-widget.mr-state-widget-opened').replaceWith(data)
+      
   getCiStatus: ->
     if @opts.ci_enable
       $.get @opts.url_to_ci_check, (data) =>
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index ab5c953189cfa6d86123fe9d8ac945a1b3903365..e3c4aa4873aea152f7cd288340f1b727eee5ad6e 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -48,9 +48,15 @@ class Projects::MergeRequestsController < Projects::ApplicationController
     @note_counts = Note.where(commit_id: @merge_request.commits.map(&:id)).
       group(:commit_id).count
 
+    json_merge_request = @merge_requests.as_json
+
     respond_to do |format|
       format.html
-      format.json { render json: @merge_request }
+      format.json do 
+        render json: {
+          hi: "yes"
+        }
+      end
       format.diff { render text: @merge_request.to_diff(current_user) }
       format.patch { render text: @merge_request.to_patch(current_user) }
     end
@@ -143,7 +149,8 @@ class Projects::MergeRequestsController < Projects::ApplicationController
         format.json do
           render json: {
             saved: @merge_request.valid?,
-            assignee_avatar_url: @merge_request.assignee.try(:avatar_url)
+            assignee_avatar_url: @merge_request.assignee.try(:avatar_url),
+            closed_event: @merge_request.closed_event
           }
         end
       end
@@ -154,8 +161,17 @@ class Projects::MergeRequestsController < Projects::ApplicationController
 
   def merge_check
     @merge_request.check_if_can_be_merged if @merge_request.unchecked?
-
-    render partial: "projects/merge_requests/widget/show.html.haml", layout: false
+    puts @merge_request.merge_status
+    respond_to do |format|
+      format.json do
+        render json: {
+          can_be_merged: @merge_request.merge_status == :can_be_merged
+        }
+      end
+      format.html do
+        render partial: "projects/merge_requests/widget/show.html.haml", layout: false
+      end
+    end
   end
 
   def cancel_merge_when_build_succeeds
diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb
index fafe2acd5388f0c23f5d0e0175f93e5f95e064b7..6306450ca263064e46c1cf40b5b0c7bf99d0f8c3 100644
--- a/app/helpers/merge_requests_helper.rb
+++ b/app/helpers/merge_requests_helper.rb
@@ -23,6 +23,15 @@ module MergeRequestsHelper
     return 'hidden' if mr.closed? == closed
   end
 
+  def merge_request_widget_visibility(mr, *states)
+    states.each do |state|
+      if mr.state == state
+        return
+      end
+    end
+    return 'hidden'
+  end
+
   def mr_css_classes(mr)
     classes = "merge-request"
     classes << " closed" if mr.closed?
diff --git a/app/views/projects/merge_requests/widget/_closed.html.haml b/app/views/projects/merge_requests/widget/_closed.html.haml
index f3cc0e7e8a19fe04e1985c1b2d44c208dfaec37e..46ee22ec87352cf4a3fbe7088104189a7ed4fc8b 100644
--- a/app/views/projects/merge_requests/widget/_closed.html.haml
+++ b/app/views/projects/merge_requests/widget/_closed.html.haml
@@ -1,4 +1,4 @@
-.mr-state-widget
+.mr-state-widget.mr-state-widget-closed{class: merge_request_widget_visibility(@merge_request, 'closed')}
   = render 'projects/merge_requests/widget/heading'
   .mr-widget-body
     %h4
diff --git a/app/views/projects/merge_requests/widget/_locked.html.haml b/app/views/projects/merge_requests/widget/_locked.html.haml
index 78d0783cba05208647a0962e2e14784deae42d4c..55ecd69a6ced4e7456f30ee089412afc1148f37b 100644
--- a/app/views/projects/merge_requests/widget/_locked.html.haml
+++ b/app/views/projects/merge_requests/widget/_locked.html.haml
@@ -1,4 +1,4 @@
-.mr-state-widget
+.mr-state-widget.mr-state-widget-locked{class: merge_request_widget_visibility(@merge_request, 'locked')}
   = render 'projects/merge_requests/widget/heading'
   .mr-widget-body
     %h4
diff --git a/app/views/projects/merge_requests/widget/_merged.html.haml b/app/views/projects/merge_requests/widget/_merged.html.haml
index d1d602eecdcdc08986ed25822956416b2c470904..2bb5096702391f24c8f94875702d01db536d01d5 100644
--- a/app/views/projects/merge_requests/widget/_merged.html.haml
+++ b/app/views/projects/merge_requests/widget/_merged.html.haml
@@ -1,4 +1,4 @@
-.mr-state-widget
+.mr-state-widget.mr-state-widget-merged{class: merge_request_widget_visibility(@merge_request, 'merged')}
   = render 'projects/merge_requests/widget/heading'
   .mr-widget-body
     %h4
diff --git a/app/views/projects/merge_requests/widget/_open.html.haml b/app/views/projects/merge_requests/widget/_open.html.haml
index 55dbae598d3c88a8ef917c26a8813b00b3d574bb..2257a166460b69ea3c7fcd00e62b6dafee249c70 100644
--- a/app/views/projects/merge_requests/widget/_open.html.haml
+++ b/app/views/projects/merge_requests/widget/_open.html.haml
@@ -1,24 +1,23 @@
-.mr-state-widget
+.mr-state-widget.mr-state-widget-opened{class: merge_request_widget_visibility(@merge_request, "opened","reopened")}
   = render 'projects/merge_requests/widget/heading'
-  .mr-widget-body
-    - if @project.archived?
-      = render 'projects/merge_requests/widget/open/archived'
-    - 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'
-    - elsif @merge_request.unchecked?
-      = render 'projects/merge_requests/widget/open/check'
-    - elsif @merge_request.cannot_be_merged?
-      = render 'projects/merge_requests/widget/open/conflicts'
-    - elsif @merge_request.work_in_progress?
-      = render 'projects/merge_requests/widget/open/wip'
-    - elsif @merge_request.merge_when_build_succeeds?
-      = render 'projects/merge_requests/widget/open/merge_when_build_succeeds'
-    - elsif !@merge_request.can_be_merged_by?(current_user)
-      = render 'projects/merge_requests/widget/open/not_allowed'
-    - elsif @merge_request.can_be_merged?
-      = render 'projects/merge_requests/widget/open/accept'
+  .mr-widget-body.merge-request-archived{class: ("hidden" unless @project.archived?)}
+    = render 'projects/merge_requests/widget/open/archived'
+  .mr-widget-body.merge-request-blank{class: ("hidden" unless @merge_request.commits.blank?)}
+    = render 'projects/merge_requests/widget/open/nothing'
+  .mr-widget-body.merge-request-branch-missing{class: ("hidden" unless @merge_request.branch_missing?)}
+    = render 'projects/merge_requests/widget/open/missing_branch'
+  .mr-widget-body.merge-request-unchecked{class: ("hidden" unless @merge_request.unchecked?)}
+    = render 'projects/merge_requests/widget/open/check'
+  .mr-widget-body.merge-request-cannot-be-merged{class: ("hidden" unless @merge_request.cannot_be_merged?)}
+    = render 'projects/merge_requests/widget/open/conflicts'
+  .mr-widget-body.merge-request-work-in-progress{class: ("hidden" unless @merge_request.work_in_progress?)}
+    = render 'projects/merge_requests/widget/open/wip'
+  .mr-widget-body.merge-request-merge-when-build-succeeds{class: ("hidden" unless @merge_request.merge_when_build_succeeds?)}
+    = render 'projects/merge_requests/widget/open/merge_when_build_succeeds'
+  .mr-widget-body.not-allowed{class: ("hidden" if @merge_request.can_be_merged_by?(current_user))}
+    = render 'projects/merge_requests/widget/open/not_allowed'
+  .mr-widget-body.merge-request-archived.can-be-merged{class: ("hidden" unless @merge_request.can_be_merged?)}
+    = render 'projects/merge_requests/widget/open/accept'
 
   - if @closes_issues.present?
     .mr-widget-footer
diff --git a/app/views/projects/merge_requests/widget/_show.html.haml b/app/views/projects/merge_requests/widget/_show.html.haml
index a489d4f9b24ee4e675a9ce4e3299408e0816c20f..d8f81dab06725ad86c17aaa8efedb8f37da67777 100644
--- a/app/views/projects/merge_requests/widget/_show.html.haml
+++ b/app/views/projects/merge_requests/widget/_show.html.haml
@@ -1,17 +1,13 @@
-- if @merge_request.open?
-  = render 'projects/merge_requests/widget/open'
-- elsif @merge_request.merged?
-  = render 'projects/merge_requests/widget/merged'
-- elsif @merge_request.closed?
-  = render 'projects/merge_requests/widget/closed'
-- elsif @merge_request.locked?
-  = render 'projects/merge_requests/widget/locked'
+= render 'projects/merge_requests/widget/open'
+= render 'projects/merge_requests/widget/merged'
+= render 'projects/merge_requests/widget/closed'
+= render 'projects/merge_requests/widget/locked'
 
 :javascript
   var merge_request_widget;
 
   merge_request_widget = new MergeRequestWidget({
-    url_to_automerge_check: "#{merge_check_namespace_project_merge_request_path(@project.namespace, @project, @merge_request)}",
+    url_to_automerge_check: "#{merge_check_namespace_project_merge_request_path(@project.namespace, @project, @merge_request, format: :json)}",
     check_enable: #{@merge_request.unchecked? ? "true" : "false"},
     url_to_ci_check: "#{ci_status_namespace_project_merge_request_path(@project.namespace, @project, @merge_request)}",
     ci_enable: #{@project.ci_service ? "true" : "false"},
diff --git a/app/views/projects/merge_requests/widget/open/_archived.html.haml b/app/views/projects/merge_requests/widget/open/_archived.html.haml
index ab30fa6b24365bef35d6775d0963ddf6e250e3ce..0d61e56d8fbfd879cd735ac2ea4fd056fc0334fd 100644
--- a/app/views/projects/merge_requests/widget/open/_archived.html.haml
+++ b/app/views/projects/merge_requests/widget/open/_archived.html.haml
@@ -1,4 +1,4 @@
-%h4 
+%h4
   Project is archived
 %p
   This merge request cannot be merged because archived projects cannot be written to.