diff --git a/Modules/config.c.in b/Modules/config.c.in
index f19655f..fc80362 100644
--- a/Modules/config.c.in
+++ b/Modules/config.c.in
@@ -70,14 +70,6 @@
 #define DATE ">= 29 Jul 1993"
 #endif
 
-#ifdef USE_STDWIN
-#ifdef macintosh
-#include ":::stdwin:H:stdwin.h"
-#else /* !macintosh */
-#include "stdwin.h"
-#endif /* !macintosh */
-#endif /* USE_STDWIN */
-
 char version[80];
 
 char *argv0; /* For dynamic loading in import.c */
@@ -94,12 +86,6 @@
 
 	argv0 = **p_argv;
 
-#ifdef USE_STDWIN
-#ifdef THINK_C_3_0
-	wsetstdio(1);
-#endif
-	wargs(p_argc, p_argv);
-#endif /* USE_STDWIN */
 #ifdef USE_FROZEN
 	if (verbose)
 #else
@@ -120,9 +106,6 @@
 void
 donecalls()
 {
-#ifdef USE_STDWIN
-	wdone();
-#endif
 #ifdef USE_AUDIO
 	asa_done();
 #endif
diff --git a/Modules/stdwinmodule.c b/Modules/stdwinmodule.c
index a6f6fba..1fff814 100644
--- a/Modules/stdwinmodule.c
+++ b/Modules/stdwinmodule.c
@@ -66,6 +66,7 @@
 #include "allobjects.h"
 #include "modsupport.h"
 #include "ceval.h"
+#include "sysmodule.h"
 
 #ifdef macintosh
 #include ":::stdwin:H:stdwin.h"
@@ -1943,6 +1944,21 @@
 /* Stdwin methods */
 
 static object *
+stdwin_done(sw, args)
+	object *sw;
+	object *args;
+{
+	if (!getnoarg(args))
+		return NULL;
+	wdone();
+	/* XXX There is no protection against continued use of
+	   XXX stdwin functions or objects after this call is made.
+	   XXX Use at own risk */
+	INCREF(None);
+	return None;
+}
+
+static object *
 stdwin_open(sw, args)
 	object *sw;
 	object *args;
@@ -2467,6 +2483,7 @@
 	{"askfile",		stdwin_askfile},
 	{"askstr",		stdwin_askstr},
 	{"askync",		stdwin_askync},
+	{"done",		stdwin_done},
 	{"fetchcolor",		stdwin_fetchcolor},
 #ifdef unix
 	{"fileno",		stdwin_connectionnumber},
@@ -2515,6 +2532,67 @@
 	{NULL,			NULL}		/* sentinel */
 };
 
+static int
+checkstringlist(args, ps, pn)
+	object *args;
+	char ***ps;
+	int *pn;
+{
+	int i, n;
+	char **s;
+	if (!is_listobject(args)) {
+		err_setstr(TypeError, "list of strings expected");
+		return 0;
+	}
+	n = getlistsize(args);
+	s = NEW(char *, n+1);
+	if (s == NULL) {
+		err_nomem();
+		return 0;
+	}
+	for (i = 0; i < n; i++) {
+		object *item = getlistitem(args, i);
+		if (!is_stringobject(item)) {
+			err_setstr(TypeError, "list of strings expected");
+			return 0;
+		}
+		s[i] = getstringvalue(item);
+	}
+	s[n] = NULL; /* In case caller wants a NULL-terminated list */
+	*ps = s;
+	*pn = n;
+	return 1;
+}
+
+static int
+putbackstringlist(list, s, n)
+	object *list;
+	char **s;
+	int n;
+{
+	int oldsize = getlistsize(list);
+	object *newlist;
+	int i;
+	if (n == oldsize)
+		return 1;
+	newlist = newlistobject(n);
+	for (i = 0; i < n && newlist != NULL; i++) {
+		object *item = newstringobject(s[i]);
+		if (item == NULL) {
+			DECREF(newlist);
+			newlist = NULL;
+		}
+		else
+			setlistitem(newlist, i, item);
+	}
+	if (newlist == NULL)
+		return 0;
+	(*list->ob_type->tp_as_sequence->sq_ass_slice)
+		(list, 0, oldsize, newlist);
+	DECREF(newlist);
+	return 1;
+}
+
 void
 initstdwin()
 {
@@ -2522,7 +2600,18 @@
 	static int inited = 0;
 
 	if (!inited) {
-		winit();
+		int argc = 0;
+		char **argv = NULL;
+		object *sys_argv = sysget("argv");
+		if (sys_argv != NULL) {
+			if (!checkstringlist(sys_argv, &argv, &argc))
+				err_clear();
+		}
+		winitargs(&argc, &argv);
+		if (argv != NULL) {
+			if (!putbackstringlist(sys_argv, argv, argc))
+				err_clear();
+		}
 		inited = 1;
 	}
 	m = initmodule("stdwin", stdwin_methods);
