diff --git a/include/class.dynamic_forms.php b/include/class.dynamic_forms.php
index b48ac67f56634bc5af6fd87971b9af9a6669fc97..73868aca0ff3ffb053223232ad0658e49837d4c6 100644
--- a/include/class.dynamic_forms.php
+++ b/include/class.dynamic_forms.php
@@ -284,6 +284,9 @@ class DynamicFormField extends VerySimpleModel {
     function isValid() {
         if (count($this->errors()) || !parent::isValid())
             return false;
+        if (!$this->get('label'))
+            $this->addError(
+                "Label is required for custom form fields", "label");
         if ($this->get('required') && !$this->get('name'))
             $this->addError(
                 "Variable name is required for required fields", "name");
diff --git a/include/staff/dynamic-form.inc.php b/include/staff/dynamic-form.inc.php
index 254dc0fbed234501280eb74e42ff2287877a0dd5..26a30ae5b979cd368cdd35215d4c9fe8dfd888c1 100644
--- a/include/staff/dynamic-form.inc.php
+++ b/include/staff/dynamic-form.inc.php
@@ -110,7 +110,10 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info);
         <tr>
             <td><i class="icon-sort"></i></td>
             <td><input type="text" size="32" name="label-<?php echo $id; ?>"
-                value="<?php echo $f->get('label'); ?>"/></td>
+                value="<?php echo $f->get('label'); ?>"/>
+                <font class="error"><?php
+                    if ($errors['label']) echo '<br/>'; echo $errors['label']; ?>
+            </td>
             <td><select name="type-<?php echo $id; ?>" <?php
                 if (!$f->isChangeable()) echo 'disabled="disabled"'; ?>>
                 <?php foreach (FormField::allTypes() as $group=>$types) {
diff --git a/include/upgrader/streams/core/dad45ca2-61c9d5d7.cleanup.sql b/include/upgrader/streams/core/dad45ca2-61c9d5d7.cleanup.sql
index 8d3482a949913afb6503f35f36e72125f3a69150..18de0a28e4d464b92b0c3503dab77cf06cb4b74c 100644
--- a/include/upgrader/streams/core/dad45ca2-61c9d5d7.cleanup.sql
+++ b/include/upgrader/streams/core/dad45ca2-61c9d5d7.cleanup.sql
@@ -83,9 +83,9 @@ INSERT INTO `%TABLE_PREFIX%form_entry_values` (
             '-', ''),
             '.', ''), 'X', A1.`phone_ext`))
     FROM `%TABLE_PREFIX%ticket` A1
-        INNER JOIN `%TABLE_PREFIX%form` A4 ON (`type`='U')
         INNER JOIN `%TABLE_PREFIX%form_entry` A2 ON (A2.`object_id`
                 = A1.`ticket_id` AND A2.`object_type` = 'U')
+        INNER JOIN `%TABLE_PREFIX%form` A4 ON (A4.`id` = A2.`form_id`)
         INNER JOIN `%TABLE_PREFIX%form_field` A3 ON (A2.`form_id`
                 = A4.`id`)
     WHERE A3.`name` = 'phone' AND LENGTH(A1.`phone`)
diff --git a/scp/forms.php b/scp/forms.php
index 0ac4086cda8bc2e46c1298bb865087f06e02f896..6b1aba8976927be360c0d74897e01c7bc4f25106 100644
--- a/scp/forms.php
+++ b/scp/forms.php
@@ -17,6 +17,7 @@ if($_POST) {
                     $form->set($f, $_POST[$f]);
             if ($form->isValid())
                 $form->save(true);
+            $names = array();
             foreach ($form->getDynamicFields() as $field) {
                 $id = $field->get('id');
                 if ($_POST["delete-$id"] == 'on' && $field->isDeletable()) {
@@ -38,6 +39,10 @@ if($_POST) {
                         $field->set($f, $_POST["$f-$id"]);
                     }
                 }
+                if (in_array($field->get('name'), $names))
+                    $field->addError('Field variable name is not unique', 'name');
+                if ($field->get('name'))
+                    $names[] = $field->get('name');
                 if ($field->isValid())
                     $field->save();
                 else