diff --git a/samples/audit/audit.py b/samples/audit/audit.py
index c34de84..eb43b40 100644
--- a/samples/audit/audit.py
+++ b/samples/audit/audit.py
@@ -36,80 +36,18 @@
 
 __author__ = 'rahulpaul@google.com (Rahul Paul)'
 
-import gflags
-import httplib2
-import logging
-import os
 import pprint
 import sys
 
-from apiclient.discovery import build
-from oauth2client.client import AccessTokenRefreshError
-from oauth2client.client import flow_from_clientsecrets
-from oauth2client.file import Storage
-from oauth2client.tools import run
-
-
-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/apps/reporting/audit.readonly',
-    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.')
+from oauth2client import client
+from apiclient import sample_tools
 
 
 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('plus.dat')
-  credentials = storage.get()
-
-  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)
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'audit', 'v1', __doc__, __file__,
+      scope='https://www.googleapis.com/auth/apps/reporting/audit.readonly')
 
   service = build('audit', 'v1', http=http)
 
@@ -121,7 +59,7 @@
     activity_list = activities.list(
         applicationId='207535951991', customerId='C01rv1wm7', maxResults='2',
         actorEmail='admin@enterprise-audit-clientlib.com').execute()
-    print_activities(activity_list)
+    pprint.pprint(activity_list)
 
     # Now retrieve the next 2 events
     match = re.search('(?<=continuationToken=).+$', activity_list['next'])
@@ -133,9 +71,9 @@
           applicationId='207535951991', customerId='C01rv1wm7',
           maxResults='2', actorEmail='admin@enterprise-audit-clientlib.com',
           continuationToken=next_token).execute()
-      print_activities(activity_list)
+      pprint.pprint(activity_list)
 
-  except AccessTokenRefreshError:
+  except client.AccessTokenRefreshError:
     print ('The credentials have been revoked or expired, please re-run'
       'the application to re-authorize')
 
diff --git a/samples/blogger/blogger.py b/samples/blogger/blogger.py
index 8e3ccdd..035f5cd 100644
--- a/samples/blogger/blogger.py
+++ b/samples/blogger/blogger.py
@@ -34,109 +34,49 @@
 
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
 
-import gflags
-import httplib2
-import logging
-import pprint
 import sys
-import os
 
-from apiclient.discovery import build
-from oauth2client.file import Storage
-from oauth2client.client import AccessTokenRefreshError
-from oauth2client.client import flow_from_clientsecrets
-from oauth2client.tools import run
-
-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/blogger',
-           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.')
+from oauth2client import client
+from apiclient import sample_tools
 
 
 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)
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'plus', 'v1', __doc__, __file__,
+      scope='https://www.googleapis.com/auth/blogger')
 
-  # 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('blogger.dat')
-  credentials = storage.get()
-  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("blogger", "v2", http=http)
+  service = build('blogger', 'v2', http=http)
 
   try:
 
       users = service.users()
 
       # Retrieve this user's profile information
-      thisuser = users.get(userId="self").execute(http=http)
-      print "This user's display name is: %s" % thisuser['displayName']
+      thisuser = users.get(userId='self').execute(http=http)
+      print 'This user\'s display name is: %s' % thisuser['displayName']
 
       # Retrieve the list of Blogs this user has write privileges on
-      thisusersblogs = users.blogs().list(userId="self").execute()
+      thisusersblogs = users.blogs().list(userId='self').execute()
       for blog in thisusersblogs['items']:
-        print "The blog named \"%s\" is at: %s" % (blog['name'], blog['url'])
+        print 'The blog named \'%s\' is at: %s' % (blog['name'], blog['url'])
 
       posts = service.posts()
 
       # List the posts for each blog this user has
       for blog in thisusersblogs['items']:
-        print "The posts for %s:" % blog['name']
+        print 'The posts for %s:' % blog['name']
         request = posts.list(blogId=blog['id'])
         while request != None:
           posts_doc = request.execute(http=http)
           if 'items' in posts_doc and not (posts_doc['items'] is None):
             for post in posts_doc['items']:
-              print "  %s (%s)" % (post['title'], post['url'])
+              print '  %s (%s)' % (post['title'], post['url'])
           request = posts.list_next(request, posts_doc)
 
-  except AccessTokenRefreshError:
-    print ("The credentials have been revoked or expired, please re-run"
-      "the application to re-authorize")
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run'
+      'the application to re-authorize')
 
 if __name__ == '__main__':
   main(sys.argv)
diff --git a/samples/coordinate/coordinate.py b/samples/coordinate/coordinate.py
index 49ca852..289a2c8 100644
--- a/samples/coordinate/coordinate.py
+++ b/samples/coordinate/coordinate.py
@@ -38,91 +38,23 @@
 
 __author__ = 'zachn@google.com (Zach Newell)'
 
-import gflags
-import httplib2
-import logging
-import os
+import argparse
 import pprint
 import sys
 
-from apiclient.discovery import build
-from oauth2client.client import AccessTokenRefreshError
-from oauth2client.client import flow_from_clientsecrets
-from oauth2client.file import Storage
-from oauth2client.tools import run
+from oauth2client import client
+from apiclient import sample_tools
 
-
-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)
-
-FLOW = flow_from_clientsecrets(CLIENT_SECRETS,
-    scope='https://www.googleapis.com/auth/coordinate',
-    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.')
-
-gflags.DEFINE_string('teamId', None, 'Coordinate Team ID', short_name='t')
-
-# Create a validator for the teamId flag.
-gflags.RegisterValidator('teamId',
-    lambda value: value is not None,
-    message='--teamId must be defined.',
-    flag_values=FLAGS)
-
-# Make the flag mandatory
-gflags.MarkFlagAsRequired('teamId')
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('teamId', help='Coordinate Team ID')
 
 
 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('coordinate.dat')
-  credentials = storage.get()
-
-  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)
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'coordinate', 'v1', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/coordinate')
 
   service = build('coordinate', 'v1', http=http)
 
@@ -142,7 +74,7 @@
     # Insert a job and store the results
     insert_result = service.jobs().insert(body='',
       title='Google Campus',
-      teamId=FLAGS.teamId,
+      teamId=flags.teamId,
       address='1600 Amphitheatre Parkway Mountain View, CA 94043',
       lat='37.422120',
       lng='122.084429',
@@ -153,7 +85,7 @@
 
     # Close the job
     update_result = service.jobs().update(body='',
-      teamId=FLAGS.teamId,
+      teamId=flags.teamId,
       jobId=insert_result['id'],
       progress='COMPLETED').execute()
 
