=== modified file 'includes/form.inc'
--- includes/form.inc	2009-01-12 06:23:57 +0000
+++ includes/form.inc	2009-01-12 19:30:51 +0000
@@ -903,6 +903,13 @@ function form_builder($form_id, $form, &
       $form[$key]['#array_parents'] = $array_parents;
     }
 
+    if (!empty($complete_form['#inheritance_callbacks']))
+      foreach ($complete_form['#inheritance_callbacks'] as $callback) {
+        $function = $complete_form['#inheritance_callbacks'];
+        $function($form, $key);
+      }
+    }
+
     // Assign a decimal placeholder weight to preserve original array order.
     if (!isset($form[$key]['#weight'])) {
       $form[$key]['#weight'] = $count/1000;

=== modified file 'modules/system/system.module'
--- modules/system/system.module	2009-01-11 21:19:16 +0000
+++ modules/system/system.module	2009-01-12 19:30:32 +0000
@@ -1284,22 +1284,10 @@ function system_initialize_theme_blocks(
   }
 }
 
-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]);
-    }
+functon _system_settings_set_defaults($form, $key) {
+  if (array_key_exists('#default_value', $form[$key])) {
+    $form[$key]['#default_value'] = variable_get($key, $form[$key]['#default_value']);
   }
-  
-  return $form;
 }
 
 /**
@@ -1316,10 +1304,8 @@ function system_settings_form($form, $au
   $form['buttons']['submit'] = array('#type' => 'submit', '#value' => t('Save configuration') );
   $form['buttons']['reset'] = array('#type' => 'submit', '#value' => t('Reset to defaults') );
 
-  if ($automatic_defaults) {
-    $form = _system_settings_form_automatic_defaults($form);
-  }
-  
+  $form['#inheritance_callbacks'] = array('_system_settings_set_defaults');
+
   if (!empty($_POST) && form_get_errors()) {
     drupal_set_message(t('The settings have not been saved because of the errors.'), 'error');
   }

