diff --git a/include/class.task.php b/include/class.task.php
index 00c52c402252ee79d3015c906f51494b693e2f39..aaadd5337b04c07ee0f28994a12636f3788c66a7 100644
--- a/include/class.task.php
+++ b/include/class.task.php
@@ -356,18 +356,23 @@ class Task extends TaskModel implements RestrictedAccess, Threadable {
         return $this->lastrespondent;
     }
 
-    function getMissingRequiredFields() {
+    function getDynamicFields($criteria=array()) {
+
         $fields = DynamicFormField::objects()->filter(array(
-                'id__in' => $this->entries
-                    ->filter(array(
-                        'answers__field__flags__hasbit' => DynamicFormField::FLAG_CLOSE_REQUIRED,
-                        'answers__value__isnull' => true,
-                    ))
-                    ->values_flat('answers__field_id')
-                ));
+                    'id__in' => $this->entries
+                    ->filter($criteria)
+                ->values_flat('answers__field_id')));
 
         return ($fields && count($fields)) ? $fields : array();
+    }
+
+    function getMissingRequiredFields() {
 
+        return $this->getDynamicFields(array(
+                    'answers__field__flags__hasbit' => DynamicFormField::FLAG_ENABLED,
+                    'answers__field__flags__hasbit' => DynamicFormField::FLAG_CLOSE_REQUIRED,
+                    'answers__value__isnull' => true,
+                    ));
     }
 
     function getParticipants() {
diff --git a/include/class.ticket.php b/include/class.ticket.php
index e38786a2d681bdc3ac271bbe5c737b2e50e41dea..ce0971fdd2f4956dfeb68ca8db0515cb1e2e3e37 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -86,6 +86,7 @@ class TicketModel extends VerySimpleModel {
                     "'T'" => 'DynamicFormEntry.object_type',
                     'ticket_id' => 'DynamicFormEntry.object_id',
                 ),
+                'list' => true,
             ),
         )
     );
@@ -817,6 +818,16 @@ implements RestrictedAccess, Threadable {
         return $this->recipients;
     }
 
+    function getDynamicFields($criteria=array()) {
+
+        $fields = DynamicFormField::objects()->filter(array(
+                    'id__in' => $this->entries
+                    ->filter($criteria)
+                ->values_flat('answers__field_id')));
+
+        return ($fields && count($fields)) ? $fields : array();
+    }
+
     function hasClientEditableFields() {
         $forms = DynamicFormEntry::forTicket($this->getId());
         foreach ($forms as $form) {
@@ -828,23 +839,17 @@ implements RestrictedAccess, Threadable {
     }
 
     function getMissingRequiredFields() {
-        $returnArray = array();
-        $forms=DynamicFormEntry::forTicket($this->getId());
-        foreach ($forms as $form) {
-            foreach ($form->getFields() as $field) {
-                if ($field->isRequiredForClose()) {
-                    if (!$field->answer || !$field->answer->get('value')) {
-                        array_push($returnArray, $field->getLocal('label'));
-                    }
-                }
-            }
-        }
-        return $returnArray;
+
+        return $this->getDynamicFields(array(
+                    'answers__field__flags__hasbit' => DynamicFormField::FLAG_ENABLED,
+                    'answers__field__flags__hasbit' => DynamicFormField::FLAG_CLOSE_REQUIRED,
+                    'answers__value__isnull' => true,
+                    ));
     }
 
     function getMissingRequiredField() {
         $fields = $this->getMissingRequiredFields();
-        return $fields[0];
+        return $fields ? $fields[0] : null;
     }
 
     function addCollaborator($user, $vars, &$errors, $event=true) {
diff --git a/include/staff/templates/dynamic-field-config.tmpl.php b/include/staff/templates/dynamic-field-config.tmpl.php
index daf8cd0f3ae8488fc698126f102e71d06136e58a..0e8d7c83553c45f942be744b8d483a61d7f51b1f 100644
--- a/include/staff/templates/dynamic-field-config.tmpl.php
+++ b/include/staff/templates/dynamic-field-config.tmpl.php
@@ -99,17 +99,18 @@
     <hr class="faded"/>
 
     <div class="span4">
-        <div style="margin-bottom:5px"><strong>Data Integrity</strong>
+        <div style="margin-bottom:5px"><strong><?php __('Data Integrity');
+    ?></strong>
         <i class="help-tip icon-question-sign"
-            data-title="<?php echo __('Required to close a case'); ?>"
-            data-content="<?php echo __('Optionally, this field can prevent closing a case until it has valid data.'); ?>"></i>
+            data-title="<?php echo __('Required to close a thread'); ?>"
+            data-content="<?php echo __('Optionally, this field can prevent closing a thread until it has valid data.'); ?>"></i>
         </div>
     </div>
     <div class="span6">
         <input type="checkbox" name="flags[]" value="<?php
             echo DynamicFormField::FLAG_CLOSE_REQUIRED; ?>" <?php
             if ($field->hasFlag(DynamicFormField::FLAG_CLOSE_REQUIRED)) echo 'checked="checked"';
-        ?>> <?php echo __('Required data to close'); ?><br/>
+        ?>> <?php echo __('Require entry to close a thread'); ?><br/>
     </div>
 <?php } ?>
 <?php } ?>
diff --git a/include/staff/ticket-view.inc.php b/include/staff/ticket-view.inc.php
index 7b7cee624b9832dfecb165b15dd3d50523c080b0..685661abf40a159172d4948ad8ea648ff8a75c88 100644
--- a/include/staff/ticket-view.inc.php
+++ b/include/staff/ticket-view.inc.php
@@ -622,8 +622,7 @@ $tcount = $ticket->getThreadEntries($types)->count();
                     <?php
                     $outstanding = false;
                     if ($role->hasPerm(TicketModel::PERM_CLOSE)
-                            && ($warning=$ticket->isCloseable())
-                            && $warning !==true) {
+                            && is_string($warning=$ticket->isCloseable())) {
                         $outstanding =  true;
                         echo sprintf('<div class="warning-banner">%s</div>', $warning);
                     } ?>