--- globalredirect.module	2007-12-29 17:33:42.000000000 +0100
+++ globalredirect.new.module	2008-04-02 01:54:59.000000000 +0200
@@ -24,13 +24,30 @@
       $query_string = NULL;
     }
 
+    global $language;
+    $request_untrimmed = $_REQUEST['q'];
+    
+    if($language->prefix == substr($request_untrimmed, 0, strlen($language->prefix))) {
+      $request_untrimmed =  substr_replace($request_untrimmed, '', 0, strlen($language->prefix));
+    }
+
     // If current path is also the frontpage, redirect to http://www.example.com
-    if (!empty($_REQUEST['q']) && drupal_is_front_page()) {
-      drupal_goto('', $query_string, NULL, 301);
+    if (!empty($request_untrimmed) && drupal_is_front_page()) {
+        drupal_goto('', $query_string, NULL, 301);
+    }
+
+    // Prevents endless loops
+    if('/' == substr($request_untrimmed, 0, 1)) {
+      $request_untrimmed = substr_replace($request_untrimmed, '', 0, 1);
     }
 
     // Trim any trailing slash off the end (eg, 'node/1/' to 'node/1')
-    $request = trim($_REQUEST['q'], '/');
+    $request = trim($request_untrimmed, '/');
+
+    // Eliminate series of slashes
+    while (strpos($request, '//') !== false) {
+      $request = str_replace('//', '/', $request);
+    }
     
     // Check the path (eg, node/123) for a request
     $alias = drupal_get_path_alias($request);
@@ -41,7 +58,7 @@
     }
 
     // If the trimmed request differs to the request then redirect (basically, de-slash the source path)
-    if ($request != $_REQUEST['q']) {
+    if ($request != $request_untrimmed) {
       drupal_goto($request, $query_string, NULL, 301);
     }
 
