diff --git a/includes/common.inc b/includes/common.inc
index 3f20e3f15e8853697e71371afa17acf965de177b..82c665179cc037cb72e9b57a32ab38a564091be0 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -209,15 +209,17 @@ function drupal_get_headers() {
  *
  * @note This function ends the request.
  *
- * @param $url A string containing a fully qualified URI.
+ * @param $url A Drupal URL
+ * @param $query Query string component
+ * @param $fragment Fragment identifier
  */
-function drupal_goto($url) {
+function drupal_goto($url = NULL, $query = NULL, $fragment = NULL) {
 
   /*
-  ** Translate & to simply &
+  ** Translate & to simply & in the absolute URL
   */
 
-  $url = str_replace("&", "&", $url);
+  $url = str_replace("&", "&", url($url, $query, $fragment, TRUE));
 
   /*
   ** It is advised to use "drupal_goto()" instead of PHP's "header()" as
@@ -1028,7 +1030,7 @@ function form_weight($title = NULL, $name = "weight", $value = 0, $delta = 10, $
 }
 /* @} */
 
-function url($url = NULL, $query = NULL, $fragment = NULL) {
+function url($url = NULL, $query = NULL, $fragment = NULL, $absolute = NULL) {
   global $base_url;
 
   static $script;
@@ -1050,39 +1052,41 @@ function url($url = NULL, $query = NULL, $fragment = NULL) {
     $fragment = "#$fragment";
   }
 
+  $base = ($absolute ? $base_url . '/' : '');
+
   if (variable_get("clean_url", "0") == "0") {
     if (isset($url)) {
       if (isset($query)) {
-        return "$base_url/$script?q=$url&$query$fragment";
+        return "$base$script?q=$url&$query$fragment";
       }
       else {
-        return "$base_url/$script?q=$url$fragment";
+        return "$base$script?q=$url$fragment";
       }
     }
     else {
       if (isset($query)) {
-        return "$base_url/$script?$query$fragment";
+        return "$base$script?$query$fragment";
       }
       else {
-        return "$base_url/$fragment";
+        return "$base$fragment";
       }
     }
   }
   else {
     if (isset($url)) {
       if (isset($query)) {
-        return "$base_url/$url?$query$fragment";
+        return "$base$url?$query$fragment";
       }
       else {
-        return "$base_url/$url$fragment";
+        return "$base$url$fragment";
       }
     }
     else {
       if (isset($query)) {
-        return "$base_url/$script?$query$fragment";
+        return "$base$script?$query$fragment";
       }
       else {
-        return "$base_url/$fragment";
+        return "$base$fragment";
       }
     }
   }
@@ -1098,7 +1102,7 @@ function drupal_attributes($attributes = NULL) {
   }
 }
 
-function l($text, $url, $attributes = array(), $query = NULL, $fragment = NULL) {
+function l($text, $url, $attributes = array(), $query = NULL, $fragment = NULL, $absolute = NULL) {
   if ($url == $_GET['q']) {
     if (isset($attributes['class'])) {
       $attributes['class'] .= ' active';
@@ -1107,7 +1111,7 @@ function l($text, $url, $attributes = array(), $query = NULL, $fragment = NULL)
       $attributes['class'] = 'active';
     }
   }
-  return "<a href=\"". url($url, $query, $fragment) ."\"". drupal_attributes($attributes) .">$text</a>";
+  return "<a href=\"". url($url, $query, $fragment, $absolute) ."\"". drupal_attributes($attributes) .">$text</a>";
 }
 
 function field_get($string, $name) {
diff --git a/modules/comment.module b/modules/comment.module
index 702c6c3683fcc1fe08f2cf9d41ae992523a65c1c..ae6e0a1e3078cf3adab4190cb3f7015379abed7c 100644
--- a/modules/comment.module
+++ b/modules/comment.module
@@ -837,7 +837,7 @@ function comment_page() {
     case t("Moderate comments"):
     case t("Moderate comment"):
       comment_moderate($edit);
-      drupal_goto(url(comment_referer_load()));
+      drupal_goto(comment_referer_load());
       break;
     case "reply":
       print theme("page", comment_reply(check_query(arg(3)), check_query(arg(2))), t("Add new comment"));
@@ -851,7 +851,7 @@ function comment_page() {
         print theme("page", $error_body, $error_title);
       }
       else {
-        drupal_goto(url(comment_referer_load()));
+        drupal_goto(comment_referer_load());
       }
       break;
     case t("Save settings"):
@@ -861,7 +861,7 @@ function comment_page() {
       $comments_per_page = $_POST["comments_per_page"];
 
       comment_save_settings(check_query($mode), check_query($order), check_query($threshold), check_query($comments_per_page));
-      drupal_goto(url(comment_referer_load()));
+      drupal_goto(comment_referer_load());
       break;
   }
 }
diff --git a/modules/comment/comment.module b/modules/comment/comment.module
index 702c6c3683fcc1fe08f2cf9d41ae992523a65c1c..ae6e0a1e3078cf3adab4190cb3f7015379abed7c 100644
--- a/modules/comment/comment.module
+++ b/modules/comment/comment.module
@@ -837,7 +837,7 @@ function comment_page() {
     case t("Moderate comments"):
     case t("Moderate comment"):
       comment_moderate($edit);
-      drupal_goto(url(comment_referer_load()));
+      drupal_goto(comment_referer_load());
       break;
     case "reply":
       print theme("page", comment_reply(check_query(arg(3)), check_query(arg(2))), t("Add new comment"));
@@ -851,7 +851,7 @@ function comment_page() {
         print theme("page", $error_body, $error_title);
       }
       else {
-        drupal_goto(url(comment_referer_load()));
+        drupal_goto(comment_referer_load());
       }
       break;
     case t("Save settings"):
@@ -861,7 +861,7 @@ function comment_page() {
       $comments_per_page = $_POST["comments_per_page"];
 
       comment_save_settings(check_query($mode), check_query($order), check_query($threshold), check_query($comments_per_page));
-      drupal_goto(url(comment_referer_load()));
+      drupal_goto(comment_referer_load());
       break;
   }
 }
diff --git a/modules/forum.module b/modules/forum.module
index a4ea08380829624d9e11de2728bea993d9a48d2a..7437346c090fea45016dd1387be630689a2cbbf0 100644
--- a/modules/forum.module
+++ b/modules/forum.module
@@ -402,7 +402,7 @@ function forum_page() {
 
       if (arg(2) == 'new') {
         if ($nid = _forum_new($tid)) {
-          drupal_goto(url("node/view/$nid"));
+          drupal_goto("node/view/$nid");
         }
       }
 
diff --git a/modules/forum/forum.module b/modules/forum/forum.module
index a4ea08380829624d9e11de2728bea993d9a48d2a..7437346c090fea45016dd1387be630689a2cbbf0 100644
--- a/modules/forum/forum.module
+++ b/modules/forum/forum.module
@@ -402,7 +402,7 @@ function forum_page() {
 
       if (arg(2) == 'new') {
         if ($nid = _forum_new($tid)) {
-          drupal_goto(url("node/view/$nid"));
+          drupal_goto("node/view/$nid");
         }
       }
 
diff --git a/modules/node.module b/modules/node.module
index 9bebdb4b084a2662ced4f25c39f3b8d4cc1aadaf..9d513fe957de04ca3210f1e9b33cf4ac2f5986f5 100644
--- a/modules/node.module
+++ b/modules/node.module
@@ -1011,19 +1011,22 @@ function node_feed($nodes = 0, $channel = array()) {
     */
 
     $item = node_load(array('nid' => $node->nid));
-    $link = url("node/view/$node->nid");
+    $link = url("node/view/$node->nid", NULL, NULL, 1);
     $items .= format_rss_item($item->title, $link, ($item->teaser ? $item->teaser : $item->body), array('pubDate' => date('r', $item->changed)));
   }
 
-  $output .= "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
+  $channel_defaults = array(
+    'version'     => '0.92',
+    'title'       => variable_get('site_name', 'drupal') .' - '. variable_get('site_slogan', ''),
+    'link'        => $base_url,
+    'description' => variable_get('site_mission', ''),
+    'language'    => (($key = reset(array_keys($languages))) ? $key : 'en')
+  );
+  $channel = array_merge($channel_defaults, $channel);
+
+  $output = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
   $output .= "<!DOCTYPE rss [<!ENTITY % HTMLlat1 PUBLIC \"-//W3C//ENTITIES Latin 1 for XHTML//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent\">]>\n";
-  if (!$channel['version']) $channel['version'] = '0.92';
-  if (!$channel['title']) $channel['title'] = variable_get('site_name', 'drupal') .' - '. variable_get('site_slogan', '');
-  if (!$channel['link']) $channel['link'] = $base_url;
-  if (!$channel['description']) $channel['description'] = variable_get('site_mission', '');
-  foreach ($languages as $key => $value) break;
-  if (!$channel['language']) $channel['language'] = $key ? $key : 'en';
-  $output .= "<rss version=\"". $channel["version"] . "\">\n";
+  $output .= "<rss version=\"". $channel["version"] . "\" xml:base=\"". $channel["link"] . "\">\n";
   $output .= format_rss_channel($channel['title'], $channel['link'], $channel['description'], $items, $channel['language']);
   $output .= "</rss>\n";
 
diff --git a/modules/node/node.module b/modules/node/node.module
index 9bebdb4b084a2662ced4f25c39f3b8d4cc1aadaf..9d513fe957de04ca3210f1e9b33cf4ac2f5986f5 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -1011,19 +1011,22 @@ function node_feed($nodes = 0, $channel = array()) {
     */
 
     $item = node_load(array('nid' => $node->nid));
-    $link = url("node/view/$node->nid");
+    $link = url("node/view/$node->nid", NULL, NULL, 1);
     $items .= format_rss_item($item->title, $link, ($item->teaser ? $item->teaser : $item->body), array('pubDate' => date('r', $item->changed)));
   }
 
-  $output .= "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
+  $channel_defaults = array(
+    'version'     => '0.92',
+    'title'       => variable_get('site_name', 'drupal') .' - '. variable_get('site_slogan', ''),
+    'link'        => $base_url,
+    'description' => variable_get('site_mission', ''),
+    'language'    => (($key = reset(array_keys($languages))) ? $key : 'en')
+  );
+  $channel = array_merge($channel_defaults, $channel);
+
+  $output = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
   $output .= "<!DOCTYPE rss [<!ENTITY % HTMLlat1 PUBLIC \"-//W3C//ENTITIES Latin 1 for XHTML//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent\">]>\n";
-  if (!$channel['version']) $channel['version'] = '0.92';
-  if (!$channel['title']) $channel['title'] = variable_get('site_name', 'drupal') .' - '. variable_get('site_slogan', '');
-  if (!$channel['link']) $channel['link'] = $base_url;
-  if (!$channel['description']) $channel['description'] = variable_get('site_mission', '');
-  foreach ($languages as $key => $value) break;
-  if (!$channel['language']) $channel['language'] = $key ? $key : 'en';
-  $output .= "<rss version=\"". $channel["version"] . "\">\n";
+  $output .= "<rss version=\"". $channel["version"] . "\" xml:base=\"". $channel["link"] . "\">\n";
   $output .= format_rss_channel($channel['title'], $channel['link'], $channel['description'], $items, $channel['language']);
   $output .= "</rss>\n";
 
diff --git a/modules/user.module b/modules/user.module
index 4a120df9747c35dc95ccd4fa7ee10bd09d06fa30..572b616371ae711624c9221dc1ba49a5e3282e0a 100644
--- a/modules/user.module
+++ b/modules/user.module
@@ -341,7 +341,7 @@ function user_block($op = "list", $delta = 0) {
           */
 
           if (empty($edit)) {
-            $edit["destination"] = url($_GET["q"]);
+            $edit["destination"] = $_GET["q"];
           }
           // NOTE: special care needs to be taken because on pages with forms, such as node and comment submission pages, the $edit variable might already be set.
 
@@ -527,7 +527,7 @@ function user_login($edit = array(), $msg = "") {
   */
 
   if ($user->uid) {
-    drupal_goto(url('user'));
+    drupal_goto('user');
   }
 
   if (user_deny('user', $edit['name'])) {
@@ -638,7 +638,7 @@ function user_login($edit = array(), $msg = "") {
   */
 
   if (empty($edit)) {
-    $edit["destination"] = url($_GET["q"]);
+    $edit["destination"] = $_GET["q"];
   }
   $output .= form_hidden("destination", $edit["destination"]);
 
@@ -687,7 +687,7 @@ function user_logout() {
     unset($user);
   }
 
-  drupal_goto(url());
+  drupal_goto();
 }
 
 function user_pass($edit = array()) {
@@ -716,7 +716,7 @@ function user_pass($edit = array()) {
       ** Mail new password:
       */
 
-      $variables = array("%username" => $account->name, "%site" => variable_get("site_name", "drupal"), "%password" => $pass, "%uri" => $base_url, "%uri_brief" => substr($base_url, strlen("http://")), "%mailto" => $account->mail, "%date" => format_date(time()), '%login_uri' => url('user/login'), '%edit_uri' => url('user/edit'));
+      $variables = array("%username" => $account->name, "%site" => variable_get("site_name", "drupal"), "%password" => $pass, "%uri" => $base_url, "%uri_brief" => substr($base_url, strlen("http://")), "%mailto" => $account->mail, "%date" => format_date(time()), '%login_uri' => url('user/login', NULL, NULL, TRUE), '%edit_uri' => url('user/edit', NULL, NULL, TRUE));
       $subject = _user_mail_text("pass_subject", $variables);
       $body = _user_mail_text("pass_body", $variables);
       $headers = "From: $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to: $from";
@@ -764,7 +764,7 @@ function user_register($edit = array()) {
   */
 
   if ($user->uid) {
-    drupal_goto(url("user/edit"));
+    drupal_goto("user/edit");
   }
 
   if (!(is_null($edit['name']) && is_null($edit['mail']))) {
@@ -804,14 +804,14 @@ function user_register($edit = array()) {
     $account = user_save("", array_merge(array('name' => $edit['name'], 'pass' => $pass, "init" => $edit['mail'], "mail" => $edit['mail'], "rid" => _user_authenticated_id(), "status" => (variable_get("user_register", 1) == 1 ? 1 : 0)), $data));
     watchdog('user', "new user: '". $edit['name'] ."' &lt;". $edit['mail'] ."&gt;", l(t("edit user"), "admin/user/edit/$account->uid"));
 
-    $variables = array("%username" => $edit['name'], "%site" => variable_get("site_name", "drupal"), "%password" => $pass, "%uri" => $base_url, "%uri_brief" => substr($base_url, strlen("http://")), "%mailto" => $edit['mail'], "%date" => format_date(time()), "%login_uri" => url('user/login'), "%edit_uri" => url("user/edit"));
+    $variables = array("%username" => $edit['name'], "%site" => variable_get("site_name", "drupal"), "%password" => $pass, "%uri" => $base_url, "%uri_brief" => substr($base_url, strlen("http://")), "%mailto" => $edit['mail'], "%date" => format_date(time()), "%login_uri" => url('user/login', NULL, NULL, TRUE), "%edit_uri" => url("user/edit", NULL, NULL, TRUE));
 
     //the first user may login immediately, and receives a customized welcome e-mail.
     if ($account->uid == 1) {
       user_mail($edit['mail'], t("drupal user account details for %s", array("%s" => $edit['name'])), strtr(t("%username,\n\nYou may now login to %uri using the following username and password:\n\n  username: %username\n  password: %password\n\n%edit_uri\n\n--drupal"), $variables), "From: $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to: $from");
       // This should not be t()'ed. No point as its only shown once in the sites lifetime, and it would be bad to store the password
       $output .= "<p>Welcome to Drupal. You are user #1, which gives you full and immediate access.  All future registrants will receive their passwords via e-mail, so please configure your e-mail settings using the Administration pages.</p><p> Your password is <strong>$pass</strong>. You may change your password on the next page.</p><p>Please login below.</p>";
-      $output .= form_hidden("destination", url("user/edit"));
+      $output .= form_hidden("destination", "user/edit");
       $output .= form_hidden('name', $account->name);
       $output .= form_hidden('pass', $pass);
       $output .= form_submit(t("Log in"));
@@ -836,7 +836,7 @@ function user_register($edit = array()) {
         $body = _user_mail_text("approval_body", $variables);
 
         user_mail($edit['mail'], $subject, $body, "From: $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to: $from");
-        user_mail(variable_get("site_mail", ini_get("sendmail_from")), $subject, t("%u has applied for an account.\n\n%uri", array("%u" => $account->name, "%uri" => url("admin/user/edit/$account->uid"))), "From: $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to: $from");
+        user_mail(variable_get("site_mail", ini_get("sendmail_from")), $subject, t("%u has applied for an account.\n\n%uri", array("%u" => $account->name, "%uri" => url("admin/user/edit/$account->uid", NULL, NULL, TRUE))), "From: $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to: $from");
         return t("Thank you for applying for an account. Your account is currently pending approval by the site administrator.<br />In the meantime, your password and further instructions have been sent to your e-mail address.");
       }
     }
@@ -1710,7 +1710,7 @@ function julia_user(\$type, \$edit, &\$user) {
             return user_save(\$user, array(\"julia_favingredient\" => \$edit[\"julia_favingredient\"]));
         }
       }
-    </pre>", array("%user-role" => url("admin/user/role"), "%user-permission" => url("admin/user/permission"), "%jabber" => "http://www.jabber.org", "%delphiforums" => "http://www.delphiforums.com", "%drupal" => "http://www.drupal.org", "%da-auth" => url("user/help#da"), "%php-sess" => "http://www.php.net/manual/en/ref.session.php", "%user-prefs" => url("user/edit"), "%admin-user" => url("admin/user"), "%da-devel" => "http://www.drupal.org/node/view/316", "%xml" => "http://www.xmlrpc.org", "%http-post" => "http://www.w3.org/Protocols/", "%soap" => "http://www.soapware.org", "%dis-module" => url("admin/system/modules"), "%blogger" => "http://www.blogger.com", "%blogger-source" => "http://cvs.drupal.org/viewcvs.cgi/contributions/modules/authentication/Bloggar/?cvsroot=contrib", "%contrib-cvs" => "http://cvs.drupal.org/viewcvs/contributions/?cvsroot=contrib", "%blogger-api" => "http://plant.blogger.com/API", "%cvs" => "http://cvs.drupal.org/viewcvs.cgi/contributions/README?rev=HEAD&amp;cvsroot=contrib&amp;content-type=text/vnd.viewcvs-markup", "%drupal-lists" => "http://drupal.org/mailing-lists", "%drupal-org" => "http://www.drupal.org", "%registration" => url("user/register"), "%user-acct" => url('user'), "%user-admin" => url("admin/user"), "%profile-module" => "http://cvs.drupal.org/viewcvs/drupal/modules/profile.module"));
+    </pre>", array("%user-role" => url("admin/user/role"), "%user-permission" => url("admin/user/permission"), "%jabber" => "http://www.jabber.org", "%delphiforums" => "http://www.delphiforums.com", "%drupal" => "http://www.drupal.org", "%da-auth" => url("user/help", NULL, 'da'), "%php-sess" => "http://www.php.net/manual/en/ref.session.php", "%user-prefs" => url("user/edit"), "%admin-user" => url("admin/user"), "%da-devel" => "http://www.drupal.org/node/view/316", "%xml" => "http://www.xmlrpc.org", "%http-post" => "http://www.w3.org/Protocols/", "%soap" => "http://www.soapware.org", "%dis-module" => url("admin/system/modules"), "%blogger" => "http://www.blogger.com", "%blogger-source" => "http://cvs.drupal.org/viewcvs.cgi/contributions/modules/authentication/Bloggar/?cvsroot=contrib", "%contrib-cvs" => "http://cvs.drupal.org/viewcvs/contributions/?cvsroot=contrib", "%blogger-api" => "http://plant.blogger.com/API", "%cvs" => "http://cvs.drupal.org/viewcvs.cgi/contributions/README?rev=HEAD&amp;cvsroot=contrib&amp;content-type=text/vnd.viewcvs-markup", "%drupal-lists" => "http://drupal.org/mailing-lists", "%drupal-org" => "http://www.drupal.org", "%registration" => url("user/register"), "%user-acct" => url('user'), "%user-admin" => url("admin/user"), "%profile-module" => "http://cvs.drupal.org/viewcvs/drupal/modules/profile.module"));
 
       foreach (module_list() as $module) {
         if (module_hook($module, "auth")) {
diff --git a/modules/user/user.module b/modules/user/user.module
index 4a120df9747c35dc95ccd4fa7ee10bd09d06fa30..572b616371ae711624c9221dc1ba49a5e3282e0a 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -341,7 +341,7 @@ function user_block($op = "list", $delta = 0) {
           */
 
           if (empty($edit)) {
-            $edit["destination"] = url($_GET["q"]);
+            $edit["destination"] = $_GET["q"];
           }
           // NOTE: special care needs to be taken because on pages with forms, such as node and comment submission pages, the $edit variable might already be set.
 
@@ -527,7 +527,7 @@ function user_login($edit = array(), $msg = "") {
   */
 
   if ($user->uid) {
-    drupal_goto(url('user'));
+    drupal_goto('user');
   }
 
   if (user_deny('user', $edit['name'])) {
@@ -638,7 +638,7 @@ function user_login($edit = array(), $msg = "") {
   */
 
   if (empty($edit)) {
-    $edit["destination"] = url($_GET["q"]);
+    $edit["destination"] = $_GET["q"];
   }
   $output .= form_hidden("destination", $edit["destination"]);
 
@@ -687,7 +687,7 @@ function user_logout() {
     unset($user);
   }
 
-  drupal_goto(url());
+  drupal_goto();
 }
 
 function user_pass($edit = array()) {
@@ -716,7 +716,7 @@ function user_pass($edit = array()) {
       ** Mail new password:
       */
 
-      $variables = array("%username" => $account->name, "%site" => variable_get("site_name", "drupal"), "%password" => $pass, "%uri" => $base_url, "%uri_brief" => substr($base_url, strlen("http://")), "%mailto" => $account->mail, "%date" => format_date(time()), '%login_uri' => url('user/login'), '%edit_uri' => url('user/edit'));
+      $variables = array("%username" => $account->name, "%site" => variable_get("site_name", "drupal"), "%password" => $pass, "%uri" => $base_url, "%uri_brief" => substr($base_url, strlen("http://")), "%mailto" => $account->mail, "%date" => format_date(time()), '%login_uri' => url('user/login', NULL, NULL, TRUE), '%edit_uri' => url('user/edit', NULL, NULL, TRUE));
       $subject = _user_mail_text("pass_subject", $variables);
       $body = _user_mail_text("pass_body", $variables);
       $headers = "From: $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to: $from";
@@ -764,7 +764,7 @@ function user_register($edit = array()) {
   */
 
   if ($user->uid) {
-    drupal_goto(url("user/edit"));
+    drupal_goto("user/edit");
   }
 
   if (!(is_null($edit['name']) && is_null($edit['mail']))) {
@@ -804,14 +804,14 @@ function user_register($edit = array()) {
     $account = user_save("", array_merge(array('name' => $edit['name'], 'pass' => $pass, "init" => $edit['mail'], "mail" => $edit['mail'], "rid" => _user_authenticated_id(), "status" => (variable_get("user_register", 1) == 1 ? 1 : 0)), $data));
     watchdog('user', "new user: '". $edit['name'] ."' &lt;". $edit['mail'] ."&gt;", l(t("edit user"), "admin/user/edit/$account->uid"));
 
-    $variables = array("%username" => $edit['name'], "%site" => variable_get("site_name", "drupal"), "%password" => $pass, "%uri" => $base_url, "%uri_brief" => substr($base_url, strlen("http://")), "%mailto" => $edit['mail'], "%date" => format_date(time()), "%login_uri" => url('user/login'), "%edit_uri" => url("user/edit"));
+    $variables = array("%username" => $edit['name'], "%site" => variable_get("site_name", "drupal"), "%password" => $pass, "%uri" => $base_url, "%uri_brief" => substr($base_url, strlen("http://")), "%mailto" => $edit['mail'], "%date" => format_date(time()), "%login_uri" => url('user/login', NULL, NULL, TRUE), "%edit_uri" => url("user/edit", NULL, NULL, TRUE));
 
     //the first user may login immediately, and receives a customized welcome e-mail.
     if ($account->uid == 1) {
       user_mail($edit['mail'], t("drupal user account details for %s", array("%s" => $edit['name'])), strtr(t("%username,\n\nYou may now login to %uri using the following username and password:\n\n  username: %username\n  password: %password\n\n%edit_uri\n\n--drupal"), $variables), "From: $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to: $from");
       // This should not be t()'ed. No point as its only shown once in the sites lifetime, and it would be bad to store the password
       $output .= "<p>Welcome to Drupal. You are user #1, which gives you full and immediate access.  All future registrants will receive their passwords via e-mail, so please configure your e-mail settings using the Administration pages.</p><p> Your password is <strong>$pass</strong>. You may change your password on the next page.</p><p>Please login below.</p>";
-      $output .= form_hidden("destination", url("user/edit"));
+      $output .= form_hidden("destination", "user/edit");
       $output .= form_hidden('name', $account->name);
       $output .= form_hidden('pass', $pass);
       $output .= form_submit(t("Log in"));
@@ -836,7 +836,7 @@ function user_register($edit = array()) {
         $body = _user_mail_text("approval_body", $variables);
 
         user_mail($edit['mail'], $subject, $body, "From: $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to: $from");
-        user_mail(variable_get("site_mail", ini_get("sendmail_from")), $subject, t("%u has applied for an account.\n\n%uri", array("%u" => $account->name, "%uri" => url("admin/user/edit/$account->uid"))), "From: $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to: $from");
+        user_mail(variable_get("site_mail", ini_get("sendmail_from")), $subject, t("%u has applied for an account.\n\n%uri", array("%u" => $account->name, "%uri" => url("admin/user/edit/$account->uid", NULL, NULL, TRUE))), "From: $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to: $from");
         return t("Thank you for applying for an account. Your account is currently pending approval by the site administrator.<br />In the meantime, your password and further instructions have been sent to your e-mail address.");
       }
     }
@@ -1710,7 +1710,7 @@ function julia_user(\$type, \$edit, &\$user) {
             return user_save(\$user, array(\"julia_favingredient\" => \$edit[\"julia_favingredient\"]));
         }
       }
-    </pre>", array("%user-role" => url("admin/user/role"), "%user-permission" => url("admin/user/permission"), "%jabber" => "http://www.jabber.org", "%delphiforums" => "http://www.delphiforums.com", "%drupal" => "http://www.drupal.org", "%da-auth" => url("user/help#da"), "%php-sess" => "http://www.php.net/manual/en/ref.session.php", "%user-prefs" => url("user/edit"), "%admin-user" => url("admin/user"), "%da-devel" => "http://www.drupal.org/node/view/316", "%xml" => "http://www.xmlrpc.org", "%http-post" => "http://www.w3.org/Protocols/", "%soap" => "http://www.soapware.org", "%dis-module" => url("admin/system/modules"), "%blogger" => "http://www.blogger.com", "%blogger-source" => "http://cvs.drupal.org/viewcvs.cgi/contributions/modules/authentication/Bloggar/?cvsroot=contrib", "%contrib-cvs" => "http://cvs.drupal.org/viewcvs/contributions/?cvsroot=contrib", "%blogger-api" => "http://plant.blogger.com/API", "%cvs" => "http://cvs.drupal.org/viewcvs.cgi/contributions/README?rev=HEAD&amp;cvsroot=contrib&amp;content-type=text/vnd.viewcvs-markup", "%drupal-lists" => "http://drupal.org/mailing-lists", "%drupal-org" => "http://www.drupal.org", "%registration" => url("user/register"), "%user-acct" => url('user'), "%user-admin" => url("admin/user"), "%profile-module" => "http://cvs.drupal.org/viewcvs/drupal/modules/profile.module"));
+    </pre>", array("%user-role" => url("admin/user/role"), "%user-permission" => url("admin/user/permission"), "%jabber" => "http://www.jabber.org", "%delphiforums" => "http://www.delphiforums.com", "%drupal" => "http://www.drupal.org", "%da-auth" => url("user/help", NULL, 'da'), "%php-sess" => "http://www.php.net/manual/en/ref.session.php", "%user-prefs" => url("user/edit"), "%admin-user" => url("admin/user"), "%da-devel" => "http://www.drupal.org/node/view/316", "%xml" => "http://www.xmlrpc.org", "%http-post" => "http://www.w3.org/Protocols/", "%soap" => "http://www.soapware.org", "%dis-module" => url("admin/system/modules"), "%blogger" => "http://www.blogger.com", "%blogger-source" => "http://cvs.drupal.org/viewcvs.cgi/contributions/modules/authentication/Bloggar/?cvsroot=contrib", "%contrib-cvs" => "http://cvs.drupal.org/viewcvs/contributions/?cvsroot=contrib", "%blogger-api" => "http://plant.blogger.com/API", "%cvs" => "http://cvs.drupal.org/viewcvs.cgi/contributions/README?rev=HEAD&amp;cvsroot=contrib&amp;content-type=text/vnd.viewcvs-markup", "%drupal-lists" => "http://drupal.org/mailing-lists", "%drupal-org" => "http://www.drupal.org", "%registration" => url("user/register"), "%user-acct" => url('user'), "%user-admin" => url("admin/user"), "%profile-module" => "http://cvs.drupal.org/viewcvs/drupal/modules/profile.module"));
 
       foreach (module_list() as $module) {
         if (module_hook($module, "auth")) {