diff --git a/Mac/Modules/res/Resmodule.c b/Mac/Modules/res/Resmodule.c
index 3c5b23d..d3ec0ea 100644
--- a/Mac/Modules/res/Resmodule.c
+++ b/Mac/Modules/res/Resmodule.c
@@ -403,6 +403,26 @@
 	return _res;
 }
 
+static PyObject *ResObj_as_Control(_self, _args)
+	ResourceObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+
+	return CtlObj_New((ControlHandle)_self->ob_itself);
+
+}
+
+static PyObject *ResObj_as_Menu(_self, _args)
+	ResourceObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+
+	return MenuObj_New((MenuHandle)_self->ob_itself);
+
+}
+
 static PyMethodDef ResObj_methods[] = {
 	{"HomeResFile", (PyCFunction)ResObj_HomeResFile, 1,
 	 "() -> (short _rv)"},
@@ -438,6 +458,10 @@
 	 "(long newSize) -> None"},
 	{"GetNextFOND", (PyCFunction)ResObj_GetNextFOND, 1,
 	 "() -> (Handle _rv)"},
+	{"as_Control", (PyCFunction)ResObj_as_Control, 1,
+	 "Return this resource/handle as a Control"},
+	{"as_Menu", (PyCFunction)ResObj_as_Menu, 1,
+	 "Return this resource/handle as a Menu"},
 	{NULL, NULL, 0}
 };
 
@@ -468,7 +492,32 @@
 	return Py_FindMethodInChain(&ResObj_chain, (PyObject *)self, name);
 }
 
-#define ResObj_setattr NULL
+static int
+ResObj_setattr(self, name, value)
+	ResourceObject *self;
+	char *name;
+	PyObject *value;
+{
+	char *data;
+	long size;
+	
+	if (strcmp(name, "data") != 0 || value == NULL )
+		return -1;
+	if ( !PyString_Check(value) )
+		return -1;
+	size = PyString_Size(value);
+	data = PyString_AsString(value);
+	/* XXXX Do I need the GetState/SetState calls? */
+	SetHandleSize(self->ob_itself, size);
+	if ( MemError())
+		return -1;
+	HLock(self->ob_itself);
+	memcpy((char *)*self->ob_itself, data, size);
+	HUnlock(self->ob_itself);
+	/* XXXX Should I do the Changed call immedeately? */
+	return 0;
+}
+
 
 PyTypeObject Resource_Type = {
 	PyObject_HEAD_INIT(&PyType_Type)
diff --git a/Mac/Modules/res/resedit.py b/Mac/Modules/res/resedit.py
index 5e54ef2..bffec5f 100644
--- a/Mac/Modules/res/resedit.py
+++ b/Mac/Modules/res/resedit.py
@@ -23,3 +23,19 @@
 Apply AddResource() to write it to a resource file.
 """
 functions.append(f)
+
+# Convert resources to other things.
+
+as_xxx_body = """
+return %sObj_New((%sHandle)_self->ob_itself);
+"""
+
+def genresconverter(longname, shortname):
+
+	f = ManualGenerator("as_%s"%longname, as_xxx_body%(shortname, longname))
+	docstring =  "Return this resource/handle as a %s"%longname
+	f.docstring = lambda docstring=docstring: docstring
+	return f
+
+resmethods.append(genresconverter("Control", "Ctl"))
+resmethods.append(genresconverter("Menu", "Menu"))
diff --git a/Mac/Modules/res/ressupport.py b/Mac/Modules/res/ressupport.py
index efc7571..e2bfa79 100644
--- a/Mac/Modules/res/ressupport.py
+++ b/Mac/Modules/res/ressupport.py
@@ -56,6 +56,34 @@
 	return Py_BuildValue("[ss]", "data", "size");
 """
 
+setattrCode = """
+static int
+ResObj_setattr(self, name, value)
+	ResourceObject *self;
+	char *name;
+	PyObject *value;
+{
+	char *data;
+	long size;
+	
+	if (strcmp(name, "data") != 0 || value == NULL )
+		return -1;
+	if ( !PyString_Check(value) )
+		return -1;
+	size = PyString_Size(value);
+	data = PyString_AsString(value);
+	/* XXXX Do I need the GetState/SetState calls? */
+	SetHandleSize(self->ob_itself, size);
+	if ( MemError())
+		return -1;
+	HLock(self->ob_itself);
+	memcpy((char *)*self->ob_itself, data, size);
+	HUnlock(self->ob_itself);
+	/* XXXX Should I do the Changed call immedeately? */
+	return 0;
+}
+"""
+
 class ResDefiniton(GlobalObjectDefinition):
 
 	def outputCheckNewArg(self):
@@ -63,6 +91,9 @@
 
 	def outputGetattrHook(self):
 		Output(getattrHookCode)
+		
+	def outputSetattr(self):
+		Output(setattrCode)
 
 
 resobject = ResDefiniton('Resource', 'ResObj', 'Handle')
