diff --git a/api/monorail_servicer.py b/api/monorail_servicer.py
index 7dfdf0c..9d03091 100644
--- a/api/monorail_servicer.py
+++ b/api/monorail_servicer.py
@@ -1,16 +1,18 @@
-# Copyright 2018 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file or at
-# https://developers.google.com/open-source/licenses/bsd
+# Copyright 2018 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
 
 from __future__ import print_function
 from __future__ import division
 from __future__ import absolute_import
 
-import cgi
 import functools
-import httplib
+try:
+  import html
+except ImportError:
+  import cgi as html
 import logging
+from six.moves import http_client
 import sys
 import time
 from google.appengine.api import oauth
@@ -44,20 +46,20 @@
 
 # TODO(https://crbug.com/1346473)
 _PRPC_TO_HTTP_STATUS = {
-  codes.StatusCode.OK: httplib.OK,
-  codes.StatusCode.CANCELLED: httplib.NO_CONTENT,
-  codes.StatusCode.INVALID_ARGUMENT: httplib.BAD_REQUEST,
-  codes.StatusCode.DEADLINE_EXCEEDED: httplib.SERVICE_UNAVAILABLE,
-  codes.StatusCode.NOT_FOUND: httplib.NOT_FOUND,
-  codes.StatusCode.ALREADY_EXISTS: httplib.CONFLICT,
-  codes.StatusCode.PERMISSION_DENIED: httplib.FORBIDDEN,
-  codes.StatusCode.RESOURCE_EXHAUSTED: httplib.SERVICE_UNAVAILABLE,
-  codes.StatusCode.FAILED_PRECONDITION: httplib.PRECONDITION_FAILED,
-  codes.StatusCode.OUT_OF_RANGE: httplib.BAD_REQUEST,
-  codes.StatusCode.UNIMPLEMENTED: httplib.NOT_IMPLEMENTED,
-  codes.StatusCode.INTERNAL: httplib.INTERNAL_SERVER_ERROR,
-  codes.StatusCode.UNAVAILABLE: httplib.SERVICE_UNAVAILABLE,
-  codes.StatusCode.UNAUTHENTICATED: httplib.UNAUTHORIZED,
+  codes.StatusCode.OK: http_client.OK,
+  codes.StatusCode.CANCELLED: http_client.NO_CONTENT,
+  codes.StatusCode.INVALID_ARGUMENT: http_client.BAD_REQUEST,
+  codes.StatusCode.DEADLINE_EXCEEDED: http_client.SERVICE_UNAVAILABLE,
+  codes.StatusCode.NOT_FOUND: http_client.NOT_FOUND,
+  codes.StatusCode.ALREADY_EXISTS: http_client.CONFLICT,
+  codes.StatusCode.PERMISSION_DENIED: http_client.FORBIDDEN,
+  codes.StatusCode.RESOURCE_EXHAUSTED: http_client.SERVICE_UNAVAILABLE,
+  codes.StatusCode.FAILED_PRECONDITION: http_client.PRECONDITION_FAILED,
+  codes.StatusCode.OUT_OF_RANGE: http_client.BAD_REQUEST,
+  codes.StatusCode.UNIMPLEMENTED: http_client.NOT_IMPLEMENTED,
+  codes.StatusCode.INTERNAL: http_client.INTERNAL_SERVER_ERROR,
+  codes.StatusCode.UNAVAILABLE: http_client.SERVICE_UNAVAILABLE,
+  codes.StatusCode.UNAUTHENTICATED: http_client.UNAUTHORIZED,
 }
 
 def ConvertPRPCStatusToHTTPStatus(context):
@@ -140,7 +142,7 @@
 
     except Exception as e:
       if not self.ProcessException(e, prpc_context, mc):
-        raise e.__class__, e, sys.exc_info()[2]
+        raise
     finally:
       if mc:
         mc.CleanUp()
@@ -310,7 +312,6 @@
   def ProcessException(self, e, prpc_context, mc):
     """Return True if we convert an exception to a pRPC status code."""
     logging.exception(e)
-    logging.info(e.message)
     exc_type = type(e)
     if exc_type == exceptions.NoSuchUserException:
       prpc_context.set_code(codes.StatusCode.NOT_FOUND)
@@ -355,7 +356,7 @@
     elif exc_type == exceptions.InputException:
       prpc_context.set_code(codes.StatusCode.INVALID_ARGUMENT)
       prpc_context.set_details(
-          'Invalid arguments: %s' % cgi.escape(e.message, quote=True))
+          'Invalid arguments: %s' % html.escape(str(e), quote=True))
     elif exc_type == ratelimiter.ApiRateLimitExceeded:
       prpc_context.set_code(codes.StatusCode.PERMISSION_DENIED)
       prpc_context.set_details('The requester has exceeded API quotas limit.')
@@ -364,7 +365,7 @@
       prpc_context.set_details(
           'The oauth token was not valid or must be refreshed.')
     elif exc_type == xsrf.TokenIncorrect:
-      logging.info('Bad XSRF token: %r', e.message)
+      logging.info('Bad XSRF token: %r', str(e))
       prpc_context.set_code(codes.StatusCode.INVALID_ARGUMENT)
       prpc_context.set_details('Bad XSRF token.')
     else:
