=== modified file 'modules/system/system.module'
--- modules/system/system.module	2008-12-17 00:00:03 +0000
+++ modules/system/system.module	2008-12-18 16:36:56 +0000
@@ -1293,6 +1293,24 @@
   }
 }
 
+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]);
+    }
+  }
+  
+  return $form;
+}
+
 /**
  * Add default buttons to a form and set its prefix.
  *
@@ -1303,10 +1321,14 @@
  * @return
  *   The form structure.
  */
-function system_settings_form($form) {
+function system_settings_form($form, $automatic_defaults = FALSE) {
   $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);
+  }
+  
   if (!empty($_POST) && form_get_errors()) {
     drupal_set_message(t('The settings have not been saved because of the errors.'), 'error');
   }

=== modified file 'modules/system/system.test'
--- modules/system/system.test	2008-12-17 00:00:03 +0000
+++ modules/system/system.test	2008-12-18 16:40:08 +0000
@@ -683,3 +683,83 @@
 
 }
 
+class SystemSettingsForm extends DrupalWebTestCase {
+  /**
+   * Implementation of getInfo().
+   */
+  function getInfo() {
+    return array(
+      'name' => t('System setting forms'),
+      'description' => t('Tests correctness of system_settings_form() processing.'),
+      'group' => t('System')
+    );
+  }
+
+  /**
+   * Implementation of setUp().
+   */
+  function setUp() {
+    parent::setUp();
+
+    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 = array();
+    
+    $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, TRUE);
+    
+    $this->assertTrue($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->assertTrue($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->assertFalse($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->assertFalse($no_automatic['has_children']['system_settings_form_test_4']['#default_value']);
+    $this->assertTrue($no_automatic['has_children']['system_settings_form_test_5']['#default_value']);
+  }
+}

