diff --git a/app/assets/javascripts/issue.js b/app/assets/javascripts/issue.js
index 6c6dde1b3f04eda4e3c6932186cfeb3ef3e146f0..fd9b3cb833ddfebca309db16d2ffef02c528e310 100644
--- a/app/assets/javascripts/issue.js
+++ b/app/assets/javascripts/issue.js
@@ -14,7 +14,11 @@ require('./task_list');
       if ($('a.btn-close').length) {
         this.taskList = new gl.TaskList({
           dataType: 'issue',
-          selector: '.detail-page-description'
+          selector: '.detail-page-description',
+          onSuccess: (result) => {
+            document.querySelector('#task_status').innerText = result.task_status;
+            document.querySelector('#task_status_short').innerText = result.task_status_short;
+          }
         });
         this.initIssueBtnEventListeners();
       }
diff --git a/app/assets/javascripts/merge_request.js b/app/assets/javascripts/merge_request.js
index 9e6f42beaf21de9afd37b9ce2d05a31f7b223a61..14f424b181c2be5032d9056924ed6e763cc97577 100644
--- a/app/assets/javascripts/merge_request.js
+++ b/app/assets/javascripts/merge_request.js
@@ -29,7 +29,11 @@ require('./merge_request_tabs');
       if ($("a.btn-close").length) {
         this.taskList = new gl.TaskList({
           dataType: 'merge_request',
-          selector: '.detail-page-description'
+          selector: '.detail-page-description',
+          onSuccess: (result) => {
+            document.querySelector('#task_status').innerText = result.task_status;
+            document.querySelector('#task_status_short').innerText = result.task_status_short;
+          }
         });
       }
     }
diff --git a/app/assets/javascripts/notes.js b/app/assets/javascripts/notes.js
index d137e327f0e6a509c0dcffde3f0fa6d6f08b46cd..599af9312b4a6237bd0be92f1a1578417fe2ebf9 100644
--- a/app/assets/javascripts/notes.js
+++ b/app/assets/javascripts/notes.js
@@ -53,8 +53,7 @@ require('./task_list');
       this.setupMainTargetNoteForm();
       this.taskList = new gl.TaskList({
         dataType: 'note',
-        selector: '.notes',
-        update: this.updateTaskList.bind(this)
+        selector: '.notes'
       });
       this.collapseLongCommitList();
 
@@ -889,17 +888,6 @@ require('./task_list');
       $editForm.find('.referenced-users').hide();
     };
 
-    Notes.prototype.updateTaskList = function(e) {
-      var $target = $(e.target);
-      var $list = $target.closest('.js-task-list-container');
-      var $editForm = $(this.getEditFormSelector($target));
-      var $note = $list.closest('.note');
-
-      this.putEditFormInPlace($list);
-      $editForm.find('#note_note').val($note.find('.original-task-list').val());
-      $('form', $list).submit();
-    };
-
     Notes.prototype.updateNotesCount = function(updateCount) {
       return this.notesCountBadge.text(parseInt(this.notesCountBadge.text(), 10) + updateCount);
     };
diff --git a/app/assets/javascripts/task_list.js.es6 b/app/assets/javascripts/task_list.js.es6
index 2001803fe1321d3043262476be5c935d21bef125..3fa6a36e455aa99e373772a6d51eb0a1850e8a3c 100644
--- a/app/assets/javascripts/task_list.js.es6
+++ b/app/assets/javascripts/task_list.js.es6
@@ -7,7 +7,7 @@ class TaskList {
   constructor(options = {}) {
     this.selector = options.selector;
     this.dataType = options.dataType;
-    this.update = options.update || this.update.bind(this);
+    this.onSuccess = options.onSuccess || () => null;
     this.init();
   }
 
@@ -15,7 +15,7 @@ class TaskList {
     // Prevent duplicate event bindings
     this.disable();
     $(`${this.selector} .js-task-list-container`).taskList('enable');
-    $(document).on('tasklist:changed', `${this.selector} .js-task-list-container`, this.update);
+    $(document).on('tasklist:changed', `${this.selector} .js-task-list-container`, this.update.bind(this));
   }
 
   disable() {
@@ -24,18 +24,16 @@ class TaskList {
   }
 
   update(e) {
+    const $target = $(e.target);
     const patchData = {};
     patchData[this.dataType] = {
-      description: $(e.target).val(),
+      description: $target.val(),
     };
     return $.ajax({
       type: 'PATCH',
-      url: $('form.js-issuable-update').attr('action'),
+      url: $target.data('update-url') || $('form.js-issuable-update').attr('action'),
       data: patchData,
-      success: (result) => {
-        document.querySelector('#task_status').innerText = result.task_status;
-        document.querySelector('#task_status_short').innerText = result.task_status_short;
-      },
+      success: this.onSuccess,
     });
   }
 }
diff --git a/app/views/projects/notes/_note.html.haml b/app/views/projects/notes/_note.html.haml
index 09339e520dd9d5d118df0edfb040e4aa8b100ac9..89c6a65f159886ba3d57fc36ed6b93654ed739e8 100644
--- a/app/views/projects/notes/_note.html.haml
+++ b/app/views/projects/notes/_note.html.haml
@@ -69,7 +69,7 @@
         - if note_editable
           .original-note-content.hidden{ data: { post_url: namespace_project_note_path(@project.namespace, @project, note), target_id: note.noteable.id, target_type: note.noteable.class.name.underscore } }
             #{note.note}
-          %textarea.hidden.js-task-list-field.original-task-list= note.note
+          %textarea.hidden.js-task-list-field.original-task-list{ data: {update_url: namespace_project_note_path(@project.namespace, @project, note) } }= note.note
         .note-awards
           = render 'award_emoji/awards_block', awardable: note, inline: false
         - if note.system