diff --git a/sample_generator.py b/sample_generator.py
new file mode 100644
index 0000000..3863144
--- /dev/null
+++ b/sample_generator.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python2.4
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2010 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.
+
+"""Generate command-line samples from stubs.
+
+Generates a command-line client sample application from a set of files
+that contain only the relevant portions that change between each API.
+This allows all the common code to go into a template.
+
+Usage:
+  python sample_generator.py
+
+Must be run from the root of the respository directory.
+"""
+
+__author__ = 'jcgregorio@google.com (Joe Gregorio)'
+
+import os.path
+import glob
+import sys
+import pprint
+import string
+import textwrap
+
+if not os.path.isdir('samples/src'):
+  sys.exit('Must be run from root of the respository directory.')
+
+f = open('samples/src/template.tmpl', 'r')
+template = string.Template(f.read())
+f.close()
+
+for filename in glob.glob('samples/src/*.py'):
+  # Create a dictionary from the config file to later use in filling in the
+  # templates.
+  f = open(filename, 'r')
+  contents = f.read()
+  f.close()
+  config, content = contents.split('\n\n', 1)
+  variables = {}
+  for line in config.split('\n'):
+    key, value = line[1:].split(':', 1)
+    variables[key.strip()] = value.strip()
+  variables['description'] = textwrap.fill(variables['description'])
+  variables['content'] = content
+  variables['name'] = os.path.basename(filename).split('.', 1)[0]
+  f = open(os.path.join('samples', variables['name'], variables['name'] + '.py'), 'w')
+  f.write(template.substitute(variables))
+  f.close()
+  print 'Processed: %s' % variables['name']
diff --git a/samples/buzz/buzz.py b/samples/buzz/buzz.py
index 3d657b9..18f70b8 100644
--- a/samples/buzz/buzz.py
+++ b/samples/buzz/buzz.py
@@ -15,22 +15,22 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-"""Simple command-line example for Buzz.
+"""Simple command-line sample for Buzz.
 
-Command-line application that retrieves the users latest content and then adds
-a new entry.
+Command-line application that retrieves the users latest content and
+then adds a new entry.
 
 Usage:
-  $ python buzz.py.py
+  $ python buzz.py
 
 You can also get help on all the command-line flags the program understands
 by running:
 
-  $ python buzz.py.py --help
+  $ python buzz.py --help
 
 To get detailed log output run:
 
