diff --git a/setup.py b/setup.py
index 378532d..fc662fe 100644
--- a/setup.py
+++ b/setup.py
@@ -1,36 +1,110 @@
-from setuptools import setup, Feature, Extension
+"""
+MarkupSafe
+==========
+
+Implements a unicode subclass that supports HTML strings:
+
+>>> from markupsafe import Markup, escape
+>>> escape("<script>alert(document.cookie);</script>")
+Markup(u'&lt;script&gt;alert(document.cookie);&lt;/script&gt;')
+>>> tmpl = Markup("<em>%s</em>")
+>>> tmpl % "Peter > Lustig"
+Markup(u'<em>Peter &gt; Lustig</em>')
+"""
+import sys
+from setuptools import setup, Extension, Feature
+from distutils.command.build_ext import build_ext
+from distutils.errors import CCompilerError, DistutilsExecError, \
+    DistutilsPlatformError
 
 
-setup(
-    name='MarkupSafe',
-    version='0.9',
-    url='http://dev.pocoo.org/',
-    license='BSD',
-    author='Armin Ronacher',
-    author_email='armin.ronacher@active-4.com',
-    description='Implements a XML/HTML/XHTML Markup safe string for Python',
-    long_description=__doc__,
-    zip_safe=False,
-    classifiers=[
-        'Development Status :: 5 - Production/Stable',
-        'Environment :: Web Environment',
-        'Intended Audience :: Developers',
-        'License :: OSI Approved :: BSD License',
-        'Operating System :: OS Independent',
-        'Programming Language :: Python',
-        'Programming Language :: Python :: 3',
-        'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
-        'Topic :: Software Development :: Libraries :: Python Modules',
-        'Topic :: Text Processing :: Markup :: HTML'
+# fail safe compilation shamelessly stolen from the simplejson
+# setup.py file.  Original author: Bob Ippolito
+
+
+speedups = Feature(
+    'optional C speed-enhancement module',
+    standard=True,
+    ext_modules = [
+        Extension('markupsafe._speedups', ['markupsafe/_speedups.c']),
     ],
-    packages=['markupsafe'],
-    include_package_data=True,
-    features={
-        'speedups': Feature("optional C speed-enhancements",
-            standard=False,
-            ext_modules=[
-                Extension('markupsafe._speedups', ['markupsafe/_speedups.c'])
-            ]
-        )
-    }
 )
+
+ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError)
+if sys.platform == 'win32' and sys.version_info > (2, 6):
+   # 2.6's distutils.msvc9compiler can raise an IOError when failing to
+   # find the compiler
+   ext_errors += (IOError,)
+
+
+class BuildFailed(Exception):
+    pass
+
+
+class ve_build_ext(build_ext):
+    """This class allows C extension building to fail."""
+
+    def run(self):
+        try:
+            build_ext.run(self)
+        except DistutilsPlatformError, x:
+            raise BuildFailed()
+
+    def build_extension(self, ext):
+        try:
+            build_ext.build_extension(self, ext)
+        except ext_errors, x:
+            raise BuildFailed()
+
+
+def run_setup(with_binary):
+    features = {}
+    if with_binary:
+        features['speedups'] = speedups
+    setup(
+        name='MarkupSafe',
+        version='0.9',
+        url='http://dev.pocoo.org/',
+        license='BSD',
+        author='Armin Ronacher',
+        author_email='armin.ronacher@active-4.com',
+        description='Implements a XML/HTML/XHTML Markup safe string for Python',
+        long_description=__doc__,
+        zip_safe=False,
+        classifiers=[
+            'Development Status :: 5 - Production/Stable',
+            'Environment :: Web Environment',
+            'Intended Audience :: Developers',
+            'License :: OSI Approved :: BSD License',
+            'Operating System :: OS Independent',
+            'Programming Language :: Python',
+            'Programming Language :: Python :: 3',
+            'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
+            'Topic :: Software Development :: Libraries :: Python Modules',
+            'Topic :: Text Processing :: Markup :: HTML'
+        ],
+        packages=['markupsafe'],
+        include_package_data=True,
+        cmdclass={'build_ext': ve_build_ext},
+        features=features
+    )
+
+
+try:
+    run_setup(True)
+except BuildFailed:
+    LINE = '=' * 74
+    BUILD_EXT_WARNING = 'WARNING: The C extension could not be compiled, speedups are not enabled.'
+
+    print LINE
+    print BUILD_EXT_WARNING
+    print 'Failure information, if any, is above.'
+    print 'Retrying the build without the C extension now.'
+    print
+
+    run_setup(False)
+
+    print LINE
+    print BUILD_EXT_WARNING
+    print 'Plain-Python installation succeeded.'
+    print LINE
