diff --git a/js/yamlform.element.html_editor.js b/js/yamlform.element.html_editor.js
index 4198988..a994bbb 100644
--- a/js/yamlform.element.html_editor.js
+++ b/js/yamlform.element.html_editor.js
@@ -15,13 +15,14 @@
   Drupal.behaviors.yamlFormHtmlEditor = {
     attach: function (context) {
       $(context).find('.js-form-type-yamlform-html-editor textarea').once('yamlform-html-editor').each(function () {
+        var allowedContent = drupalSettings['yamlform']['html_editor']['allowedContent'];
         var $textarea = $(this);
         CKEDITOR.replace(this.id, {
           // Turn off external config and styles.
           customConfig: '',
           stylesSet: false,
           contentsCss: [],
-          allowedContent: true,
+          allowedContent: allowedContent,
           // Use <br> tags instead of <p> tags.
           enterMode: CKEDITOR.ENTER_BR,
           shiftEnterMode: CKEDITOR.ENTER_BR,
diff --git a/js/yamlform.element.other.js b/js/yamlform.element.other.js
index 1775f72..6baf8da 100644
--- a/js/yamlform.element.other.js
+++ b/js/yamlform.element.other.js
@@ -12,23 +12,36 @@
    *
    * @param {boolean} show
    *   TRUE will display the text field. FALSE with hide and clear the text field.
-   * @param {object} $input
+   * @param {object} $element
    *   The input (text) field to be toggled.
    */
-  function toggleOther(show, $input) {
+  function toggleOther(show, $element) {
+    var $input = $element.find('input');
     if (show) {
       // Limit the other inputs width to the parent's container.
-      $input.width($input.parent().width());
-      // Display the input.
-      $input.slideDown().find('input').focus().prop('required', true);
+      $element.width($element.parent().width());
+      // Display the element.
+      $element.slideDown();
+      // Focus and require the input.
+      $input.focus().prop('required', true);
+      // Restore the input's value.
+      var value = $input.data('yamlform-value');
+      if (value !== undefined) {
+        $input.val(value);
+        $input.get(0).setSelectionRange(0, 0);
+      }
       // Refresh CodeMirror used as other element.
-      $input.parent().find('.CodeMirror').each(function (index, $element) {
+      $element.parent().find('.CodeMirror').each(function (index, $element) {
         $element.CodeMirror.refresh();
       });
     }
     else {
-      $input.slideUp();
+      $element.slideUp();
+      // Save the input's value.
+      $input.data('yamlform-value', $input.val());
+      // Empty and un-required the input.
       $input.find('input').val('').prop('required', false);
+
     }
   }
 
diff --git a/src/Element/YamlFormHtmlEditor.php b/src/Element/YamlFormHtmlEditor.php
index ed92d15..ec0ba7a 100644
--- a/src/Element/YamlFormHtmlEditor.php
+++ b/src/Element/YamlFormHtmlEditor.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\yamlform\Element;
 
+use Drupal\Component\Utility\Xss;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Render\Element\Textarea;
 
@@ -41,6 +42,7 @@ class YamlFormHtmlEditor extends Textarea {
     }
     else {
       $element['#attached']['library'][] = 'yamlform/yamlform.element.html_editor';
+      $element['#attached']['drupalSettings']['yamlform']['html_editor']['allowedContent'] = self::getAllowedContent();
     }
     return $element;
   }
@@ -53,4 +55,31 @@ class YamlFormHtmlEditor extends Textarea {
     $form_state->setValueForElement($element, trim($value));
   }
 
+  /**
+   * Get allowed content.
+   *
+   * @return array
+   *   Allowed content (tags) for CKEditor.
+   */
+  public static function getAllowedContent() {
+    $allowed_tags = \Drupal::config('yamlform.settings')->get('elements.allowed_tags');
+    switch ($allowed_tags) {
+      case 'admin':
+        $allowed_tags = Xss::getAdminTagList();
+        break;
+
+      case 'html':
+        $allowed_tags = Xss::getHtmlTagList();
+        break;
+
+      default:
+        $allowed_tags = preg_split('/ +/', $allowed_tags);
+        break;
+    }
+    foreach ($allowed_tags as $index => $allowed_tag) {
+      $allowed_tags[$index] .= '(*)[*]{*}';
+    }
+    return implode('; ', $allowed_tags);
+  }
+
 }
diff --git a/src/Element/YamlFormOtherBase.php b/src/Element/YamlFormOtherBase.php
index 129a988..05d06a5 100644
--- a/src/Element/YamlFormOtherBase.php
+++ b/src/Element/YamlFormOtherBase.php
@@ -88,14 +88,19 @@ abstract class YamlFormOtherBase extends FormElement {
     $element[$type]['#error_no_message'] = TRUE;
 
     // Build other textfield.
-    $element['other']['#type'] = 'textfield';
-    $element['other']['#placeholder'] = t('Enter other...');
     $element['other']['#error_no_message'] = TRUE;
     foreach ($element as $key => $value) {
       if (strpos($key, '#other__') === 0) {
-        $element['other'][str_replace('#other__', '#', $key)] = $value;
+        $other_key = str_replace('#other__', '#', $key);
+        if (!isset($element['other'][$other_key])) {
+          $element['other'][$other_key] = $value;
+        }
       }
     }
+    $element['other'] += [
+      '#type' => 'textfield',
+      '#placeholder' => t('Enter other...'),
+    ];
     $element['other']['#wrapper_attributes']['class'][] = "js-yamlform-$type-other-input";
     $element['other']['#wrapper_attributes']['class'][] = "yamlform-$type-other-input";
 
diff --git a/src/Form/YamlFormAdminSettingsForm.php b/src/Form/YamlFormAdminSettingsForm.php
index ca17a80..574c7b4 100644
--- a/src/Form/YamlFormAdminSettingsForm.php
+++ b/src/Form/YamlFormAdminSettingsForm.php
@@ -311,6 +311,7 @@ class YamlFormAdminSettingsForm extends ConfigFormBase {
       ],
       '#other__option_label' => $this->t('Custom tags'),
       '#other__placeholder' => $this->t('Enter multiple tags delimited using spaces'),
+      '#other__default_value' => implode(' ', Xss::getAdminTagList()),
       '#required' => TRUE,
       '#description' => $this->t('Allowed tags are applied to an element propperty that may contain HTML. This includes element title, description, prefix, and suffix'),
       '#default_value' => $config->get('elements.allowed_tags'),
