diff --git a/include/ajax.forms.php b/include/ajax.forms.php
index 520e8584a80b6107d4b63af9f7bd5b309694ac54..84b64179a4796ac0030e08366bfbbb07be7147e0 100644
--- a/include/ajax.forms.php
+++ b/include/ajax.forms.php
@@ -149,22 +149,32 @@ class DynamicFormsAjaxAPI extends AjaxController {
             Http::response(403, 'Login required');
 
         $list = DynamicList::lookup($list_id);
+        if (!$list)
+            Http::response(404, 'No such list item');
+
+        $list = CustomListHandler::forList($list);
         if (!$list || !($item = $list->getItem( (int) $item_id)))
             Http::response(404, 'No such list item');
 
         $item_form = $list->getListItemBasicForm($_POST, $item);
 
         if ($valid = $item_form->isValid()) {
-            // Update basic information
-            $basic = $item_form->getClean();
-            $item->extra = $basic['extra'];
-            $item->value = $basic['value'];
-
             if ($_item = DynamicListItem::lookup(array(
-                            'list_id' => $list->getId(), 'value'=>$item->value)))
+                'list_id' => $list->getId(), 'value'=>$item->getValue()))
+            ) {
                 if ($_item && $_item->id != $item->id)
                     $item_form->getField('value')->addError(
                         __('Value already in use'));
+            }
+            if ($item_form->isValid()) {
+                // Update basic information
+                $basic = $item_form->getClean();
+                $item->update([
+                    'name' =>   $basic['name'],
+                    'value' =>  $basic['value'],
+                    'extra' =>  $basic['extra'],
+                ]);
+            }
         }
 
         // Context