diff --git a/setup.py b/setup.py
index 16355e2..538c1e0 100644
--- a/setup.py
+++ b/setup.py
@@ -17,10 +17,14 @@
 Also installs included versions of third party libraries, if those libraries
 are not already installed.
 """
-
 import setup_utils
 
-# Modules, not packages, that might need to be installed.
+has_setuptools = False
+try:
+  from setuptools import setup
+  has_setuptools = True
+except ImportError:
+  from distutils.core import setup
 
 packages = [
   'apiclient',
@@ -32,29 +36,41 @@
   'apiclient.contrib.moderator',
   'uritemplate',
 ]
+
+install_requires = []
 py_modules = []
 
-third_party_packages = ['httplib2', 'oauth2']
-third_party_modules = ['gflags', 'gflags_validators']
 
-# Don't clobber installed versions of third party libraries
-# with what we include.
-packages.extend(setup_utils.get_missing_requirements(third_party_packages))
-py_modules.extend(setup_utils.get_missing_requirements(third_party_modules))
+# (module to test for, install_requires to add if missing, packages to add if missing, py_modules to add if missing)
+REQUIREMENTS = [
+  ('httplib2', 'httplib2', 'httplib2', None),
+  ('oauth2', 'oauth2', 'oauth2', None),
+  ('gflags', 'python-gflags', None, ['gflags', 'gflags_validators']),
+  (['json', 'simplejson', 'django.utils'], 'simplejson', 'simplejson', None)
+]
 
-# It appears setuptools can't have packages and py_modules, but this project does.
-from distutils.core import setup
+for import_name, requires, package, modules in REQUIREMENTS:
+  if setup_utils.is_missing(import_name):
+    if has_setuptools:
+      install_requires.append(requires)
+    else:
+      if package is not None:
+        packages.append(package)
+      else:
+        py_modules.extend(modules)
+
 
 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="1.0alpha9",
+      version="1.0alpha10",
       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/",
+      install_requires=install_requires,
       packages=packages,
       py_modules=py_modules,
       package_data={
diff --git a/setup_utils.py b/setup_utils.py
index 79ee051..cc8b1c9 100644
--- a/setup_utils.py
+++ b/setup_utils.py
@@ -17,11 +17,13 @@
 
 __author__ = 'tom.h.miller@gmail.com (Tom Miller)'
 
+import sys
 
-def get_missing_requirements(third_party_reqs):
-  """Return a list of missing third party packages."""
-  import sys
 
+def is_missing(packages):
+  """Return True if a package can't be imported."""
+
+  retval = True
   sys_path_original = sys.path[:]
   # Remove the current directory from the list of paths to check when
   # importing modules.
@@ -34,55 +36,17 @@
       sys.path.remove(os.path.abspath(os.path.curdir))
     except ValueError:
       pass
-  missing_pkgs = []
-  for pkg in third_party_reqs:
+  if not isinstance(packages, type([])):
+    packages = [packages]
+  for name in packages:
     try:
-      __import__(pkg)
+      __import__(name)
+      retval = False
     except ImportError:
-      missing_pkgs.append(pkg)
-  # JSON support gets its own special logic
-  try:
-    import_json(sys.path)
-  except ImportError:
-    missing_pkgs.append('simplejson')
+      retval = True
+    if retval == False:
+      break
 
   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')
+  return retval
