diff --git a/session_limit.module b/session_limit.module
index 79b5dc6..abb15dd 100644
--- a/session_limit.module
+++ b/session_limit.module
@@ -310,24 +310,7 @@ function session_limit_user_settings_submit($form, &$form_state) {
 function session_limit_page() {
   global $user;
 
-  if (variable_get('session_limit_behaviour', SESSION_LIMIT_DO_NOTHING) == SESSION_LIMIT_DROP) {
-    // Get the oldest sessions.
-    $count = db_query("SELECT COUNT(sid) FROM {sessions} WHERE uid = :uid", array(':uid' => $user->uid))->fetchField();
-    $max_sessions = $count - session_limit_user_max_sessions($user);
-
-    $result = db_select('sessions', 's')
-      ->condition('s.uid', $user->uid)
-      ->fields('s', array('sid'))
-      ->orderBy('timestamp', 'ASC')
-      ->range(0, $max_sessions)
-      ->execute();
-
-    foreach ($result as $session) {
-      session_limit_invoke_session_limit($session->sid, 'disconnect');
-    }
-    drupal_goto();
-  }
-  else if (variable_get('session_limit_behaviour', SESSION_LIMIT_DO_NOTHING) == SESSION_LIMIT_DISALLOW_NEW) {
+  if (variable_get('session_limit_behaviour', SESSION_LIMIT_DO_NOTHING) == SESSION_LIMIT_DISALLOW_NEW) {
     session_destroy();
     $user = drupal_anonymous_user();
 
@@ -435,6 +418,8 @@ function session_limit_trigger_info() {
  * Implements hook_session_limit().
  */
 function session_limit_session_limit($sid, $op) {
+  global $user;
+
   // Find all the actions against this $op.
   // Note: this notation requires the $op to match the bit in the trigger info keys after session_limit!
   $aids = trigger_get_assigned_actions('session_limit_' . $op);
@@ -448,8 +433,31 @@ function session_limit_session_limit($sid, $op) {
   switch ($op) {
     case 'collision':
       watchdog('session_limit', 'Exceeded maximum allowed active sessions.', array(), WATCHDOG_INFO);
-      // redirect to session handler.
-      drupal_goto('session/limit');
+
+      // If set to auto drop sessions do that here and avoid the extra redirect.
+      // This also allows other modules to set a ?destination paramater on the
+      // login form and have it still be respected.
+      if (variable_get('session_limit_behaviour', SESSION_LIMIT_DO_NOTHING) == SESSION_LIMIT_DROP) {
+        // Get the oldest sessions.
+        $count = db_query("SELECT COUNT(sid) FROM {sessions} WHERE uid = :uid", array(':uid' => $user->uid))->fetchField();
+        $max_sessions = $count - session_limit_user_max_sessions($user);
+
+        $result = db_select('sessions', 's')
+          ->condition('s.uid', $user->uid)
+          ->fields('s', array('sid'))
+          ->orderBy('timestamp', 'ASC')
+          ->range(0, $max_sessions)
+          ->execute();
+
+        foreach ($result as $session) {
+          session_limit_invoke_session_limit($session->sid, 'disconnect');
+        }
+      }
+      else {
+        // Otherwise re-direct to the session handler page so the user can
+        // choose which action they would like to take.
+        drupal_goto('session/limit');
+      }
       break;
 
     case 'disconnect':
