Added CFPreferences support. Added these as functions, not methods, which seemed counter-intuitive.
diff --git a/Mac/Modules/cf/_CFmodule.c b/Mac/Modules/cf/_CFmodule.c
index 552511dd..eb3f3f6 100644
--- a/Mac/Modules/cf/_CFmodule.c
+++ b/Mac/Modules/cf/_CFmodule.c
@@ -28,6 +28,7 @@
 #include <CFString.h>
 #include <CFURL.h>
 #include <CFPropertyList.h>
+#include <CFPreferences.h>
 #else
 #include <CoreServices/CoreServices.h>
 #endif
@@ -3320,6 +3321,323 @@
 	return _res;
 }
 
+static PyObject *CF_CFPreferencesCopyAppValue(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	CFTypeRef _rv;
+	CFStringRef key;
+	CFStringRef applicationID;
+#ifndef CFPreferencesCopyAppValue
+	PyMac_PRECHECK(CFPreferencesCopyAppValue);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CFStringRefObj_Convert, &key,
+	                      CFStringRefObj_Convert, &applicationID))
+		return NULL;
+	_rv = CFPreferencesCopyAppValue(key,
+	                                applicationID);
+	_res = Py_BuildValue("O&",
+	                     CFTypeRefObj_New, _rv);
+	return _res;
+}
+
+static PyObject *CF_CFPreferencesGetAppBooleanValue(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	Boolean _rv;
+	CFStringRef key;
+	CFStringRef applicationID;
+	Boolean keyExistsAndHasValidFormat;
+#ifndef CFPreferencesGetAppBooleanValue
+	PyMac_PRECHECK(CFPreferencesGetAppBooleanValue);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CFStringRefObj_Convert, &key,
+	                      CFStringRefObj_Convert, &applicationID))
+		return NULL;
+	_rv = CFPreferencesGetAppBooleanValue(key,
+	                                      applicationID,
+	                                      &keyExistsAndHasValidFormat);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     keyExistsAndHasValidFormat);
+	return _res;
+}
+
+static PyObject *CF_CFPreferencesGetAppIntegerValue(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	CFIndex _rv;
+	CFStringRef key;
+	CFStringRef applicationID;
+	Boolean keyExistsAndHasValidFormat;
+#ifndef CFPreferencesGetAppIntegerValue
+	PyMac_PRECHECK(CFPreferencesGetAppIntegerValue);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CFStringRefObj_Convert, &key,
+	                      CFStringRefObj_Convert, &applicationID))
+		return NULL;
+	_rv = CFPreferencesGetAppIntegerValue(key,
+	                                      applicationID,
+	                                      &keyExistsAndHasValidFormat);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     keyExistsAndHasValidFormat);
+	return _res;
+}
+
+static PyObject *CF_CFPreferencesSetAppValue(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	CFStringRef key;
+	CFTypeRef value;
+	CFStringRef applicationID;
+#ifndef CFPreferencesSetAppValue
+	PyMac_PRECHECK(CFPreferencesSetAppValue);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&O&",
+	                      CFStringRefObj_Convert, &key,
+	                      CFTypeRefObj_Convert, &value,
+	                      CFStringRefObj_Convert, &applicationID))
+		return NULL;
+	CFPreferencesSetAppValue(key,
+	                         value,
+	                         applicationID);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CF_CFPreferencesAddSuitePreferencesToApp(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	CFStringRef applicationID;
+	CFStringRef suiteID;
+#ifndef CFPreferencesAddSuitePreferencesToApp
+	PyMac_PRECHECK(CFPreferencesAddSuitePreferencesToApp);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CFStringRefObj_Convert, &applicationID,
+	                      CFStringRefObj_Convert, &suiteID))
+		return NULL;
+	CFPreferencesAddSuitePreferencesToApp(applicationID,
+	                                      suiteID);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CF_CFPreferencesRemoveSuitePreferencesFromApp(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	CFStringRef applicationID;
+	CFStringRef suiteID;
+#ifndef CFPreferencesRemoveSuitePreferencesFromApp
+	PyMac_PRECHECK(CFPreferencesRemoveSuitePreferencesFromApp);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CFStringRefObj_Convert, &applicationID,
+	                      CFStringRefObj_Convert, &suiteID))
+		return NULL;
+	CFPreferencesRemoveSuitePreferencesFromApp(applicationID,
+	                                           suiteID);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CF_CFPreferencesAppSynchronize(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	Boolean _rv;
+	CFStringRef applicationID;
+#ifndef CFPreferencesAppSynchronize
+	PyMac_PRECHECK(CFPreferencesAppSynchronize);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CFStringRefObj_Convert, &applicationID))
+		return NULL;
+	_rv = CFPreferencesAppSynchronize(applicationID);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *CF_CFPreferencesCopyValue(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	CFTypeRef _rv;
+	CFStringRef key;
+	CFStringRef applicationID;
+	CFStringRef userName;
+	CFStringRef hostName;
+#ifndef CFPreferencesCopyValue
+	PyMac_PRECHECK(CFPreferencesCopyValue);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&O&O&",
+	                      CFStringRefObj_Convert, &key,
+	                      CFStringRefObj_Convert, &applicationID,
+	                      CFStringRefObj_Convert, &userName,
+	                      CFStringRefObj_Convert, &hostName))
+		return NULL;
+	_rv = CFPreferencesCopyValue(key,
+	                             applicationID,
+	                             userName,
+	                             hostName);
+	_res = Py_BuildValue("O&",
+	                     CFTypeRefObj_New, _rv);
+	return _res;
+}
+
+static PyObject *CF_CFPreferencesCopyMultiple(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	CFDictionaryRef _rv;
+	CFArrayRef keysToFetch;
+	CFStringRef applicationID;
+	CFStringRef userName;
+	CFStringRef hostName;
+#ifndef CFPreferencesCopyMultiple
+	PyMac_PRECHECK(CFPreferencesCopyMultiple);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&O&O&",
+	                      CFArrayRefObj_Convert, &keysToFetch,
+	                      CFStringRefObj_Convert, &applicationID,
+	                      CFStringRefObj_Convert, &userName,
+	                      CFStringRefObj_Convert, &hostName))
+		return NULL;
+	_rv = CFPreferencesCopyMultiple(keysToFetch,
+	                                applicationID,
+	                                userName,
+	                                hostName);
+	_res = Py_BuildValue("O&",
+	                     CFDictionaryRefObj_New, _rv);
+	return _res;
+}
+
+static PyObject *CF_CFPreferencesSetValue(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	CFStringRef key;
+	CFTypeRef value;
+	CFStringRef applicationID;
+	CFStringRef userName;
+	CFStringRef hostName;
+#ifndef CFPreferencesSetValue
+	PyMac_PRECHECK(CFPreferencesSetValue);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&O&O&O&",
+	                      CFStringRefObj_Convert, &key,
+	                      CFTypeRefObj_Convert, &value,
+	                      CFStringRefObj_Convert, &applicationID,
+	                      CFStringRefObj_Convert, &userName,
+	                      CFStringRefObj_Convert, &hostName))
+		return NULL;
+	CFPreferencesSetValue(key,
+	                      value,
+	                      applicationID,
+	                      userName,
+	                      hostName);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CF_CFPreferencesSetMultiple(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	CFDictionaryRef keysToSet;
+	CFArrayRef keysToRemove;
+	CFStringRef applicationID;
+	CFStringRef userName;
+	CFStringRef hostName;
+#ifndef CFPreferencesSetMultiple
+	PyMac_PRECHECK(CFPreferencesSetMultiple);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&O&O&O&",
+	                      CFDictionaryRefObj_Convert, &keysToSet,
+	                      CFArrayRefObj_Convert, &keysToRemove,
+	                      CFStringRefObj_Convert, &applicationID,
+	                      CFStringRefObj_Convert, &userName,
+	                      CFStringRefObj_Convert, &hostName))
+		return NULL;
+	CFPreferencesSetMultiple(keysToSet,
+	                         keysToRemove,
+	                         applicationID,
+	                         userName,
+	                         hostName);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CF_CFPreferencesSynchronize(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	Boolean _rv;
+	CFStringRef applicationID;
+	CFStringRef userName;
+	CFStringRef hostName;
+#ifndef CFPreferencesSynchronize
+	PyMac_PRECHECK(CFPreferencesSynchronize);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&O&",
+	                      CFStringRefObj_Convert, &applicationID,
+	                      CFStringRefObj_Convert, &userName,
+	                      CFStringRefObj_Convert, &hostName))
+		return NULL;
+	_rv = CFPreferencesSynchronize(applicationID,
+	                               userName,
+	                               hostName);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *CF_CFPreferencesCopyApplicationList(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	CFArrayRef _rv;
+	CFStringRef userName;
+	CFStringRef hostName;
+#ifndef CFPreferencesCopyApplicationList
+	PyMac_PRECHECK(CFPreferencesCopyApplicationList);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CFStringRefObj_Convert, &userName,
+	                      CFStringRefObj_Convert, &hostName))
+		return NULL;
+	_rv = CFPreferencesCopyApplicationList(userName,
+	                                       hostName);
+	_res = Py_BuildValue("O&",
+	                     CFArrayRefObj_New, _rv);
+	return _res;
+}
+
+static PyObject *CF_CFPreferencesCopyKeyList(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	CFArrayRef _rv;
+	CFStringRef applicationID;
+	CFStringRef userName;
+	CFStringRef hostName;
+#ifndef CFPreferencesCopyKeyList
+	PyMac_PRECHECK(CFPreferencesCopyKeyList);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&O&",
+	                      CFStringRefObj_Convert, &applicationID,
+	                      CFStringRefObj_Convert, &userName,
+	                      CFStringRefObj_Convert, &hostName))
+		return NULL;
+	_rv = CFPreferencesCopyKeyList(applicationID,
+	                               userName,
+	                               hostName);
+	_res = Py_BuildValue("O&",
+	                     CFArrayRefObj_New, _rv);
+	return _res;
+}
+
 static PyObject *CF_CFStringGetTypeID(PyObject *_self, PyObject *_args)
 {
 	PyObject *_res = NULL;
@@ -3884,6 +4202,34 @@
 	 "(CFIndex capacity) -> (CFMutableDictionaryRef _rv)"},
 	{"CFDictionaryCreateMutableCopy", (PyCFunction)CF_CFDictionaryCreateMutableCopy, 1,
 	 "(CFIndex capacity, CFDictionaryRef theDict) -> (CFMutableDictionaryRef _rv)"},
+	{"CFPreferencesCopyAppValue", (PyCFunction)CF_CFPreferencesCopyAppValue, 1,
+	 "(CFStringRef key, CFStringRef applicationID) -> (CFTypeRef _rv)"},
+	{"CFPreferencesGetAppBooleanValue", (PyCFunction)CF_CFPreferencesGetAppBooleanValue, 1,
+	 "(CFStringRef key, CFStringRef applicationID) -> (Boolean _rv, Boolean keyExistsAndHasValidFormat)"},
+	{"CFPreferencesGetAppIntegerValue", (PyCFunction)CF_CFPreferencesGetAppIntegerValue, 1,
+	 "(CFStringRef key, CFStringRef applicationID) -> (CFIndex _rv, Boolean keyExistsAndHasValidFormat)"},
+	{"CFPreferencesSetAppValue", (PyCFunction)CF_CFPreferencesSetAppValue, 1,
+	 "(CFStringRef key, CFTypeRef value, CFStringRef applicationID) -> None"},
+	{"CFPreferencesAddSuitePreferencesToApp", (PyCFunction)CF_CFPreferencesAddSuitePreferencesToApp, 1,
+	 "(CFStringRef applicationID, CFStringRef suiteID) -> None"},
+	{"CFPreferencesRemoveSuitePreferencesFromApp", (PyCFunction)CF_CFPreferencesRemoveSuitePreferencesFromApp, 1,
+	 "(CFStringRef applicationID, CFStringRef suiteID) -> None"},
+	{"CFPreferencesAppSynchronize", (PyCFunction)CF_CFPreferencesAppSynchronize, 1,
+	 "(CFStringRef applicationID) -> (Boolean _rv)"},
+	{"CFPreferencesCopyValue", (PyCFunction)CF_CFPreferencesCopyValue, 1,
+	 "(CFStringRef key, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (CFTypeRef _rv)"},
+	{"CFPreferencesCopyMultiple", (PyCFunction)CF_CFPreferencesCopyMultiple, 1,
+	 "(CFArrayRef keysToFetch, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (CFDictionaryRef _rv)"},
+	{"CFPreferencesSetValue", (PyCFunction)CF_CFPreferencesSetValue, 1,
+	 "(CFStringRef key, CFTypeRef value, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> None"},
+	{"CFPreferencesSetMultiple", (PyCFunction)CF_CFPreferencesSetMultiple, 1,
+	 "(CFDictionaryRef keysToSet, CFArrayRef keysToRemove, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> None"},
+	{"CFPreferencesSynchronize", (PyCFunction)CF_CFPreferencesSynchronize, 1,
+	 "(CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (Boolean _rv)"},
+	{"CFPreferencesCopyApplicationList", (PyCFunction)CF_CFPreferencesCopyApplicationList, 1,
+	 "(CFStringRef userName, CFStringRef hostName) -> (CFArrayRef _rv)"},
+	{"CFPreferencesCopyKeyList", (PyCFunction)CF_CFPreferencesCopyKeyList, 1,
+	 "(CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (CFArrayRef _rv)"},
 	{"CFStringGetTypeID", (PyCFunction)CF_CFStringGetTypeID, 1,
 	 "() -> (CFTypeID _rv)"},
 	{"CFStringCreateWithPascalString", (PyCFunction)CF_CFStringCreateWithPascalString, 1,
@@ -4017,6 +4363,17 @@
 	Py_INCREF(&CFURLRef_Type);
 	if (PyDict_SetItemString(d, "CFURLRefType", (PyObject *)&CFURLRef_Type) != 0)
 		Py_FatalError("can't initialize CFURLRefType");
+
+#define _STRINGCONST(name) PyModule_AddObject(m, #name, CFStringRefObj_New(name))
+	_STRINGCONST(kCFPreferencesAnyApplication);
+	_STRINGCONST(kCFPreferencesCurrentApplication);
+	_STRINGCONST(kCFPreferencesAnyHost);
+	_STRINGCONST(kCFPreferencesCurrentHost);
+	_STRINGCONST(kCFPreferencesAnyUser);
+	_STRINGCONST(kCFPreferencesCurrentUser);
+
+
+
 }
 
 /* ========================= End module _CF ========================= */
