diff --git a/mongodb_session/mongodb_session.module b/mongodb_session/mongodb_session.module
index aaaee70..66d1a52 100644
--- a/mongodb_session/mongodb_session.module
+++ b/mongodb_session/mongodb_session.module
@@ -15,6 +15,41 @@ function mongodb_session_simpletest_alter(&$groups) {
 }
 
 /**
+ * Implements hook_user_update().
+ */
+function mongodb_session_user_update(&$edit, $account, $category) {
+  // Update field values for changed values of the user.
+  $roles = _mongodb_session_get_roles($account);
+  // If mongodb_field_storage is enabled it will take care of creating
+  // initial user entry just add roles to it.
+  if (module_exists('mongodb_field_storage')) {
+    $save = array(
+      '$set' => array('roles' => $roles)
+    );
+  }
+  else {
+    $save = array(
+      '$set' => (array) $account + array(
+        '_bundle' => 'user',
+        'roles' => $roles,
+      ),
+    );
+    foreach (array('uid', 'created', 'access', 'login', 'status', 'picture') as $key) {
+      $save['$set'][$key] = (int) $save['$set'][$key];
+    }
+  }
+  mongodb_collection('fields_current', 'user')->update(array('_id' => (int) $account->uid), $save, array('upsert' => TRUE));
+  return $roles;
+}
+
+/**
+ * Implements hook_user_insert().
+ */
+function mongodb_session_user_insert(&$edit, $account, $category) {
+  return mongodb_session_user_update(&$edit, $account, $category);
+}
+
+/**
  * Implements hook_user_login().
  */
 function mongodb_session_user_login($edit, $account) {
@@ -23,7 +58,7 @@ function mongodb_session_user_login($edit, $account) {
       'login' => (int) $account->login,
     ),
   );
-  mongodb_collection('fields_current', 'user')->update(array('_id' => (int) $account->uid), $save, array('w' => 0);
+  mongodb_collection('fields_current', 'user')->update(array('_id' => (int) $account->uid), $save, array('w' => 0));
 }
 
 function _mongodb_session_get_roles($account) {
