diff --git a/Modules/stdwinmodule.c b/Modules/stdwinmodule.c
index 2050b5f..fb448f2 100644
--- a/Modules/stdwinmodule.c
+++ b/Modules/stdwinmodule.c
@@ -703,7 +703,7 @@
 	return findmethod(drawing_methods, (object *)wp, name);
 }
 
-static typeobject Drawingtype = {
+typeobject Drawingtype = {
 	OB_HEAD_INIT(&Typetype)
 	0,			/*ob_size*/
 	"drawing",		/*tp_name*/
@@ -918,6 +918,27 @@
 }
 
 static object *
+text_settext(self, args)
+	textobject *self;
+	object *args;
+{
+	object *text;
+	char *buf;
+	int size;
+	if (!getstrarg(args, &text))
+		return NULL;
+	size = getstringsize(text);
+	if ((buf = NEW(char, size)) == NULL) {
+		err_set(MemoryError);
+		return NULL;
+	}
+	memcpy(buf, getstringvalue(text), size);
+	tesetbuf(self->t_text, buf, size); /* Becomes owner of buffer */
+	INCREF(None);
+	return None;
+}
+
+static object *
 text_replace(self, args)
 	textobject *self;
 	object *args;
@@ -941,6 +962,7 @@
 	"move",		text_move,
 	"replace",	text_replace,
 	"setfocus",	text_setfocus,
+	"settext",	text_settext,
 	{NULL,		NULL}		/* sentinel */
 };
 
@@ -976,7 +998,7 @@
 		return dictinsert(tp->t_attr, name, v);
 }
 
-static typeobject Texttype = {
+typeobject Texttype = {
 	OB_HEAD_INIT(&Typetype)
 	0,			/*ob_size*/
 	"textedit",		/*tp_name*/
@@ -1154,7 +1176,7 @@
 		return dictinsert(mp->m_attr, name, v);
 }
 
-static typeobject Menutype = {
+typeobject Menutype = {
 	OB_HEAD_INIT(&Typetype)
 	0,			/*ob_size*/
 	"menu",			/*tp_name*/
@@ -1252,6 +1274,18 @@
 }
 
 static object *
+window_getwinpos(wp, args)
+	windowobject *wp;
+	object *args;
+{
+	int h, v;
+	if (!getnoarg(args))
+		return NULL;
+	wgetwinpos(wp->w_win, &h, &v);
+	return makepoint(h, v);
+}
+
+static object *
 window_getwinsize(wp, args)
 	windowobject *wp;
 	object *args;
@@ -1438,6 +1472,7 @@
 	{"getdocsize",	window_getdocsize},
 	{"getorigin",	window_getorigin},
 	{"gettitle",	window_gettitle},
+	{"getwinpos",	window_getwinpos},
 	{"getwinsize",	window_getwinsize},
 	{"menucreate",	window_menucreate},
 	{"scroll",	window_scroll},
@@ -1484,7 +1519,7 @@
 		return dictinsert(wp->w_attr, name, v);
 }
 
-static typeobject Windowtype = {
+typeobject Windowtype = {
 	OB_HEAD_INIT(&Typetype)
 	0,			/*ob_size*/
 	"window",		/*tp_name*/
@@ -1700,8 +1735,8 @@
 }
 
 static object *
-stdwin_getdefwinpos(wp, args)
-	windowobject *wp;
+stdwin_getdefwinpos(self, args)
+	object *self;
 	object *args;
 {
 	int h, v;
@@ -1712,8 +1747,8 @@
 }
 
 static object *
-stdwin_getdefwinsize(wp, args)
-	windowobject *wp;
+stdwin_getdefwinsize(self, args)
+	object *self;
 	object *args;
 {
 	int width, height;
@@ -1724,8 +1759,8 @@
 }
 
 static object *
-stdwin_getdefscrollbars(wp, args)
-	windowobject *wp;
+stdwin_getdefscrollbars(self, args)
+	object *self;
 	object *args;
 {
 	int h, v;
@@ -1916,6 +1951,30 @@
 	return newintobject((long)wfetchcolor(getstringvalue(colorname)));
 }
 
+static object *
+stdwin_getscrsize(self, args)
+	object *self;
+	object *args;
+{
+	int width, height;
+	if (!getnoarg(args))
+		return NULL;
+	wgetscrsize(&width, &height);
+	return makepoint(width, height);
+}
+
+static object *
+stdwin_getscrmm(self, args)
+	object *self;
+	object *args;
+{
+	int width, height;
+	if (!getnoarg(args))
+		return NULL;
+	wgetscrmm(&width, &height);
+	return makepoint(width, height);
+}
+
 static struct methodlist stdwin_methods[] = {
 	{"askfile",		stdwin_askfile},
 	{"askstr",		stdwin_askstr},
@@ -1927,6 +1986,8 @@
 	{"getdefwinpos",	stdwin_getdefwinpos},
 	{"getdefwinsize",	stdwin_getdefwinsize},
 	{"getevent",		stdwin_getevent},
+	{"getscrmm",		stdwin_getscrmm},
+	{"getscrsize",		stdwin_getscrsize},
 	{"getselection",	stdwin_getselection},
 	{"menucreate",		stdwin_menucreate},
 	{"message",		stdwin_message},
