diff --git a/apiclient/http.py b/apiclient/http.py
index 86d6663..0c49045 100644
--- a/apiclient/http.py
+++ b/apiclient/http.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2010 Google Inc.
+# Copyright (C) 2012 Google Inc.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -68,6 +68,13 @@
   """Describes a media object to upload.
 
   Base class that defines the interface of MediaUpload subclasses.
+
+  Note that subclasses of MediaUpload may allow you to control the chunksize
+  when upload a media object. It is important to keep the size of the chunk as
+  large as possible to keep the upload efficient. Other factors may influence
+  the size of the chunk you use, particularly if you are working in an
+  environment where individual HTTP requests may have a hardcoded time limit,
+  such as under certain classes of requests under Google App Engine.
   """
 
   def getbytes(self, begin, end):
diff --git a/samples/latitude/client_secrets.json b/samples/latitude/client_secrets.json
new file mode 100644
index 0000000..a232f37
--- /dev/null
+++ b/samples/latitude/client_secrets.json
@@ -0,0 +1,9 @@
+{
+  "web": {
+    "client_id": "[[INSERT CLIENT ID HERE]]",
+    "client_secret": "[[INSERT CLIENT SECRET HERE]]",
+    "redirect_uris": [],
+    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
+    "token_uri": "https://accounts.google.com/o/oauth2/token"
+  }
+}
diff --git a/samples/latitude/latitude.py b/samples/latitude/latitude.py
index a4d29d2..3700f01 100644
--- a/samples/latitude/latitude.py
+++ b/samples/latitude/latitude.py
@@ -1,68 +1,133 @@
 #!/usr/bin/python2.4
 # -*- coding: utf-8 -*-
 #
-# Copyright 2010 Google Inc. All Rights Reserved.
+# Copyright (C) 2012 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
 
 """Simple command-line example for Latitude.
 
 Command-line application that sets the users
 current location.
+
+Usage:
+  $ python latitude.py
+
+You can also get help on all the command-line flags the program understands
+by running:
+
+  $ python latitude.py --help
+
+To get detailed log output run:
+
+  $ python latitude.py --logging_level=DEBUG
 """
 
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
 
-
-from apiclient.discovery import build
-
+import gflags
 import httplib2
-import pickle
+import logging
+import os
+import pprint
+import sys
 
 from apiclient.discovery import build
-from apiclient.oauth import FlowThreeLegged
-from apiclient.ext.authtools import run
-from apiclient.ext.file import Storage
-
-# Uncomment to get detailed logging
-# httplib2.debuglevel = 4
+from oauth2client.file import Storage
+from oauth2client.client import AccessTokenRefreshError
+from oauth2client.client import flow_from_clientsecrets
+from oauth2client.tools import run
 
 
-def main():
+FLAGS = gflags.FLAGS
+
+# CLIENT_SECRETS, name of a file containing the OAuth 2.0 information for this
+# application, including client_id and client_secret, which are found
+# on the API Access tab on the Google APIs
+# Console <http://code.google.com/apis/console>
+CLIENT_SECRETS = 'client_secrets.json'
+
+# Helpful message to display in the browser if the CLIENT_SECRETS file
+# is missing.
+MISSING_CLIENT_SECRETS_MESSAGE = """
+WARNING: Please configure OAuth 2.0
+
+To make this sample run you will need to populate the client_secrets.json file
+found at:
+
+   %s
+
+with information from the APIs Console <https://code.google.com/apis/console>.
+
+""" % os.path.join(os.path.dirname(__file__), CLIENT_SECRETS)
+
+# Set up a Flow object to be used if we need to authenticate.
+FLOW = flow_from_clientsecrets(CLIENT_SECRETS,
+    scope='https://www.googleapis.com/auth/latitude.all.best',
+    message=MISSING_CLIENT_SECRETS_MESSAGE)
+
+
+# The gflags module makes defining command-line options easy for
+# applications. Run this program with the '--help' argument to see
+# all the flags that it understands.
+gflags.DEFINE_enum('logging_level', 'ERROR',
+    ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
+    'Set the level of logging detail.')
+
+
+def main(argv):
+  # Let the gflags module process the command-line arguments
+  try:
+    argv = FLAGS(argv)
+  except gflags.FlagsError, e:
+    print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS)
+    sys.exit(1)
+
+  # Set the logging according to the command-line flag
+  logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level))
+
+  # If the Credentials don't exist or are invalid run through the native client
+  # flow. The Storage object will ensure that if successful the good
+  # Credentials will get written back to a file.
   storage = Storage('latitude.dat')
   credentials = storage.get()
-  if credentials is None or credentials.invalid == True:
-    auth_discovery = build("latitude", "v1").auth_discovery()
-    flow = FlowThreeLegged(auth_discovery,
-                           # You MUST have a consumer key and secret tied to a
-                           # registered domain to use the latitude API.
-                           #
-                           # https://www.google.com/accounts/ManageDomains
-                           consumer_key='REGISTERED DOMAIN NAME',
-                           consumer_secret='KEY GIVEN DURING REGISTRATION',
-                           user_agent='google-api-client-python-latitude/1.0',
-                           domain='REGISTERED DOMAIN NAME',
-                           scope='https://www.googleapis.com/auth/latitude',
-                           xoauth_displayname='Google API Latitude Example',
-                           location='current',
-                           granularity='city'
-                           )
 
-    credentials = run(flow, storage)
+  if credentials is None or credentials.invalid:
+    credentials = run(FLOW, storage)
 
+  # Create an httplib2.Http object to handle our HTTP requests and authorize it
+  # with our good Credentials.
   http = httplib2.Http()
   http = credentials.authorize(http)
 
   service = build("latitude", "v1", http=http)
 
-  body = {
-      "data": {
-          "kind": "latitude#location",
-          "latitude": 37.420352,
-          "longitude": -122.083389,
-          "accuracy": 130,
-          "altitude": 35
-          }
-      }
-  print service.currentLocation().insert(body=body).execute()
+  try:
+    body = {
+        "data": {
+            "kind": "latitude#location",
+            "latitude": 37.420352,
+            "longitude": -122.083389,
+            "accuracy": 130,
+            "altitude": 35
+            }
+        }
+
+    print service.currentLocation().insert(body=body).execute()
+
+  except AccessTokenRefreshError:
+    print ("The credentials have been revoked or expired, please re-run"
+      "the application to re-authorize")
 
 if __name__ == '__main__':
-  main()
+  main(sys.argv)
