diff --git a/include/ajax.draft.php b/include/ajax.draft.php
index 00ad2339466eef8ebc876e3f555ce782933f6ca5..3b8fba5b5f0da1f5ee37360fde77e22e7c792eab 100644
--- a/include/ajax.draft.php
+++ b/include/ajax.draft.php
@@ -7,17 +7,7 @@ require_once(INCLUDE_DIR.'class.draft.php');
 class DraftAjaxAPI extends AjaxController {
 
     function _createDraft($vars) {
-        if (!isset($vars['body'])) {
-            $field_list = array('response', 'note', 'answer', 'body',
-                 'message', 'issue');
-            foreach ($field_list as $field) {
-                if (isset($_POST[$field])) {
-                    $vars['body'] = $_POST[$field];
-                    break;
-                }
-            }
-        }
-        if (!isset($vars['body']))
+        if (!($vars['body'] = self::_findDraftBody($_POST)))
             return JsonDataEncoder::encode(array(
                 'error' => __("Draft body not found in request"),
                 'code' => 422,
@@ -44,26 +34,7 @@ class DraftAjaxAPI extends AjaxController {
     }
 
     function _updateDraft($draft) {
-        if (isset($_POST['name'])) {
-            $parts = array();
-            if (preg_match('`(\w+)\[(\w+)\]`', $_POST['name'], $parts)) {
-                $body = urldecode($_POST[$parts[1]][$parts[2]]);
-            }
-            else {
-                $body = urldecode($_POST[$_POST['name']]);
-            }
-        }
-        else {
-            $field_list = array('response', 'note', 'answer', 'body',
-                 'message', 'issue');
-            foreach ($field_list as $field) {
-                if (isset($_POST[$field])) {
-                    $body = urldecode($_POST[$field]);
-                    break;
-                }
-            }
-        }
-        if (!isset($body))
+        if (!($body = self::_findDraftBody($_POST)))
             return JsonDataEncoder::encode(array(
                 'error' => array(
                     'message' => "Draft body not found in request",
@@ -243,16 +214,6 @@ class DraftAjaxAPI extends AjaxController {
             'namespace' => $namespace,
         );
 
-        if (isset($_POST['name'])) {
-            $parts = array();
-            if (preg_match('`(\w+)\[(\w+)\]`', $_POST['name'], $parts)) {
-                $vars['body'] = urldecode($_POST[$parts[1]][$parts[2]]);
-            }
-            else {
-                $vars['body'] = urldecode($_POST[$_POST['name']]);
-            }
-        }
-
         return self::_createDraft($vars);
     }
 
@@ -341,5 +302,25 @@ class DraftAjaxAPI extends AjaxController {
         echo JsonDataEncoder::encode($files);
     }
 
+    function _findDraftBody($vars) {
+        if (isset($vars['name'])) {
+            $parts = array();
+            if (preg_match('`(\w+)(?:\[(\w+)\])?(?:\[(\w+)\])?`', $_POST['name'], $parts)) {
+                array_shift($parts);
+                $focus = $vars;
+                foreach ($parts as $p)
+                    $focus = $focus[$p];
+                return urldecode($focus);
+            }
+        }
+        $field_list = array('response', 'note', 'answer', 'body',
+             'message', 'issue');
+        foreach ($field_list as $field) {
+            if (isset($vars[$field])) {
+                return urldecode($vars[$field]);
+            }
+        }
+    }
+
 }
 ?>