diff --git a/app/assets/javascripts/merge_request.js.coffee b/app/assets/javascripts/merge_request.js.coffee
new file mode 100644
index 0000000000000000000000000000000000000000..c0f83c93021df70c1d8f4d51e9a45db0375b508a
--- /dev/null
+++ b/app/assets/javascripts/merge_request.js.coffee
@@ -0,0 +1,103 @@
+class MergeRequest
+  constructor: (@opts) ->
+    @initContextWidget()
+    this.$el = $('.merge-request')
+    @diffs_loaded = if @opts.action == 'diffs' then true else false
+    @commits_loaded = false
+
+    this.activateTab(@opts.action)
+
+    this.bindEvents()
+
+    this.initMergeWidget()
+    this.$('.show-all-commits').on 'click', =>
+      this.showAllCommits()
+
+    modal = $('#modal_merge_info').modal(show: false)
+
+    disableButtonIfEmptyField '#merge_commit_message', '.accept_merge_request'
+
+
+  # Local jQuery finder
+  $: (selector) ->
+    this.$el.find(selector)
+
+  initContextWidget: ->
+    $('.edit-merge_request.inline-update input[type="submit"]').hide()
+    $(".issue-box .inline-update").on "change", "select", ->
+      $(this).submit()
+    $(".issue-box .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'
+
+    if @opts.ci_enable
+      $.get @opts.url_to_ci_check, (data) =>
+        this.showCiState data.status
+      , 'json'
+
+  bindEvents: ->
+    this.$('.nav-tabs').on 'click', 'a', (event) =>
+      a = $(event.currentTarget)
+
+      href = a.attr('href')
+      History.replaceState {path: href}, document.title, href
+
+      event.preventDefault()
+
+    this.$('.nav-tabs').on 'click', 'li', (event) =>
+      this.activateTab($(event.currentTarget).data('action'))
+
+    this.$('.accept_merge_request').on 'click', ->
+      $('.automerge_widget.can_be_merged').hide()
+      $('.merge-in-progress').show()
+
+  activateTab: (action) ->
+    this.$('.nav-tabs li').removeClass 'active'
+    this.$('.tab-content').hide()
+    switch action
+      when 'diffs'
+        this.$('.nav-tabs .diffs-tab').addClass 'active'
+        this.loadDiff() unless @diffs_loaded
+        this.$('.diffs').show()
+      else
+        this.$('.nav-tabs .notes-tab').addClass 'active'
+        this.$('.notes').show()
+
+  showState: (state) ->
+    $('.automerge_widget').hide()
+    $('.automerge_widget.' + state).show()
+
+  showCiState: (state) ->
+    $('.ci_widget').hide()
+    $('.ci_widget.ci-' + state).show()
+
+  loadDiff: (event) ->
+    $.ajax
+      type: 'GET'
+      url: this.$('.nav-tabs .diffs-tab a').attr('href')
+      beforeSend: =>
+        this.$('.status').addClass 'loading'
+      complete: =>
+        @diffs_loaded = true
+        this.$('.status').removeClass 'loading'
+      success: (data) =>
+        this.$(".diffs").html(data.html)
+      dataType: 'json'
+
+  showAllCommits: ->
+    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()
+
+this.MergeRequest = MergeRequest
diff --git a/app/assets/javascripts/merge_requests.js.coffee b/app/assets/javascripts/merge_requests.js.coffee
index ff843c68d6859d90525d22ddda5b6535cadc8356..9201c84c5edcf851d696993dda8fa7dac6aa7846 100644
--- a/app/assets/javascripts/merge_requests.js.coffee
+++ b/app/assets/javascripts/merge_requests.js.coffee
@@ -6,99 +6,3 @@
   $('#milestone_id').select2()
   $('#milestone_id, #assignee_id').on 'change', ->
     $(this).closest('form').submit()
-
-class MergeRequest
-
-  constructor: (@opts) ->
-    this.$el = $('.merge-request')
-    @diffs_loaded = if @opts.action == 'diffs' then true else false
-    @commits_loaded = false
-
-    this.activateTab(@opts.action)
-
-    this.bindEvents()
-
-    this.initMergeWidget()
-    this.$('.show-all-commits').on 'click', =>
-      this.showAllCommits()
-
-    modal = $('#modal_merge_info').modal(show: false)
-
-    disableButtonIfEmptyField '#merge_commit_message', '.accept_merge_request'
-
-  # Local jQuery finder
-  $: (selector) ->
-    this.$el.find(selector)
-
-  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'
-
-    if @opts.ci_enable
-      $.get @opts.url_to_ci_check, (data) =>
-        this.showCiState data.status
-      , 'json'
-
-  bindEvents: ->
-    this.$('.nav-tabs').on 'click', 'a', (event) =>
-      a = $(event.currentTarget)
-
-      href = a.attr('href')
-      History.replaceState {path: href}, document.title, href
-
-      event.preventDefault()
-
-    this.$('.nav-tabs').on 'click', 'li', (event) =>
-      this.activateTab($(event.currentTarget).data('action'))
-
-    this.$('.accept_merge_request').on 'click', ->
-      $('.automerge_widget.can_be_merged').hide()
-      $('.merge-in-progress').show()
-
-  activateTab: (action) ->
-    this.$('.nav-tabs li').removeClass 'active'
-    this.$('.tab-content').hide()
-    switch action
-      when 'diffs'
-        this.$('.nav-tabs .diffs-tab').addClass 'active'
-        this.loadDiff() unless @diffs_loaded
-        this.$('.diffs').show()
-      else
-        this.$('.nav-tabs .notes-tab').addClass 'active'
-        this.$('.notes').show()
-
-  showState: (state) ->
-    $('.automerge_widget').hide()
-    $('.automerge_widget.' + state).show()
-
-  showCiState: (state) ->
-    $('.ci_widget').hide()
-    $('.ci_widget.ci-' + state).show()
-
-  loadDiff: (event) ->
-    $.ajax
-      type: 'GET'
-      url: this.$('.nav-tabs .diffs-tab a').attr('href')
-      beforeSend: =>
-        this.$('.status').addClass 'loading'
-      complete: =>
-        @diffs_loaded = true
-        this.$('.status').removeClass 'loading'
-      success: (data) =>
-        this.$(".diffs").html(data.html)
-      dataType: 'json'
-
-  showAllCommits: ->
-    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()
-
-this.MergeRequest = MergeRequest
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index d36b5b27e86e61c73e302f230ea352b208ebee6b..e3a0699ef3f0c2687d2435df043917c785f71c62 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -108,8 +108,15 @@ class Projects::MergeRequestsController < Projects::ApplicationController
     if @merge_request.update_attributes(params[:merge_request].merge(author_id_of_changes: current_user.id))
       @merge_request.reload_code
       @merge_request.mark_as_unchecked
+
       @merge_request.reset_events_cache
-      redirect_to [@merge_request.target_project, @merge_request], notice: 'Merge request was successfully updated.'
+
+      respond_to do |format|
+        format.js
+        format.html do
+          redirect_to [@merge_request.target_project, @merge_request], notice: 'Merge request was successfully updated.'
+        end
+      end
     else
       render "edit"
     end
diff --git a/app/views/projects/issues/_issue_context.html.haml b/app/views/projects/issues/_issue_context.html.haml
index fb124a8ab447f2ce64a4e64d3690f31f90c886bf..e5418c25b2361ca804385f7670baacd1d6bf532f 100644
--- a/app/views/projects/issues/_issue_context.html.haml
+++ b/app/views/projects/issues/_issue_context.html.haml
@@ -4,7 +4,7 @@
     \ and currently assigned to
 
   - if can?(current_user, :modify_issue, @issue)
-    = project_users_select_tag('issue[assignee_id]', placeholder: 'Select a user', class: 'custom-form-control', selected: @issue.assignee_id)
+    = project_users_select_tag('issue[assignee_id]', placeholder: 'Select assignee', class: 'custom-form-control', selected: @issue.assignee_id)
   - elsif issue.assignee
     = link_to_member(@project, @issue.assignee)
 
diff --git a/app/views/projects/merge_requests/show/_context.html.haml b/app/views/projects/merge_requests/show/_context.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..705eeb9894a9f9aca3192b6ddf70e44de981f089
--- /dev/null
+++ b/app/views/projects/merge_requests/show/_context.html.haml
@@ -0,0 +1,23 @@
+= form_for [@project, @merge_request], remote: true, html: {class: 'edit-merge_request inline-update'} do |f|
+  Created by #{link_to_member(@project, merge_request.author)}&nbsp;
+  - if merge_request.assignee
+    \ and currently assigned to
+
+  - if can?(current_user, :modify_merge_request, @merge_request)
+    = project_users_select_tag('merge_request[assignee_id]', placeholder: 'Select assignee', class: 'custom-form-control', selected: @merge_request.assignee_id)
+  - elsif merge_request.assignee
+    = link_to_member(@project, @merge_request.assignee)
+
+
+  .pull-right.hidden-sm.hidden-xs
+    - if merge_request.milestone
+      - milestone = merge_request.milestone
+      %cite.cgray Attached to milestone
+
+    - if can?(current_user, :modify_merge_request, @merge_request)
+      = f.select(:milestone_id, milestone_options(@merge_request), { include_blank: "Select milestone (none):" }, {class: 'select2 select2-compact'})
+
+      = hidden_field_tag :merge_request_context
+      = f.submit class: 'btn'
+    - elsif merge_request.milestone
+      = link_to merge_request.milestone.title, project_milestone_path
diff --git a/app/views/projects/merge_requests/show/_mr_box.html.haml b/app/views/projects/merge_requests/show/_mr_box.html.haml
index b4f648ab197fdc75f4c79dcc6c73a2370bbeb00c..7c3f9b93444741d3d77f5e895e9e28baa37acaf1 100644
--- a/app/views/projects/merge_requests/show/_mr_box.html.haml
+++ b/app/views/projects/merge_requests/show/_mr_box.html.haml
@@ -4,15 +4,7 @@
 
   .context
     %cite.cgray
-      Created by #{link_to_member(@project, @merge_request.author)}.
-      - if @merge_request.assignee
-        Currently assigned to #{link_to_member(@project, @merge_request.assignee)}.
-    - if @merge_request.milestone
-      .pull-right
-        - milestone = @merge_request.milestone
-        %cite.cgray Attached to milestone
-        %strong= link_to_gfm truncate(milestone.title, length: 20), project_milestone_path(milestone.project, milestone)
-
+      = render partial: 'projects/merge_requests/show/context', locals: { merge_request: @merge_request }
 
   - if @merge_request.description.present?
     .description
diff --git a/app/views/projects/merge_requests/update.js.haml b/app/views/projects/merge_requests/update.js.haml
new file mode 100644
index 0000000000000000000000000000000000000000..6452cc6382dbddaf31c9a107037770ab7bfae499
--- /dev/null
+++ b/app/views/projects/merge_requests/update.js.haml
@@ -0,0 +1,2 @@
+- if params[:merge_request_context]
+  $('.issue-box .context').effect('highlight');