diff --git a/cas.install b/cas.install
index eb08961..de12ba1 100644
--- a/cas.install
+++ b/cas.install
@@ -27,6 +27,11 @@ function cas_schema() {
         'unsigned' => TRUE,
         'not null' => TRUE,
       ),
+      'sid' => array(
+        'type' => 'varchar',
+        'length' => 128,
+        'not null' => TRUE,
+      ),
     ),
     'primary key' => array('cas_session_id'),
   );
@@ -381,3 +386,15 @@ function cas_update_7102() {
     db_add_index('cas_user', 'cas_user', array('uid'));
   }
 }
+
+/**
+ * Add session ID to cas login data table.
+ */
+function cas_update_7101() {
+  db_drop_field('cas_login_data', 'sid');
+  db_add_field('cas_login_data', 'sid', array('type' => 'varchar', 'length' => 128, 'not null' => TRUE, 'default' => 0));
+
+  // log everyone out so that things don't get oddly out of sync
+  db_delete('sessions')->execute();
+  db_delete('cas_login_data')->execute();
+}
diff --git a/cas.module b/cas.module
index 0f67f49..3df8bea 100644
--- a/cas.module
+++ b/cas.module
@@ -160,11 +160,6 @@ function cas_login_check($force_authentication = TRUE) {
 
     $cas_first_login = !$account->login;
 
-    // Save single sign out information
-    if (!empty($_SESSION['cas_ticket'])) {
-      _cas_single_sign_out_save_token($account);
-    }
-
     // Populate $edit with some basic properties.
     $edit['cas_user'] = $cas_user;
     $edit['roles'] = $account->roles + cas_roles();
@@ -178,6 +173,11 @@ function cas_login_check($force_authentication = TRUE) {
     $user = user_save($account, $edit);
     user_login_finalize($edit);
 
+    // Save single sign out information
+    if (!empty($_SESSION['cas_ticket'])) {
+      _cas_single_sign_out_save_token();
+    }
+
     drupal_set_message(t(variable_get('cas_login_message', 'Logged in via CAS as %cas_username.'), array('%cas_username' => $user->name)));
     if (!empty($edit['persistent_login'])) {
       drupal_set_message(t('You will remain logged in on this computer even after you close your browser.'));
@@ -1083,17 +1083,17 @@ function _cas_single_sign_out_check() {
         // first lets find out who we want to log off
 
 
-        $record = db_query_range("SELECT cld.uid, u.name FROM {users} u JOIN {cas_login_data} cld ON u.uid = cld.uid WHERE cld.cas_session_id = :ticket", 0, 1, array(':ticket' => $cas_session_index))->fetchObject();
+        $record = db_query_range("SELECT cld.sid, u.name FROM {users} u JOIN {cas_login_data} cld ON u.uid = cld.uid WHERE cld.cas_session_id = :ticket", 0, 1, array(':ticket' => $cas_session_index))->fetchObject();
         if ($record) {
           watchdog('user', 'Session closed for %name by CAS logout request.', array('%name' => $record->name));
           //remove all entry for user id in cas_login_data
           db_delete('cas_login_data')
-            ->condition('uid', $record->uid)
+            ->condition('sid', $record->sid)
             ->execute();
 
           // remove their session
           db_delete('sessions')
-            ->condition('uid', $record->uid)
+            ->condition('sid', $record->sid)
             ->execute();
         }
       }
@@ -1130,7 +1130,8 @@ function cas_is_external_user($account = NULL) {
 }
 
 
-function _cas_single_sign_out_save_token($user) {
+function _cas_single_sign_out_save_token() {
+  global $user;
   // Ok lets save the CAS service ticket to DB so
   // we can handle CAS logoutRequests when they come
   if ($user->uid && $user->uid > 0 && !empty($_SESSION['cas_ticket'])) {
@@ -1138,6 +1139,7 @@ function _cas_single_sign_out_save_token($user) {
       ->fields(array(
         'cas_session_id' => $_SESSION['cas_ticket'],
         'uid' => $user->uid,
+        'sid' => session_id(),
         ))
       ->execute();
     unset($_SESSION['cas_ticket']);
