diff --git a/Mac/OSX/setup.jaguar.py b/Mac/OSX/setup.jaguar.py
index ba19793..bbb47fb 100644
--- a/Mac/OSX/setup.jaguar.py
+++ b/Mac/OSX/setup.jaguar.py
@@ -1,9 +1,81 @@
 from distutils.core import Extension, setup
+from distutils import sysconfig
+import os
+
+SRCDIR="../.."
+
+def find_file(filename, std_dirs, paths):
+    """Searches for the directory where a given file is located,
+    and returns a possibly-empty list of additional directories, or None
+    if the file couldn't be found at all.
+
+    'filename' is the name of a file, such as readline.h or libcrypto.a.
+    'std_dirs' is the list of standard system directories; if the
+        file is found in one of them, no additional directives are needed.
+    'paths' is a list of additional locations to check; if the file is
+        found in one of them, the resulting list will contain the directory.
+    """
+
+    # Check the standard locations
+    for dir in std_dirs:
+        f = os.path.join(dir, filename)
+        if os.path.exists(f): return []
+
+    # Check the additional directories
+    for dir in paths:
+        f = os.path.join(dir, filename)
+        if os.path.exists(f):
+            return [dir]
+
+    # Not found anywhere
+    return None
+
+def find_library_file(compiler, libname, std_dirs, paths):
+    filename = compiler.library_filename(libname, lib_type='shared')
+    result = find_file(filename, std_dirs, paths)
+    if result is not None: return result
+
+    filename = compiler.library_filename(libname, lib_type='static')
+    result = find_file(filename, std_dirs, paths)
+    return result
+    
+def waste_Extension():
+    waste_incs = find_file("WASTE.h", [], 
+            ['../'*n + 'waste/C_C++ Headers' for n in (0,1,2,3,4)])
+    if waste_incs != None:
+        waste_libs = [os.path.join(os.path.split(waste_incs[0])[0], "Static Libraries")]
+        srcdir = SRCDIR
+        return [ Extension('waste',
+                       [os.path.join(srcdir, d) for d in 
+                        'Mac/Modules/waste/wastemodule.c',
+                        'Mac/Wastemods/WEObjectHandlers.c',
+                        'Mac/Wastemods/WETabHooks.c',
+                        'Mac/Wastemods/WETabs.c'
+                       ],
+                       include_dirs = waste_incs + [
+                        os.path.join(srcdir, 'Mac/Include'),
+                        os.path.join(srcdir, 'Mac/Wastemods')
+                       ],
+                       library_dirs = waste_libs,
+                       libraries = ['WASTE'],
+                       extra_link_args = ['-framework', 'Carbon'],
+        ) ]
+    return []
 
 setup(name="MacPython for Jaguar extensions", version="2.2",
-	ext_modules=[
-		Extension("OverrideFrom23._Res",
-			["../Modules/res/_Resmodule.c"],
-			include_dirs=["../Include"],
-			extra_link_args=['-framework', 'Carbon']),
-		])
\ No newline at end of file
+    ext_modules=[
+        Extension("OverrideFrom23._Res",
+            [SRCDIR + "/Mac/Modules/res/_Resmodule.c"],
+            include_dirs=[SRCDIR+"/Mac/Include"],
+            extra_link_args=['-framework', 'Carbon']),
+        Extension('_Help', 
+            [SRCDIR + '/Mac/Modules/help/_Helpmodule.c'],
+            include_dirs=[SRCDIR+"/Mac/Include"],
+            extra_link_args=['-framework', 'Carbon']),
+        Extension('_Scrap', 
+            [SRCDIR + '/Mac/Modules/scrap/_Scrapmodule.c'],
+            include_dirs=[SRCDIR+"/Mac/Include"],
+            extra_link_args=['-framework', 'Carbon']),
+        ] + 
+        waste_Extension()
+    )
\ No newline at end of file
