diff --git a/Mac/Modules/cf/_CFmodule.c b/Mac/Modules/cf/_CFmodule.c
index 373976d..9dbe825 100644
--- a/Mac/Modules/cf/_CFmodule.c
+++ b/Mac/Modules/cf/_CFmodule.c
@@ -31,6 +31,8 @@
 #include <CoreServices/CoreServices.h>
 #endif
 
+#include "pycfbridge.h"
+
 #ifdef USE_TOOLBOX_OBJECT_GLUE
 extern PyObject *_CFTypeRefObj_New(CFTypeRef);
 extern int _CFTypeRefObj_Convert(PyObject *, CFTypeRef *);
@@ -287,6 +289,14 @@
 	return _res;
 }
 
+static PyObject *CFTypeRefObj_toPython(CFTypeRefObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+
+	return PyCF_CF2Python(_self->ob_itself);
+
+}
+
 static PyMethodDef CFTypeRefObj_methods[] = {
 	{"CFGetTypeID", (PyCFunction)CFTypeRefObj_CFGetTypeID, 1,
 	 "() -> (CFTypeID _rv)"},
@@ -304,6 +314,8 @@
 	 "() -> (CFStringRef _rv)"},
 	{"CFShow", (PyCFunction)CFTypeRefObj_CFShow, 1,
 	 "() -> None"},
+	{"toPython", (PyCFunction)CFTypeRefObj_toPython, 1,
+	 "() -> (python_object)"},
 	{NULL, NULL, 0}
 };
 
@@ -3695,6 +3707,30 @@
 	return _res;
 }
 
+static PyObject *CF_toCF(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+
+	CFTypeRef rv;
+	CFTypeID typeid;
+
+	if (!PyArg_ParseTuple(_args, "O&", PyCF_Python2CF, &rv))
+		return NULL;
+	typeid = CFGetTypeID(rv);
+
+	if (typeid == CFStringGetTypeID())
+		return Py_BuildValue("O&", CFStringRefObj_New, rv);
+	if (typeid == CFArrayGetTypeID())
+		return Py_BuildValue("O&", CFArrayRefObj_New, rv);
+	if (typeid == CFDictionaryGetTypeID())
+		return Py_BuildValue("O&", CFDictionaryRefObj_New, rv);
+	if (typeid == CFURLGetTypeID())
+		return Py_BuildValue("O&", CFURLRefObj_New, rv);
+
+	return Py_BuildValue("O&", CFTypeRefObj_New, rv);
+
+}
+
 static PyMethodDef CF_methods[] = {
 	{"__CFRangeMake", (PyCFunction)CF___CFRangeMake, 1,
 	 "(CFIndex loc, CFIndex len) -> (CFRange _rv)"},
@@ -3778,6 +3814,8 @@
 	 "(Buffer buffer, Boolean isDirectory, CFURLRef baseURL) -> (CFURLRef _rv)"},
 	{"CFURLCreateFromFSRef", (PyCFunction)CF_CFURLCreateFromFSRef, 1,
 	 "(FSRef fsRef) -> (CFURLRef _rv)"},
+	{"toCF", (PyCFunction)CF_toCF, 1,
+	 "(python_object) -> (CF_object)"},
 	{NULL, NULL, 0}
 };
 
diff --git a/Mac/Modules/cf/cfsupport.py b/Mac/Modules/cf/cfsupport.py
index fb275c3..d690441 100644
--- a/Mac/Modules/cf/cfsupport.py
+++ b/Mac/Modules/cf/cfsupport.py
@@ -53,6 +53,8 @@
 #include <CoreServices/CoreServices.h>
 #endif
 
+#include "pycfbridge.h"
+
 #ifdef USE_TOOLBOX_OBJECT_GLUE
 extern PyObject *_CFTypeRefObj_New(CFTypeRef);
 extern int _CFTypeRefObj_Convert(PyObject *, CFTypeRef *);
@@ -485,6 +487,37 @@
 f.docstring = lambda: "() -> (unicode _rv)"
 CFStringRef_object.add(f)
 
+toPython_body = """
+return PyCF_CF2Python(_self->ob_itself);
+"""
+
+f = ManualGenerator("toPython", toPython_body);
+f.docstring = lambda: "() -> (python_object)"
+CFTypeRef_object.add(f)
+
+toCF_body = """
+CFTypeRef rv;
+CFTypeID typeid;
+
+if (!PyArg_ParseTuple(_args, "O&", PyCF_Python2CF, &rv))
+	return NULL;
+typeid = CFGetTypeID(rv);
+
+if (typeid == CFStringGetTypeID())
+	return Py_BuildValue("O&", CFStringRefObj_New, rv);
+if (typeid == CFArrayGetTypeID())
+	return Py_BuildValue("O&", CFArrayRefObj_New, rv);
+if (typeid == CFDictionaryGetTypeID())
+	return Py_BuildValue("O&", CFDictionaryRefObj_New, rv);
+if (typeid == CFURLGetTypeID())
+	return Py_BuildValue("O&", CFURLRefObj_New, rv);
+
+return Py_BuildValue("O&", CFTypeRefObj_New, rv);
+"""
+f = ManualGenerator("toCF", toCF_body);
+f.docstring = lambda: "(python_object) -> (CF_object)"
+module.add(f)
+
 # ADD add forloop here
 
 # generate output (open the output file as late as possible)
