Moved OAuth 2.0 samples up to the top level.
diff --git a/.hgignore b/.hgignore
index 3cf93e7..9406408 100644
--- a/.hgignore
+++ b/.hgignore
@@ -1,6 +1,7 @@
 syntax: glob
 
 *.pyc
+*.pyc-2.4
 *.dat
 .*.swp
 */.git/*
diff --git a/samples/appengine/main.py b/samples/appengine/main.py
index 89805aa..087a136 100755
--- a/samples/appengine/main.py
+++ b/samples/appengine/main.py
@@ -21,11 +21,13 @@
 import httplib2
 import logging
 import os
+import pickle
 
 from apiclient.discovery import build
-from apiclient.ext.appengine import FlowThreeLeggedProperty
-from apiclient.ext.appengine import OAuthCredentialsProperty
-from apiclient.oauth import FlowThreeLegged
+from oauth2client.appengine import CredentialsProperty
+from oauth2client.appengine import StorageByKeyName
+from oauth2client.client import OAuth2WebServerFlow
+from google.appengine.api import memcache
 from google.appengine.api import users
 from google.appengine.ext import db
 from google.appengine.ext import webapp
@@ -34,13 +36,8 @@
 from google.appengine.ext.webapp.util import login_required
 
 
-class Flow(db.Model):
-  # FlowThreeLegged could also be stored in memcache.
-  flow = FlowThreeLeggedProperty()
-
-
 class Credentials(db.Model):
-  credentials = OAuthCredentialsProperty()
+  credentials = CredentialsProperty()
 
 
 class MainHandler(webapp.RequestHandler):
@@ -48,16 +45,32 @@
   @login_required
   def get(self):
     user = users.get_current_user()
-    c = Credentials.get_by_key_name(user.user_id())
+    credentials = StorageByKeyName(
+        Credentials, user.user_id(), 'credentials').get()
 
-    if c:
+    if credentials is None or credentials.invalid == True:
+      flow = OAuth2WebServerFlow(
+          # Visit https://code.google.com/apis/console to
+          # generate your client_id, client_secret and to
+          # register your redirect_uri.
+          client_id='<YOUR CLIENT ID HERE>',
+          client_secret='<YOUR CLIENT SECRET HERE>',
+          scope='https://www.googleapis.com/auth/buzz',
+          user_agent='buzz-cmdline-sample/1.0',
+          domain='anonymous',
+          xoauth_displayname='Google App Engine Example App')
+
+      callback = self.request.relative_url('/auth_return')
+      authorize_url = flow.step1_get_authorize_url(callback)
+      memcache.set(user.user_id(), pickle.dumps(flow))
+      self.redirect(authorize_url)
+    else:
       http = httplib2.Http()
-      http = c.credentials.authorize(http)
+      http = credentials.authorize(http)
       service = build("buzz", "v1", http=http)
       activities = service.activities()
       activitylist = activities.list(scope='@consumption',
                                      userId='@me').execute()
-      logging.info(activitylist)
       path = os.path.join(os.path.dirname(__file__), 'welcome.html')
       logout = users.create_logout_url('/')
       self.response.out.write(
@@ -65,21 +78,6 @@
               path, {'activitylist': activitylist,
                      'logout': logout
                      }))
-    else:
-      p = build("buzz", "v1")
-      flow = FlowThreeLegged(p.auth_discovery(),
-                     consumer_key='anonymous',
-                     consumer_secret='anonymous',
-                     user_agent='google-api-client-python-buzz-webapp/1.0',
-                     domain='anonymous',
-                     scope='https://www.googleapis.com/auth/buzz',
-                     xoauth_displayname='Example Web App')
-
-      callback = self.request.relative_url('/auth_return')
-      authorize_url = flow.step1_get_authorize_url(callback)
-      f = Flow(key_name=user.user_id(), flow=flow)
-      f.put()
-      self.redirect(authorize_url)
 
 
 class OAuthHandler(webapp.RequestHandler):
@@ -87,12 +85,11 @@
   @login_required
   def get(self):
     user = users.get_current_user()
-    f = Flow.get_by_key_name(user.user_id())
-    if f:
-      credentials = f.flow.step2_exchange(self.request.params)
-      c = Credentials(key_name=user.user_id(), credentials=credentials)
-      c.put()
-      f.delete()
+    flow = pickle.loads(memcache.get(user.user_id()))
+    if flow:
+      credentials = flow.step2_exchange(self.request.params)
+      StorageByKeyName(
+          Credentials, user.user_id(), 'credentials').put(credentials)
       self.redirect("/")
     else:
       pass
diff --git a/samples/buzz/buzz.py b/samples/buzz/buzz.py
index f093f20..74ee3a4 100644
--- a/samples/buzz/buzz.py
+++ b/samples/buzz/buzz.py
@@ -11,85 +11,85 @@
 
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
 
-from apiclient.discovery import build
-from apiclient.oauth import FlowThreeLegged
-from apiclient.ext.authtools import run
-from apiclient.ext.file import Storage
-from apiclient.oauth import CredentialsInvalidError
-
+import gflags
 import httplib2
+import logging
 import pprint
+import sys
 
-# Uncomment the next line to get very detailed logging
-#httplib2.debuglevel = 4
+from apiclient.discovery import build
+from oauth2client.file import Storage
+from oauth2client.client import OAuth2WebServerFlow
+from oauth2client.tools import run
+
+FLAGS = gflags.FLAGS
+FLOW = OAuth2WebServerFlow(
+    client_id='433807057907.apps.googleusercontent.com',
+    client_secret='jigtZpMApkRxncxikFpR+SFg',
+    scope='https://www.googleapis.com/auth/buzz',
+    user_agent='buzz-cmdline-sample/1.0')
+
+gflags.DEFINE_enum('logging_level', 'ERROR',
+    ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
+    'Set the level of logging detail.')
 
 
-def main():
+def main(argv):
+  try:
+    argv = FLAGS(argv)
+  except gflags.FlagsError, e:
+    print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS)
+    sys.exit(1)
+
+  logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level))
+
   storage = Storage('buzz.dat')
   credentials = storage.get()
   if credentials is None or credentials.invalid == True:
-    buzz_discovery = build("buzz", "v1").auth_discovery()
-
-    flow = FlowThreeLegged(buzz_discovery,
-                           consumer_key='anonymous',
-                           consumer_secret='anonymous',
-                           user_agent='python-buzz-sample/1.0',
-                           domain='anonymous',
-                           scope='https://www.googleapis.com/auth/buzz',
-                           xoauth_displayname='Google API Client Example App')
-
-    credentials = run(flow, storage)
+    credentials = run(FLOW, storage)
 
   http = httplib2.Http()
   http = credentials.authorize(http)
 
+  # Build the Buzz service
   service = build("buzz", "v1", http=http,
-      developerKey="AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0")
+            developerKey="AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0")
   activities = service.activities()
 
-  try:
-    # Retrieve the first two activities
-    activitylist = activities.list(
-        max_results='2', scope='@self', userId='@me').execute()
-    print "Retrieved the first two activities"
+  # Retrieve the first two activities
+  activitylist = activities.list(
+      max_results='2', scope='@self', userId='@me').execute()
+  print "Retrieved the first two activities"
 
-    # Retrieve the next two activities
-    if activitylist:
-      activitylist = activities.list_next(activitylist).execute()
-      print "Retrieved the next two activities"
+  # Retrieve the next two activities
+  if activitylist:
+    activitylist = activities.list_next(activitylist).execute()
+    print "Retrieved the next two activities"
 
-    # Add a new activity
-    new_activity_body = {
-        "data": {
-          'title': 'Testing insert',
-          'object': {
-            'content':
-              u'Just a short note to show that insert is working. ☄',
-            'type': 'note'}
-          }
-        }
-    activity = activities.insert(
-        userId='@me', body=new_activity_body).execute()
-    print "Added a new activity"
+  # Add a new activity
+  new_activity_body = {
+      'title': 'Testing insert',
+      'object': {
+        'content':
+        u'Just a short note to show that insert is working. ☄',
+        'type': 'note'}
+      }
+  activity = activities.insert(userId='@me', body=new_activity_body).execute()
+  print "Added a new activity"
 
-    activitylist = activities.list(
-        max_results='2', scope='@self', userId='@me').execute()
+  activitylist = activities.list(
+      max_results='2', scope='@self', userId='@me').execute()
 
-    # Add a comment to that activity
-    comment_body = {
-        "data": {
-            "content": "This is a comment"
-            }
-        }
-    item = activitylist['items'][0]
-    comment = service.comments().insert(
-        userId=item['actor']['id'], postId=item['id'], body=comment_body
-        ).execute()
-    print 'Added a comment to the new activity'
-    pprint.pprint(comment)
-  except CredentialsInvalidError:
-    print 'Your credentials are no longer valid.'
-    print 'Please re-run this application to re-authorize.'
+  # Add a comment to that activity
+  comment_body = {
+      "content": "This is a comment"
+      }
+  item = activitylist['items'][0]
+  comment = service.comments().insert(
+      userId=item['actor']['id'], postId=item['id'], body=comment_body
+      ).execute()
+  print 'Added a comment to the new activity'
+  pprint.pprint(comment)
 
 if __name__ == '__main__':
-  main()
+  main(sys.argv)
diff --git a/samples/django_sample/buzz/models.py b/samples/django_sample/buzz/models.py
index 11a408d..69c180c 100644
--- a/samples/django_sample/buzz/models.py
+++ b/samples/django_sample/buzz/models.py
@@ -5,23 +5,23 @@
 from django.contrib.auth.models import User
 from django.db import models
 
-from apiclient.ext.django_orm import FlowThreeLeggedField
-from apiclient.ext.django_orm import OAuthCredentialsField
+from oauth2client.django_orm import FlowField
+from oauth2client.django_orm import CredentialsField
 
 # The Flow could also be stored in memcache since it is short lived.
 
 
-class Flow(models.Model):
+class FlowModel(models.Model):
   id = models.ForeignKey(User, primary_key=True)
-  flow = FlowThreeLeggedField()
+  flow = FlowField()
 
 
-class Credential(models.Model):
+class CredentialsModel(models.Model):
   id = models.ForeignKey(User, primary_key=True)
-  credential = OAuthCredentialsField()
+  credential = CredentialsField()
 
 
-class CredentialAdmin(admin.ModelAdmin):
+class CredentialsAdmin(admin.ModelAdmin):
     pass
 
 
@@ -29,5 +29,5 @@
     pass
 
 
-admin.site.register(Credential, CredentialAdmin)
-admin.site.register(Flow, FlowAdmin)
+admin.site.register(CredentialsModel, CredentialsAdmin)
+admin.site.register(FlowModel, FlowAdmin)
diff --git a/samples/django_sample/buzz/views.py b/samples/django_sample/buzz/views.py
index 0205c4f..c942aaf 100644
--- a/samples/django_sample/buzz/views.py
+++ b/samples/django_sample/buzz/views.py
@@ -5,9 +5,13 @@
 from django.http import HttpResponse
 from django.core.urlresolvers import reverse
 from django.contrib.auth.decorators import login_required
-from django_sample.buzz.models import Credential, Flow
+
+from oauth2client.django_orm import Storage
+from oauth2client.client import OAuth2WebServerFlow
+from django_sample.buzz.models import CredentialsModel
+from django_sample.buzz.models import FlowModel
 from apiclient.discovery import build
-from apiclient.oauth import FlowThreeLegged
+
 from django.http import HttpResponseRedirect
 from django.shortcuts import render_to_response
 
@@ -16,10 +20,23 @@
 
 @login_required
 def index(request):
-  try:
-    c = Credential.objects.get(id=request.user)
+  storage = Storage(CredentialsModel, 'id', request.user, 'credential')
+  credential = storage.get()
+  if credential is None or credential.invalid == True:
+    flow = OAuth2WebServerFlow(
+        client_id='837647042410.apps.googleusercontent.com',
+        client_secret='+SWwMCL9d8gWtzPRa1lXw5R8',
+        scope='https://www.googleapis.com/auth/buzz',
+        user_agent='buzz-django-sample/1.0',
+        )
+
+    authorize_url = flow.step1_get_authorize_url(STEP2_URI)
+    f = FlowModel(id=request.user, flow=flow)
+    f.save()
+    return HttpResponseRedirect(authorize_url)
+  else:
     http = httplib2.Http()
-    http = c.credential.authorize(http)
+    http = credential.authorize(http)
     service = build("buzz", "v1", http=http)
     activities = service.activities()
     activitylist = activities.list(scope='@consumption',
@@ -30,30 +47,15 @@
                 'activitylist': activitylist,
                 })
 
-  except Credential.DoesNotExist:
-    service = build("buzz", "v1")
-    flow = FlowThreeLegged(service.auth_discovery(),
-                   consumer_key='anonymous',
-                   consumer_secret='anonymous',
-                   user_agent='google-api-client-python-buzz-django/1.0',
-                   domain='anonymous',
-                   scope='https://www.googleapis.com/auth/buzz',
-                   xoauth_displayname='Django Example Web App')
-
-    authorize_url = flow.step1_get_authorize_url(STEP2_URI)
-    f = Flow(id=request.user, flow=flow)
-    f.save()
-    return HttpResponseRedirect(authorize_url)
-
 
 @login_required
 def auth_return(request):
     try:
-      f = Flow.objects.get(id=request.user)
+      f = FlowModel.objects.get(id=request.user)
       credential = f.flow.step2_exchange(request.REQUEST)
-      c = Credential(id=request.user, credential=credential)
-      c.save()
+      storage = Storage(CredentialsModel, 'id', request.user, 'credential')
+      storage.put(credential)
       f.delete()
       return HttpResponseRedirect("/")
-    except Flow.DoesNotExist:
+    except FlowModel.DoesNotExist:
       pass
diff --git a/samples/moderator/moderator.py b/samples/moderator/moderator.py
index 080c599..c75c962 100644
--- a/samples/moderator/moderator.py
+++ b/samples/moderator/moderator.py
@@ -3,89 +3,100 @@
 #
 # Copyright 2010 Google Inc. All Rights Reserved.
 
-"""Simple command-line example for Buzz.
+"""Simple command-line example for Moderator.
 
-Command-line application that retrieves the users
-latest content and then adds a new entry.
+Command-line application that exercises the Google Moderator API.
 """
 
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
 
+import gflags
+import httplib2
+import logging
+import sys
 
 from apiclient.discovery import build
-from apiclient.oauth import FlowThreeLegged
-from apiclient.ext.authtools import run
-from apiclient.ext.file import Storage
-from apiclient.oauth import CredentialsInvalidError
+from oauth2client.file import Storage
+from oauth2client.client import OAuth2WebServerFlow
+from oauth2client.tools import run
 
-import httplib2
+FLAGS = gflags.FLAGS
+FLOW = OAuth2WebServerFlow(
+    client_id='433807057907.apps.googleusercontent.com',
+    client_secret='jigtZpMApkRxncxikFpR+SFg',
+    scope='https://www.googleapis.com/auth/moderator',
+    user_agent='moderator-cmdline-sample/1.0')
 
-# Uncomment to get detailed logging
-# httplib2.debuglevel = 4
+gflags.DEFINE_enum('logging_level', 'ERROR',
+    ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
+    'Set the level of logging detail.')
 
 
-def main():
+def main(argv):
+  try:
+    argv = FLAGS(argv)
+  except gflags.FlagsError, e:
+    print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS)
+    sys.exit(1)
+
+  logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level))
+
   storage = Storage('moderator.dat')
   credentials = storage.get()
+
   if credentials is None or credentials.invalid == True:
-    moderator_discovery = build('moderator', 'v1').auth_discovery()
+    credentials = run(FLOW, storage)
 
-    flow = FlowThreeLegged(moderator_discovery,
-                           consumer_key='anonymous',
-                           consumer_secret='anonymous',
-                           user_agent='python-moderator-sample/1.0',
-                           domain='anonymous',
-                           scope='https://www.googleapis.com/auth/moderator',
-                           xoauth_displayname='Google API Client Example App')
-
-    credentials = run(flow, storage)
-
-  http = httplib2.Http()
+  http = httplib2.Http(cache=".cache")
   http = credentials.authorize(http)
 
-  service = build('moderator', 'v1', http=http)
+  service = build("moderator", "v1", http=http)
 
   series_body = {
-      'description': 'Share and rank tips for eating healthy and cheap!',
-      'name': 'Eating Healthy & Cheap',
-      'videoSubmissionAllowed': False
+      "data": {
+        "description": "Share and rank tips for eating healthy and cheap!",
+        "name": "Eating Healthy & Cheap",
+        "videoSubmissionAllowed": False
+        }
       }
-  try:
-    series = service.series().insert(body=series_body).execute()
-    print 'Created a new series'
+  series = service.series().insert(body=series_body).execute()
+  print "Created a new series"
 
-    topic_body = {
-        'description': 'Share your ideas on eating healthy!',
-        'name': 'Ideas',
-        'presenter': 'liz'
+  topic_body = {
+      "data": {
+        "description": "Share your ideas on eating healthy!",
+        "name": "Ideas",
+        "presenter": "liz"
         }
-    topic = service.topics().insert(seriesId=series['id']['seriesId'],
-                              body=topic_body).execute()
-    print 'Created a new topic'
+      }
+  topic = service.topics().insert(seriesId=series['id']['seriesId'],
+                            body=topic_body).execute()
+  print "Created a new topic"
 
-    submission_body = {
-        'attachmentUrl': 'http://www.youtube.com/watch?v=1a1wyc5Xxpg',
-        'attribution': {
-          'displayName': 'Bashan',
-          'location': 'Bainbridge Island, WA'
+  submission_body = {
+      "data": {
+        "attachmentUrl": "http://www.youtube.com/watch?v=1a1wyc5Xxpg",
+        "attribution": {
+          "displayName": "Bashan",
+          "location": "Bainbridge Island, WA"
           },
-        'text': 'Charlie Ayers @ Google'
+        "text": "Charlie Ayers @ Google"
         }
-    submission = service.submissions().insert(seriesId=topic['id']['seriesId'],
-        topicId=topic['id']['topicId'], body=submission_body).execute()
-    print 'Inserted a new submisson on the topic'
+      }
+  submission = service.submissions().insert(seriesId=topic['id']['seriesId'],
+      topicId=topic['id']['topicId'], body=submission_body).execute()
+  print "Inserted a new submisson on the topic"
 
-    vote_body = {
-        'vote': 'PLUS'
+  vote_body = {
+      "data": {
+        "vote": "PLUS"
         }
-    service.votes().insert(seriesId=topic['id']['seriesId'],
-                     submissionId=submission['id']['submissionId'],
-                     body=vote_body)
-    print 'Voted on the submission'
-  except CredentialsInvalidError:
-    print 'Your credentials are no longer valid.'
-    print 'Please re-run this application to re-authorize.'
+      }
+  service.votes().insert(seriesId=topic['id']['seriesId'],
+                   submissionId=submission['id']['submissionId'],
+                   body=vote_body)
+  print "Voted on the submission"
 
 
 if __name__ == '__main__':
-  main()
+  main(sys.argv)
diff --git a/samples/oauth2/buzz/buzz.py b/samples/oauth2/buzz/buzz.py
deleted file mode 100644
index 74ee3a4..0000000
--- a/samples/oauth2/buzz/buzz.py
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/python2.4
-# -*- coding: utf-8 -*-
-#
-# Copyright 2010 Google Inc. All Rights Reserved.
-
-"""Simple command-line example for Buzz.
-
-Command-line application that retrieves the users
-latest content and then adds a new entry.
-"""
-
-__author__ = 'jcgregorio@google.com (Joe Gregorio)'
-
-import gflags
-import httplib2
-import logging
-import pprint
-import sys
-
-from apiclient.discovery import build
-from oauth2client.file import Storage
-from oauth2client.client import OAuth2WebServerFlow
-from oauth2client.tools import run
-
-FLAGS = gflags.FLAGS
-FLOW = OAuth2WebServerFlow(
-    client_id='433807057907.apps.googleusercontent.com',
-    client_secret='jigtZpMApkRxncxikFpR+SFg',
-    scope='https://www.googleapis.com/auth/buzz',
-    user_agent='buzz-cmdline-sample/1.0')
-
-gflags.DEFINE_enum('logging_level', 'ERROR',
-    ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
-    'Set the level of logging detail.')
-
-
-def main(argv):
-  try:
-    argv = FLAGS(argv)
-  except gflags.FlagsError, e:
-    print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS)
-    sys.exit(1)
-
-  logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level))
-
-  storage = Storage('buzz.dat')
-  credentials = storage.get()
-  if credentials is None or credentials.invalid == True:
-    credentials = run(FLOW, storage)
-
-  http = httplib2.Http()
-  http = credentials.authorize(http)
-
-  # Build the Buzz service
-  service = build("buzz", "v1", http=http,
-            developerKey="AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0")
-  activities = service.activities()
-
-  # Retrieve the first two activities
-  activitylist = activities.list(
-      max_results='2', scope='@self', userId='@me').execute()
-  print "Retrieved the first two activities"
-
-  # Retrieve the next two activities
-  if activitylist:
-    activitylist = activities.list_next(activitylist).execute()
-    print "Retrieved the next two activities"
-
-  # Add a new activity
-  new_activity_body = {
-      'title': 'Testing insert',
-      'object': {
-        'content':
-        u'Just a short note to show that insert is working. ☄',
-        'type': 'note'}
-      }
-  activity = activities.insert(userId='@me', body=new_activity_body).execute()
-  print "Added a new activity"
-
-  activitylist = activities.list(
-      max_results='2', scope='@self', userId='@me').execute()
-
-  # Add a comment to that activity
-  comment_body = {
-      "content": "This is a comment"
-      }
-  item = activitylist['items'][0]
-  comment = service.comments().insert(
-      userId=item['actor']['id'], postId=item['id'], body=comment_body
-      ).execute()
-  print 'Added a comment to the new activity'
-  pprint.pprint(comment)
-
-if __name__ == '__main__':
-  main(sys.argv)
diff --git a/samples/oauth2/moderator/moderator.py b/samples/oauth2/moderator/moderator.py
deleted file mode 100644
index c75c962..0000000
--- a/samples/oauth2/moderator/moderator.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/python2.4
-# -*- coding: utf-8 -*-
-#
-# Copyright 2010 Google Inc. All Rights Reserved.
-
-"""Simple command-line example for Moderator.
-
-Command-line application that exercises the Google Moderator API.
-"""
-
-__author__ = 'jcgregorio@google.com (Joe Gregorio)'
-
-import gflags
-import httplib2
-import logging
-import sys
-
-from apiclient.discovery import build
-from oauth2client.file import Storage
-from oauth2client.client import OAuth2WebServerFlow
-from oauth2client.tools import run
-
-FLAGS = gflags.FLAGS
-FLOW = OAuth2WebServerFlow(
-    client_id='433807057907.apps.googleusercontent.com',
-    client_secret='jigtZpMApkRxncxikFpR+SFg',
-    scope='https://www.googleapis.com/auth/moderator',
-    user_agent='moderator-cmdline-sample/1.0')
-
-gflags.DEFINE_enum('logging_level', 'ERROR',
-    ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
-    'Set the level of logging detail.')
-
-
-def main(argv):
-  try:
-    argv = FLAGS(argv)
-  except gflags.FlagsError, e:
-    print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS)
-    sys.exit(1)
-
-  logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level))
-
-  storage = Storage('moderator.dat')
-  credentials = storage.get()
-
-  if credentials is None or credentials.invalid == True:
-    credentials = run(FLOW, storage)
-
-  http = httplib2.Http(cache=".cache")
-  http = credentials.authorize(http)
-
-  service = build("moderator", "v1", http=http)
-
-  series_body = {
-      "data": {
-        "description": "Share and rank tips for eating healthy and cheap!",
-        "name": "Eating Healthy & Cheap",
-        "videoSubmissionAllowed": False
-        }
-      }
-  series = service.series().insert(body=series_body).execute()
-  print "Created a new series"
-
-  topic_body = {
-      "data": {
-        "description": "Share your ideas on eating healthy!",
-        "name": "Ideas",
-        "presenter": "liz"
-        }
-      }
-  topic = service.topics().insert(seriesId=series['id']['seriesId'],
-                            body=topic_body).execute()
-  print "Created a new topic"
-
-  submission_body = {
-      "data": {
-        "attachmentUrl": "http://www.youtube.com/watch?v=1a1wyc5Xxpg",
-        "attribution": {
-          "displayName": "Bashan",
-          "location": "Bainbridge Island, WA"
-          },
-        "text": "Charlie Ayers @ Google"
-        }
-      }
-  submission = service.submissions().insert(seriesId=topic['id']['seriesId'],
-      topicId=topic['id']['topicId'], body=submission_body).execute()
-  print "Inserted a new submisson on the topic"
-
-  vote_body = {
-      "data": {
-        "vote": "PLUS"
-        }
-      }
-  service.votes().insert(seriesId=topic['id']['seriesId'],
-                   submissionId=submission['id']['submissionId'],
-                   body=vote_body)
-  print "Voted on the submission"
-
-
-if __name__ == '__main__':
-  main(sys.argv)
diff --git a/samples/oauth2/urlshortener/main.py b/samples/oauth2/urlshortener/main.py
deleted file mode 100644
index 62945c5..0000000
--- a/samples/oauth2/urlshortener/main.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/python2.4
-# -*- coding: utf-8 -*-
-#
-# Copyright 2010 Google Inc. All Rights Reserved.
-
-"""Simple command-line example for Google URL Shortener API.
-
-Command-line application that shortens a URL.
-"""
-
-__author__ = 'jcgregorio@google.com (Joe Gregorio)'
-
-import gflags
-import httplib2
-import logging
-import pprint
-import sys
-
-from apiclient.discovery import build
-from oauth2client.file import Storage
-from oauth2client.client import OAuth2WebServerFlow
-from oauth2client.client import AccessTokenCredentials
-from oauth2client.tools import run
-
-FLAGS = gflags.FLAGS
-FLOW = OAuth2WebServerFlow(
-    client_id='433807057907.apps.googleusercontent.com',
-    client_secret='jigtZpMApkRxncxikFpR+SFg',
-    scope='https://www.googleapis.com/auth/urlshortener',
-    user_agent='urlshortener-cmdline-sample/1.0')
-
-gflags.DEFINE_enum('logging_level', 'ERROR',
-    ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
-    'Set the level of logging detail.')
-
-
-def main(argv):
-  try:
-    argv = FLAGS(argv)
-  except gflags.FlagsError, e:
-    print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS)
-    sys.exit(1)
-
-  logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level))
-
-  storage = Storage('urlshortener.dat')
-  credentials = storage.get()
-  if credentials is None or credentials.invalid == True:
-    credentials = run(FLOW, storage)
-
-  http = httplib2.Http()
-  http = credentials.authorize(http)
-
-  # Build the url shortener service
-  service = build("urlshortener", "v1", http=http,
-            developerKey="AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0")
-  url = service.url()
-
-  # Create a shortened URL by inserting the URL into the url collection.
-  body = {"longUrl": "http://code.google.com/apis/urlshortener/" }
-  resp = url.insert(body=body).execute()
-  pprint.pprint(resp)
-
-  shortUrl = resp['id']
-
-  # Convert the shortened URL back into a long URL
-  resp = url.get(shortUrl=shortUrl).execute()
-  pprint.pprint(resp)
-
-
-if __name__ == '__main__':
-  main(sys.argv)
diff --git a/samples/urlshortener/main.py b/samples/urlshortener/main.py
index 4609c9f..62945c5 100644
--- a/samples/urlshortener/main.py
+++ b/samples/urlshortener/main.py
@@ -10,19 +10,49 @@
 
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
 
-from apiclient.discovery import build
-
+import gflags
+import httplib2
+import logging
 import pprint
+import sys
 
-# Uncomment the next two lines to get very detailed logging
-#import httplib2
-#httplib2.debuglevel = 4
+from apiclient.discovery import build
+from oauth2client.file import Storage
+from oauth2client.client import OAuth2WebServerFlow
+from oauth2client.client import AccessTokenCredentials
+from oauth2client.tools import run
+
+FLAGS = gflags.FLAGS
+FLOW = OAuth2WebServerFlow(
+    client_id='433807057907.apps.googleusercontent.com',
+    client_secret='jigtZpMApkRxncxikFpR+SFg',
+    scope='https://www.googleapis.com/auth/urlshortener',
+    user_agent='urlshortener-cmdline-sample/1.0')
+
+gflags.DEFINE_enum('logging_level', 'ERROR',
+    ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
+    'Set the level of logging detail.')
 
 
-def main():
+def main(argv):
+  try:
+    argv = FLAGS(argv)
+  except gflags.FlagsError, e:
+    print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS)
+    sys.exit(1)
+
+  logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level))
+
+  storage = Storage('urlshortener.dat')
+  credentials = storage.get()
+  if credentials is None or credentials.invalid == True:
+    credentials = run(FLOW, storage)
+
+  http = httplib2.Http()
+  http = credentials.authorize(http)
 
   # Build the url shortener service
-  service = build("urlshortener", "v1",
+  service = build("urlshortener", "v1", http=http,
             developerKey="AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0")
   url = service.url()
 
@@ -37,5 +67,6 @@
   resp = url.get(shortUrl=shortUrl).execute()
   pprint.pprint(resp)
 
+
 if __name__ == '__main__':
-  main()
+  main(sys.argv)