diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index 22cb4e0..bddcef1 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -14,12 +14,10 @@
 
 """Client for discovery based APIs
 
-A client library for Google's discovery
-based APIs.
+A client library for Google's discovery based APIs.
 """
 
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
-
 __all__ = [
     'build', 'build_from_document'
     ]
@@ -48,8 +46,9 @@
 
 
 def key2param(key):
-  """
-  max-results -> max_results
+  """Converts key names into parameter names.
+
+  For example, converting "max-results" -> "max_results"
   """
   result = []
   key = list(key)
@@ -106,10 +105,10 @@
   resp, content = http.request(requested_url)
   service = simplejson.loads(content)
 
-  fn = os.path.join(os.path.dirname(__file__), "contrib",
-      serviceName, "future.json")
+  fn = os.path.join(os.path.dirname(__file__), 'contrib',
+      serviceName, 'future.json')
   try:
-    f = file(fn, "r")
+    f = file(fn, 'r')
     future = f.read()
     f.close()
   except IOError:
@@ -275,9 +274,9 @@
 
     docs = ['A description of how to use this function\n\n']
     for arg in argmap.iterkeys():
-      required = ""
+      required = ''
       if arg in required_params:
-        required = " (required)"
+        required = ' (required)'
       docs.append('%s - A parameter%s\n' % (arg, required))
 
     setattr(method, '__doc__', ''.join(docs))
@@ -363,7 +362,7 @@
   if futureDesc and 'methods' in futureDesc:
     for methodName, methodDesc in futureDesc['methods'].iteritems():
       if 'next' in methodDesc and methodName in resourceDesc['methods']:
-        createNextMethod(Resource, methodName + "_next",
+        createNextMethod(Resource, methodName + '_next',
                          resourceDesc['methods'][methodName],
                          methodDesc['next'])
 
diff --git a/apiclient/http.py b/apiclient/http.py
index 8f64baf..2b35c85 100644
--- a/apiclient/http.py
+++ b/apiclient/http.py
@@ -23,7 +23,7 @@
   """
 
   def __init__(self, http, postproc, uri,
-               method="GET",
+               method='GET',
                body=None,
                headers=None,
                methodId=None):
@@ -139,7 +139,7 @@
     """
     self.responses = responses
 
-  def __call__(self, http, postproc, uri, method="GET", body=None,
+  def __call__(self, http, postproc, uri, method='GET', body=None,
                headers=None, methodId=None):
     """Implements the callable interface that discovery.build() expects
     of requestBuilder, which is to build an object compatible with
