diff --git a/core/modules/contextual/contextual.module b/core/modules/contextual/contextual.module
index a09d09f..c1e8edf 100644
--- a/core/modules/contextual/contextual.module
+++ b/core/modules/contextual/contextual.module
@@ -57,6 +57,8 @@ function contextual_library_info() {
 
 /**
  * Implements hook_element_info().
+ *
+ * @render_element contextual_links
  */
 function contextual_element_info() {
   $types['contextual_links'] = array(
diff --git a/core/modules/field_ui/field_ui.module b/core/modules/field_ui/field_ui.module
index 076cc23..6922e80 100644
--- a/core/modules/field_ui/field_ui.module
+++ b/core/modules/field_ui/field_ui.module
@@ -292,6 +292,8 @@ function field_ui_theme() {
 
 /**
  * Implements hook_element_info().
+ *
+ * @render_element field_ui_table
  */
 function field_ui_element_info() {
   return array(
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index 32bbce9..8f9c1e0 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -60,6 +60,8 @@ function file_menu() {
  * Implements hook_element_info().
  *
  * The managed file element may be used anywhere in Drupal.
+ *
+ * @input_element managed_file
  */
 function file_element_info() {
   $file_path = drupal_get_path('module', 'file');
diff --git a/core/modules/filter/filter.module b/core/modules/filter/filter.module
index 0afb478..5d7d08f 100644
--- a/core/modules/filter/filter.module
+++ b/core/modules/filter/filter.module
@@ -77,6 +77,8 @@ function filter_theme() {
 /**
  * Implements hook_element_info().
  *
+ * @input_element text_format
+ *
  * @see filter_process_format()
  * @see text_format_wrapper()
  */
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 69a1f62..03e99c6 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -293,17 +293,88 @@ function system_entity_info() {
  * Implements hook_element_info().
  */
 function system_element_info() {
-  // Top level elements.
+  return array_merge(
+    // Top level elements.
+    system_element_info_form(),
+    system_element_info_page(),
+    system_element_info_ajax(),
+    system_element_info_html_tag(),
+    system_element_info_styles(),
+    system_element_info_scripts(),
+    // Input elements.
+    system_element_info_submit(),
+    system_element_info_button(),
+    system_element_info_image_button(),
+    system_element_info_textfield(),
+    system_element_info_tel(),
+    system_element_info_email(),
+    system_element_info_url(),
+    system_element_info_search(),
+    system_element_info_number(),
+    system_element_info_range(),
+    system_element_info_color(),
+    system_element_info_machine_name(),
+    system_element_info_password(),
+    system_element_info_password_confirm(),
+    system_element_info_textarea(),
+    system_element_info_radios(),
+    system_element_info_radio(),
+    system_element_info_checkboxes(),
+    system_element_info_checkbox(),
+    system_element_info_select(),
+    system_element_info_language_select(),
+    system_element_info_weight(),
+    system_element_info_date(),
+    system_element_info_file(),
+    system_element_info_tableselect(),
+    // Form structure.
+    system_element_info_item(),
+    system_element_info_hidden(),
+    system_element_info_value(),
+    system_element_info_markup(),
+    system_element_info_link(),
+    system_element_info_fieldset(),
+    system_element_info_vertical_tabs(),
+    system_element_info_container(),
+    system_element_info_actions(),
+    system_element_info_token()
+  );
+}
+
+/**
+ * Returns the 'form' element to system_element_info().
+ *
+ * @input_element form
+ */
+function system_element_info_form() {
   $types['form'] = array(
     '#method' => 'post',
     '#action' => request_uri(),
     '#theme_wrappers' => array('form'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'page' element to system_element_info().
+ *
+ * @render_element page
+ */
+function system_element_info_page() {
   $types['page'] = array(
     '#show_messages' => TRUE,
     '#theme' => 'page',
     '#theme_wrappers' => array('html'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'ajax' element to system_element_info().
+ *
+ * @render_element ajax
+ */
+function system_element_info_ajax() {
   // By default, we don't want Ajax commands being rendered in the context of an
   // HTML page, so we don't provide defaults for #theme or #theme_wrappers.
   // However, modules can set these properties (for example, to provide an HTML
@@ -313,26 +384,60 @@ function system_element_info() {
     '#commands' => array(),
     '#error' => NULL,
   );
+  return $types;
+}
+
+/**
+ * Returns the 'html_tag' element to system_element_info().
+ *
+ * @render_element html_tag
+ */
+function system_element_info_html_tag() {
   $types['html_tag'] = array(
     '#theme' => 'html_tag',
     '#pre_render' => array('drupal_pre_render_conditional_comments'),
     '#attributes' => array(),
     '#value' => NULL,
   );
+  return $types;
+}
+
+/**
+ * Returns the 'styles' element to system_element_info().
+ *
+ * @render_element styles
+ */
+function system_element_info_styles() {
   $types['styles'] = array(
     '#items' => array(),
     '#pre_render' => array('drupal_pre_render_styles'),
     '#group_callback' => 'drupal_group_css',
     '#aggregate_callback' => 'drupal_aggregate_css',
   );
+  return $types;
+}
+
+/**
+ * Returns the 'scripts' element to system_element_info().
+ *
+ * @render_element scripts
+ */
+function system_element_info_scripts() {
   $types['scripts'] = array(
     '#items' => array(),
     '#pre_render' => array('drupal_pre_render_scripts'),
     '#group_callback' => 'drupal_group_js',
     '#aggregate_callback' => 'drupal_aggregate_js',
   );
+  return $types;
+}
 
-  // Input elements.
+/**
+ * Returns the 'submit' element to system_element_info().
+ *
+ * @input_element submit
+ */
+function system_element_info_submit() {
   $types['submit'] = array(
     '#input' => TRUE,
     '#name' => 'op',
@@ -342,6 +447,15 @@ function system_element_info() {
     '#process' => array('form_process_button', 'ajax_process_form'),
     '#theme_wrappers' => array('button'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'button' element to system_element_info().
+ *
+ * @input_element button
+ */
+function system_element_info_button() {
   $types['button'] = array(
     '#input' => TRUE,
     '#name' => 'op',
@@ -351,6 +465,15 @@ function system_element_info() {
     '#process' => array('form_process_button', 'ajax_process_form'),
     '#theme_wrappers' => array('button'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'image_button' element to system_element_info().
+ *
+ * @input_element image_button
+ */
+function system_element_info_image_button() {
   $types['image_button'] = array(
     '#input' => TRUE,
     '#button_type' => 'submit',
@@ -362,6 +485,15 @@ function system_element_info() {
     '#src' => NULL,
     '#theme_wrappers' => array('image_button'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'textfield' element to system_element_info().
+ *
+ * @input_element textfield
+ */
+function system_element_info_textfield() {
   $types['textfield'] = array(
     '#input' => TRUE,
     '#size' => 60,
@@ -371,6 +503,15 @@ function system_element_info() {
     '#theme' => 'textfield',
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'tel' element to system_element_info().
+ *
+ * @input_element tel
+ */
+function system_element_info_tel() {
   $types['tel'] = array(
     '#input' => TRUE,
     '#size' => 30,
@@ -380,6 +521,15 @@ function system_element_info() {
     '#theme' => 'tel',
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'email' element to system_element_info().
+ *
+ * @input_element email
+ */
+function system_element_info_email() {
   $types['email'] = array(
     '#input' => TRUE,
     '#size' => 60,
@@ -391,6 +541,15 @@ function system_element_info() {
     '#theme' => 'email',
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'url' element to system_element_info().
+ *
+ * @input_element url
+ */
+function system_element_info_url() {
   $types['url'] = array(
     '#input' => TRUE,
     '#size' => 60,
@@ -401,6 +560,15 @@ function system_element_info() {
     '#theme' => 'url',
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'search' element to system_element_info().
+ *
+ * @input_element search
+ */
+function system_element_info_search() {
   $types['search'] = array(
     '#input' => TRUE,
     '#size' => 60,
@@ -410,6 +578,15 @@ function system_element_info() {
     '#theme' => 'search',
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'number' element to system_element_info().
+ *
+ * @input_element number
+ */
+function system_element_info_number() {
   $types['number'] = array(
     '#input' => TRUE,
     '#step' => 1,
@@ -418,6 +595,15 @@ function system_element_info() {
     '#theme' => 'number',
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'range' element to system_element_info().
+ *
+ * @input_element range
+ */
+function system_element_info_range() {
   $types['range'] = array(
     '#input' => TRUE,
     '#step' => 1,
@@ -428,6 +614,15 @@ function system_element_info() {
     '#theme' => 'range',
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'color' element to system_element_info().
+ *
+ * @input_element color
+ */
+function system_element_info_color() {
   $types['color'] = array(
     '#input' => TRUE,
     '#process' => array('ajax_process_form'),
@@ -435,6 +630,15 @@ function system_element_info() {
     '#theme' => 'color',
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'machine_name' element to system_element_info().
+ *
+ * @input_element machine_name
+ */
+function system_element_info_machine_name() {
   $types['machine_name'] = array(
     '#input' => TRUE,
     '#default_value' => NULL,
@@ -447,6 +651,15 @@ function system_element_info() {
     '#theme' => 'textfield',
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'password' element to system_element_info().
+ *
+ * @input_element password
+ */
+function system_element_info_password() {
   $types['password'] = array(
     '#input' => TRUE,
     '#size' => 60,
@@ -455,11 +668,29 @@ function system_element_info() {
     '#theme' => 'password',
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'password_confirm' element to system_element_info().
+ *
+ * @input_element password_confirm
+ */
+function system_element_info_password_confirm() {
   $types['password_confirm'] = array(
     '#input' => TRUE,
     '#process' => array('form_process_password_confirm', 'user_form_process_password_confirm'),
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'textarea' element to system_element_info().
+ *
+ * @input_element textarea
+ */
+function system_element_info_textarea() {
   $types['textarea'] = array(
     '#input' => TRUE,
     '#cols' => 60,
@@ -469,12 +700,30 @@ function system_element_info() {
     '#theme' => 'textarea',
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'radios' element to system_element_info().
+ *
+ * @input_element radios
+ */
+function system_element_info_radios() {
   $types['radios'] = array(
     '#input' => TRUE,
     '#process' => array('form_process_radios'),
     '#theme_wrappers' => array('radios'),
     '#pre_render' => array('form_pre_render_conditional_form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'radio' element to system_element_info().
+ *
+ * @input_element radio
+ */
+function system_element_info_radio() {
   $types['radio'] = array(
     '#input' => TRUE,
     '#default_value' => NULL,
@@ -483,12 +732,30 @@ function system_element_info() {
     '#theme_wrappers' => array('form_element'),
     '#title_display' => 'after',
   );
+  return $types;
+}
+
+/**
+ * Returns the 'checkboxes' element to system_element_info().
+ *
+ * @input_element checkboxes
+ */
+function system_element_info_checkboxes() {
   $types['checkboxes'] = array(
     '#input' => TRUE,
     '#process' => array('form_process_checkboxes'),
     '#theme_wrappers' => array('checkboxes'),
     '#pre_render' => array('form_pre_render_conditional_form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'checkbox' element to system_element_info().
+ *
+ * @input_element checkbox
+ */
+function system_element_info_checkbox() {
   $types['checkbox'] = array(
     '#input' => TRUE,
     '#return_value' => 1,
@@ -497,6 +764,15 @@ function system_element_info() {
     '#theme_wrappers' => array('form_element'),
     '#title_display' => 'after',
   );
+  return $types;
+}
+
+/**
+ * Returns the 'select' element to system_element_info().
+ *
+ * @input_element select
+ */
+function system_element_info_select() {
   $types['select'] = array(
     '#input' => TRUE,
     '#multiple' => FALSE,
@@ -504,16 +780,43 @@ function system_element_info() {
     '#theme' => 'select',
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'language_select' element to system_element_info().
+ *
+ * @input_element language_select
+ */
+function system_element_info_language_select() {
   $types['language_select'] = array(
     '#input' => TRUE,
     '#default_value' => LANGUAGE_NOT_SPECIFIED,
   );
+  return $types;
+}
+
+/**
+ * Returns the 'weight' element to system_element_info().
+ *
+ * @input_element weight
+ */
+function system_element_info_weight() {
   $types['weight'] = array(
     '#input' => TRUE,
     '#delta' => 10,
     '#default_value' => 0,
     '#process' => array('form_process_weight', 'ajax_process_form'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'date' element to system_element_info().
+ *
+ * @input_element date
+ */
+function system_element_info_date() {
   $types['date'] = array(
     '#input' => TRUE,
     '#element_validate' => array('date_validate'),
@@ -521,12 +824,30 @@ function system_element_info() {
     '#theme' => 'date',
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'file' element to system_element_info().
+ *
+ * @input_element file
+ */
+function system_element_info_file() {
   $types['file'] = array(
     '#input' => TRUE,
     '#size' => 60,
     '#theme' => 'file',
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'tableselect' element to system_element_info().
+ *
+ * @input_element tableselect
+ */
+function system_element_info_tableselect() {
   $types['tableselect'] = array(
     '#input' => TRUE,
     '#js_select' => TRUE,
@@ -536,28 +857,80 @@ function system_element_info() {
     '#empty' => '',
     '#theme' => 'tableselect',
   );
+  return $types;
+}
 
-  // Form structure.
+/**
+ * Returns the 'item' element to system_element_info().
+ *
+ * @render_element item
+ */
+function system_element_info_item() {
   $types['item'] = array(
     '#markup' => '',
     '#pre_render' => array('drupal_pre_render_markup'),
     '#theme_wrappers' => array('form_element'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'hidden' element to system_element_info().
+ *
+ * @input_element hidden
+ */
+function system_element_info_hidden() {
   $types['hidden'] = array(
     '#input' => TRUE,
     '#process' => array('ajax_process_form'),
     '#theme' => 'hidden',
   );
+  return $types;
+}
+
+/**
+ * Returns the 'value' element to system_element_info().
+ *
+ * @input_element value
+ */
+function system_element_info_value() {
   $types['value'] = array(
     '#input' => TRUE,
   );
+  return $types;
+}
+
+/**
+ * Returns the 'markup' element to system_element_info().
+ *
+ * @render_element markup
+ */
+function system_element_info_markup() {
   $types['markup'] = array(
     '#markup' => '',
     '#pre_render' => array('drupal_pre_render_markup'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'link' element to system_element_info().
+ *
+ * @render_element link
+ */
+function system_element_info_link() {
   $types['link'] = array(
     '#pre_render' => array('drupal_pre_render_link', 'drupal_pre_render_markup'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'fieldset' element to system_element_info().
+ *
+ * @render_element fieldset
+ */
+function system_element_info_fieldset() {
   $types['fieldset'] = array(
     '#collapsible' => FALSE,
     '#collapsed' => FALSE,
@@ -566,27 +939,60 @@ function system_element_info() {
     '#pre_render' => array('form_pre_render_fieldset'),
     '#theme_wrappers' => array('fieldset'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'vertical_tabs' element to system_element_info().
+ *
+ * @render_element vertical_tabs
+ */
+function system_element_info_vertical_tabs() {
   $types['vertical_tabs'] = array(
     '#theme_wrappers' => array('vertical_tabs'),
     '#default_tab' => '',
     '#process' => array('form_process_vertical_tabs'),
   );
+  return $types;
+}
 
+/**
+ * Returns the 'container' element to system_element_info().
+ *
+ * @render_element container
+ */
+function system_element_info_container() {
   $types['container'] = array(
     '#theme_wrappers' => array('container'),
     '#process' => array('form_process_container'),
   );
+  return $types;
+}
+
+/**
+ * Returns the 'actions' element to system_element_info().
+ *
+ * @render_element actions
+ */
+function system_element_info_actions() {
   $types['actions'] = array(
     '#theme_wrappers' => array('container'),
     '#process' => array('form_process_actions', 'form_process_container'),
     '#weight' => 100,
   );
+  return $types;
+}
 
+/**
+ * Returns the 'token' element to system_element_info().
+ *
+ * @input_element token
+ */
+function system_element_info_token() {
   $types['token'] = array(
     '#input' => TRUE,
     '#theme' => 'hidden',
   );
-
   return $types;
 }
 