diff --git a/Mac/Modules/cf/pycfbridge.c b/Mac/Modules/cf/pycfbridge.c
index 76c5ad4..9afc96c 100644
--- a/Mac/Modules/cf/pycfbridge.c
+++ b/Mac/Modules/cf/pycfbridge.c
@@ -26,6 +26,10 @@
 PyCF_CF2Python(CFTypeRef src) {
 	CFTypeID typeid;
 	
+	if( src == NULL ) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
 	typeid = CFGetTypeID(src);
 	if (typeid == CFArrayGetTypeID())
 		return PyCF_CF2Python_sequence((CFArrayRef)src);
@@ -36,13 +40,63 @@
 
 PyObject *
 PyCF_CF2Python_sequence(CFArrayRef src) {
-	PyErr_SetString(PyExc_SystemError, "Not yet implemented");
+	int size = CFArrayGetCount(src);
+	PyObject *rv;
+	CFTypeRef item_cf;
+	PyObject *item_py = NULL;
+	int i;
+	
+	if ( (rv=PyList_New(size)) == NULL )
+		return NULL;
+	for(i=0; i<size; i++) {
+		item_cf = CFArrayGetValueAtIndex(src, i);
+		if (item_cf == NULL ) goto err;
+		item_py = PyCF_CF2Python(item_cf);
+		if (item_py == NULL ) goto err;
+		if (!PyList_SetItem(rv, i, item_py)) goto err;
+		item_py = NULL;
+	}
+	return rv;
+err:
+	Py_XDECREF(item_py);
+	Py_DECREF(rv);
 	return NULL;
 }
 
 PyObject *
 PyCF_CF2Python_mapping(CFTypeRef src) {
-	PyErr_SetString(PyExc_SystemError, "Not yet implemented");
+	int size = CFDictionaryGetCount(src);
+	PyObject *rv;
+	CFTypeRef *allkeys, *allvalues;
+	CFTypeRef key_cf, value_cf;
+	PyObject *key_py = NULL, *value_py = NULL;
+	int i;
+	
+	allkeys = malloc(size*sizeof(CFTypeRef *));
+	if (allkeys == NULL) return PyErr_NoMemory();
+	allvalues = malloc(size*sizeof(CFTypeRef *));
+	if (allvalues == NULL) return PyErr_NoMemory();
+	if ( (rv=PyDict_New()) == NULL )
+		return NULL;
+	CFDictionaryGetKeysAndValues(src, allkeys, allvalues);
+	for(i=0; i<size; i++) {
+		key_cf = allkeys[i];
+		value_cf = allvalues[i];
+		key_py = PyCF_CF2Python(key_cf);
+		if (key_py == NULL ) goto err;
+		value_py = PyCF_CF2Python(value_py);
+		if (value_py == NULL ) goto err;
+		if (!PyDict_SetItem(rv, key_py, value_py)) goto err;
+		key_py = NULL;
+		value_py = NULL;
+	}
+	return rv;
+err:
+	Py_XDECREF(key_py);
+	Py_XDECREF(value_py);
+	Py_DECREF(rv);
+	free(allkeys);
+	free(allvalues);
 	return NULL;
 }
 
@@ -90,7 +144,7 @@
 
 int
 PyCF_Python2CF_sequence(PyObject *src, CFArrayRef *dst) {
-	CFArrayRef rv = NULL;
+	CFMutableArrayRef rv = NULL;
 	CFTypeRef item_cf = NULL;
 	PyObject *item_py = NULL;
 	int size, i;
@@ -122,7 +176,7 @@
 
 int
 PyCF_Python2CF_mapping(PyObject *src, CFDictionaryRef *dst) {
-	CFDictionaryRef rv = NULL;
+	CFMutableDictionaryRef rv = NULL;
 	PyObject *aslist = NULL;
 	CFTypeRef key_cf = NULL, value_cf = NULL;
 	PyObject *item_py = NULL, *key_py = NULL, *value_py = NULL;
@@ -130,7 +184,7 @@
 	
 	size = PyMapping_Size(src);
 	rv = CFDictionaryCreateMutable((CFAllocatorRef)NULL, size,
-									&kCFTypeDictionaryKeyCallBacks,
+					&kCFTypeDictionaryKeyCallBacks,
 	                                &kCFTypeDictionaryValueCallBacks);
 	if (rv == NULL) {
 		PyMac_Error(resNotFound); 
@@ -144,7 +198,7 @@
 		if (!PyArg_ParseTuple(item_py, "OO", key_py, value_py)) goto err;
 		if ( !PyCF_Python2CF(key_py, &key_cf) ) goto err;
 		Py_DECREF(key_py);
-		if ( !PyCF_Python2CF(value_cf, &key_cf) ) goto err;
+		if ( !PyCF_Python2CF(value_py, &value_cf) ) goto err;
 		Py_DECREF(value_py);
 		CFDictionaryAddValue(rv, key_cf, value_cf);
 		CFRelease(key_cf);