diff --git a/Mac/Modules/cf/cfscan.py b/Mac/Modules/cf/cfscan.py
index ebaeed8..85178e4 100644
--- a/Mac/Modules/cf/cfscan.py
+++ b/Mac/Modules/cf/cfscan.py
@@ -31,7 +31,7 @@
 		"CFDictionary.h",
 ##		"CFNumber.h",
 ##		"CFPlugIn.h",
-##		"CFPreferences.h",
+		"CFPreferences.h",
 		"CFPropertyList.h",
 ##		"CFSet.h",
 		"CFString.h",
@@ -54,7 +54,7 @@
 	def destination(self, type, name, arglist):
 		classname = "Function"
 		listname = "functions"
-		if arglist:
+		if arglist and name[:13] != 'CFPreferences':
 			t, n, m = arglist[0]
 			if t in OBJECTS and m == "InMode":
 				classname = "Method"
diff --git a/Mac/Modules/cf/cfsupport.py b/Mac/Modules/cf/cfsupport.py
index 23dbbac..8aed6c2 100644
--- a/Mac/Modules/cf/cfsupport.py
+++ b/Mac/Modules/cf/cfsupport.py
@@ -50,6 +50,7 @@
 #include <CFString.h>
 #include <CFURL.h>
 #include <CFPropertyList.h>
