diff --git a/include/class.ticket.php b/include/class.ticket.php
index 6e7fac29cbbf32466bc29ae47777f1623c313734..15d99684210a7daa45d0b82c35d20b8ee1758937 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -220,7 +220,7 @@ implements RestrictedAccess, Threadable, Searchable {
             return true;
 
         $warning = null;
-        if ($this->getMissingRequiredFields()) {
+        if (self::getMissingRequiredFields($this)) {
             $warning = sprintf(
                     __( '%1$s is missing data on %2$s one or more required fields %3$s and cannot be closed'),
                     __('This ticket'),
@@ -1018,17 +1018,31 @@ implements RestrictedAccess, Threadable, Searchable {
         }
     }
 
-    function getMissingRequiredFields() {
+    static function getMissingRequiredFields($ticket) {
+        // Check for fields disabled by Help Topic
+        $disabled = array();
+        foreach ($ticket->entries as $entry) {
+            $extra = JsonDataParser::decode($entry->extra);
+            if (!empty($extra['disable']))
+                $disabled[] = $extra['disable'];
+        }
+        $disabled = !empty($disabled) ? call_user_func_array('array_merge', $disabled) : NULL;
 
-        return $this->getDynamicFields(array(
+        $criteria = array(
                     'answers__field__flags__hasbit' => DynamicFormField::FLAG_ENABLED,
                     'answers__field__flags__hasbit' => DynamicFormField::FLAG_CLOSE_REQUIRED,
                     'answers__value__isnull' => true,
-                    ));
+                    );
+
+        // If there are disabled fields then exclude them
+        if ($disabled)
+            array_push($criteria, Q::not(array('answers__field__id__in' => $disabled)));
+
+        return $ticket->getDynamicFields($criteria, $ticket);
     }
 
     function getMissingRequiredField() {
-        $fields = $this->getMissingRequiredFields();
+        $fields = self::getMissingRequiredFields($this);
         return $fields ? $fields[0] : null;
     }
 
diff --git a/include/staff/templates/status-options.tmpl.php b/include/staff/templates/status-options.tmpl.php
index 1c9bad9e894146e8818a8b34b5fded288cbdda72..c8cff18a94cc8b06535f0ecd017a2b87df9fd841 100644
--- a/include/staff/templates/status-options.tmpl.php
+++ b/include/staff/templates/status-options.tmpl.php
@@ -15,7 +15,7 @@ $actions= array(
 
 $states = array('open');
 if ($thisstaff->getRole($ticket ? $ticket->getDeptId() : null)->hasPerm(Ticket::PERM_CLOSE)
-        && (!$ticket || !$ticket->getMissingRequiredFields()))
+        && (!$ticket || !Ticket::getMissingRequiredFields($ticket)))
     $states = array_merge($states, array('closed'));
 
 $statusId = $ticket ? $ticket->getStatusId() : 0;