diff --git a/handlers/views_handler_field.inc b/handlers/views_handler_field.inc
index 65210d9..5f7c936 100644
--- a/handlers/views_handler_field.inc
+++ b/handlers/views_handler_field.inc
@@ -1338,11 +1338,10 @@ If you would like to have the characters \'[\' and \']\' please use the html ent
     // If the query and fragment were programatically assigned overwrite any
     // parsed values.
     if (isset($alter['query'])) {
-      // Convert the query to a string, perform token replacement, and then
-      // convert back to an array form for l().
-      $options['query'] = drupal_http_build_query($alter['query']);
-      $options['query'] = strtr($options['query'], $tokens);
-      $options['query'] = drupal_get_query_array($options['query']);
+      // perform token replacement on each query element separately
+      foreach ($alter['query'] as $q_name => $q_value) {
+        $options['query'][$q_name] = strtr($q_value, $tokens); 
+      }
     }
     if (isset($alter['alias'])) {
       // Alias is a boolean field, so no token.
