diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index d9fd085..f00188c 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -27,6 +27,7 @@
 import re
 import simplejson
 import uritemplate
+import urllib
 import urlparse
 
 
@@ -93,10 +94,13 @@
       return (headers, path_params, query, simplejson.dumps(model))
 
   def build_query(self, params):
-    query = '?alt=json&prettyprint=true'
-    for key,value in params.iteritems():
-      query += '&%s=%s' % (key, value)
-    return query
+    params.update({'alt': 'json', 'prettyprint': 'true'})
+    astuples = []
+    for key, value in params.iteritems():
+      if getattr(value, 'encode', False) and callable(value.encode):
+        value = value.encode('utf-8')
+      astuples.append((key, value))
+    return '?' + urllib.urlencode(astuples)
 
   def response(self, resp, content):
     # Error handling is TBD, for example, do we retry
diff --git a/runtests.py b/runtests.py
index c66b728..d36dd93 100644
--- a/runtests.py
+++ b/runtests.py
@@ -1,5 +1,9 @@
 #!/usr/bin/env python
-import glob, unittest, os, sys
+import glob
+import logging
+import os
+import sys
+import unittest
 
 from trace import fullmodname
 try:
@@ -10,6 +14,20 @@
 
 sys.path.insert(0, os.getcwd())
 
+verbosity = 1
+if "-q" in sys.argv or '--quiet' in sys.argv:
+    verbosity = 0
+if "-v" in sys.argv or '--verbose' in sys.argv:
+    verbosity = 2
+
+if verbosity == 0:
+  logging.disable(logging.CRITICAL)
+elif verbosity == 1:
+  logging.disable(logging.ERROR)
+elif verbosity == 2:
+  logging.basicConfig(level=logging.DEBUG)
+
+
 def build_suite(folder):
   # find all of the test modules
   modules = map(fullmodname, glob.glob(os.path.join(folder, 'test_*.py')))
@@ -25,12 +43,6 @@
           __import__(module)
       raise
 
-verbosity = 1
-if "-q" in sys.argv or '--quiet' in sys.argv:
-    verbosity = 0
-if "-v" in sys.argv or '--verbose' in sys.argv:
-    verbosity = 2
-
 unit_tests = build_suite('tests')
 functional_tests = build_suite('functional_tests')
 
diff --git a/tests/test_json_model.py b/tests/test_json_model.py
index 7af613f..3014ee4 100644
--- a/tests/test_json_model.py
+++ b/tests/test_json_model.py
@@ -24,6 +24,7 @@
 from apiclient.discovery import JsonModel
 import os
 import unittest
+import urlparse
 
 
 class Model(unittest.TestCase):
@@ -57,5 +58,24 @@
     self.assertNotEqual(query, '')
     self.assertEqual(body, '{"data": {}}')
 
+  def test_json_build_query(self):
+    model = JsonModel()
+
+    headers = {}
+    path_params = {}
+    query_params = {'foo': 1, 'bar': u'\N{COMET}'}
+    body = {}
+
+    headers, params, query, body = model.request(headers, path_params, query_params, body)
+
+    self.assertEqual(headers['accept'], 'application/json')
+    self.assertEqual(headers['content-type'], 'application/json')
+
+    query_dict = urlparse.parse_qs(query)
+    self.assertEqual(query_dict['foo'], ['1'])
+    self.assertEqual(query_dict['bar'], [u'\N{COMET}'.encode('utf-8')])
+    self.assertEqual(body, '{"data": {}}')
+
+
 if __name__ == '__main__':
   unittest.main()
