diff --git a/Include/pymactoolbox.h b/Include/pymactoolbox.h
index 2286ebe..916dac7 100644
--- a/Include/pymactoolbox.h
+++ b/Include/pymactoolbox.h
@@ -178,6 +178,8 @@
 extern PyObject *WinObj_WhichWindow(WindowPtr);
 
 /* CF exports */
+extern PyObject *CFObj_New(CFTypeRef);
+extern int CFObj_Convert(PyObject *, CFTypeRef *);
 extern PyObject *CFTypeRefObj_New(CFTypeRef);
 extern int CFTypeRefObj_Convert(PyObject *, CFTypeRef *);
 extern PyObject *CFStringRefObj_New(CFStringRef);
diff --git a/Mac/Modules/cf/_CFmodule.c b/Mac/Modules/cf/_CFmodule.c
index 8473eb5..b6e434a 100644
--- a/Mac/Modules/cf/_CFmodule.c
+++ b/Mac/Modules/cf/_CFmodule.c
@@ -36,6 +36,11 @@
 #include "pycfbridge.h"
 
 #ifdef USE_TOOLBOX_OBJECT_GLUE
+extern PyObject *_CFObj_New(CFTypeRef);
+extern int _CFObj_Convert(PyObject *, CFTypeRef *);
+#define CFObj_New _CFObj_New
+#define CFObj_Convert _CFObj_Convert
+
 extern PyObject *_CFTypeRefObj_New(CFTypeRef);
 extern int _CFTypeRefObj_Convert(PyObject *, CFTypeRef *);
 #define CFTypeRefObj_New _CFTypeRefObj_New
@@ -121,7 +126,6 @@
     return CFURLRefObj_Convert(v, p_itself);
 }
 
-
 static PyObject *CF_Error;
 
 /* --------------------- Object type CFTypeRef ---------------------- */
@@ -1457,7 +1461,9 @@
 
 	if (v == Py_None) { *p_itself = NULL; return 1; }
 	if (PyString_Check(v)) {
-	    char *cStr = PyString_AsString(v);
+	    char *cStr;
+	    if (!PyArg_Parse(v, "es", "ascii", &cStr))
+	    	return NULL;
 		*p_itself = CFStringCreateWithCString((CFAllocatorRef)NULL, cStr, kCFStringEncodingASCII);
 		return 1;
 	}
@@ -4292,6 +4298,48 @@
 
 
 
+/* Routines to convert any CF type to/from the corresponding CFxxxObj */
+PyObject *CFObj_New(CFTypeRef itself)
+{
+	if (itself == NULL)
+	{
+		PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
+		return NULL;
+	}
+	if (CFGetTypeID(itself) == CFArrayGetTypeID()) return CFArrayRefObj_New((CFArrayRef)itself);
+	if (CFGetTypeID(itself) == CFDictionaryGetTypeID()) return CFDictionaryRefObj_New((CFDictionaryRef)itself);
+	if (CFGetTypeID(itself) == CFDataGetTypeID()) return CFDataRefObj_New((CFDataRef)itself);
+	if (CFGetTypeID(itself) == CFStringGetTypeID()) return CFStringRefObj_New((CFStringRef)itself);
+	if (CFGetTypeID(itself) == CFURLGetTypeID()) return CFURLRefObj_New((CFURLRef)itself);
+	/* XXXX Or should we use PyCF_CF2Python here?? */
+	return CFTypeRefObj_New(itself);
+}
+int CFObj_Convert(PyObject *v, CFTypeRef *p_itself)
+{
+
+	if (v == Py_None) { *p_itself = NULL; return 1; }
+	/* Check for other CF objects here */
+
+	if (!CFTypeRefObj_Check(v) &&
+		!CFArrayRefObj_Check(v) &&
+		!CFMutableArrayRefObj_Check(v) &&
+		!CFDictionaryRefObj_Check(v) &&
+		!CFMutableDictionaryRefObj_Check(v) &&
+		!CFDataRefObj_Check(v) &&
+		!CFMutableDataRefObj_Check(v) &&
+		!CFStringRefObj_Check(v) &&
+		!CFMutableStringRefObj_Check(v) &&
+		!CFURLRefObj_Check(v) )
+	{
+		/* XXXX Or should we use PyCF_Python2CF here?? */
+		PyErr_SetString(PyExc_TypeError, "CF object required");
+		return 0;
+	}
+	*p_itself = ((CFTypeRefObject *)v)->ob_itself;
+	return 1;
+}
+
+
 void init_CF(void)
 {
 	PyObject *m;
diff --git a/Mac/Modules/cf/cfsupport.py b/Mac/Modules/cf/cfsupport.py
index e8fb710..7e0a5d9 100644
--- a/Mac/Modules/cf/cfsupport.py
+++ b/Mac/Modules/cf/cfsupport.py
@@ -58,6 +58,11 @@
 #include "pycfbridge.h"
 
 #ifdef USE_TOOLBOX_OBJECT_GLUE
+extern PyObject *_CFObj_New(CFTypeRef);
+extern int _CFObj_Convert(PyObject *, CFTypeRef *);
+#define CFObj_New _CFObj_New
+#define CFObj_Convert _CFObj_Convert
+
 extern PyObject *_CFTypeRefObj_New(CFTypeRef);
 extern int _CFTypeRefObj_Convert(PyObject *, CFTypeRef *);
 #define CFTypeRefObj_New _CFTypeRefObj_New
@@ -142,7 +147,50 @@
     }
     return CFURLRefObj_Convert(v, p_itself);
 }
+"""
 
+finalstuff = finalstuff + """
+
+/* Routines to convert any CF type to/from the corresponding CFxxxObj */
+PyObject *CFObj_New(CFTypeRef itself)
+{
+	if (itself == NULL)
+	{
+		PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
+		return NULL;
+	}
+	if (CFGetTypeID(itself) == CFArrayGetTypeID()) return CFArrayRefObj_New((CFArrayRef)itself);
+	if (CFGetTypeID(itself) == CFDictionaryGetTypeID()) return CFDictionaryRefObj_New((CFDictionaryRef)itself);
+	if (CFGetTypeID(itself) == CFDataGetTypeID()) return CFDataRefObj_New((CFDataRef)itself);
+	if (CFGetTypeID(itself) == CFStringGetTypeID()) return CFStringRefObj_New((CFStringRef)itself);
+	if (CFGetTypeID(itself) == CFURLGetTypeID()) return CFURLRefObj_New((CFURLRef)itself);
+	/* XXXX Or should we use PyCF_CF2Python here?? */
+	return CFTypeRefObj_New(itself);
+}
+int CFObj_Convert(PyObject *v, CFTypeRef *p_itself)
+{
+
+	if (v == Py_None) { *p_itself = NULL; return 1; }
+	/* Check for other CF objects here */
+
+	if (!CFTypeRefObj_Check(v) &&
+		!CFArrayRefObj_Check(v) &&
+		!CFMutableArrayRefObj_Check(v) &&
+		!CFDictionaryRefObj_Check(v) &&
+		!CFMutableDictionaryRefObj_Check(v) &&
+		!CFDataRefObj_Check(v) &&
+		!CFMutableDataRefObj_Check(v) &&
+		!CFStringRefObj_Check(v) &&
+		!CFMutableStringRefObj_Check(v) &&
+		!CFURLRefObj_Check(v) )
+	{
+		/* XXXX Or should we use PyCF_Python2CF here?? */
+		PyErr_SetString(PyExc_TypeError, "CF object required");
+		return 0;
+	}
+	*p_itself = ((CFTypeRefObject *)v)->ob_itself;
+	return 1;
+}
 """
 
 initstuff = initstuff + """
diff --git a/Python/mactoolboxglue.c b/Python/mactoolboxglue.c
index a939ee5..8b31f7f 100644
--- a/Python/mactoolboxglue.c
+++ b/Python/mactoolboxglue.c
@@ -593,6 +593,9 @@
 GLUE_CONVERT(WindowPtr, WinObj_Convert, "Carbon.Win")
 GLUE_NEW(WindowPtr, WinObj_WhichWindow, "Carbon.Win")
 
+GLUE_CONVERT(CFTypeRef, CFObj_Convert, "Carbon.CF")
+GLUE_NEW(CFTypeRef, CFObj_New, "Carbon.CF")
+
 GLUE_CONVERT(CFTypeRef, CFTypeRefObj_Convert, "Carbon.CF")
 GLUE_NEW(CFTypeRef, CFTypeRefObj_New, "Carbon.CF")
 
