diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index 5af9ca0..e13bafc 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -298,24 +298,27 @@
     rpcpid = None
 
     def spawn_subprocess(self):         
-        w = ['-W' + s for s in sys.warnoptions]        
-        args = [self.find_executable()] + w \
-             + ["-c", "__import__('run').main()", str(self.port)]
+        args = self.build_subprocess_arglist()
         self.rpcpid = os.spawnv(os.P_NOWAIT, args[0], args)
 
-    def find_executable(self):
-        if sys.platform == 'darwin' and sys.executable.count('.app'):
-            # On Mac OS X, avoid calling sys.executable because it ignores
-            # command-line options (sys.executable is an applet)
+    def build_subprocess_arglist(self):
+        if sys.platform == 'darwin' and sys.argv[0].count('.app'):
+            # We need to avoid using sys.executable because it fails on some
+            # of the applet architectures On Mac OS X.
             #
-            # Instead, find the executable by looking relative to
-            # sys.prefix.
-            executable = os.path.join(sys.prefix, 'Resources', 
-                                      'Python.app', 'Contents',
-                                      'MacOS', 'python')
-            return executable
+            # here are the applet architectures tried:
+            #
+            # framework applet: sys.executable + -p is correct
+            # python 2.2 + pure python main applet: 
+            #                   sys.executable + -p is correct
+            # pythonw idle.py:  sys.executable + -c is correct
+            #
+            # XXX what about warnoptions?
+            return [sys.executable, '-p', str(self.port)]
         else:
-            return sys.executable 
+            w = ['-W' + s for s in sys.warnoptions]        
+            return [sys.executable] + w \
+                 + ["-c", "__import__('run').main()", str(self.port)]
 
     def start_subprocess(self):
         addr = ("localhost", self.port)
@@ -1174,6 +1177,7 @@
     fixwordbreaks(root)
     root.withdraw()
     flist = PyShellFileList(root)
+
     if enable_edit:
         if not (cmd or script):
             for filename in args:
diff --git a/Lib/idlelib/boolcheck.py b/Lib/idlelib/boolcheck.py
new file mode 100644
index 0000000..bc988d7
--- /dev/null
+++ b/Lib/idlelib/boolcheck.py
@@ -0,0 +1,10 @@
+"boolcheck - import this module to ensure True, False, bool() builtins exist."
+try: 
+    True
+except NameError:
+    import __builtin__
+    __builtin__.True = 1
+    __builtin__.False = 0
+    from operator import truth
+    __builtin__.bool = truth
+
diff --git a/Lib/idlelib/idle b/Lib/idlelib/idle
index 8638a16..d5aab04 100755
--- a/Lib/idlelib/idle
+++ b/Lib/idlelib/idle
@@ -1,4 +1,33 @@
 #! /usr/bin/env python
 
-import PyShell
-PyShell.main()
+# Add IDLE.app/Contents/Resources/idlelib to path.
+# __file__ refers to this file when it is used as a module, sys.argv[0]
+# refers to this file when it is used as a script (pythonw macosx_main.py)
+import sys
+from os.path import split, join
+try:
+    __file__
+except NameError:
+    __file__ = sys.argv[0]
+idlelib = join(split(__file__)[0], 'idlelib')
+if os.path.isdir(idlelib):
+    sys.path.append(idlelib)
+
+# Make sure True, False, bool() builtins exist.
+# - preserves 2.2 compatibility - 2.2.1 includes bool, 2.2 does not.
+# - important for Mac OS X because it ships python 2.2
+import boolcheck
+
+# see if we are being asked to execute the subprocess code
+if '-p' in sys.argv:
+    # run expects only the port number in sys.argv
+    sys.argv.remove('-p')
+
+    # this module will become the namepsace used by the interactive
+    # interpreter; remove all variables we have defined.
+    del sys, __file__, boolcheck, split, join
+    __import__('run').main()
+else:
+    # start the application.
+    import PyShell
+    PyShell.main()
diff --git a/Lib/idlelib/macosx_main.py b/Lib/idlelib/macosx_main.py
new file mode 100644
index 0000000..88e4197
--- /dev/null
+++ b/Lib/idlelib/macosx_main.py
@@ -0,0 +1,46 @@
+"""IDLE.app
+
+Installation:
+  see the install_IDLE target in python/dist/src/Mac/OSX/Makefile
+  
+Usage: 
+
+1. Double clicking IDLE icon will open IDLE.
+2. Dropping file on IDLE icon will open that file in IDLE.
+3. Launch from command line with files with this command-line:
+
+     /Applications/Python/IDLE.app/Contents/MacOS/python file1 file2 file3
+
+"""
+
+# Add IDLE.app/Contents/Resources/idlelib to path.
+# __file__ refers to this file when it is used as a module, sys.argv[0]
+# refers to this file when it is used as a script (pythonw macosx_main.py)
+import sys
+
+from os.path import split, join, isdir
+try:
+    __file__
+except NameError:
+    __file__ = sys.argv[0]
+idlelib = join(split(__file__)[0], 'idlelib')
+if isdir(idlelib):
+  sys.path.append(idlelib)
+
+# Make sure True, False, bool() builtins exist.
+# - preserves 2.2 compatibility - 2.2.1 includes bool, 2.2 does not.
+# - important for Mac OS X because it ships python 2.2
+import boolcheck
+
+# see if we are being asked to execute the subprocess code
+if '-p' in sys.argv:
+    # run expects only the port number in sys.argv
+    sys.argv.remove('-p')
+
+    # this module will become the namepsace used by the interactive
+    # interpreter; remove all variables we have defined.
+    del sys, __file__, boolcheck, split, join
+    __import__('run').main()
+else:
+    # Load idlelib/idle.py which starts the application.
+    import idle 
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py
index 5b9864c..f394bac 100644
--- a/Lib/idlelib/run.py
+++ b/Lib/idlelib/run.py
@@ -2,6 +2,8 @@
 import time
 import socket
 
+import boolcheck
+
 import CallTips
 import RemoteDebugger
 import RemoteObjectBrowser
