Enclosed method lists in braces.
Added close methods to various object types.
diff --git a/Modules/stdwinmodule.c b/Modules/stdwinmodule.c
index f8c312e..e996ac8 100644
--- a/Modules/stdwinmodule.c
+++ b/Modules/stdwinmodule.c
@@ -262,13 +262,29 @@
 
 /* Drawing methods */
 
+static object *
+drawing_close(dp)
+	drawingobject *dp;
+{
+	if (dp->d_ref != NULL) {
+		wenddrawing(dp->d_ref->w_win);
+		Drawing = NULL;
+		DECREF(dp->d_ref);
+		dp->d_ref = NULL;
+	}
+	INCREF(None);
+	return None;
+}
 static void
 drawing_dealloc(dp)
 	drawingobject *dp;
 {
-	wenddrawing(dp->d_ref->w_win);
-	Drawing = NULL;
-	DECREF(dp->d_ref);
+	if (dp->d_ref != NULL) {
+		wenddrawing(dp->d_ref->w_win);
+		Drawing = NULL;
+		DECREF(dp->d_ref);
+		dp->d_ref = NULL;
+	}
 	free((char *)dp);
 }
 
@@ -704,7 +720,9 @@
 	{"box",		drawing_box},
 	{"circle",	drawing_circle},
 	{"cliprect",	drawing_cliprect},
+	{"close",	drawing_close},
 	{"elarc",	drawing_elarc},
+	{"enddrawing",	drawing_close},
 	{"erase",	drawing_erase},
 	{"fillcircle",	drawing_fillcircle},
 	{"fillelarc",	drawing_fillelarc},
@@ -802,13 +820,33 @@
 {
 	if (tp->t_text != NULL)
 		tefree(tp->t_text);
-	if (tp->t_attr != NULL)
-		DECREF(tp->t_attr);
-	DECREF(tp->t_ref);
+	XDECREF(tp->t_attr);
+	XDECREF(tp->t_ref);
 	DEL(tp);
 }
 
 static object *
+text_close(tp, args)
+	textobject *tp;
+	object *args;
+{
+	if (tp->t_text != NULL) {
+		tefree(tp->t_text);
+		tp->t_text = NULL;
+	}
+	if (tp->t_attr != NULL) {
+		DECREF(tp->t_attr);
+		tp->t_attr = NULL;
+	}
+	if (tp->t_ref != NULL) {
+		DECREF(tp->t_ref);
+		tp->t_ref = NULL;
+	}
+	INCREF(None);
+	return None;
+}
+
+static object *
 text_arrow(self, args)
 	textobject *self;
 	object *args;
@@ -1018,19 +1056,20 @@
 }
 
 static struct methodlist text_methods[] = {
-	"arrow",	text_arrow,
-	"draw",		text_draw,
-	"event",	text_event,
-	"getfocus",	text_getfocus,
-	"getfocustext",	text_getfocustext,
-	"getrect",	text_getrect,
-	"gettext",	text_gettext,
-	"move",		text_move,
-	"replace",	text_replace,
-	"setactive",	text_setactive,
-	"setfocus",	text_setfocus,
-	"settext",	text_settext,
-	"setview",	text_setview,
+	{"arrow",	text_arrow},
+	{"close",	text_close},
+	{"draw",	text_draw},
+	{"event",	text_event},
+	{"getfocus",	text_getfocus},
+	{"getfocustext",	text_getfocustext},
+	{"getrect",	text_getrect},
+	{"gettext",	text_gettext},
+	{"move",		text_move},
+	{"replace",	text_replace},
+	{"setactive",	text_setactive},
+	{"setfocus",	text_setfocus},
+	{"settext",	text_settext},
+	{"setview",	text_setview},
 	{NULL,		NULL}		/* sentinel */
 };
 
@@ -1211,10 +1250,10 @@
 }
 
 static struct methodlist menu_methods[] = {
-	"additem",	menu_additem,
-	"setitem",	menu_setitem,
-	"enable",	menu_enable,
-	"check",	menu_check,
+	{"additem",	menu_additem},
+	{"setitem",	menu_setitem},
+	{"enable",	menu_enable},
+	{"check",	menu_check},
 	{NULL,		NULL}		/* sentinel */
 };
 
@@ -1304,11 +1343,29 @@
 	FILE *fp;
 	int flags;
 {
-	fprintf(fp, "<window titled '%s'>", getstringvalue(wp->w_title));
+	fprintf(fp, "<%s window titled '%s'>",
+		wp->w_win == NULL ? "closed" : "open",
+		getstringvalue(wp->w_title));
 	return 0;
 }
 
 static object *
+window_close(wp, args)
+	windowobject *wp;
+	object *args;
+{
+	if (wp->w_win != NULL) {
+		int tag = wgettag(wp->w_win);
+		if (tag >= 0 && tag < MAXNWIN)
+			windowlist[tag] = NULL;
+		wclose(wp->w_win);
+		wp->w_win = NULL;
+	}
+	INCREF(None);
+	return None;
+}
+
+static object *
 window_begindrawing(wp, args)
 	windowobject *wp;
 	object *args;
@@ -1561,6 +1618,7 @@
 static struct methodlist window_methods[] = {
 	{"begindrawing",window_begindrawing},
 	{"change",	window_change},
+	{"close",	window_close},
 	{"getdocsize",	window_getdocsize},
 	{"getorigin",	window_getorigin},
 	{"gettitle",	window_gettitle},