diff --git a/samples/adexchangebuyer/get_all_accounts.py b/samples/adexchangebuyer/get_all_accounts.py
index 1cba97d..b1abc90 100644
--- a/samples/adexchangebuyer/get_all_accounts.py
+++ b/samples/adexchangebuyer/get_all_accounts.py
@@ -23,22 +23,22 @@
 
 import pprint
 import sys
-from oauth2client.client import AccessTokenRefreshError
-import sample_utils
+
+from apiclient import sample_tools
+from oauth2client import client
 
 
 def main(argv):
-  sample_utils.process_flags(argv)
-  pretty_printer = pprint.PrettyPrinter()
-
-  # Authenticate and construct service
-  service = sample_utils.initialize_service()
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adexchangebuyer', 'v1.2', __doc__, __file__,
+      scope='https://www.googleapis.com/auth/adexchange.buyer')
 
   try:
     # Retrieve account list and display data as received
     result = service.accounts().list().execute()
-    pretty_printer.pprint(result)
-  except AccessTokenRefreshError:
+    pprint.pprint(result)
+  except client.AccessTokenRefreshError:
     print ('The credentials have been revoked or expired, please re-run the '
            'application to re-authorize')
 
diff --git a/samples/adexchangebuyer/get_creative.py b/samples/adexchangebuyer/get_creative.py
index ffa3385..5ed2bfa 100644
--- a/samples/adexchangebuyer/get_creative.py
+++ b/samples/adexchangebuyer/get_creative.py
@@ -22,31 +22,29 @@
 __author__ = ('david.t@google.com (David Torres)',
               'jdilallo@google.com (Joseph DiLallo)')
 
+import argparse
 import pprint
 import sys
-import gflags
-from oauth2client.client import AccessTokenRefreshError
-import sample_utils
 
-# Declare command-line flags, and set them as required.
-gflags.DEFINE_string('account_id', None,
-                     'The ID of the account that contains the creative',
-                     short_name='a')
-gflags.MarkFlagAsRequired('account_id')
-gflags.DEFINE_string('buyer_creative_id', None,
-                     'A buyer-specific id that identifies this creative',
-                     short_name='c')
-gflags.MarkFlagAsRequired('buyer_creative_id')
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('account_id', type=int,
+                     help='The ID of the account that contains the creative')
+argparser.add_argument('buyer_creative_id',
+                     help='A buyer-specific id that identifies this creative')
 
 
 def main(argv):
-  sample_utils.process_flags(argv)
-  account_id = gflags.FLAGS.account_id
-  buyer_creative_id = gflags.FLAGS.buyer_creative_id
-  pretty_printer = pprint.PrettyPrinter()
-
   # Authenticate and construct service.
-  service = sample_utils.initialize_service()
+  service, flags = sample_tools.init(
+      argv, 'adexchangebuyer', 'v1.2', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/adexchange.buyer')
+
+  account_id = flags.account_id
+  buyer_creative_id = flags.buyer_creative_id
 
   try:
     # Construct the request.
@@ -54,8 +52,8 @@
                                       buyerCreativeId=buyer_creative_id)
 
     # Execute request and print response.
-    pretty_printer.pprint(request.execute())
-  except AccessTokenRefreshError:
+    pprint.pprint(request.execute())
+  except client.AccessTokenRefreshError:
     print ('The credentials have been revoked or expired, please re-run the '
            'application to re-authorize')
 
diff --git a/samples/adexchangebuyer/get_direct_deals.py b/samples/adexchangebuyer/get_direct_deals.py
index 4acd7c6..0d39a96 100644
--- a/samples/adexchangebuyer/get_direct_deals.py
+++ b/samples/adexchangebuyer/get_direct_deals.py
@@ -23,16 +23,16 @@
 
 import pprint
 import sys
-from oauth2client.client import AccessTokenRefreshError
-import sample_utils
+
+from apiclient import sample_tools
+from oauth2client import client
 
 
 def main(argv):
-  sample_utils.process_flags(argv)
-  pretty_printer = pprint.PrettyPrinter()
-
   # Authenticate and construct service.
-  service = sample_utils.initialize_service()
+  service, flags = sample_tools.init(
+      argv, 'adexchangebuyer', 'v1.2', __doc__, __file__,
+      scope='https://www.googleapis.com/auth/adexchange.buyer')
 
   try:
     # Retrieve direct deals and display them as received if any.
@@ -40,10 +40,10 @@
     if 'direct_deals' in result:
       deals = result['direct_deals']
       for deal in deals:
-        pretty_printer.pprint(deal)
+        pprint.pprint(deal)
     else:
       print 'No direct deals found'
