diff --git a/modules/user/user.module b/modules/user/user.module
index 47ac642..608c44e 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -584,11 +584,6 @@ function user_save($account, $edit = array(), $category = 'account') {
       // Make sure $account is properly initialized.
       $account->roles[DRUPAL_AUTHENTICATED_RID] = 'authenticated user';
 
-      field_attach_insert('user', $account);
-      $edit = (array) $account;
-      user_module_invoke('insert', $edit, $account, $category);
-      module_invoke_all('entity_insert', $account, 'user');
-
       // Save user roles.
       if (count($account->roles) > 1) {
         $query = db_insert('users_roles')->fields(array('uid', 'rid'));
@@ -603,6 +598,12 @@ function user_save($account, $edit = array(), $category = 'account') {
         $query->execute();
       }
     }
+
+    field_attach_insert('user', $account);
+    $edit = (array) $account;
+    user_module_invoke('insert', $edit, $account, $category);
+    module_invoke_all('entity_insert', $account, 'user');
+
     // Clear internal properties.
     unset($account->is_new);
     unset($account->original);
