diff --git a/MANIFEST.in b/MANIFEST.in
index 58ab961..9154e7b 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -12,3 +12,4 @@
 include setup_utils.py
 include gflags.py
 include gflags_validators.py
+include bin/enable-app-engine-project
diff --git a/bin/enable-app-engine-project b/bin/enable-app-engine-project
new file mode 100644
index 0000000..07dfb7b
--- /dev/null
+++ b/bin/enable-app-engine-project
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+#
+# Copyright 2007 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.
+
+"""Copy the sources for google-api-python-client into an App Engine project.
+
+Copies, or symbolically links the sources of the google-api-python-client
+library into a Google App Engine project. This is necessary so that the
+source can be uploaded when the application is deployed.
+"""
+
+__author__ = 'jcgregorio@google.com (Joe Gregorio)'
+
+import gflags
+import logging
+import sys
+import os
+
+from distutils.dir_util import copy_tree
+from distutils.file_util import copy_file
+from distutils.errors import DistutilsFileError
+
+FLAGS = gflags.FLAGS
+SOURCES = [
+    'gflags',
+    'gflags_validators',
+    'httplib2',
+    'oauth2client',
+    'oauth2',
+    'apiclient',
+    'uritemplate',
+    ]
+
+gflags.DEFINE_enum('logging_level', 'ERROR',
+    ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
+    'Set the level of logging detail.')
+
+gflags.DEFINE_boolean('force', 'False',
+    'Forcibly copy over client library files.')
+
+gflags.DEFINE_boolean('dry_run', 'False', 'Don\'t actually do anything.')
+
+def find_source(module):
+  isdir = False
+  location = ''
+  m = __import__(module)
+  logging.debug('Absolute path for module %s: %s' % (module, m.__file__))
+  basename = os.path.basename(m.__file__)
+  if basename.startswith('__init__.'):
+    isdir = True
+    location = os.path.dirname(m.__file__)
+  else:
+    location = m.__file__.rsplit('.', 1)[0] + '.py'
+
+  return (isdir, location)
+
+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))
+
+  logging.info('Setting up the directories: %s' % argv[1:])
+  for dir in argv[1:]:
+    # Check if the supplied directory is an App Engine project by looking
+    # for an app.yaml
+    if not os.path.isfile(os.path.join(dir, 'app.yaml')):
+      sys.exit('The given directory is not a Google App Engine project: %s', dir)
+
+
+    # Build up the set of file or directory copying actions we need to do
+    action = [] # (src, dst, isdir)
+    for source in SOURCES:
+      isdir, source_location = find_source(source)
+      if isdir:
+        target = source
+      else:
+        target = source + ".py"
+      full_target = os.path.join(dir, target)
+      if not FLAGS.force and os.path.exists(full_target):
+        noun = isdir and 'Directory' or 'File'
+        sys.exit("%s already exists in project: %s" % (noun, target))
+      action.append((source_location, full_target, isdir))
+
+    # Now perform all the copying actions we collected
+    try:
+      for src, dst, isdir in action:
+        if isdir:
+          results = copy_tree(src, dst, FLAGS.dry_run)
+          for filename in results:
+            logging.info('Copied to: %s' % filename)
+        else:
+          filename, copied = copy_file(src, dst, FLAGS.dry_run)
+          logging.info('Copied to: %s Successfully: %s' % (filename, copied))
+    except DistutilsFileError, e:
+      sys.exit(str(e))
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/setup.py b/setup.py
index ae4d21e..ef75d98 100644
--- a/setup.py
+++ b/setup.py
@@ -64,7 +64,7 @@
 accessing the Buzz, Moderator, and Latitude APIs."""
 
 setup(name="google-api-python-client",
-      version="1.0alpha11",
+      version="1.0beta1",
       description="Google API Client Library for Python",
       long_description=long_desc,
       author="Joe Gregorio",
@@ -76,6 +76,7 @@
       package_data={
         'apiclient': ['contrib/*/*.json']
         },
+      scripts=['bin/enable-app-engine-project'],
       license="Apache 2.0",
       keywords="google api client",
       classifiers=['Development Status :: 3 - Alpha',