-  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/adexchangebuyer/sample_utils.py b/samples/adexchangebuyer/sample_utils.py
deleted file mode 100644
index 7083efa..0000000
--- a/samples/adexchangebuyer/sample_utils.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2012 Google Inc. All Rights Reserved.
-#
-# 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.
-
-"""Auxiliary file for Ad Exchange Buyer API code samples.
-
-Handles various tasks to do with logging, authentication and initialization.
-"""
-
-__author__ = 'david.t@google.com (David Torres)'
-
-import logging
-import os
-import sys
-from apiclient.discovery import build
-import gflags
-import httplib2
-from oauth2client.client import flow_from_clientsecrets
-from oauth2client.client import OOB_CALLBACK_URN
-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/adexchange.buyer',
-    redirect_uri=OOB_CALLBACK_URN,
-    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 process_flags(argv):
-  """Uses the command-line flags to set the logging level."""
-
-  # 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))
-
-
-def initialize_service():
-  """Initializes and returns an instance of the Ad Exchange Buyer service.
-
-  Authorizes the user for use of the service and returns it backs.
-
-  Returns:
-      The authorized and initialized service.
-  """
-
-  # Create an httplib2.Http object to handle our HTTP requests.
-  http = httplib2.Http()
-
-  # Prepare credentials, and authorize HTTP object with them.
-  # 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('adexchangebuyer.dat')
-  credentials = storage.get()
-  if credentials is None or credentials.invalid:
-    credentials = run(FLOW, storage)
-  http = credentials.authorize(http)
-
-  # Construct a service object via the discovery service.
-  service = build('adexchangebuyer', 'v1.2', http=http)
-  return service
diff --git a/samples/adexchangebuyer/submit_creative.py b/samples/adexchangebuyer/submit_creative.py
index abba2e3..e7ba2d7 100644
--- a/samples/adexchangebuyer/submit_creative.py
+++ b/samples/adexchangebuyer/submit_creative.py
@@ -22,36 +22,33 @@
 __author__ = ('david.t@google.com (David Torres)',
               'jdilallo@google.com (Joseph DiLallo)')
 
+import argparse
 import pprint
 import sys
-import gflags
-from oauth2client.client import AccessTokenRefreshError
-import sample_utils
 
-# Declare command-line flags, and set them as required.
-gflags.DEFINE_string('account_id', None,
-                     'The ID of the account to which submit the creative',
-                     short_name='a')
-gflags.MarkFlagAsRequired('account_id')
-gflags.DEFINE_string('buyer_creative_id', None,
-                     'A buyer-specific id identifying the creative in this ad',
-                     short_name='c')
-gflags.MarkFlagAsRequired('buyer_creative_id')
-gflags.DEFINE_string('agency_id', None,
-                     'The id of the agency who created this ad',
-                     short_name='g')
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('account_id', type=int,
+                     help='The ID of the account to which submit the creative')
+argparser.add_argument('buyer_creative_id',
+                     help='A buyer-specific id identifying the creative in'
+                       'this ad')
+argparser.add_argument('agency_id', type=int,
+                     help='The ID of the agency who created this ad')
 
 
 def main(argv):
-  sample_utils.process_flags(argv)
-  account_id = gflags.FLAGS.account_id
-  buyer_creative_id = gflags.FLAGS.buyer_creative_id
-  agency_id = gflags.FLAGS.agency_id
-  pretty_printer = pprint.PrettyPrinter()
-
   # Authenticate and construct service.
-  service = sample_utils.initialize_service()
+  service, flags = sample_tools.init(
+      argv, 'adexchangebuyer', 'v1.2', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/adexchange.buyer')
 
+  account_id = flags.account_id
+  agency_id = flags.agency_id
+  buyer_creative_id = flags.buyer_creative_id
   try:
     # Create a new creative to submit.
     creative_body = {
@@ -69,8 +66,8 @@
     creative = service.creatives().insert(body=creative_body).execute()
     # Print the response. If the creative has been already reviewed, its status
     # and categories will be included in the response.
-    pretty_printer.pprint(creative)
-  except AccessTokenRefreshError:
+    pprint.pprint(creative)
+  except client.AccessTokenRefreshError:
     print ('The credentials have been revoked or expired, please re-run the '
            'application to re-authorize')
 
diff --git a/samples/adexchangebuyer/update_account.py b/samples/adexchangebuyer/update_account.py
index eaf17a9..eaadaf2 100644
--- a/samples/adexchangebuyer/update_account.py
+++ b/samples/adexchangebuyer/update_account.py
@@ -21,31 +21,29 @@
 
 __author__ = 'david.t@google.com (David Torres)'
 
+import argparse
 import pprint
 import sys
-import gflags
-from oauth2client.client import AccessTokenRefreshError
-import sample_utils
 
-# Declare command-line flags, and set them as required.
-gflags.DEFINE_string('account_id', None,
-                     'The ID of the account to which submit the creative',
-                     short_name='a')
-gflags.MarkFlagAsRequired('account_id')
-gflags.DEFINE_string('cookie_matching_url', None,
-                     'New cookie matching URL to set for the account ',
-                     short_name='u')
-gflags.MarkFlagAsRequired('cookie_matching_url')
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('account_id', type=int,
+                     help='The ID of the account to which submit the creative')
+argparser.add_argument('cookie_matching_url',
+                     help='New cookie matching URL to set for the account ')
 
 
 def main(argv):
-  sample_utils.process_flags(argv)
-  account_id = gflags.FLAGS.account_id
-  cookie_matching_url = gflags.FLAGS.cookie_matching_url
-  pretty_printer = pprint.PrettyPrinter()
-
   # Authenticate and construct service.
-  service = sample_utils.initialize_service()
+  service, flags = sample_tools.init(
+      argv, 'adexchangebuyer', 'v1.2', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/adexchange.buyer')
+
+  account_id = flags.account_id
+  cookie_matching_url = flags.cookie_matching_url
 
   try:
     # Account information to be updated.
@@ -55,8 +53,8 @@
         }
     account = service.accounts().patch(id=account_id,
                                        body=account_body).execute()
-    pretty_printer.pprint(account)
-  except AccessTokenRefreshError:
+    pprint.pprint(account)
+  except client.AccessTokenRefreshError:
     print ('The credentials have been revoked or expired, please re-run the '
            'application to re-authorize')
 
