diff --git a/src/Element/YamlFormCheckboxesOther.php b/src/Element/YamlFormCheckboxesOther.php
index 10794a1..e8f88df 100755
--- a/src/Element/YamlFormCheckboxesOther.php
+++ b/src/Element/YamlFormCheckboxesOther.php
@@ -118,7 +118,9 @@ class YamlFormCheckboxesOther extends FormElement {
       }
     }
 
-    if ($element['#required'] && empty($value)) {
+    $is_empty = empty($value);
+    $has_access = (!isset($element['#access']) || $element['#access'] === TRUE);
+    if ($element['#required'] && $is_empty && $has_access) {
       $form_state->setError($element, t('@name field is required.', ['@name' => $element['#title']]));
     }
 
diff --git a/src/Element/YamlFormEmailConfirm.php b/src/Element/YamlFormEmailConfirm.php
index e9443a8..6435550 100755
--- a/src/Element/YamlFormEmailConfirm.php
+++ b/src/Element/YamlFormEmailConfirm.php
@@ -111,25 +111,29 @@ class YamlFormEmailConfirm extends FormElement {
    * Validates an email confirm element.
    */
   public static function validateEmailConfirm(&$element, FormStateInterface $form_state, &$complete_form) {
+
     $mail_1 = trim($element['mail_1']['#value']);
     $mail_2 = trim($element['mail_2']['#value']);
-    if ((!empty($mail_1) || !empty($mail_2)) && strcmp($mail_1, $mail_2)) {
-      $form_state->setError($element['mail_2'], t('The specified email addresses do not match.'));
-    }
-    else {
-      // NOTE: Only mail_1 needs to be validated since mail_2 is the same value.
-      // Verify the required value.
-      if ($element['mail_1']['#required'] && empty($mail_1)) {
-        $form_state->setError($element, t('@name field is required.', ['@name' => $element['mail_1']['#title']]));
+    $has_access = (!isset($element['#access']) || $element['#access'] === TRUE);
+    if ($has_access) {
+      if ((!empty($mail_1) || !empty($mail_2)) && strcmp($mail_1, $mail_2)) {
+        $form_state->setError($element['mail_2'], t('The specified email addresses do not match.'));
       }
-      // Verify that the value is not longer than #maxlength.
-      if (isset($element['mail_1']['#maxlength']) && Unicode::strlen($mail_1) > $element['mail_1']['#maxlength']) {
-        $t_args = [
-          '@name' => $element['mail_1']['#title'],
-          '%max' => $element['mail_1']['#maxlength'],
-          '%length' => Unicode::strlen($mail_1),
-        ];
-        $form_state->setError($element, t('@name cannot be longer than %max characters but is currently %length characters long.', $t_args));
+      else {
+        // NOTE: Only mail_1 needs to be validated since mail_2 is the same value.
+        // Verify the required value.
+        if ($element['mail_1']['#required'] && empty($mail_1)) {
+          $form_state->setError($element, t('@name field is required.', ['@name' => $element['mail_1']['#title']]));
+        }
+        // Verify that the value is not longer than #maxlength.
+        if (isset($element['mail_1']['#maxlength']) && Unicode::strlen($mail_1) > $element['mail_1']['#maxlength']) {
+          $t_args = [
+            '@name' => $element['mail_1']['#title'],
+            '%max' => $element['mail_1']['#maxlength'],
+            '%length' => Unicode::strlen($mail_1),
+          ];
+          $form_state->setError($element, t('@name cannot be longer than %max characters but is currently %length characters long.', $t_args));
+        }
       }
     }
 
diff --git a/src/Element/YamlFormRadiosOther.php b/src/Element/YamlFormRadiosOther.php
index 8a1a229..317b47b 100755
--- a/src/Element/YamlFormRadiosOther.php
+++ b/src/Element/YamlFormRadiosOther.php
@@ -109,7 +109,9 @@ class YamlFormRadiosOther extends FormElement {
       $value = $other_value;
     }
 
-    if ($element['#required'] && ($value === '' || $value === NULL)) {
+    $is_empty = ($value === '' || $value === NULL);
+    $has_access = (!isset($element['#access']) || $element['#access'] === TRUE);
+    if ($element['#required'] && $is_empty && $has_access) {
       $form_state->setError($element, t('@name field is required.', ['@name' => $element['#title']]));
     }
 
diff --git a/src/Element/YamlFormSelectOther.php b/src/Element/YamlFormSelectOther.php
index b91ad31..a8f5c83 100755
--- a/src/Element/YamlFormSelectOther.php
+++ b/src/Element/YamlFormSelectOther.php
@@ -155,7 +155,8 @@ class YamlFormSelectOther extends FormElement {
       $is_empty = ($value === '' || $value === NULL) ? TRUE : FALSE;
     }
 
-    if ($element['#required'] && $is_empty) {
+    $has_access = (!isset($element['#access']) || $element['#access'] === TRUE);
+    if ($element['#required'] && $is_empty && $has_access) {
       $form_state->setError($element, t('@name field is required.', ['@name' => $element['select']['#title']]));
     }
 
diff --git a/src/YamlFormSubmissionForm.php b/src/YamlFormSubmissionForm.php
index 4e81a01..15ec7cc 100755
--- a/src/YamlFormSubmissionForm.php
+++ b/src/YamlFormSubmissionForm.php
@@ -849,6 +849,7 @@ class YamlFormSubmissionForm extends ContentEntityForm {
       foreach ($wizard['pages'] as $index => $page_key) {
         if ($index != $wizard['current']) {
           $form['elements'][$page_key]['#access'] = FALSE;
+          $this->hideElements($form['elements'][$page_key]);
         }
         else {
           $form['elements'][$page_key]['#type'] = 'container';
@@ -862,6 +863,22 @@ class YamlFormSubmissionForm extends ContentEntityForm {
   /****************************************************************************/
 
   /**
+   * Hide form elements by settings their #access to FALSE.
+   *
+   * @param array $elements
+   *   An render array representing elements.
+   */
+  protected function hideElements(&$elements) {
+    foreach ($elements as $key => &$element) {
+      if (Element::property($key) || !is_array($element)) {
+        continue;
+      }
+      $element['#access'] = FALSE;
+      $this->hideElements($element);
+    }
+  }
+
+  /**
    * Prepare form elements.
    *
    * @param array $elements
