diff --git a/include/ajax.tickets.php b/include/ajax.tickets.php
index 68c47315c220d0a022c7e999aa41ac3f81f308db..989c44b5d5847ce141f35c39d8e7b875ebad0563 100644
--- a/include/ajax.tickets.php
+++ b/include/ajax.tickets.php
@@ -1304,7 +1304,7 @@ function refer($tid, $target=null) {
          include STAFFINC_DIR . 'ticket-tasks.inc.php';
     }
 
-    function addTask($tid, $thread_id=NULL) {
+    function addTask($tid, $vars=array()) {
         global $thisstaff;
 
         if (!($ticket=Ticket::lookup($tid)))
@@ -1313,9 +1313,6 @@ function refer($tid, $target=null) {
         if (!$ticket->checkStaffPerm($thisstaff, Task::PERM_CREATE))
             Http::response(403, 'Permission denied');
 
-        if ($thread_id && !($thread_entry=ThreadEntry::lookup($thread_id)))
-            Http::response(404, 'Unknown ticket thread');
-
         $info=$errors=array();
 
         if ($_POST) {
@@ -1361,9 +1358,6 @@ function refer($tid, $target=null) {
                 __('Add New Task')
                 );
 
-        if ($thread_entry)
-            $vars['description'] = Format::htmlchars($thread_entry->getBody());
-
          include STAFFINC_DIR . 'templates/task.tmpl.php';
     }
 
diff --git a/include/class.thread.php b/include/class.thread.php
index 069b87c33ed7ec74584d7f1821d3e8120cba6b5c..cb5912922eb9f5b3a2c95b075241e3bacc499c72 100644
--- a/include/class.thread.php
+++ b/include/class.thread.php
@@ -2994,6 +2994,10 @@ abstract class ThreadEntryAction {
             static::getId()
         );
     }
+
+    function getTicketsAPI() {
+        return new TicketsAjaxAPI();
+    }
 }
 
 interface Threadable {
diff --git a/include/class.thread_actions.php b/include/class.thread_actions.php
index ed0ae57646dbcbaabb38eb7bf86ca9da13cadfe3..497eb92197242a3dd181a637a0e423b29f4793b6 100644
--- a/include/class.thread_actions.php
+++ b/include/class.thread_actions.php
@@ -447,12 +447,13 @@ var url = '%s';
 var redirect = $(this).data('redirect');
 $.dialog(url, [201], function(xhr, resp) {
     if (!!redirect)
-        $.pjax({url: redirect, container:'#pjax-container'});
+        $.pjax({url: redirect, container: '#pjax-container'});
     else
-        $.pjax({url: 'ajax.php/tickets/378/tasks', container: '#tasks_content', push: false});
+        $.pjax({url: 'tickets.php?id=%d#tasks', container: '#pjax-container'});
 });
 JS
-        , $this->getAjaxUrl()
+        , $this->getAjaxUrl(),
+        $this->entry->getThread()->getObjectId()
         );
     }
 
@@ -460,11 +461,23 @@ JS
         switch ($_SERVER['REQUEST_METHOD']) {
         case 'GET':
             return $this->trigger__get();
+        case 'POST':
+            return $this->trigger__post();
         }
     }
 
     private function trigger__get() {
-        include STAFFINC_DIR . 'templates/task.tmpl.php';
+
+        $vars = array(
+                'description' => Format::htmlchars($this->entry->getBody())
+                );
+        return $this->getTicketsAPI()->addTask($this->entry->getThread()->getObjectId(),
+            $vars);
     }
+
+    private function trigger__post() {
+        return $this->getTicketsAPI()->addTask($this->entry->getThread()->getObjectId());
+    }
+
 }
 ThreadEntry::registerAction(/* trans */ 'Manage', 'TEA_CreateTask');
diff --git a/scp/ajax.php b/scp/ajax.php
index b08f547670be3503f4b862d43ee0ded6ad093b98..039af6b3e48d838eeabd2506dffbfc67c3055ed7 100644
--- a/scp/ajax.php
+++ b/scp/ajax.php
@@ -154,7 +154,6 @@ $dispatcher = patterns('',
         url_get('^(?P<tid>\d+)/canned-resp/(?P<cid>\w+).(?P<format>json|txt)', 'cannedResponse'),
         url_get('^(?P<tid>\d+)/status/(?P<status>\w+)(?:/(?P<sid>\d+))?$', 'changeTicketStatus'),
         url_post('^(?P<tid>\d+)/status$', 'setTicketStatus'),
-        url('^(?P<tid>\d+)/thread/(?P<thread_id>\d+)/create_task$', 'addTask'),
         url('^(?P<tid>\d+)/thread/(?P<thread_id>\d+)/(?P<action>\w+)$', 'triggerThreadAction'),
         url_get('^status/(?P<status>\w+)(?:/(?P<sid>\d+))?$', 'changeSelectedTicketsStatus'),
         url_post('^status/(?P<state>\w+)$', 'setSelectedTicketsStatus'),