diff --git a/samples/gan/ccoffers/offers.py b/samples/gan/ccoffers/offers.py
index 6e5168c..ddc967a 100644
--- a/samples/gan/ccoffers/offers.py
+++ b/samples/gan/ccoffers/offers.py
@@ -21,7 +21,8 @@
 
 from apiclient.discovery import build
 from oauth2client.file import Storage
-from oauth2client.client import OAuth2WebServerFlow
+from oauth2client.client import AccessTokenRefreshError
+from oauth2client.client import flow_from_clientsecrets
 from oauth2client.tools import run
 
 settings.configure(DEBUG=True, TEMPLATE_DEBUG=True,
@@ -30,20 +31,30 @@
 
 FLAGS = gflags.FLAGS
 
-# Set up a Flow object to be used if we need to authenticate. This
-# sample uses OAuth 2.0, and we set up the OAuth2WebServerFlow with
-# the information it needs to authenticate. Note that it is called
-# the Web Server Flow, but it can also handle the flow for native
-# applications <http://code.google.com/apis/accounts/docs/OAuth2.html#IA>
-# The client_id client_secret are copied from the API Access tab on
-# the Google APIs Console <http://code.google.com/apis/console>. When
-# creating credentials for this application be sure to choose an Application
-# type of "Installed application".
-FLOW = OAuth2WebServerFlow(
-    client_id='767567128246-ti2q06i1neqm5boe2m1pqdc2riivhk41.apps.googleusercontent.com',
-    client_secret='UtdXI8nKD2SEcQRLQDZPkGT9',
+# 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/gan.readonly',
-    user_agent='gan-ccoffers-sample/1.0')
+    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
@@ -55,10 +66,10 @@
 gflags.DEFINE_enum("output_type", 'STDOUT', ['BOTH', 'HTML', 'STDOUT'],
                    'Set how to output the results received from the API')
 
-gflags.DEFINE_string('credentials_filename', 'offers.dat',
+gflags.DEFINE_string('credentials_filename', '../credentials.dat',
                      'File to store credentials in', short_name='cf')
 
-gflags.DEFINE_multistring('advertiser', None,
+gflags.DEFINE_multistring('advertiser', [],
                           'If given, advertiser we should run as')
 
 
@@ -100,16 +111,15 @@
   ccOffers = service.ccOffers()
 
   # Retrieve the relevant offers.
-  list_call = ccOffers.list(publisher=publisher,
-  # TODO(leadpipe): add back when advertiser is repeated
-  # advertiser=FLAGS.advertiser,
-                            projection='full')
-  list = list_call.execute()
-  list['publisher'] = publisher
+  request = ccOffers.list(publisher=publisher,
+                          advertiser=FLAGS.advertiser,
+                          projection='full')
+  response = request.execute()
+  response['publisher'] = publisher
 
   if FLAGS.output_type in ["BOTH", "HTML"]:
     template = get_template('offers_template.html')
-    context = Context(list)
+    context = Context(response)
 
     fname = '%s.html' % publisher
     out = open(fname, 'w')
@@ -120,7 +130,7 @@
     print 'Wrote %s' % fname
 
   if FLAGS.output_type in ["BOTH", "STDOUT"]:
-    print json.dumps(list, sort_keys=True, indent=4)
+    print json.dumps(response, sort_keys=True, indent=4)
 
 if __name__ == '__main__':
   main(sys.argv)
diff --git a/samples/gan/ccoffers/offers_template.html b/samples/gan/ccoffers/offers_template.html
index 4d1744a..4e52c03 100644
--- a/samples/gan/ccoffers/offers_template.html
+++ b/samples/gan/ccoffers/offers_template.html
@@ -14,6 +14,11 @@
   }
   tr.details td {
     padding: 0 3ex;
+    min-width: 15%;
+    max-width: 33%;
+  }
+  tr.details td img {
+    max-width: 200px;
   }
   td pre {
     margin: 3ex 3em;
@@ -33,7 +38,8 @@
 </head>
 <body>
 <h1>Credit Card Offers for Publisher {{ publisher }}</h1>
-<table>
+{% if items %}
+<table cellspacing=5>
 {% for item in items %}
 <tr>
 <td colspan=3 class="cardName">
@@ -45,18 +51,22 @@
   {% if item.imageUrl %}
   <img src="{{ item.imageUrl }}" title="Image from GAN" />
   {% endif %}
-  {% if item.logoUrl %}
-  <img src="{{ item.logoUrl }}" title="Image from AdConnect" />
-  {% endif %}
-  {% if item.disclaimer %}
-  <div>{{ item.disclaimer }}</div>
-  {% endif %}
 <td>
+  {% if item.aprDisplay %}
   <div>APR: {{ item.aprDisplay }}</div>
+  {% endif %}
+  {% if item.annualFeeDisplay %}
   <div>Annual Fee: {{ item.annualFeeDisplay }}</div>
+  {% endif %}
+  {% if item.gracePeriodDisplay %}
   <div>Grace Period: {{ item.gracePeriodDisplay }}</div>
+  {% endif %}
+  {% if item.latePaymentFee %}
   <div>Late Payment Fee: {{ item.latePaymentFee }}</div>
+  {% endif %}
+  {% if item.creditRatingDisplay %}
   <div>Credit Rating: {{ item.creditRatingDisplay }}</div>
+  {% endif %}
 <td>
   {% if item.introAprDisplay %}
   <div>Intro APR: {{ item.introAprDisplay }}</div>
@@ -88,12 +98,20 @@
   </ul>
 -->
 </tr>
+<tr>
+  <td colspan=3>
+  {% if item.disclaimer %}
+  <div style="font-size:x-small">{{ item.disclaimer }}</div>
+  {% endif %}
+</tr>
 <tr><td colspan=3><pre id="pre{{forloop.counter}}" style="display:none">
 {{ item|pprint|linebreaks }}</pre>
-{% empty %}
 <tr><td>
-<h2>Whoops, {{ publisher }} has no associated credit card offers.</h2>
 {% endfor %}
 </table>
+{% else %}
+<h2>Whoops, {{ publisher }} has no associated credit card offers.</h2>
+{% endif %}
+
 </body>
 </html>
diff --git a/samples/gan/events/events.py b/samples/gan/events/events.py
index 05a42c0..bc45167 100644
--- a/samples/gan/events/events.py
+++ b/samples/gan/events/events.py
@@ -3,7 +3,7 @@
 #
 # Copyright (C) 2011 Google Inc.
 
-"""Sample for retrieving credit-card offers from GAN."""
+"""Sample for retrieving event information from GAN."""
 
 __author__ = 'leadpipe@google.com (Luke Blanshard)'
 
@@ -22,7 +22,8 @@
 
 from apiclient.discovery import build
 from oauth2client.file import Storage
-from oauth2client.client import OAuth2WebServerFlow
+from oauth2client.client import AccessTokenRefreshError
+from oauth2client.client import flow_from_clientsecrets
 from oauth2client.tools import run
 
 settings.configure(DEBUG=True, TEMPLATE_DEBUG=True,
@@ -31,20 +32,30 @@
 
 FLAGS = gflags.FLAGS
 
-# Set up a Flow object to be used if we need to authenticate. This
-# sample uses OAuth 2.0, and we set up the OAuth2WebServerFlow with
-# the information it needs to authenticate. Note that it is called
-# the Web Server Flow, but it can also handle the flow for native
-# applications <http://code.google.com/apis/accounts/docs/OAuth2.html#IA>
-# The client_id client_secret are copied from the API Access tab on
-# the Google APIs Console <http://code.google.com/apis/console>. When
-# creating credentials for this application be sure to choose an Application
-# type of "Installed application".
-FLOW = OAuth2WebServerFlow(
-    client_id='767567128246-ti2q06i1neqm5boe2m1pqdc2riivhk41.apps.googleusercontent.com',
-    client_secret='UtdXI8nKD2SEcQRLQDZPkGT9',
+# 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/gan.readonly',
-    user_agent='gan-events-sample/1.0')
+    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
@@ -56,7 +67,7 @@
 gflags.DEFINE_enum("output_type", 'STDOUT', ['BOTH', 'HTML', 'STDOUT'],
                    'Set how to output the results received from the API')
 
-gflags.DEFINE_string('credentials_filename', 'events.dat',
+gflags.DEFINE_string('credentials_filename', '../credentials.dat',
                      'File to store credentials in', short_name='cf')
 
 API_FLAGS = {'eventDateMin':None, 'eventDateMax':None, 'advertiserId':None,
@@ -146,15 +157,22 @@
       params[key] = FLAGS[key].value
 
   # Retrieve the relevant events.
+  all_items = []
   try:
-    list_call = events.list(**params)
-    list = list_call.execute()
+    request = events.list(**params)
+    while request:
+      response = request.execute()
+      if FLAGS.output_type in ["BOTH", "STDOUT"]:
+        print json.dumps(response, sort_keys=True, indent=4)
+      all_items.extend(response['items'])
+      request = events.list_next(request, response)
+
   except apiclient.errors.HttpError, e:
     print json.dumps(e.__dict__, sort_keys=True, indent=4)
 
   if FLAGS.output_type in ["BOTH", "HTML"]:
     template = get_template('events_template.html')
-    context = Context(list)
+    context = Context({'items':items})
 
     out = open("output.html", 'w')
     out.write(template.render(context).encode('UTF-8'))
@@ -163,8 +181,5 @@
 
     print 'Wrote output.html'
 
-  if FLAGS.output_type in ["BOTH", "STDOUT"]:
-    print json.dumps(list, sort_keys=True, indent=4)
-
 if __name__ == '__main__':
   main(sys.argv)
