Index: wp-includes/functions.php
===================================================================
--- wp-includes/functions.php	(revision 15434)
+++ wp-includes/functions.php	(working copy)
@@ -1359,23 +1359,14 @@
  * @since 1.5.0
  *
  * @param mixed $param1 Either newkey or an associative_array
- * @param mixed $param2 Either newvalue or oldquery or uri
- * @param mixed $param3 Optional. Old query or uri
+ * @param mixed $param2 Optional. Either newvalue or oldquery_or_uri
+ * @param mixed $param3 Optional. oldquery_or_uri
  * @return string New URL query string.
  */
-function add_query_arg() {
+function add_query_arg($param1, $param2 = false, $param3 = false) {
 	$ret = '';
-	if ( is_array( func_get_arg(0) ) ) {
-		if ( @func_num_args() < 2 || false === @func_get_arg( 1 ) )
-			$uri = $_SERVER['REQUEST_URI'];
-		else
-			$uri = @func_get_arg( 1 );
-	} else {
-		if ( @func_num_args() < 3 || false === @func_get_arg( 2 ) )
-			$uri = $_SERVER['REQUEST_URI'];
-		else
-			$uri = @func_get_arg( 2 );
-	}
+	$uri = is_array( $param1 ) ? $param2 : $param3;
+	false === $uri && ($uri = $_SERVER['REQUEST_URI']);
 
 	if ( $frag = strstr( $uri, '#' ) )
 		$uri = substr( $uri, 0, -strlen( $frag ) );
@@ -1406,19 +1397,16 @@
 		$query = $uri;
 	}
 
+	$qs = array();
 	wp_parse_str( $query, $qs );
 	$qs = urlencode_deep( $qs ); // this re-URL-encodes things that were already in the query string
-	if ( is_array( func_get_arg( 0 ) ) ) {
-		$kayvees = func_get_arg( 0 );
-		$qs = array_merge( $qs, $kayvees );
+	if ( is_array( $param1 ) ) {
+		$qs = array_merge( $qs, $param1 );
 	} else {
-		$qs[func_get_arg( 0 )] = func_get_arg( 1 );
+		$qs[$param1] = $param2;
 	}
 
-	foreach ( (array) $qs as $k => $v ) {
-		if ( $v === false )
-			unset( $qs[$k] );
-	}
+	$qs = array_filter( $qs );
 
 	$ret = build_query( $qs );
 	$ret = trim( $ret, '?' );
