diff --git a/Modules/flmodule.c b/Modules/flmodule.c
index 4411d87..48bbd3f 100644
--- a/Modules/flmodule.c
+++ b/Modules/flmodule.c
@@ -1606,6 +1606,53 @@
 	return form_call (fl_deactivate_form, f-> ob_form, args);
 }
 
+static object *
+forms_find_first_or_last (func, dummy, args)
+	FL_OBJECT *(*func)(FL_FORM *, int, float, float);
+	formobject *dummy;
+	object *args;
+{
+	int type;
+	float mx, my;
+	FL_OBJECT *generic;
+	genericobject *g;
+	
+	if (!getintfloatfloatarg (args, &type, &mx, &my)) return NULL;
+
+	generic = (*func) (dummy-> ob_form, type, mx, my);
+
+	if (generic == NULL)
+	{
+		INCREF(None);
+		return None;
+	}
+
+	g = findgeneric(generic);
+	if (g == NULL) {
+		err_setstr(RuntimeError,
+			   "do_forms returns unknown object");
+		return NULL;
+	}
+	INCREF(g);
+	return ((object *) g);
+}
+
+static object *
+form_find_first (dummy, args)
+	object *dummy;
+	object *args;
+{
+	return (forms_find_first_or_last(fl_find_first, dummy, args));
+}
+
+static object *
+form_find_last (dummy, args)
+	object *dummy;
+	object *args;
+{
+	return (forms_find_first_or_last(fl_find_last, dummy, args));
+}
+
 static struct methodlist form_methods[] = {
 /* adm */
 	{"show_form",		form_show_form},
@@ -1618,6 +1665,8 @@
 	{"remove_form",		form_remove_form},
 	{"activate_form",	form_activate_form},
 	{"deactivate_form",	form_deactivate_form},
+	{"find_first",		form_find_first},
+	{"find_last",		form_find_last},
 
 /* basic objects */
 	{"add_button",          form_add_button},
@@ -1973,6 +2022,28 @@
 }
 
 static object *
+forms_get_mouse (self, args)
+	object *self;
+	object *args;
+{
+	float x, y ;
+	object *v;
+
+	if (!getnoarg(args)) return NULL;
+	
+	fl_get_mouse (&x, &y);
+
+	v = newtupleobject(2);
+
+	if (v == NULL) return NULL;
+
+	settupleitem(v, 0, newfloatobject(x));
+	settupleitem(v, 1, newfloatobject(y));
+
+	return v;
+}
+
+static object *
 forms_tie(self, args)
 	object *self;
 	object *args;
@@ -2006,6 +2077,7 @@
 	{"qreset",		forms_qreset},
 	{"qenter",		forms_qenter},
 	{"tie",		forms_tie},
+	{"get_mouse",	forms_get_mouse},
 /*	{"new_events",		forms_new_events}, */
 	{"color",               forms_color},
 	{"mapcolor",		forms_mapcolor},
