Index: wp-includes/functions.php
===================================================================
--- wp-includes/functions.php	(revision 23338)
+++ wp-includes/functions.php	(working copy)
@@ -633,6 +633,7 @@
  * @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 bool $encode Optional.  If true, values will be rawurlencode()'d
  * @return string New URL query string.
  */
 function add_query_arg() {
@@ -686,9 +687,13 @@
 	$qs = urlencode_deep( $qs ); // this re-URL-encodes things that were already in the query string
 	if ( is_array( $args[0] ) ) {
 		$kayvees = $args[0];
+		if ( !empty( $args[3] ) )
+			$kayvees = array_map( 'rawurlencode', $kayvees );
 		$qs = array_merge( $qs, $kayvees );
 	} else {
 		$qs[ $args[0] ] = $args[1];
+		if ( !empty( $args[3] ) )
+			$qs[ $args[0] ] = rawurlencode( $qs[ $args[0] ] );
 	}
 
 	foreach ( $qs as $k => $v ) {
