Index: me.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/me/me.module,v
retrieving revision 1.5.2.7
diff -u -r1.5.2.7 me.module
--- me.module	25 Feb 2009 01:49:28 -0000	1.5.2.7
+++ me.module	28 Feb 2009 08:25:06 -0000
@@ -400,8 +400,18 @@
   $return = _me_is_alias($arg) ? $GLOBALS['user']->uid : $arg;
 
   $redirect_path = me_variable_get('me_redirect_anonymous');
+
   if ($redirect && $return == 0 &&  !empty($redirect_path)) {
-    drupal_goto($redirect_path);
+    // Copied from menu_get_item(). We can't call that here as it might cause a recursion loop.
+    $original_map = arg(NULL, $_GET['q']);
+    $parts = array_slice($original_map, 0, MENU_MAX_PARTS);
+    list($ancestors, $placeholders) = menu_get_ancestors($parts);
+
+    if (($router_item = db_fetch_array(db_query_range('SELECT * FROM {menu_router} WHERE path IN ('. implode (',', $placeholders) .') ORDER BY fit DESC', $ancestors, 0, 1))) && $router_item['page_callback'] == 'me_handler') {
+      // Not unsetting the destination can cause evil redirect loops.
+      unset($_REQUEST['destination'], $_REQUEST['edit']['destination']);
+      drupal_goto($redirect_path);
+    }
   }
 
   return $return;