@@ -169,7 +169,7 @@
     self.headers = headers
 
   def request(self, uri,
-              method="GET",
+              method='GET',
               body=None,
               headers=None,
               redirections=1,
diff --git a/apiclient/oauth.py b/apiclient/oauth.py
index 68e4300..1cc6cef 100644
--- a/apiclient/oauth.py
+++ b/apiclient/oauth.py
@@ -8,7 +8,6 @@
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
 
 import copy
-import datetime
 import httplib2
 import logging
 import oauth2 as oauth
@@ -18,9 +17,9 @@
 from anyjson import simplejson
 
 try:
-    from urlparse import parse_qs, parse_qsl
+  from urlparse import parse_qsl
 except ImportError:
-    from cgi import parse_qs, parse_qsl
+  from cgi import parse_qsl
 
 
 class Error(Exception):
@@ -137,7 +136,7 @@
         req = oauth.Request.from_consumer_and_token(
             self.consumer, self.token, http_method=method, http_url=uri)
         req.sign_request(signer, self.consumer, self.token)
-        if headers == None:
+        if headers is None:
           headers = {}
         headers.update(req.to_header())
         if 'user-agent' in headers:
@@ -210,7 +209,7 @@
     resp, content = client.request(uri, 'POST', headers=headers,
                                    body=body)
     if resp['status'] != '200':
-      logging.error('Failed to retrieve temporary authorization: %s' % content)
+      logging.error('Failed to retrieve temporary authorization: %s', content)
       raise RequestError('Invalid response %s.' % resp['status'])
 
     self.request_token = dict(parse_qsl(content))
@@ -247,7 +246,7 @@
     uri = _oauth_uri('access', self.discovery, self.params)
     resp, content = client.request(uri, 'POST', headers=headers)
     if resp['status'] != '200':
-      logging.error('Failed to retrieve access token: %s' % content)
+      logging.error('Failed to retrieve access token: %s', content)
       raise RequestError('Invalid response %s.' % resp['status'])
 
     oauth_params = dict(parse_qsl(content))
diff --git a/oauth2client/appengine.py b/oauth2client/appengine.py
index f35da8f..f939bc0 100644
--- a/oauth2client/appengine.py
+++ b/oauth2client/appengine.py
@@ -14,8 +14,7 @@
 
 """Utilities for Google App Engine
 
-Utilities for making it easier to use OAuth 2.0
-on Google App Engine.
+Utilities for making it easier to use OAuth 2.0 on Google App Engine.
 """
 
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
@@ -29,8 +28,9 @@
 
 
 class FlowProperty(db.Property):
-  """Utility property that allows easy
-  storage and retreival of an
+  """App Engine datastore Property for Flow.
+
+  Utility property that allows easy storage and retreival of an
   oauth2client.Flow"""
 
   # Tell what the user type is.
@@ -60,8 +60,9 @@
 
 
 class CredentialsProperty(db.Property):
-  """Utility property that allows easy
-  storage and retrieval of
+  """App Engine datastore Property for Credentials.
+
+  Utility property that allows easy storage and retrieval of
   oath2client.Credentials
   """
 
@@ -109,9 +110,9 @@
       key_name: string, key name for the entity that has the credentials
       property_name: string, name of the property that is an CredentialsProperty
     """
-    self.model = model
-    self.key_name = key_name
-    self.property_name = property_name
+    self._model = model
+    self._key_name = key_name
+    self._property_name = property_name
 
   def get(self):
     """Retrieve Credential from datastore.
@@ -119,8 +120,8 @@
     Returns:
       oauth2client.Credentials
     """
-    entity = self.model.get_or_insert(self.key_name)
-    credential = getattr(entity, self.property_name)
+    entity = self._model.get_or_insert(self._key_name)
+    credential = getattr(entity, self._property_name)
     if credential and hasattr(credential, 'set_store'):
       credential.set_store(self.put)
     return credential
@@ -131,6 +132,6 @@
     Args:
       credentials: Credentials, the credentials to store.
     """
-    entity = self.model.get_or_insert(self.key_name)
-    setattr(entity, self.property_name, credentials)
+    entity = self._model.get_or_insert(self._key_name)
+    setattr(entity, self._property_name, credentials)
     entity.put()
diff --git a/oauth2client/client.py b/oauth2client/client.py
index 5ba7af8..d05b946 100644
--- a/oauth2client/client.py
+++ b/oauth2client/client.py
@@ -113,12 +113,12 @@
     the OAuth2WebServerFlow.
 
     Args:
-      token_uri: string, URI of token endpoint
-      client_id: string, client identifier
-      client_secret: string, client secret
-      access_token: string, access token
-      token_expiry: datetime, when the access_token expires
-      refresh_token: string, refresh token
+      token_uri: string, URI of token endpoint.
+      client_id: string, client identifier.
+      client_secret: string, client secret.
+      access_token: string, access token.
+      token_expiry: datetime, when the access_token expires.
+      refresh_token: string, refresh token.
       user_agent: string, The HTTP User-Agent to provide for this application.
 
 
@@ -178,14 +178,16 @@
         'user-agent': self.user_agent,
         'content-type': 'application/x-www-form-urlencoded'
     }
-    resp, content = http_request(self.token_uri, method='POST', body=body, headers=headers)
+    resp, content = http_request(
+        self.token_uri, method='POST', body=body, headers=headers)
     if resp.status == 200:
       # TODO(jcgregorio) Raise an error if loads fails?
       d = simplejson.loads(content)
       self.access_token = d['access_token']
       self.refresh_token = d.get('refresh_token', self.refresh_token)
       if 'expires_in' in d:
-        self.token_expiry = datetime.timedelta(seconds = int(d['expires_in'])) + datetime.datetime.now()
+        self.token_expiry = datetime.timedelta(
+            seconds = int(d['expires_in'])) + datetime.datetime.now()
       else:
         self.token_expiry = None
       if self.store is not None:
@@ -195,7 +197,8 @@
       raise RequestError('Invalid response %s.' % resp['status'])
 
   def authorize(self, http):
-    """
+    """Authorize an httplib2.Http instance with these credentials.
+
     Args:
        http: An instance of httplib2.Http
            or something that acts like it.
@@ -232,7 +235,7 @@
       else:
         headers['user-agent'] = self.user_agent
       resp, content = request_orig(uri, method, body, headers,
-                          redirections, connection_type)
+                                   redirections, connection_type)
       if resp.status == 401:
         logging.info("Refreshing because we got a 401")
         self._refresh(request_orig)
@@ -252,18 +255,20 @@
   """
 
   def __init__(self, client_id, client_secret, scope, user_agent,
-      authorization_uri='https://www.google.com/accounts/o8/oauth2/authorization',
+      auth_uri='https://www.google.com/accounts/o8/oauth2/authorization',
       token_uri='https://www.google.com/accounts/o8/oauth2/token',
       **kwargs):
     """Constructor for OAuth2WebServerFlow
 
     Args:
