diff --git cas_server.install cas_server.install
index 4e882a3..1e10b84 100644
--- cas_server.install
+++ cas_server.install
@@ -35,6 +35,11 @@
         'type' => 'int',
         'not null' => TRUE,
       ),
+      'valid' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 1,
+      ),
     ),
     'primary key' => array('ticket'),
   );
@@ -46,7 +51,7 @@
 /**
  * Creates CAS server tickets table.
  */
-function cas_server_update_1() {
+function cas_server_update_7000() {
   $schema = array();
 
   $schema['cas_server_tickets'] = array(
@@ -78,6 +83,13 @@
   );
 
   $ret = array();
-  db_create_table($ret, 'cas_server_tickets', $schema['cas_server_tickets']);
+  db_create_table('cas_server_tickets', $schema['cas_server_tickets']);
   return $ret;
 }
+
+/**
+ * Adds valid field to indicate when ticket is valid for reuse.
+ */
+function cas_server_update_7101() {
+  db_add_field('cas_server_tickets', 'valid', array('type' => 'int', 'not null' => TRUE, 'default' => 1, ));
+}
diff --git cas_server.module cas_server.module
index e20a027..b028e27 100644
--- cas_server.module
+++ cas_server.module
@@ -64,6 +64,10 @@
       'variables' => array('ticket' => NULL, 'error_code' => NULL),
       'file' => 'cas_server.response.inc',
     ),
+    'cas_service_logout_request' => array(
+      'variables' => array('ticket' => NULL, 'date' => NULL, 'id' => NULL),
+      'file' => 'cas_server.response.inc',
+    ),
   );
 }
 
@@ -195,7 +199,8 @@
       $user_name = $ticket_data->name;
     }
   }
-  db_delete('cas_server_tickets')
+  db_update('cas_server_tickets')
+    ->fields(array('valid' => 0))
     ->condition('ticket', $ticket)
     ->execute();
 
@@ -211,7 +216,7 @@
   // Generate the ticket
   $time = REQUEST_TIME;
   $ticket = 'ST-' . user_password();
-  $ticket_data = array('uid' => $uid, 'service' => $service, 'ticket' => $ticket, 'timestamp' => $time);
+  $ticket_data = array('uid' => $uid, 'service' => $service, 'ticket' => $ticket, 'timestamp' => $time, 'valid' => 1);
   // Save the ticket to the db
   if ($uid && $service) {
     db_insert('cas_server_tickets')->fields($ticket_data)->execute();
@@ -221,8 +226,6 @@
 
 /**
  * Menu callback; triggers a CAS logout.
- *
- * @TODO: Implement single sign out support
  */
 function cas_server_logout() {
   global $user;
@@ -240,3 +243,49 @@
   }
   return $output;
 }
+
+/**
+ * Send CAS a logout requests for each of the user's CAS tickets.
+ *
+ * @param $account
+ *   The user for whom to send CAS logout requests.
+ */
+function cas_server_logout_clients($account) {
+   $result = db_query("SELECT service, ticket, valid FROM {cas_server_tickets} WHERE uid= :uid", array(':uid' => $account->uid));
+    if ($result !== FALSE) {
+      $expired_tickets = array();
+      foreach ($result as $client) {
+        $expired_tickets[] = $client->ticket;
+        if (!$client->valid)  {
+          $id = 'LR-' . user_password();
+          $date = date('c');
+          $logout_request = theme('cas_service_logout_request', array('id' => $id, 'date' => $date, 'ticket' => $client->ticket));
+          // Send POST request
+          $reponse = drupal_http_request(
+            $client->service,
+            array(
+              'headers' => array('Content-Type' => 'application/x-www-form-urlencoded'),
+              'method' =>  'POST',
+              'data' => 'logoutRequest=' . urlencode($logout_request),
+            )
+          );
+          if (@$reponse->error) {
+            watchdog('error', 'Error in CAS logout Request - %code : %message', array('%code' => $reponse->code, '%error' => $response->error));
+          }
+        }
+        // Remove ticket
+      }
+      if ($expired_tickets) {
+        db_delete('cas_server_tickets')
+          ->condition('ticket', $expired_tickets, 'IN')
+          ->execute();
+      }
+    }
+}
+
+/**
+ * Implements hook_user_logout().
+ */
+function cas_server_user_logout($account) {
+  cas_server_logout_clients($account);
+}
diff --git cas_server.response.inc cas_server.response.inc
index 11ae532..bc984fa 100644
--- cas_server.response.inc
+++ cas_server.response.inc
@@ -91,3 +91,21 @@
 
   return $output;
 }
+
+
+/**
+ * Generate the Single Sign Out request.
+ *
+ * @param unknown_type $variables
+ *   An associative array containing the key, date and logout id request
+ */
+function theme_cas_service_logout_request($variables) {
+  $id = $variables['id'];
+  $date = $variables['date'];
+  $ticket = $variables['ticket'];
+  $output = "<samlp:LogoutRequest xmlns:samlp='urn:oasis:names:tc:SAML:2.0:protocol' ID='$id' Version='2.0' IssueInstant='$date'>\n";
+  $output .= "<saml:NameID xmlns:saml='urn:oasis:names:tc:SAML:2.0:assertion'>@NOT_USED@</saml:NameID>\n";
+  $output .= "<samlp:SessionIndex>$ticket</samlp:SessionIndex>\n";
+  $output .= "</samlp:LogoutRequest>\n";
+  return $output;
+}
