diff --git a/README b/README
index 43e4611..5a5efe4 100644
--- a/README
+++ b/README
@@ -4,12 +4,27 @@
 Installation
 ============
 
-None. 
+To install, simply say
 
-For the time being the required libraries
-are checked into this directory to make 
-developement easier, so you can just run
-this directly after checking out.
+   $ python setup.py install --record=files.txt
+
+to install the files and record what files are installed in files.txt.
+
+If you want to do a "mock install" and simply extend your PYTHONPATH
+for the current shell to include this folder and the packages in it, do
+
+   $ source setpath.sh
+
+from the root of the project directory.
+
+
+Uninstall
+=========
+
+   $ cat files.txt | xargs rm -rf
+
+You may need root privileges to do this.
+
 
 Running
 =======
@@ -26,6 +41,9 @@
 
    $ python samples/cmdline/buzz.py
 
+After following the install directions (using setup.py or setpath.sh) you
+should be able to cd to samples/cmdline and run the code from there.
+
 
 Third Party Libraries
 ====================
@@ -33,4 +51,3 @@
 http://code.google.com/p/httplib2
 http://code.google.com/p/uri-templates
 http://github.com/simplegeo/python-oauth2
-
diff --git a/setup.py b/setup.py
index e13b99b..2234acf 100644
--- a/setup.py
+++ b/setup.py
@@ -1,16 +1,62 @@
-#!/usr/bin/env python
-from distutils.core import setup
+# 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.
 
-# First pass at a setup.py, in the long run we will
-# need two, one for a version of the library that just
-# includes apiclient, and another that also includes 
-# all of the dependencies.
+"""Setup script for Google API Python client.
+
+Also installs included versions of third party libraries, if those libraries
+are not already installed.
+"""
+
+import setup_utils
+
+packages = ['apiclient', 'uritemplate']
+
+# Don't clobber installed versions of third party libraries
+# with what we include.
+packages.extend(setup_utils.get_missing_requirements())
+print 'Installing the following packages: '
+print str(packages)[1:-1]
+
+try:
+  # Some people prefer setuptools, and may have that installed
+  from setuptools import setup
+except ImportError:
+  from distutils.core import setup
+  print 'Loaded distutils.core'
+else:
+  print 'Loaded setuptools'
+
+long_desc = """The Google API Client for Python is a client library for 
+accessing the Buzz, Moderator, and Latitude APIs."""
+
 setup(name="google-api-python-client",
       version="0.1",
       description="Google API Client Library for Python",
+      long_description=long_desc,
       author="Joe Gregorio",
       author_email="jcgregorio@google.com",
       url="http://code.google.com/p/google-api-python-client/",
-      py_modules = ['apiclient', 'oauth2', 'simplejson', 'uritemplate'],
-      license = "Apache 2.0",
-      keywords="google api client")
+      packages=packages,
+      package_data={'apiclient':['contrib/buzz/future.json',
+                                 'contrib/latitude/future.json',
+                                 'contrib/moderator/future.json']},
+      license="Apache 2.0",
+      keywords="google api client",
+      classifiers=['Development Status :: 3 - Alpha',
+                   'Intended Audience :: Developers',
+                   'License :: OSI Approved :: Apache Software License',
+                   'Operating System :: POSIX',
+                   'Topic :: Internet :: WWW/HTTP'])
+
+print 'Setup complete!'
diff --git a/setup_utils.py b/setup_utils.py
new file mode 100644
index 0000000..05443b6
--- /dev/null
+++ b/setup_utils.py
@@ -0,0 +1,86 @@
+# 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.
+
+"""Utility functions for setup.py file(s)."""
+
+
+__author__ = 'tom.h.miller@gmail.com (Tom Miller)'
+
+
+def get_missing_requirements():
+  """Return a list of missing third party packages."""
+  import sys
+
+  sys_path_original = sys.path[:]
+  # Remove the current directory from the list of paths to check when
+  # importing modules.
+  try:
+    # Sometimes it's represented by an empty string?
+    sys.path.remove('')
+  except ValueError:
+    import os.path
+    sys.path.remove(os.path.abspath(os.path.curdir))
+  missing_pkgs = []
+  third_party_reqs = ['oauth2', 'httplib2']
+  for pkg in third_party_reqs:
+    try:
+      __import__(pkg)
+    except ImportError:
+      missing_pkgs.append(pkg)
+  # JSON support gets its own special logic
+  try:
+    import_json(sys.path)
+  except ImportError:
+    missing_pkgs.append('simplejson')
+
+  sys.path = sys_path_original
+  return missing_pkgs
+
+
+def import_json(import_path=None):
+  """Return a package that will provide JSON support.
+
+  Args:
+    import_path: list Value to assing to sys.path before checking for packages.
+                 Default None for default sys.path.
+  Return:
+    A package, one of 'json' (if running python 2.6),
+                      'django.utils.simplejson' (if django is installed)
+                      'simplejson' (if third party library simplejson is found)
+  Raises:
+    ImportError if none of those packages are found.
+  """
+  import sys
+  sys_path_orig = sys.path[:]
+  if import_path is not None:
+    sys.path = import_path
+
+  try:
+    # Should work for Python 2.6.
+    pkg = __import__('json')
+  except ImportError:
+    try:
+      pkg = __import__('django.utils').simplejson
+    except ImportError:
+      try:
+        pkg = __import__('simplejson')
+      except ImportError:
+        pkg = None
+
+  if import_path is not None:
+    sys.path = sys_path_orig
+  if pkg:
+    return pkg
+  else:
+    raise ImportError('Cannot find json support')    
