diff --git a/README.txt b/README.txt
index 502cb21..c5fc263 100644
--- a/README.txt
+++ b/README.txt
@@ -16,6 +16,14 @@ Installation
    in both places. Most people will probably want to leave put text in one place and
    leave the other option blank.
 
+Development & Troubleshooting
+=============================
+
+If a given field or widget type is not behaving like you would expect, you can
+enable debug mode in settings.php with the following line:
+
+    $settings['label_help_debug'] = TRUE;
+
 Using Label Help to create form fields programmatically
 =======================================================
 
diff --git a/css/claro.label-help.css b/css/claro.label-help.css
index 11e1a7c..a8b4bcb 100644
--- a/css/claro.label-help.css
+++ b/css/claro.label-help.css
@@ -1,3 +1,12 @@
 .form-item__description--label-help {
   font-weight: 400;
 }
+
+/* Description before and label help should align with the checkbox. */
+.form-type--boolean .form-item__description {
+  margin-left: -1.6875rem; /* LTR */
+}
+
+.form-type--boolean .form-boolean ~ .form-item__description {
+  margin-left: 0;
+}
diff --git a/css/gin.label-help.css b/css/gin.label-help.css
index 5842f49..92cd0d0 100644
--- a/css/gin.label-help.css
+++ b/css/gin.label-help.css
@@ -5,3 +5,8 @@
   /* tighten whitespace between label + description */
   margin-top: -4px;
 }
+
+/* Undo alignment fix from claro.label-help.css. */
+.form-type--boolean .form-item__description {
+  margin-left: 0; /* LTR */
+}
diff --git a/label_help.module b/label_help.module
index 671ca56..2d42429 100644
--- a/label_help.module
+++ b/label_help.module
@@ -1,6 +1,7 @@
 <?php
 
 use Drupal\Core\Render\Element;
