=== modified file 'includes/form.inc'
--- includes/form.inc	2010-06-16 05:06:15 +0000
+++ includes/form.inc	2010-06-18 19:09:42 +0000
@@ -1443,6 +1443,12 @@ function form_builder($form_id, $element
     $array_parents[] = $key;
     $element[$key]['#array_parents'] = $array_parents;
 
+    if (!empty($form_state['complete form']['#child_callback'])) {
+      foreach ($form_state['complete form']['#child_callback'] as $callback) {
+        $callback($element, $key);
+      }
+    }
+
     // Assign a decimal placeholder weight to preserve original array order.
     if (!isset($element[$key]['#weight'])) {
       $element[$key]['#weight'] = $count/1000;

=== modified file 'modules/simpletest/tests/system_test.module'
--- modules/simpletest/tests/system_test.module	2010-05-26 07:31:46 +0000
+++ modules/simpletest/tests/system_test.module	2010-06-18 18:24:32 +0000
@@ -305,3 +305,31 @@ function _system_test_second_shutdown_fu
   print t('Second shutdown function, arg1 : @arg1, arg2: @arg2', array('@arg1' => $arg1, '@arg2' => $arg2));
 }
 
+
+function system_test_system_settings_form($form, $form_state, $automatic = TRUE) {
+  $form['system_settings_form_test'] = array(
+    '#type' => 'checkbox',
+    '#default_value' => FALSE,
+  );
+
+  $form['system_settings_form_test_2'] = array(
+    '#type' => 'checkbox',
+    '#default_value' => FALSE,
+  );
+
+  $form['system_settings_form_test_3'] = array(
+    '#type' => 'checkbox',
+    '#default_value' => TRUE,
+  );
+
+  $form['has_children']['system_settings_form_test_4'] = array(
+    '#type' => 'checkbox',
+    '#default_value' => FALSE,
+  );
+
+  $form['has_children']['system_settings_form_test_5'] = array(
+    '#type' => 'checkbox',
+    '#default_value' => TRUE,
+  );
+  return system_settings_form($form, $automatic);
+}

=== modified file 'modules/system/system.module'
--- modules/system/system.module	2010-06-17 13:16:57 +0000
+++ modules/system/system.module	2010-06-18 19:10:19 +0000
@@ -2562,22 +2562,13 @@ function system_default_region($theme) {
   return isset($regions[0]) ? $regions[0] : '';
 }
 
-function _system_settings_form_automatic_defaults($form) {
-  // Get an array of all non-property keys
-  $keys = element_children($form);
-
-  foreach ($keys as $key) {
-    // If the property (key) '#default_value' exists, replace it.
-    if (array_key_exists('#default_value', $form[$key])) {
-      $form[$key]['#default_value'] = variable_get($key, $form[$key]['#default_value']);
-    }
-    else {
-      // Recurse through child elements
-      $form[$key] = _system_settings_form_automatic_defaults($form[$key]);
-    }
+/**
+ * Loads defaults for system_settings_form().
+ */
+function _system_settings_set_defaults(&$element, $child_key) {
+  if (array_key_exists('#default_value', $element[$child_key])) {
+    $element[$key]['#default_value'] = variable_get($child_key, $element[$child_key]['#default_value']);
   }
-
-  return $form;
 }
 
 /**
@@ -2600,7 +2591,7 @@ function system_settings_form($form, $au
   $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
 
   if ($automatic_defaults) {
-    $form = _system_settings_form_automatic_defaults($form);
+    $form['#child_callback'][] = '_system_settings_set_defaults';
   }
 
   if (!empty($_POST) && form_get_errors()) {

=== modified file 'modules/system/system.test'
--- modules/system/system.test	2010-06-13 18:27:39 +0000
+++ modules/system/system.test	2010-06-18 18:31:47 +0000
@@ -1233,64 +1233,29 @@ class SystemSettingsForm extends DrupalW
    * Implement setUp().
    */
   function setUp() {
-    parent::setUp();
+    parent::setUp('system_test');
 
     variable_set('system_settings_form_test', TRUE);
     variable_set('system_settings_form_test_4', TRUE);
   }
 
   /**
-   * Reset page title.
-   */
-  function tearDown() {
-    variable_del('system_settings_form_test');
-    variable_del('system_settings_form_test_4');
-
-    parent::tearDown();
-  }
-
-  /**
    * Tests the handling of automatic defaults in systems_settings_form().
    */
   function testAutomaticDefaults() {
-    $form['system_settings_form_test'] = array(
-      '#type' => 'checkbox',
-      '#default_value' => FALSE,
-    );
-
-    $form['system_settings_form_test_2'] = array(
-      '#type' => 'checkbox',
-      '#default_value' => FALSE,
-    );
-
-    $form['system_settings_form_test_3'] = array(
-      '#type' => 'checkbox',
-      '#default_value' => TRUE,
-    );
-
-    $form['has_children']['system_settings_form_test_4'] = array(
-      '#type' => 'checkbox',
-      '#default_value' => FALSE,
-    );
-
-    $form['has_children']['system_settings_form_test_5'] = array(
-      '#type' => 'checkbox',
-      '#default_value' => TRUE,
-    );
-
-    $automatic = system_settings_form($form, FALSE);
-    $this->assertFalse($automatic['system_settings_form_test']['#default_value']);
-    $this->assertFalse($automatic['system_settings_form_test_2']['#default_value']);
-    $this->assertTrue($automatic['system_settings_form_test_3']['#default_value']);
-    $this->assertFalse($automatic['has_children']['system_settings_form_test_4']['#default_value']);
-    $this->assertTrue($automatic['has_children']['system_settings_form_test_5']['#default_value']);
-
-    $no_automatic = system_settings_form($form);
-    $this->assertTrue($no_automatic['system_settings_form_test']['#default_value']);
-    $this->assertFalse($no_automatic['system_settings_form_test_2']['#default_value']);
-    $this->assertTrue($no_automatic['system_settings_form_test_3']['#default_value']);
-    $this->assertTrue($no_automatic['has_children']['system_settings_form_test_4']['#default_value']);
-    $this->assertTrue($no_automatic['has_children']['system_settings_form_test_5']['#default_value']);
+    $automatic = drupal_get_form('system_test_system_settings_form');
+    $this->assertIdentical(TRUE, $automatic['system_settings_form_test']['#default_value']);
+    $this->assertIdentical(FALSE, $automatic['system_settings_form_test_2']['#default_value']);
+    $this->assertIdentical(TRUE, $automatic['system_settings_form_test_3']['#default_value']);
+    $this->assertIdentical(TRUE, $automatic['has_children']['system_settings_form_test_4']['#default_value']);
+    $this->assertIdentical(TRUE, $automatic['has_children']['system_settings_form_test_5']['#default_value']);
+
+    $no_automatic = drupal_get_form('system_test_system_settings_form', FALSE);
+    $this->assertIdentical(FALSE, $no_automatic['system_settings_form_test']['#default_value']);
+    $this->assertIdentical(FALSE, $no_automatic['system_settings_form_test_2']['#default_value']);
+    $this->assertIdentical(TRUE, $no_automatic['system_settings_form_test_3']['#default_value']);
+    $this->assertIdentical(FALSE, $no_automatic['has_children']['system_settings_form_test_4']['#default_value']);
+    $this->assertIdentical(TRUE, $no_automatic['has_children']['system_settings_form_test_5']['#default_value']);
   }
 }
 