+#include <CFPreferences.h>
 #else
 #include <CoreServices/CoreServices.h>
 #endif
@@ -165,6 +166,17 @@
 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFURLRef, CFURLRefObj_Convert);
 """
 
+variablestuff="""
+#define _STRINGCONST(name) PyModule_AddObject(m, #name, CFStringRefObj_New(name))
+_STRINGCONST(kCFPreferencesAnyApplication);
+_STRINGCONST(kCFPreferencesCurrentApplication);
+_STRINGCONST(kCFPreferencesAnyHost);
+_STRINGCONST(kCFPreferencesCurrentHost);
+_STRINGCONST(kCFPreferencesAnyUser);
+_STRINGCONST(kCFPreferencesCurrentUser);
+
+"""
+
 Boolean = Type("Boolean", "l")
 CFTypeID = Type("CFTypeID", "l") # XXXX a guess, seems better than OSTypeType.
 CFHashCode = Type("CFHashCode", "l")
@@ -405,7 +417,7 @@
 # From here on it's basically all boiler plate...
 
 # Create the generator groups and link them
-module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff)
+module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff, variablestuff)
 CFTypeRef_object = CFTypeRefObjectDefinition('CFTypeRef', 'CFTypeRefObj', 'CFTypeRef')
 CFArrayRef_object = CFArrayRefObjectDefinition('CFArrayRef', 'CFArrayRefObj', 'CFArrayRef')
 CFMutableArrayRef_object = CFMutableArrayRefObjectDefinition('CFMutableArrayRef', 'CFMutableArrayRefObj', 'CFMutableArrayRef')