diff --git a/modules/events.inc b/modules/events.inc
index 0053be1..e185d14 100644
--- a/modules/events.inc
+++ b/modules/events.inc
@@ -65,12 +65,23 @@ function rules_user_view($account, $view_mode) {
 
 function rules_user_presave(&$edit, $account, $category) {
   if ($category == 'account') {
+    // Copy all possible changes to the account object.
+    foreach ($edit as $key => $value) {
+      $account->$key = $value;
+    }
     rules_invoke_event('user_presave', $account);
+    // Copy the changes to the account back to the $edit array so that they are
+    // picked up by user_save().
+    $edit = (array) $account;
   }
 }
 
 function rules_user_insert(&$edit, $account, $category) {
   if ($category == 'account') {
+    // Make sure the account is not marked as new any more, such that any
+    // sub-sequent saves triggered by rules are updating the account.
+    $account->is_new = FALSE;
+    $edit['is_new'] = FALSE;
     rules_invoke_event('user_insert', $account);
   }
 }
