Index: role_delegation.module
--- role_delegation.module	2010-01-12 12:37:27.000000000 -0800
+++ role_delegation.module	2010-12-02 12:27:24.131370358 -0800
@@ -196,13 +196,22 @@ function role_delegation_user($op, &$edi
         '#type' => 'value',
         '#value' => $rids_preserve,
       );
-      $form['roles_assign'] = array(
+      $roles_assign = array(
         '#type' => 'checkboxes',
         '#title' => t('Roles'),
         '#description' => t('The user receives the combined permissions of the %roles role(s), and all roles selected here. ', array('%roles' => implode(', ', $roles_preserve))),
         '#options' => $roles_options,
         '#default_value' => $rids_default,
+        '#weight' => 10,
       );
+      if ($op == 'register') {
+        // Since the user module does array_merge() instead of array_merge_recursive() (see bug http://drupal.org/node/227690),
+        // we must move this under 'account' later at role_delegation_form_user_register_alter()
+        $form['roles_assign'] = $roles_assign;
+      }
+      else {
+        $form['account']['roles_assign'] = $roles_assign;
+      }
       return $form;
     }
   }
@@ -212,6 +221,18 @@ function role_delegation_user($op, &$edi
 }
 
 /**
+ * Implementation of hook_form_FORM-ID_alter().
+ */
+function role_delegation_form_user_register_alter(&$form, $form_state) {
+  // Move our field where it belongs
+  if (isset($form['roles_assign'])) {
+    $form['account']['roles_assign'] = $form['roles_assign'];
+    unset($form['roles_assign']);
+    $form['account']['notify']['#weight'] = 11;
+  }
+}
+
+/**
  * Implementation of hook_user_operations().
  */
 function role_delegation_user_operations($form_state = array()) {