-  $ python buzz.py.py --logging_level=DEBUG
+  $ python buzz.py --logging_level=DEBUG
 """
 
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
@@ -53,8 +53,10 @@
 # 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 Identity tab on
-# the Google APIs Console <http://code.google.com/apis/console>
+# 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='433807057907.apps.googleusercontent.com',
     client_secret='jigtZpMApkRxncxikFpR+SFg',
@@ -85,7 +87,7 @@
   # Credentials will get written back to a file.
   storage = Storage('buzz.dat')
   credentials = storage.get()
-  if credentials is None or credentials.invalid == True:
+  if credentials is None or credentials.invalid:
     credentials = run(FLOW, storage)
 
   # Create an httplib2.Http object to handle our HTTP requests and authorize it
@@ -93,11 +95,8 @@
   http = httplib2.Http()
   http = credentials.authorize(http)
 
-  # Build a service object for interacting with the API. Visit
-  # the Google APIs Console <http://code.google.com/apis/console>
-  # to get a developerKey for your own application.
-  service = build("buzz", "v1", http=http,
-            developerKey="AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0")
+  service = build("buzz", "v1", http=http)
+
   activities = service.activities()
 
   # Retrieve the first two activities
@@ -135,5 +134,7 @@
   print 'Added a comment to the new activity'
   pprint.pprint(comment)
 
+
+
 if __name__ == '__main__':
   main(sys.argv)
diff --git a/samples/customsearch/main.py b/samples/customsearch/main.py
index 25c9a84..d7b6ac5 100644
--- a/samples/customsearch/main.py
+++ b/samples/customsearch/main.py
@@ -1,7 +1,19 @@
 #!/usr/bin/python2.4
 # -*- coding: utf-8 -*-
 #
-# Copyright 2010 Google Inc. All Rights Reserved.
+# Copyright (C) 2010 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 Custom Search.
 
@@ -10,17 +22,18 @@
 
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
 
-from apiclient.discovery import build
-
 import pprint
 
-# Uncomment the next line to get very detailed logging
-# httplib2.debuglevel = 4
+from apiclient.discovery import build
 
 
 def main():
+  # Build a service object for interacting with the API. Visit
+  # the Google APIs Console <http://code.google.com/apis/console>
+  # to get an API key for your own application.
   service = build("customsearch", "v1",
             developerKey="AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0")
+
   res = service.cse().list(
       q='lectures',
       cx='017576662512468239146:omuauf_lfve',
diff --git a/samples/diacritize/main.py b/samples/diacritize/main.py
index 979a564..7aa7fbd 100644
--- a/samples/diacritize/main.py
+++ b/samples/diacritize/main.py
@@ -1,7 +1,19 @@
 #!/usr/bin/python2.4
 # -*- coding: utf-8 -*-
 #
-# Copyright 2010 Google Inc. All Rights Reserved.
+# Copyright (C) 2010 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 Diacritize.
 
@@ -11,19 +23,20 @@
 
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
 
-from apiclient.discovery import build
-
 import httplib2
 import pickle
 import pprint
 
-# Uncomment the next line to get very detailed logging
-# httplib2.debuglevel = 4
+from apiclient.discovery import build
 
 
 def main():
+  # Build a service object for interacting with the API. Visit
+  # the Google APIs Console <http://code.google.com/apis/console>
+  # to get an API key for your own application.
   service = build("diacritize", "v1",
             developerKey="AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0")
+
   print service.diacritize().corpus().get(
       lang='ar',
       last_letter='false',
diff --git a/samples/moderator/moderator.py b/samples/moderator/moderator.py
index f77534a..ab7d5a7 100644
--- a/samples/moderator/moderator.py
+++ b/samples/moderator/moderator.py
@@ -37,6 +37,7 @@
 import gflags
 import httplib2
 import logging
+import pprint
 import sys
 
 from apiclient.discovery import build
@@ -51,8 +52,10 @@
 # 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 Identity tab on
-# the Google APIs Console <http://code.google.com/apis/console>
+# 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='433807057907.apps.googleusercontent.com',
     client_secret='jigtZpMApkRxncxikFpR+SFg',
@@ -78,27 +81,20 @@
   # Set the logging according to the command-line flag
   logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level))
 
-  # A Storage object is used to storage and retrieve Credentials.
-  # See <http://code.google.com/p/google-api-python-client/wiki/HowAuthenticationWorks>
+  # 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('moderator.dat')
   credentials = storage.get()
-
-  # 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.
-  if credentials is None or credentials.invalid == True:
+  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(cache=".cache")
+  http = httplib2.Http()
   http = credentials.authorize(http)
 
-  # Build a service object for interacting with the API. Visit
-  # the Google APIs Console <http://code.google.com/apis/console>
-  # to get a developerKey for your own application.
-  service = build("moderator", "v1", http=http,
-            developerKey="AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0")
+  service = build("moderator", "v1", http=http)
 
   # Create a new Moderator series.
   series_body = {
@@ -142,5 +138,7 @@
   print "Voted on the submission"
 
 
+
+
 if __name__ == '__main__':
   main(sys.argv)
diff --git a/samples/prediction/main.py b/samples/prediction/main.py
deleted file mode 100644
index 77c9df5..0000000
--- a/samples/prediction/main.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/python2.4
-#
-# -*- coding: utf-8 -*-
-#
-# Copyright 2011 Google Inc. All Rights Reserved.
-
-"""Simple command-line example for Google Prediction API.
-
-Command-line application that trains on some data. This
-sample does the same thing as the Hello Prediction! example.
-
-  http://code.google.com/apis/predict/docs/hello_world.html
-"""
-
-__author__ = 'jcgregorio@google.com (Joe Gregorio)'
-
-import httplib2
-import pprint
-import time
-
-from apiclient.discovery import build
-from oauth2client.client import OAuth2WebServerFlow
-from oauth2client.file import Storage
-from oauth2client.tools import run
-
-# Uncomment to get low level HTTP logging
-#httplib2.debuglevel = 4
-
-# Name of Google Storage bucket/object that contains the training data
-OBJECT_NAME = "apiclient-prediction-sample/prediction_models/languages"
-
-
-def main():
-  storage = Storage('prediction.dat')
-  credentials = storage.get()
-
-  if credentials is None or credentials.invalid == True:
-    flow = OAuth2WebServerFlow(
-        # You MUST put in your client id and secret here for this sample to
-        # work. Visit https://code.google.com/apis/console to get your client
-        # credentials.
-        client_id='<Put Your Client ID Here>',
-        client_secret='<Put Your Client Secret Here>',
-        scope='https://www.googleapis.com/auth/prediction',
-        user_agent='prediction-cmdline-sample/1.0',
-        xoauth_displayname='Prediction Example App')
-
-    credentials = run(flow, storage)
-
-  http = httplib2.Http()
-  http = credentials.authorize(http)
-
-  service = build("prediction", "v1.1", http=http)
-
-  # Start training on a data set
-  train = service.training()
-  start = train.insert(data=OBJECT_NAME, body={}).execute()
-
-  print 'Started training'
-  pprint.pprint(start)
-
-  # Wait for the training to complete
-  while 1:
-    status = train.get(data=OBJECT_NAME).execute()
-    pprint.pprint(status)
-    if 'accuracy' in status['modelinfo']:
-      break
-    print 'Waiting for training to complete.'
-    time.sleep(10)
-  print 'Training is complete'
-
-  # Now make a prediction using that training
-  body = {'input': {'mixture': ["mucho bueno"]}}
-  prediction = service.predict(body=body, data=OBJECT_NAME).execute()
-  print 'The prediction is:'
-  pprint.pprint(prediction)
-
-if __name__ == '__main__':
-  main()
diff --git a/samples/prediction/prediction.py b/samples/prediction/prediction.py
new file mode 100644
index 0000000..24fdf19
--- /dev/null
+++ b/samples/prediction/prediction.py
@@ -0,0 +1,130 @@
+#!/usr/bin/python2.4
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2010 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 sample for the Google Prediction API
+
+Command-line application that trains on some data. This sample does
+the same thing as the Hello Prediction! example.
+
+Usage:
+  $ python prediction.py
+
+You can also get help on all the command-line flags the program understands
+by running:
+
+  $ python prediction.py --help
+
+To get detailed log output run:
+
+  $ python prediction.py --logging_level=DEBUG
+"""
+
+__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
+
+# 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='433807057907.apps.googleusercontent.com',
+    client_secret='jigtZpMApkRxncxikFpR+SFg',
+    scope='https://www.googleapis.com/auth/prediction',
+    user_agent='prediction-cmdline-sample/1.0')
+
+# 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('prediction.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("prediction", "v1.2", http=http)
+
+  # Name of Google Storage bucket/object that contains the training data
+  OBJECT_NAME = "apiclient-prediction-sample/prediction_models/languages"
+
+  # Start training on a data set
+  train = service.training()
+  start = train.insert(data=OBJECT_NAME, body={}).execute()
+
+  print 'Started training'
+  pprint.pprint(start)
+
+  import time
+  # Wait for the training to complete
+  while True:
+    status = train.get(data=OBJECT_NAME).execute()
+    pprint.pprint(status)
+    if 'RUNNING' != status['trainingStatus']:
+      break
+    print 'Waiting for training to complete.'
+    time.sleep(10)
+  print 'Training is complete'
+
+  # Now make a prediction using that training
+  body = {'input': {'csvInstance': ["mucho bueno"]}}
+  prediction = service.predict(body=body, data=OBJECT_NAME).execute()
+  print 'The prediction is:'
+  pprint.pprint(prediction)
+
+
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/src/buzz.py b/samples/src/buzz.py
new file mode 100644
index 0000000..10451e2
--- /dev/null
+++ b/samples/src/buzz.py
@@ -0,0 +1,41 @@
+# version: v1
+# scope: https://www.googleapis.com/auth/buzz
+# title: Simple command-line sample for Buzz.
+# description: Command-line application that retrieves the users latest content and then adds a new entry.
+
+  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)
diff --git a/samples/src/moderator.py b/samples/src/moderator.py
new file mode 100644
index 0000000..1ab9ea8
--- /dev/null
+++ b/samples/src/moderator.py
@@ -0,0 +1,46 @@
+# version: v1
+# scope: https://www.googleapis.com/auth/moderator
+# title: Simple command-line example for Moderator.
+# description: Command-line application that exercises the Google Moderator API.
+
+  # Create a new Moderator series.
+  series_body = {
+        "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"
+
+  # Create a new Moderator topic in that series.
+  topic_body = {
+        "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"
+
+  # Create a new Submission in that topic.
+  submission_body = {
+        "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 on that newly added Submission.
+  vote_body = {
+        "vote": "PLUS"
+        }
+  service.votes().insert(seriesId=topic['id']['seriesId'],
+                   submissionId=submission['id']['submissionId'],
+                   body=vote_body)
+  print "Voted on the submission"
+
diff --git a/samples/src/prediction.py b/samples/src/prediction.py
new file mode 100644
index 0000000..1c4a78d
--- /dev/null
+++ b/samples/src/prediction.py
@@ -0,0 +1,31 @@
+# version: v1.2
+# scope: https://www.googleapis.com/auth/prediction
+# title: Simple command-line sample for the Google Prediction API
+# description: Command-line application that trains on some data. This sample does the same thing as the Hello Prediction! example.
+
+  # Name of Google Storage bucket/object that contains the training data
+  OBJECT_NAME = "apiclient-prediction-sample/prediction_models/languages"
+
+  # Start training on a data set
+  train = service.training()
+  start = train.insert(data=OBJECT_NAME, body={}).execute()
+
+  print 'Started training'
+  pprint.pprint(start)
+
+  import time
+  # Wait for the training to complete
+  while True:
+    status = train.get(data=OBJECT_NAME).execute()
+    pprint.pprint(status)
+    if 'RUNNING' != status['trainingStatus']:
+      break
+    print 'Waiting for training to complete.'
+    time.sleep(10)
+  print 'Training is complete'
+
+  # Now make a prediction using that training
+  body = {'input': {'csvInstance': ["mucho bueno"]}}
+  prediction = service.predict(body=body, data=OBJECT_NAME).execute()
+  print 'The prediction is:'
+  pprint.pprint(prediction)
diff --git a/samples/src/template.tmpl b/samples/src/template.tmpl
new file mode 100644
index 0000000..e10a744
--- /dev/null
+++ b/samples/src/template.tmpl
@@ -0,0 +1,103 @@
+#!/usr/bin/python2.4
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2010 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.
+
+"""$title
+
+$description
+
+Usage:
+  $$ python $name.py
+
+You can also get help on all the command-line flags the program understands
+by running:
+
+  $$ python $name.py --help
+
+To get detailed log output run:
+
+  $$ python $name.py --logging_level=DEBUG
+"""
+
+__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
+
+# 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='433807057907.apps.googleusercontent.com',
+    client_secret='jigtZpMApkRxncxikFpR+SFg',
+    scope='$scope',
+    user_agent='$name-cmdline-sample/1.0')
+
+# 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('$name.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("$name", "$version", http=http)
+
+$content
+
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/src/urlshortener.py b/samples/src/urlshortener.py
new file mode 100644
index 0000000..74d408d
--- /dev/null
+++ b/samples/src/urlshortener.py
@@ -0,0 +1,17 @@
+# version: v1
+# title: Command-line sample for the Google URL Shortener API.
+# scope: https://www.googleapis.com/auth/urlshortener
+# description: Simple command-line example for Google URL Shortener API that shortens a URI then expands it.
+
+  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)
+
+  short_url = resp['id']
+
+  # Convert the shortened URL back into a long URL
+  resp = url.get(shortUrl=short_url).execute()
+  pprint.pprint(resp)
diff --git a/samples/translate/main.py b/samples/translate/main.py
index 94bd234..04db09a 100644
--- a/samples/translate/main.py
+++ b/samples/translate/main.py
@@ -1,26 +1,35 @@
 #!/usr/bin/python2.4
 # -*- coding: utf-8 -*-
 #
-# Copyright 2010 Google Inc. All Rights Reserved.
+# Copyright (C) 2010 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 Translate.
 
-Command-line application that translates
-some text.
+Command-line application that translates some text.
 """
 
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
 
 from apiclient.discovery import build
 
-import pprint
-
-# Uncomment the next line to get very detailed logging
-# httplib2.debuglevel = 4
-
 
 def main():
 
+  # Build a service object for interacting with the API. Visit
+  # the Google APIs Console <http://code.google.com/apis/console>
+  # to get an API key for your own application.
   service = build('translate', 'v2',
             developerKey='AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0')
   print service.translations().list(
diff --git a/samples/urlshortener/main.py b/samples/urlshortener/main.py
deleted file mode 100644
index f77a5f4..0000000
--- a/samples/urlshortener/main.py
+++ /dev/null
@@ -1,71 +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.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/urlshortener.py b/samples/urlshortener/urlshortener.py
new file mode 100644
index 0000000..b36dfd8
--- /dev/null
+++ b/samples/urlshortener/urlshortener.py
@@ -0,0 +1,116 @@
+#!/usr/bin/python2.4
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2010 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.
+
+"""Command-line sample for the Google URL Shortener API.
+
+Simple command-line example for Google URL Shortener API that shortens
+a URI then expands it.
+
+Usage:
+  $ python urlshortener.py
+
+You can also get help on all the command-line flags the program understands
+by running:
+
+  $ python urlshortener.py --help
+
+To get detailed log output run:
+
+  $ python urlshortener.py --logging_level=DEBUG
+"""
+
+__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
+
+# 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='433807057907.apps.googleusercontent.com',
+    client_secret='jigtZpMApkRxncxikFpR+SFg',
+    scope='https://www.googleapis.com/auth/urlshortener',
+    user_agent='urlshortener-cmdline-sample/1.0')
+
+# 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('urlshortener.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("urlshortener", "v1", http=http)
+
+  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)
+
+  short_url = resp['id']
+
+  # Convert the shortened URL back into a long URL
+  resp = url.get(shortUrl=short_url).execute()
+  pprint.pprint(resp)
+
+
+
+if __name__ == '__main__':
+  main(sys.argv)
