diff --git a/core/includes/form.inc b/core/includes/form.inc
index 42206a4..e03b113 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -1153,33 +1153,6 @@ function form_pre_render_radio($element) {
 }
 
 /**
- * Prepares variables for radios templates.
- *
- * Default template: radios.html.twig.
- *
- * @param array $variables
- *   An associative array containing:
- *   - element: An associative array containing the properties of the element.
- *     Properties used: #title, #value, #options, #description, #required,
- *     #attributes, #children.
- */
-function template_preprocess_radios(&$variables) {
-  $element = $variables['element'];
-  $variables['attributes'] = array();
-  if (isset($element['#id'])) {
-    $variables['attributes']['id'] = $element['#id'];
-  }
-  $variables['attributes']['class'][] = 'form-radios';
-  if (!empty($element['#attributes']['class'])) {
-    $variables['attributes']['class'] = array_merge($variables['attributes']['class'], $element['#attributes']['class']);
-  }
-  if (isset($element['#attributes']['title'])) {
-    $variables['attributes']['title'] = $element['#attributes']['title'];
-  }
-  $variables['children'] = $element['#children'];
-}
-
-/**
  * Expand a password_confirm field into two text boxes.
  */
 function form_process_password_confirm($element) {
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 2b06429..044b555 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -1828,6 +1828,9 @@ function template_preprocess_container(&$variables) {
   // Ensure #attributes is set.
   $element += array('#attributes' => array());
 
+  // Disabled attribute is handled on children
+  unset($element['#attributes']['disabled']);
+
   // Special handling for form elements.
   if (isset($element['#array_parents'])) {
     // Assign an html ID.
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 377c30e..6092c7e 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -476,7 +476,7 @@ function system_element_info() {
   $types['radios'] = array(
     '#input' => TRUE,
     '#process' => array('form_process_radios'),
-    '#theme_wrappers' => array('radios'),
+    '#theme_wrappers' => array('container'),
     '#pre_render' => array('form_pre_render_conditional_form_element'),
   );
   $types['radio'] = array(
diff --git a/core/modules/system/templates/radios.html.twig b/core/modules/system/templates/radios.html.twig
deleted file mode 100644
index e397644..0000000
--- a/core/modules/system/templates/radios.html.twig
+++ /dev/null
@@ -1,15 +0,0 @@
-{#
-/**
- * @file
- * Default theme implementation for a 'radios' #type form element.
- *
- * Available variables
- * - attributes: A list of HTML attributes for the wrapper element.
- * - children: The rendered radios.
- *
- * @see template_preprocess_radios()
- *
- * @ingroup themeable
- */
-#}
-<div{{ attributes }}>{{ children }}</div>
diff --git a/modules/john/john.routing.yml b/modules/john/john.routing.yml
new file mode 100644
index 0000000..829e46f
--- /dev/null
+++ b/modules/john/john.routing.yml
@@ -0,0 +1,7 @@
+john_form:
+  path: '/john'
+  defaults:
+    _form: '\Drupal\john\Form\JohnForm'
+    _title: 'John form'
+  requirements:
+    _access: 'TRUE'
diff --git a/modules/john/lib/Drupal/john/Form/JohnForm.php b/modules/john/lib/Drupal/john/Form/JohnForm.php
new file mode 100644
index 0000000..7e13938
--- /dev/null
+++ b/modules/john/lib/Drupal/john/Form/JohnForm.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace Drupal\john\Form;
+
+use Drupal\Core\Form\FormBase;
+
+/**
+ * Class JohnForm
+ *
+ * @package Drupal\john\Form
+ */
+class JohnForm extends FormBase {
+  public function getFormId() {
+    // Unique ID of the form.
+    return 'john_form';
+  }
+
+  public function buildForm(array $form, array &$form_state) {
+    // Create a $form API array.
+    $type = 'radios';
+    $form[$type . '_single'] = array(
+      '#type'              => $type,
+      '#title'             => $type . ' (single)',
+      '#options'           => array(
+        'test_1' => 'Test 1',
+        'test_2' => 'Test 2',
+      ),
+      '#multiple'          => FALSE,
+      '#default_value'     => 'test_2',
+      '#test_hijack_value' => 'test_1',
+      '#disabled'          => TRUE,
+    );
+    return $form;
+  }
+
+  public function validateForm(array &$form, array &$form_state) {
+    // Validate submitted form data.
+  }
+
+  public function submitForm(array &$form, array &$form_state) {
+    // Handle submitted form data.
+  }
+}