-      client_id: string, client identifier
-      client_secret: string client secret
-      scope: string, scope of the credentials being requested
+      client_id: string, client identifier.
+      client_secret: string client secret.
+      scope: string, scope of the credentials being requested.
       user_agent: string, HTTP User-Agent to provide for this application.
-      authorization_uri: string, URI for authorization endpoint
-      token_uri: string, URI for token endpoint
+      auth_uri: string, URI for authorization endpoint. For convenience
+        defaults to Google's endpoints but any OAuth 2.0 provider can be used.
+      token_uri: string, URI for token endpoint. For convenience
+        defaults to Google's endpoints but any OAuth 2.0 provider can be used.
       **kwargs: dict, The keyword arguments are all optional and required
                         parameters for the OAuth calls.
     """
@@ -271,7 +276,7 @@
     self.client_secret = client_secret
     self.scope = scope
     self.user_agent = user_agent
-    self.authorization_uri = authorization_uri
+    self.auth_uri = auth_uri
     self.token_uri = token_uri
     self.params = kwargs
     self.redirect_uri = None
@@ -298,7 +303,7 @@
       'scope': self.scope,
       }
     query.update(self.params)
-    parts = list(urlparse.urlparse(self.authorization_uri))
+    parts = list(urlparse.urlparse(self.auth_uri))
     query.update(dict(parse_qsl(parts[4]))) # 4 is the index of the query part
     parts[4] = urllib.urlencode(query)
     return urlparse.urlunparse(parts)
@@ -324,8 +329,8 @@
       'scope': self.scope
       })
     headers = {
-        'user-agent': self.user_agent,
-        'content-type': 'application/x-www-form-urlencoded'
+      'user-agent': self.user_agent,
+      'content-type': 'application/x-www-form-urlencoded'
     }
     h = httplib2.Http()
     resp, content = h.request(self.token_uri, method='POST', body=body, headers=headers)
@@ -340,8 +345,8 @@
 
       logging.info('Successfully retrieved access token: %s' % content)
       return OAuth2Credentials(access_token, self.client_id, self.client_secret,
-          refresh_token, token_expiry, self.token_uri,
-          self.user_agent)
+                               refresh_token, token_expiry, self.token_uri,
+                               self.user_agent)
     else:
       logging.error('Failed to retrieve access token: %s' % content)
       raise RequestError('Invalid response %s.' % resp['status'])
diff --git a/oauth2client/django_orm.py b/oauth2client/django_orm.py
index 3ff2c85..18a4a28 100644
--- a/oauth2client/django_orm.py
+++ b/oauth2client/django_orm.py
@@ -1,3 +1,13 @@
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+"""OAuth 2.0 utilities for Django.
+
+Utilities for using OAuth 2.0 in conjunction with
+the Django datastore.
+"""
+
+__author__ = 'jcgregorio@google.com (Joe Gregorio)'
+
 import oauth2client
 import base64
 import pickle
@@ -31,7 +41,6 @@
     return 'VARCHAR'
 
   def to_python(self, value):
-    print "In to_python", value
     if value is None:
       return None
     if isinstance(value, oauth2client.client.Flow):
diff --git a/oauth2client/file.py b/oauth2client/file.py
index 0bcab03..12dee91 100644
--- a/oauth2client/file.py
+++ b/oauth2client/file.py
@@ -17,21 +17,22 @@
   """Store and retrieve a single credential to and from a file."""
 
   def __init__(self, filename):
-    self.filename = filename
+    self._filename = filename
 
   def get(self):
     """Retrieve Credential from file.
 
     Returns:
-      apiclient.oauth.Credentials
+      oauth2client.client.Credentials
     """
     try:
-      f = open(self.filename, 'r')
+      f = open(self._filename, 'r')
       credentials = pickle.loads(f.read())
       f.close()
       credentials.set_store(self.put)
     except:
       credentials = None
+
     return credentials
 
   def put(self, credentials):
@@ -40,6 +41,6 @@
     Args:
       credentials: Credentials, the credentials to store.
     """
-    f = open(self.filename, 'w')
+    f = open(self._filename, 'w')
     f.write(pickle.dumps(credentials))
     f.close()
diff --git a/oauth2client/tools.py b/oauth2client/tools.py
index 644e72b..edc8827 100644
--- a/oauth2client/tools.py
+++ b/oauth2client/tools.py
@@ -14,14 +14,13 @@
 
 """Command-line tools for authenticating via OAuth 2.0
 
-Do the OAuth 2.0 Web Server dance for
-a command line application. Stores the generated
-credentials in a common file that is used by
-other example apps in the same directory.
+Do the OAuth 2.0 Web Server dance for a command line application. Stores the
+generated credentials in a common file that is used by other example apps in
+the same directory.
 """
 
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
-__all__ = ["run"]
+__all__ = ['run']
 
 
 def run(flow, storage):
