diff --git a/include/ajax.forms.php b/include/ajax.forms.php
index 57959fe727d8b3ff90f06580f7e142497d5a9a8b..bd71f392461773fbbfd3875fbb187657c782ac3c 100644
--- a/include/ajax.forms.php
+++ b/include/ajax.forms.php
@@ -65,7 +65,7 @@ class DynamicFormsAjaxAPI extends AjaxController {
         else
             $list = BuiltInCustomList::lookup($list_id);
 
-        if (!($item = $list->getItem($item_id)))
+        if (!($item = $list->getItem( (int) $item_id)))
             Http::response(404, 'No such list item');
 
         include(STAFFINC_DIR . 'templates/list-item-properties.tmpl.php');
@@ -78,7 +78,7 @@ class DynamicFormsAjaxAPI extends AjaxController {
         else
             $list = BuiltInCustomList::lookup($list_id);
 
-        if (!($item = $list->getItem($item_id)))
+        if (!($item = $list->getItem( (int) $item_id)))
             Http::response(404, 'No such list item');
 
         if (!$item->setConfiguration())
diff --git a/include/class.dynamic_forms.php b/include/class.dynamic_forms.php
index 9c49000d050e4e211bf65e84d5b5acb594a30ea0..2d685db89f875a256f94fc90a34f4dc1f479c7bf 100644
--- a/include/class.dynamic_forms.php
+++ b/include/class.dynamic_forms.php
@@ -426,7 +426,7 @@ class DynamicFormField extends VerySimpleModel {
     function setConfiguration(&$errors=array()) {
         $config = array();
         foreach ($this->getConfigurationForm() as $name=>$field) {
-            $config[$name] = $field->getClean();
+            $config[$name] = $field->to_php($field->getClean());
             $errors = array_merge($errors, $field->errors());
         }
         if (count($errors) === 0)
diff --git a/include/class.forms.php b/include/class.forms.php
index 8e58ca494da7fb5c2b17f19b5c1599eefb6923a3..c5cb405a655add48e046ae137fd7411baa4e84c1 100644
--- a/include/class.forms.php
+++ b/include/class.forms.php
@@ -256,7 +256,7 @@ class FormField {
      * useful error message indicating what is wrong with the input.
      */
     function parse($value) {
-        return trim($value);
+        return is_string($value) ? trim($value) : $value;
     }
 
     /**
@@ -1110,7 +1110,7 @@ class PhoneNumberWidget extends Widget {
 class ChoicesWidget extends Widget {
     function render($mode=false) {
 
-        if ($mode && $mode =='view') {
+        if ($mode && $mode == 'view') {
             if (!($val = (string) $this->field))
                 $val = '<span class="faded">None</span>';
 
diff --git a/include/class.list.php b/include/class.list.php
index 293165bbd285920408e9882f43cd687945370aa6..d6080304a56fb10636ac111ce9b544d343f8b7c3 100644
--- a/include/class.list.php
+++ b/include/class.list.php
@@ -275,10 +275,15 @@ class DynamicList extends VerySimpleModel implements CustomList {
 
 
 
-    function getItem($id) {
-         return DynamicListItem::lookup(array(
-                     'id' => $id,
-                     'list_id' => $this->getId()));
+    function getItem($val) {
+
+        $criteria = array('list_id' => $this->getId());
+        if (is_int($val))
+            $criteria['id'] = $val;
+        else
+            $criteria['value'] = $val;
+
+         return DynamicListItem::lookup($criteria);
     }
 
     function addItem($vars, &$errors) {
@@ -640,11 +645,16 @@ class TicketStatusList extends BuiltInCustomList {
         return $this->_items;
     }
 
-    function getItem($id) {
-         return TicketStatus::lookup($id);
+    function getItem($val) {
+
+        if (!is_int($val))
+            $val = array('name' => $val);
+
+         return TicketStatus::lookup($val);
     }
 
     function addItem($vars, &$errors) {
+
         $item = TicketStatus::create(array(
             'flags' => 0, //Disable  until configured.
             'sort'  => $vars['sort'],