diff --git a/sample_generator.py b/sample_generator.py
deleted file mode 100644
index 57ba303..0000000
--- a/sample_generator.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/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()
-
-  lines = content.split('\n')
-  outlines = []
-  for l in lines:
-    if l:
-      outlines.append('  ' + l)
-    else:
-      outlines.append('')
-  content = '\n'.join(outlines)
-
-  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/src/moderator.py b/samples/src/moderator.py
deleted file mode 100644
index e27b811..0000000
--- a/samples/src/moderator.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# 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
deleted file mode 100644
index 1c4a78d..0000000
--- a/samples/src/prediction.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# 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
deleted file mode 100644
index 846d17f..0000000
--- a/samples/src/template.tmpl
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/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 AccessTokenRefreshError
-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)
-
-  try:
-
-$content
-
-  except 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/src/urlshortener.py b/samples/src/urlshortener.py
deleted file mode 100644
index 74d408d..0000000
--- a/samples/src/urlshortener.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# 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)
