diff --git a/oauth2client/tools.py b/oauth2client/tools.py
index f04d4c8..dc779b4 100644
--- a/oauth2client/tools.py
+++ b/oauth2client/tools.py
@@ -25,31 +25,30 @@
 
 import BaseHTTPServer
 import gflags
-import logging
 import socket
 import sys
 
 from client import FlowExchangeError
 
 try:
-    from urlparse import parse_qsl
+  from urlparse import parse_qsl
 except ImportError:
-    from cgi import parse_qsl
+  from cgi import parse_qsl
 
 
 FLAGS = gflags.FLAGS
 
 gflags.DEFINE_boolean('auth_local_webserver', True,
-                     ('Run a local web server to handle redirects during '
+                      ('Run a local web server to handle redirects during '
                        'OAuth authorization.'))
 
 gflags.DEFINE_string('auth_host_name', 'localhost',
                      ('Host name to use when running a local web server to '
-                       'handle redirects during OAuth authorization.'))
+                      'handle redirects during OAuth authorization.'))
 
 gflags.DEFINE_multi_int('auth_host_port', [8080, 8090],
-                     ('Port to use when running a local web server to '
-                       'handle redirects during OAuth authorization.'))
+                        ('Port to use when running a local web server to '
+                         'handle redirects during OAuth authorization.'))
 
 
 class ClientRedirectServer(BaseHTTPServer.HTTPServer):
@@ -69,7 +68,7 @@
   """
 
   def do_GET(s):
-    """Handle a GET request
+    """Handle a GET request.
 
     Parses the query parameters and prints a message
     if the flow has completed. Note that we can't detect
@@ -106,8 +105,8 @@
     for port in FLAGS.auth_host_port:
       port_number = port
       try:
-        httpd = BaseHTTPServer.HTTPServer((FLAGS.auth_host_name, port),
-            ClientRedirectHandler)
+        httpd = ClientRedirectServer((FLAGS.auth_host_name, port),
+                                     ClientRedirectHandler)
       except socket.error, e:
         pass
       else:
@@ -126,10 +125,10 @@
   print
   if FLAGS.auth_local_webserver:
     print 'If your browser is on a different machine then exit and re-run this'
-    print 'application with the command-line parameter --noauth_local_webserver.'
+    print 'application with the command-line parameter '
+    print '--noauth_local_webserver.'
     print
 
-
   if FLAGS.auth_local_webserver:
     httpd.handle_request()
     if 'error' in httpd.query_params:
@@ -137,18 +136,15 @@
     if 'code' in httpd.query_params:
       code = httpd.query_params['code']
   else:
-    accepted = 'n'
-    while accepted.lower() == 'n':
-      accepted = raw_input('Have you authorized me? (y/n) ')
-    code = raw_input('What is the verification code? ').strip()
+    code = raw_input('Enter verification code: ').strip()
 
   try:
-    credentials = flow.step2_exchange(code)
-  except FlowExchangeError:
-    sys.exit('The authentication has failed.')
+    credential = flow.step2_exchange(code)
+  except FlowExchangeError, e:
+    sys.exit('Authentication has failed: %s' % e)
 
-  storage.put(credentials)
-  credentials.set_store(storage.put)
-  print "You have successfully authenticated."
+  storage.put(credential)
+  credential.set_store(storage)
+  print 'Authentication successful.'
 
-  return credentials
+  return credential