+use Drupal\Core\Site\Settings;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
@@ -42,27 +43,21 @@ function label_help_theme() {
  */
 function label_help_form_alter(&$form, &$form_state, $form_id) {
   $children = array_intersect_key($form, array_flip(Element::children($form)));
-
-  // Add theme overrides.
-  $theme = \Drupal::theme()->getActiveTheme()->getName();
-  if ($theme == 'seven') {
-    $form['#attached']['library'][] = 'label_help/seven';
+  $form_object = $form_state->getFormObject();
+  if (!method_exists($form_object, 'getEntity')) {
+    return;
+  }
+  $form_entity = $form_object->getEntity();
+  if (!method_exists($form_entity, 'getFieldDefinition')) {
+    return;
+  }
+  $method = new ReflectionMethod($form_entity, 'getFieldDefinition');
+  if (!$method->isPublic()) {
+    return;
   }
 
   foreach ($children as $key => $item) {
-    $form_object = $form_state->getFormObject();
-    if (!method_exists($form_object, 'getEntity')) {
-      continue;
-    }
-    $form_entity = $form_object->getEntity();
-    if (!method_exists($form_entity, 'getFieldDefinition')) {
-      continue;
-    }
-    $method = new ReflectionMethod($form_entity, 'getFieldDefinition');
-    if(!$method->isPublic()) {
-      continue;
-    }
-    $form_entity_get_field_definition_method = new ReflectionMethod($form_entity, 'getFieldDefinition');
+    $occurrence = 0;
     $field = $form_object->getEntity()->getFieldDefinition($key);
 
     $content = NULL;
@@ -73,15 +68,6 @@ function label_help_form_alter(&$form, &$form_state, $form_id) {
       continue;
     }
 
-    // Provide themable markup for the help text.
-    $renderer = \Drupal::service('renderer');
-    $element = [
-      '#theme' => 'label_help',
-      '#content' => [
-        '#markup' => $content,
-      ],
-    ];
-    $markup = $renderer->renderRoot($element);
     _label_help_attach_styles($form);
 
     // Most Drupal 8 entity edit forms have fields of type 'container' with
@@ -96,11 +82,13 @@ function label_help_form_alter(&$form, &$form_state, $form_id) {
       // appears in the table header, instead of inside the draggable row.
       if (!empty($item['widget']['#cardinality_multiple'])) {
         if (!empty($form[$key]['widget']['#title'])) {
-          $form[$key]['widget']['#title'] .= $markup;
+          $occurrence = 1;
+          $form[$key]['widget']['#title'] .= _label_help_attach_message($content, '#title');
         }
         elseif (!empty($form[$key]['widget']['title'])) {
+          $occurrence = 2;
           $form[$key]['widget']['title']['#attributes']['class'][] = 'label';
-          $form[$key]['widget']['title']['#suffix'] = $markup;
+          $form[$key]['widget']['title']['#suffix'] = _label_help_attach_message($content, '#suffix');
         }
       }
 
@@ -109,26 +97,86 @@ function label_help_form_alter(&$form, &$form_state, $form_id) {
       // Date fields). Drupal's fieldset.html.twig do not support the
       // #label_prefix, so use #field_prefix instead, but be careful to not
       // overwrite content when the #field_prefix is alread defined.
-      elseif ((!empty($item['widget'][0]['#type']) && $item['widget'][0]['#type'] == 'fieldset') || (!empty($item['widget'][0]['#theme_wrappers']) && $item['widget'][0]['#theme_wrappers'][0] == 'fieldset')) {
-
+      elseif (
+        (
+          !empty($item['widget'][0]['#type']) &&
+          (
+            $item['widget'][0]['#type'] == 'fieldset' ||
+            $item['widget'][0]['#type'] == 'checkboxes' ||
+            $item['widget'][0]['#type'] == 'radios'
+          )
+        ) || (
+          !empty($item['widget'][0]['#theme_wrappers']) &&
+          $item['widget'][0]['#theme_wrappers'][0] == 'fieldset'
+        )
+      ) {
         // Prepend to existing value when #field_prefix is defined.
         if (!empty($item['widget'][0]['#field_prefix'])) {
-          $form[$key]['widget'][0]['#field_prefix'] = $markup . $item['widget'][0]['#field_prefix'];
+          $occurrence = 3;
+          $form[$key]['widget'][0]['#field_prefix'] = _label_help_attach_message($content, '#field_prefix') . $item['widget'][0]['#field_prefix'];
         } else {
-          $form[$key]['widget'][0]['#field_prefix'] = $markup;
+          $occurrence = 4;
+          $form[$key]['widget'][0]['#field_prefix'] = _label_help_attach_message($content, '#field_prefix');
         }
       }
 
+      // Special case for checkboxes and radios. Drupal's fieldset.html.twig do
+      // not support the #label_prefix, so use #field_prefix instead, but be
+      // careful to not overwrite content when the #field_prefix is already
+      // defined.
+      elseif (
+        (
+          !empty($item['widget']['#type']) &&
+          (
+            $item['widget']['#type'] == 'checkboxes' ||
+            $item['widget']['#type'] == 'radios'
+          )
+        )
+      ) {
+        // Prepend to existing value when #field_prefix is defined.
+        if (!empty($item['widget']['#field_prefix'])) {
+          $occurrence = 5;
+          $form[$key]['widget']['#field_prefix'] = _label_help_attach_message($content, '#field_prefix') . $item['widget']['#field_prefix'];
+        } else {
+          $occurrence = 6;
+          $form[$key]['widget']['#field_prefix'] = _label_help_attach_message($content, '#field_prefix');
+        }
+      }
+
+      // Single on/off checkbox.
+      elseif (
+        isset($item['widget']['value']) &&
+        $item['widget']['value']['#type'] == 'checkbox'
+      ) {
+        // Prepend to existing value when #field_prefix is defined.
+        if (!empty($item['widget']['value']['#field_prefix'])) {
+          $occurrence = 7;
+          $form[$key]['widget']['value']['#field_prefix'] = _label_help_attach_message($content, '#field_prefix') . $item['widget']['value']['#field_prefix'];
+        } else {
+          $occurrence = 8;
+          $form[$key]['widget']['value']['#field_prefix'] = _label_help_attach_message($content, '#field_prefix');
+        }
+      }
       // Special case for containers with a details widget, specified
       // either via #type or #theme_wrappers (eg Entity Browser or Address
       // fields). Drupal's details.html.twig does not support #label_prefix,
       // so we use #description instead, but be careful to not overwrite
       // content when the #description is alread defined.
-      elseif ((!empty($item['widget']['#type']) && $item['widget']['#type'] == 'details') || (!empty($item['widget']['#theme_wrappers']) && $item['widget']['#theme_wrappers'][0] == 'details')) {
+      elseif (
+        (
+          !empty($item['widget']['#type']) &&
+          $item['widget']['#type'] == 'details'
+        ) || (
+          !empty($item['widget']['#theme_wrappers']) &&
+          $item['widget']['#theme_wrappers'][0] == 'details'
+        )
+      ) {
         if (!empty($item['widget']['#description'])) {
-          $form[$key]['widget']['#description'] = $markup . $item['widget']['#description'];
+          $occurrence = 9;
+          $form[$key]['widget']['#description'] = _label_help_attach_message($content, '#description') . $item['widget']['#description'];
         } else {
-          $form[$key]['widget']['#description'] = $markup;
+          $occurrence = 10;
+          $form[$key]['widget']['#description'] = _label_help_attach_message($content, '#description');
         }
       }
 
@@ -137,36 +185,83 @@ function label_help_form_alter(&$form, &$form_state, $form_id) {
       // Address fields). Drupal's details.html.twig does not support
       // #label_prefix, so we use #description instead, but be careful to not
       // overwrite content when the #description is alread defined.
-      elseif ((!empty($item['widget'][0]['#type']) && $item['widget'][0]['#type'] == 'details') || (!empty($item['widget'][0]['#theme_wrappers']) && $item['widget'][0]['#theme_wrappers'][0] == 'details')) {
+      elseif (
+        (
+          !empty($item['widget'][0]['#type']) &&
+          $item['widget'][0]['#type'] == 'details'
+        ) || (
+          !empty($item['widget'][0]['#theme_wrappers'])
+          && $item['widget'][0]['#theme_wrappers'][0] == 'details'
+        )
+      ) {
         if (!empty($item['widget'][0]['#description'])) {
-          $form[$key]['widget'][0]['#description'] = $markup . $item['widget'][0]['#description'];
+          $occurrence = 11;
+          $form[$key]['widget'][0]['#description'] = _label_help_attach_message($content, '#description') . $item['widget'][0]['#description'];
         } else {
-          $form[$key]['widget'][0]['#description'] = $markup;
+          $occurrence = 12;
+          $form[$key]['widget'][0]['#description'] = _label_help_attach_message($content, '#label_suffix');
         }
       }
 
+      // Special case for datetime form elements which do not properly display
+      // the label help using #label_suffix, #field_prefix, nor take into
+      // account #description_display.  Therefore we use a hack solution
+      // append the message to the field #title.
+      elseif (
+        isset($item['widget']['#theme']) &&
+        $item['widget']['#theme'] == 'field_multiple_value_form' &&
+        isset($item['widget'][0]['value']) &&
+        $item['widget'][0]['value']['#type'] == 'datetime'
+      ) {
+        $occurrence = 13;
+        $form[$key]['widget'][0]['value']['#title_attributes']['class'][] = 'label';
+        $form[$key]['widget'][0]['value']['#title'] = $form[$key]['widget'][0]['value']['#title'] . _label_help_attach_message($content, '#title on element');
+      }
+
       elseif (isset($item['widget'][0]['value'])) {
-        $form[$key]['widget'][0]['value']['#label_suffix'] = $markup;
+        $occurrence = 14;
+        $form[$key]['widget'][0]['value']['#field_prefix'] = _label_help_attach_message($content, '#field_prefix');
       }
 
       // Format used by cshs module.
       elseif (isset($item['widget'][0]['target_id']['#title'])) {
-        $form[$key]['widget'][0]['target_id']['#label_suffix'] = $markup;
+        $occurrence = 15;
+        $form[$key]['widget'][0]['target_id']['#label_suffix'] = _label_help_attach_message($content, '#label_suffix');
       }
+
       elseif (isset($item['widget'][0]['#title'])) {
-        $form[$key]['widget'][0]['#label_suffix'] = $markup;
+        $occurrence = 16;
+        $form[$key]['widget'][0]['#label_suffix'] = _label_help_attach_message($content, '#label_suffix');
       }
+
+      // Eg, Select lists.
       elseif (isset($item['widget']['#title'])) {
-        $form[$key]['widget']['#label_suffix'] = $markup;
+        $occurrence = 17;
+        $form[$key]['widget']['#label_suffix'] = _label_help_attach_message($content, '#label_suffix');
       }
+
       elseif (isset($item['widget']['target_id']['#title'])) {
-        $form[$key]['widget']['target_id']['#label_suffix'] = $markup;
+        $occurrence = 18;
+        $form[$key]['widget']['target_id']['#label_suffix'] = _label_help_attach_message($content, '#label_suffix');
+      }
+
+      else {
+        $occurrence = 19;
       }
     }
     // Move comments to the top for other field forms that
     // are specifically configured.
     else {
-      $form[$key]['widget']['#label_suffix'] = $markup;
+      $occurrence = 20;
+      $form[$key]['widget']['#label_suffix'] = _label_help_attach_message($content, '#label_suffix');
+    }
+
+    $debug = Settings::get('label_help_debug', FALSE);
+    if ($occurrence && $debug) {
+      $form["debug_$key"] = [
+        '#markup' => '<details><summary>' . "($occurrence) $key" . '</summary><pre>' . var_export($form[$key], true) . '</pre></details>',
+        '#weight' => (int) $form[$key]['#weight'] - 1,
+      ];
     }
   }
 }
@@ -230,6 +325,31 @@ function label_help_theme_suggestions_label_help(array $variables) {
   }
 }
 
+/**
+ * Helper function to render the message text.
+ *
+ * Displays additional debug text when debugging enabled.
+ *
+ * @param string content to render
+ * @param string describes how content is attached to Form API option
+ * @return string content rendered with label-help wrapper
+ */
+function _label_help_attach_message($content, $placement) {
+  // Provide themable markup for the help text.
+  $renderer = \Drupal::service('renderer');
+  $debug = Settings::get('label_help_debug', FALSE);
+  if ($debug) {
+    $content = '✅ ' . $content . ' ' . $placement;
+  }
+  $element = [
+    '#theme' => 'label_help',
+    '#content' => [
+      '#markup' => $content,
+    ],
+  ];
+  return $renderer->renderRoot($element);
+}
+
 /**
  * Helper function to attach the proper stylesheet library
  * based on the current admin theme stack.
