diff --git a/lib/Cake/Routing/Router.php b/lib/Cake/Routing/Router.php
index 081a44812..7015ece0a 100644
--- a/lib/Cake/Routing/Router.php
+++ b/lib/Cake/Routing/Router.php
@@ -964,7 +964,7 @@ class Router {
 		}
 		$addition = http_build_query($q, null, $join);
 
-		if ($out && $addition) {
+		if ($out && $addition && substr($out, strlen($join) * -1, strlen($join)) != $join) {
 			$out .= $join;
 		}
 
diff --git a/lib/Cake/Test/Case/Routing/RouterTest.php b/lib/Cake/Test/Case/Routing/RouterTest.php
index 6d75fc831..67bcea886 100644
--- a/lib/Cake/Test/Case/Routing/RouterTest.php
+++ b/lib/Cake/Test/Case/Routing/RouterTest.php
@@ -2626,5 +2626,13 @@ class RouterTest extends CakeTestCase {
 		$result = Router::queryString('foo=bar', array('php' => 'nut', 'jose' => 'zap'), true);
 		$expected = '?foo=bar&php=nut&jose=zap';
 		$this->assertEquals($expected, $result);
+
+		$result = Router::queryString('foo=bar&', array('php' => 'nut', 'jose' => 'zap'), true);
+		$expected = '?foo=bar&php=nut&jose=zap';
+		$this->assertEquals($expected, $result);
+
+		$result = Router::queryString('foo=bar&', array('php' => 'nut', 'jose' => 'zap'));
+		$expected = '?foo=bar&php=nut&jose=zap';
+		$this->assertEquals($expected, $result);
 	}
 }