diff --git a/session_limit.module b/session_limit.module
index e304087..c02b777 100644
--- a/session_limit.module
+++ b/session_limit.module
@@ -332,19 +332,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_result(db_query("SELECT COUNT(sid) FROM {sessions} WHERE uid = %d", $user->uid));
-    $max_sessions = $count - session_limit_user_max_sessions($user);
-    $result = db_query_range("SELECT sid FROM {sessions} WHERE uid = %d ORDER BY timestamp", $user->uid, 0, $max_sessions);
-
-    while ($sids = db_fetch_object($result)) {
-      session_limit_invoke_session_limit($sids->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();
 
@@ -457,6 +445,8 @@ function session_limit_user_max_sessions_byrole($account) {
  * Implementation of hook_trigger_name().
  */
 function session_limit_session_limit($sid, $op) {
+  global $user;
+
   $aids = _trigger_get_hook_aids('session_limit', $op);
   $context = array(
     'hook' => 'session_limit',
@@ -468,8 +458,25 @@ 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_result(db_query("SELECT COUNT(sid) FROM {sessions} WHERE uid = %d", $user->uid));
+        $max_sessions = $count - session_limit_user_max_sessions($user);
+        $result = db_query_range("SELECT sid FROM {sessions} WHERE uid = %d ORDER BY timestamp", $user->uid, 0, $max_sessions);
+
+        while ($sids = db_fetch_object($result)) {
+          session_limit_invoke_session_limit($sids->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':
