diff --git a/Mac/Python/macmain.c b/Mac/Python/macmain.c
index 0ac81cb..547456f 100644
--- a/Mac/Python/macmain.c
+++ b/Mac/Python/macmain.c
@@ -40,6 +40,10 @@
 #include <SIOUX.h>
 #endif
 
+#ifdef THINK_C
+#include <console.h>
+#endif
+
 #define STARTUP "PythonStartup"
 
 extern int Py_DebugFlag; /* For parser.c, declared in pythonrun.c */
@@ -59,6 +63,10 @@
 static char **orig_argv;
 static int  orig_argc;
 
+/* Flags indicating whether stdio window should stay open on termination */
+static int keep_normal;
+static int keep_error = 1;
+
 #ifdef USE_MAC_APPLET_SUPPORT
 /* Applet support */
 
@@ -117,12 +125,7 @@
 	err = run_main_resource();
 	fflush(stderr);
 	fflush(stdout);
-#ifdef __MWERKS__
-	if (!err)
-		SIOUXSettings.autocloseonquit = 1;
-	else
-		printf("\n[Terminated]\n");
-#endif
+	PyMac_Exit(err);
 	/* XXX Should we bother to Py_Exit(sts)? */
 }
 
@@ -164,7 +167,8 @@
 */
 void
 PyMac_InteractiveOptions(int *inspect, int *verbose, int *suppress_print, 
-						 int *unbuffered, int *debugging)
+						 int *unbuffered, int *debugging, int *keep_normal,
+						 int *keep_error)
 {
 	KeyMap rmap;
 	unsigned char *map;
@@ -183,6 +187,11 @@
 		printf("Option dialog not found - cannot set options\n");
 		return;
 	}
+	
+	/* Set keep-open-on-error */
+	GetDialogItem(dialog, OPT_KEEPERROR, &type, (Handle *)&handle, &rect);
+	SetCtlValue(handle, *keep_error);
+	
 	while (1) {
 		handle = NULL;
 		ModalDialog(NULL, &item);
@@ -204,6 +213,8 @@
 		OPT_ITEM(OPT_SUPPRESS, suppress_print);
 		OPT_ITEM(OPT_UNBUFFERED, unbuffered);
 		OPT_ITEM(OPT_DEBUGGING, debugging);
+		OPT_ITEM(OPT_KEEPNORMAL, keep_normal);
+		OPT_ITEM(OPT_KEEPERROR, keep_error);
 		
 #undef OPT_ITEM
 	}
@@ -228,8 +239,7 @@
 	argv0 = argv[0];	/* For getprogramname() */
 	
 	PyMac_InteractiveOptions(&inspect, &Py_VerboseFlag, &Py_SuppressPrintingFlag,
-			&unbuffered, &Py_DebugFlag);
-
+			&unbuffered, &Py_DebugFlag, &keep_normal, &keep_error);
 
 	if (unbuffered) {
 #ifndef MPW
@@ -253,7 +263,7 @@
 		if ((fp = fopen(filename, "r")) == NULL) {
 			fprintf(stderr, "%s: can't open file '%s'\n",
 				argv[0], filename);
-			exit(2);
+			PyMac_Exit(2);
 		}
 	}
 	
@@ -282,6 +292,31 @@
 	/*NOTREACHED*/
 }
 
+/*
+** Terminate application
+*/
+PyMac_Exit(status)
+	int status;
+{
+	int keep;
+	
+	if ( status )
+		keep = keep_error;
+	else
+		keep = keep_normal;
+		
+#ifdef __MWERKS__
+	if (keep)
+		printf("\n[Terminated]\n");
+	else
+		SIOUXSettings.autocloseonquit = 1;
+#endif
+#ifdef THINK_C
+	console_options.pause_atexit = keep;
+#endif
+
+	exit(status);
+}
 
 /* Return the program name -- some code out there needs this. */
 
