diff --git a/core/includes/form.inc b/core/includes/form.inc
index 42206a4..1fbfcc6 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -671,7 +671,7 @@ function form_type_radios_value(&$element, $input = FALSE) {
     // unless it's empty. (An empty #default_value, such as NULL or FALSE, can
     // be used to indicate that no radio button is selected by default.)
     if (!isset($input) && !empty($element['#default_value'])) {
-      $element['#needs_validation'] = TRUE;
+      $element['#_needs_validation'] = TRUE;
     }
     return $input;
   }
@@ -2171,7 +2171,7 @@ function form_pre_render_group($element) {
     }
     // Re-sort the element's children if we injected group member elements.
     if (isset($sort)) {
-      $element['#sorted'] = FALSE;
+      $element['#_sorted'] = FALSE;
     }
   }
 
@@ -2783,7 +2783,7 @@ function form_pre_render_password($element) {
  * Expands a weight element into a select element.
  */
 function form_process_weight($element) {
-  $element['#is_weight'] = TRUE;
+  $element['#_is_weight'] = TRUE;
 
   // If the number of options is small enough, use a select field.
   $max_elements = \Drupal::config('system.site')->get('weight_select_max');
@@ -3036,7 +3036,7 @@ function _form_set_attributes(&$element, $class = array()) {
     $element['#attributes']['required'] = 'required';
     $element['#attributes']['aria-required'] = 'true';
   }
-  if (isset($element['#parents']) && isset($element['#errors']) && !empty($element['#validated'])) {
+  if (isset($element['#parents']) && isset($element['#errors']) && !empty($element['#_validated'])) {
     $element['#attributes']['class'][] = 'error';
     $element['#attributes']['aria-invalid'] = 'true';
   }
diff --git a/core/lib/Drupal/Core/Form/FormBuilder.php b/core/lib/Drupal/Core/Form/FormBuilder.php
index d3bedc1..9488c8d 100644
--- a/core/lib/Drupal/Core/Form/FormBuilder.php
+++ b/core/lib/Drupal/Core/Form/FormBuilder.php
@@ -308,11 +308,11 @@ public function rebuildForm($form_id, &$form_state, $old_form = NULL) {
     // build's data in the form cache; also allowing the user to go back to an
     // earlier build, make changes, and re-submit.
     // @see self::prepareForm()
-    if (isset($old_form['#build_id']) && !empty($form_state['rebuild_info']['copy']['#build_id'])) {
-      $form['#build_id'] = $old_form['#build_id'];
+    if (isset($old_form['#_build_id']) && !empty($form_state['rebuild_info']['copy']['#_build_id'])) {
+      $form['#_build_id'] = $old_form['#_build_id'];
     }
     else {
-      $form['#build_id'] = 'form-' . Crypt::randomBytesBase64();
+      $form['#_build_id'] = 'form-' . Crypt::randomBytesBase64();
     }
 
     // #action defaults to request_uri(), but in case of Ajax and other partial
@@ -329,7 +329,7 @@ public function rebuildForm($form_id, &$form_state, $old_form = NULL) {
     // self::doBuildForm(), so we need to do it here.
     // @todo For Drupal 8, find a way to avoid this code duplication.
     if (empty($form_state['no_cache'])) {
-      $this->setCache($form['#build_id'], $form, $form_state);
+      $this->setCache($form['#_build_id'], $form, $form_state);
     }
 
     // Clear out all group associations as these might be different when
@@ -513,13 +513,13 @@ public function processForm($form_id, &$form, &$form_state) {
     // With GET, these forms are always submitted if requested.
     if ($form_state['method'] == 'get' && !empty($form_state['always_process'])) {
       if (!isset($form_state['input']['form_build_id'])) {
-        $form_state['input']['form_build_id'] = $form['#build_id'];
+        $form_state['input']['form_build_id'] = $form['#_build_id'];
       }
       if (!isset($form_state['input']['form_id'])) {
         $form_state['input']['form_id'] = $form_id;
       }
-      if (!isset($form_state['input']['form_token']) && isset($form['#token'])) {
-        $form_state['input']['form_token'] = $this->csrfToken->get($form['#token']);
+      if (!isset($form_state['input']['form_token']) && isset($form['#_token'])) {
+        $form_state['input']['form_token'] = $this->csrfToken->get($form['#_token']);
       }
     }
 
@@ -601,7 +601,7 @@ public function processForm($form_id, &$form, &$form_state) {
     // request to accommodate new user input. Rebuilt forms are not cached here,
     // because self::rebuildForm() already takes care of that.
     if (!$form_state['rebuild'] && $form_state['cache'] && empty($form_state['no_cache'])) {
-      $this->setCache($form['#build_id'], $unprocessed_form, $form_state);
+      $this->setCache($form['#_build_id'], $unprocessed_form, $form_state);
     }
   }
 
@@ -625,13 +625,13 @@ public function prepareForm($form_id, &$form, &$form_state) {
     // build, make changes, and re-submit.
     // @see self::buildForm()
     // @see self::rebuildForm()
-    if (!isset($form['#build_id'])) {
-      $form['#build_id'] = 'form-' . Crypt::randomBytesBase64();
+    if (!isset($form['#_build_id'])) {
+      $form['#_build_id'] = 'form-' . Crypt::randomBytesBase64();
     }
     $form['form_build_id'] = array(
       '#type' => 'hidden',
-      '#value' => $form['#build_id'],
-      '#id' => $form['#build_id'],
+      '#value' => $form['#_build_id'],
+      '#id' => $form['#_build_id'],
       '#name' => 'form_build_id',
       // Form processing and validation requires this value, so ensure the
       // submitted form value appears literally, regardless of custom #tree
@@ -650,16 +650,16 @@ public function prepareForm($form_id, &$form, &$form_state) {
     if ($user && $user->isAuthenticated() && !$form_state['programmed']) {
       // Form constructors may explicitly set #token to FALSE when cross site
       // request forgery is irrelevant to the form, such as search forms.
-      if (isset($form['#token']) && $form['#token'] === FALSE) {
-        unset($form['#token']);
+      if (isset($form['#_token']) && $form['#_token'] === FALSE) {
+        unset($form['#_token']);
       }
       // Otherwise, generate a public token based on the form id.
       else {
-        $form['#token'] = $form_id;
+        $form['#_token'] = $form_id;
         $form['form_token'] = array(
           '#id' => $this->drupalHtmlId('edit-' . $form_id . '-form-token'),
           '#type' => 'token',
-          '#default_value' => $this->csrfToken->get($form['#token']),
+          '#default_value' => $this->csrfToken->get($form['#_token']),
           // Form processing and validation requires this value, so ensure the
           // submitted form value appears literally, regardless of custom #tree
           // and #parents being set elsewhere.
@@ -823,7 +823,7 @@ public function setError(&$element, array &$form_state, $message = '') {
    */
   public function doBuildForm($form_id, &$element, &$form_state) {
     // Initialize as unprocessed.
-    $element['#processed'] = FALSE;
+    $element['#_processed'] = FALSE;
 
     // Use element defaults.
     if (isset($element['#type']) && empty($element['#defaults_loaded']) && ($info = $this->getElementInfo($element['#type']))) {
@@ -883,15 +883,15 @@ public function doBuildForm($form_id, &$element, &$form_state) {
     }
     // Allow for elements to expand to multiple elements, e.g., radios,
     // checkboxes and files.
-    if (isset($element['#process']) && !$element['#processed']) {
+    if (isset($element['#process']) && !$element['#_processed']) {
       foreach ($element['#process'] as $process) {
         $element = call_user_func_array($process, array(&$element, &$form_state, &$form_state['complete_form']));
       }
-      $element['#processed'] = TRUE;
+      $element['#_processed'] = TRUE;
     }
 
     // We start off assuming all form elements are in the correct order.
-    $element['#sorted'] = TRUE;
+    $element['#_sorted'] = TRUE;
 
     // Recurse through all child elements.
     $count = 0;
@@ -939,7 +939,7 @@ public function doBuildForm($form_id, &$element, &$form_state) {
       else {
         // If one of the child elements has a weight then we will need to sort
         // later.
-        unset($element['#sorted']);
+        unset($element['#_sorted']);
       }
       $element[$key] = $this->doBuildForm($form_id, $element[$key], $form_state);
       $count++;
@@ -947,11 +947,11 @@ public function doBuildForm($form_id, &$element, &$form_state) {
 
     // The #after_build flag allows any piece of a form to be altered
     // after normal input parsing has been completed.
-    if (isset($element['#after_build']) && !isset($element['#after_build_done'])) {
+    if (isset($element['#after_build']) && !isset($element['#_after_build_done'])) {
       foreach ($element['#after_build'] as $callable) {
         $element = call_user_func_array($callable, array($element, &$form_state));
       }
-      $element['#after_build_done'] = TRUE;
+      $element['#_after_build_done'] = TRUE;
     }
 
     // If there is a file element, we need to flip a flag so later the
@@ -989,7 +989,7 @@ public function doBuildForm($form_id, &$element, &$form_state) {
 
       // If the triggering element executes submit handlers, then set the form
       // state key that's needed for those handlers to run.
-      if (!empty($form_state['triggering_element']['#executes_submit_callback'])) {
+      if (!empty($form_state['triggering_element']['#_executes_submit_callback'])) {
         $form_state['submitted'] = TRUE;
       }
 
@@ -1101,7 +1101,7 @@ protected function handleInputElement($form_id, &$element, &$form_state) {
         }
         // Mark all posted values for validation.
         if (isset($element['#value']) || (!empty($element['#required']))) {
-          $element['#needs_validation'] = TRUE;
+          $element['#_needs_validation'] = TRUE;
         }
       }
       // Load defaults.
diff --git a/core/modules/field/src/Plugin/views/field/Field.php b/core/modules/field/src/Plugin/views/field/Field.php
index ec794fd..50ece02 100644
--- a/core/modules/field/src/Plugin/views/field/Field.php
+++ b/core/modules/field/src/Plugin/views/field/Field.php
@@ -468,7 +468,7 @@ public function buildOptionsForm(&$form, &$form_state) {
         'path' => views_ui_build_form_path($form_state),
       ),
       '#submit' => array(array($this, 'submitTemporaryForm')),
-      '#executes_submit_callback' => TRUE,
+      '#_executes_submit_callback' => TRUE,
     );
 
     $form['field_api_classes'] = array(
diff --git a/core/modules/filter/filter.module b/core/modules/filter/filter.module
index f25fe79..1c07bce 100644
--- a/core/modules/filter/filter.module
+++ b/core/modules/filter/filter.module
@@ -467,7 +467,7 @@ function filter_process_format($element) {
     '#prefix',
     '#suffix',
     '#attached',
-    '#processed',
+    '#_processed',
     '#theme_wrappers',
   );
   // Move this element into sub-element 'value'.
diff --git a/core/modules/system/src/Controller/FormAjaxController.php b/core/modules/system/src/Controller/FormAjaxController.php
index f1645a7..978f91f 100644
--- a/core/modules/system/src/Controller/FormAjaxController.php
+++ b/core/modules/system/src/Controller/FormAjaxController.php
@@ -91,7 +91,7 @@ protected function getForm(Request $request) {
     // When a form is rebuilt after Ajax processing, its #build_id and #action
     // should not change.
     // @see drupal_rebuild_form()
-    $form_state['rebuild_info']['copy']['#build_id'] = TRUE;
+    $form_state['rebuild_info']['copy']['#_build_id'] = TRUE;
     $form_state['rebuild_info']['copy']['#action'] = TRUE;
 
     // The form needs to be processed; prepare for that by setting a few internal
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 6bd8dd4..2237073 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -328,7 +328,7 @@ function system_element_info() {
     '#input' => TRUE,
     '#name' => 'op',
     '#is_button' => TRUE,
-    '#executes_submit_callback' => TRUE,
+    '#_executes_submit_callback' => TRUE,
     '#limit_validation_errors' => FALSE,
     '#process' => array('form_process_button', 'ajax_process_form'),
     '#pre_render' => array('form_pre_render_button'),
@@ -338,7 +338,7 @@ function system_element_info() {
     '#input' => TRUE,
     '#name' => 'op',
     '#is_button' => TRUE,
-    '#executes_submit_callback' => FALSE,
+    '#_executes_submit_callback' => FALSE,
     '#limit_validation_errors' => FALSE,
     '#process' => array('form_process_button', 'ajax_process_form'),
     '#pre_render' => array('form_pre_render_button'),
@@ -347,7 +347,7 @@ function system_element_info() {
   $types['image_button'] = array(
     '#input' => TRUE,
     '#is_button' => TRUE,
-    '#executes_submit_callback' => TRUE,
+    '#_executes_submit_callback' => TRUE,
     '#limit_validation_errors' => FALSE,
     '#process' => array('form_process_button', 'ajax_process_form'),
     '#return_value' => TRUE,
diff --git a/core/modules/tracker/tracker.pages.inc b/core/modules/tracker/tracker.pages.inc
index 30c7915..5c740e6 100644
--- a/core/modules/tracker/tracker.pages.inc
+++ b/core/modules/tracker/tracker.pages.inc
@@ -107,7 +107,7 @@ function tracker_page($account = NULL) {
     '#theme' => 'pager',
     '#weight' => 10,
   );
-  $page['#sorted'] = TRUE;
+  $page['#_sorted'] = TRUE;
 
   return $page;
 }
diff --git a/core/tests/Drupal/Tests/Core/Form/FormBuilderTest.php b/core/tests/Drupal/Tests/Core/Form/FormBuilderTest.php
index 03ba5eb..250672c 100644
--- a/core/tests/Drupal/Tests/Core/Form/FormBuilderTest.php
+++ b/core/tests/Drupal/Tests/Core/Form/FormBuilderTest.php
@@ -308,19 +308,19 @@ public function testRebuildForm() {
     // Do an initial build of the form and track the build ID.
     $form_state = array();
     $form = $this->formBuilder->buildForm($form_arg, $form_state);
-    $original_build_id = $form['#build_id'];
+    $original_build_id = $form['#_build_id'];
 
     // Rebuild the form, and assert that the build ID has not changed.
     $form_state['rebuild'] = TRUE;
     $form_state['input']['form_id'] = $form_id;
-    $form_state['rebuild_info']['copy']['#build_id'] = TRUE;
+    $form_state['rebuild_info']['copy']['#_build_id'] = TRUE;
     $this->formBuilder->processForm($form_id, $form, $form_state);
-    $this->assertSame($original_build_id, $form['#build_id']);
+    $this->assertSame($original_build_id, $form['#_build_id']);
 
     // Rebuild the form again, and assert that there is a new build ID.
     $form_state['rebuild_info'] = array();
     $form = $this->formBuilder->buildForm($form_arg, $form_state);
-    $this->assertNotSame($original_build_id, $form['#build_id']);
+    $this->assertNotSame($original_build_id, $form['#_build_id']);
   }
 
   /**
