purple.c created by Adding function get_buddies()
authorRagner Magalhaes <ragner.magalhaes@openbossa.org>
Wed, 10 Dec 2008 21:28:39 +0000 (21:28 +0000)
committerAnderson Briglia <anderson.briglia@openbossa.org>
Sat, 28 Feb 2009 21:11:23 +0000 (17:11 -0400)
Adding function get_buddies() to return account's buddies list.

Signed-off-by: Ragner Magalhaes <ragner.magalhaes@openbossa.org>

git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1682 596f6dd7-e928-0410-a184-9e12fd12cf7e

purple.c

index a8c4a07..e84adf5 100644 (file)
--- a/purple.c
+++ b/purple.c
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.10 on Tue Dec  9 09:17:03 2008 */
+/* Generated by Cython 0.9.8 on Wed Dec 10 14:36:50 2008 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
 #if PY_VERSION_HEX < 0x02060000
   #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
   #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
-  #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
+  #define Py_SIZE(ob)   ((PyVarObject*)(ob))->ob_size)
   #define PyVarObject_HEAD_INIT(type, size) \
           PyObject_HEAD_INIT(type) size,
-  #define PyType_Modified(t)
 
   typedef struct {
        void *buf;
-       PyObject *obj;
        Py_ssize_t len;
-       Py_ssize_t itemsize;
        int readonly;
+       const char *format;
        int ndim;
-       char *format;
        Py_ssize_t *shape;
        Py_ssize_t *strides;
        Py_ssize_t *suboffsets;
+       Py_ssize_t itemsize;
        void *internal;
   } Py_buffer;
 
@@ -53,7 +51,6 @@
   #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
   #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
   #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
-
 #endif
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
@@ -64,9 +61,6 @@
   #define Py_TPFLAGS_CHECKTYPES 0
   #define Py_TPFLAGS_HAVE_INDEX 0
 #endif
-#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
-  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
-#endif
 #if PY_MAJOR_VERSION >= 3
   #define PyBaseString_Type            PyUnicode_Type
   #define PyString_Type                PyBytes_Type
   #define PyInt_AsSsize_t              PyLong_AsSsize_t
   #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
   #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
-  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
+  #define PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
 #else
-  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
   #define PyBytes_Type                 PyString_Type
 #endif
 #if PY_MAJOR_VERSION >= 3
   #define PyMethod_New(func, self, klass) PyInstanceMethod_New(func)
 #endif
-#if !defined(WIN32) && !defined(MS_WINDOWS)
-  #ifndef __stdcall
-    #define __stdcall
-  #endif
-  #ifndef __cdecl
-    #define __cdecl
-  #endif
-#else
-  #define _USE_MATH_DEFINES
+#ifndef __stdcall
+  #define __stdcall
+#endif
+#ifndef __cdecl
+  #define __cdecl
 #endif
 #ifdef __cplusplus
 #define __PYX_EXTERN_C extern "C"
@@ -210,6 +199,25 @@ static const char * __pyx_cfilenm= __FILE__;
 static const char *__pyx_filename;
 static const char **__pyx_f;
 
+static INLINE void __Pyx_RaiseArgtupleTooLong(Py_ssize_t num_expected, Py_ssize_t num_found); /*proto*/
+
+#if PY_VERSION_HEX >= 0x02060000
+/* #define __Pyx_TypeModified(t) PyType_Modified(t) */  /* Py3.0beta1 */
+static void __Pyx_TypeModified(PyTypeObject* type); /*proto*/
+#else
+  #define __Pyx_TypeModified(t)
+#endif
+
+static int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed); /*proto*/
+
+static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name, int exact); /*proto*/
+
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
+
+static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
+
+static void __Pyx_WriteUnraisable(const char *name); /*proto*/
+
 static INLINE PyObject *__Pyx_GetItemInt(PyObject *o, Py_ssize_t i, int is_unsigned) {
     PyObject *r;
     if (PyList_CheckExact(o) && 0 <= i && i < PyList_GET_SIZE(o)) {
@@ -232,24 +240,6 @@ static INLINE PyObject *__Pyx_GetItemInt(PyObject *o, Py_ssize_t i, int is_unsig
     return r;
 }
 
-static void __Pyx_RaiseDoubleKeywordsError(
-    const char* func_name, PyObject* kw_name); /*proto*/
-
-static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
-    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
-
-static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,     const char* function_name); /*proto*/
-
-static INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict,
-    const char* function_name, int kw_allowed); /*proto*/
-
-static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
-    const char *name, int exact); /*proto*/
-
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
-
-static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
-
 static INLINE PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
     if (likely(PyList_CheckExact(L))) {
         if (PyList_Append(L, x) < 0) return NULL;
@@ -261,20 +251,15 @@ static INLINE PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
     }
 }
 
-static void __Pyx_WriteUnraisable(const char *name); /*proto*/
-
-static INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
-static INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
 
 static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
 
 static void __Pyx_AddTraceback(const char *funcname); /*proto*/
 
-static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
-
 /* Type declarations */
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":22
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/buddy.pyx":22
  * cimport purple
  * 
  * cdef class Buddy:             # <<<<<<<<<<<<<<
@@ -290,7 +275,7 @@ struct __pyx_obj_6purple_Buddy {
   PyObject *__exists;
 };
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":61
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/purple.pyx":61
  * include "util.pxd"
  * 
  * cdef class Purple:             # <<<<<<<<<<<<<<
@@ -303,7 +288,7 @@ struct __pyx_obj_6purple_Purple {
   struct __pyx_vtabstruct_6purple_Purple *__pyx_vtab;
 };
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":56
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/proxy.pyx":56
  *     USE_ENVVAR = property(get_USE_ENVVAR)
  * 
  * cdef class ProxyInfo:             # <<<<<<<<<<<<<<
@@ -317,7 +302,7 @@ struct __pyx_obj_6purple_ProxyInfo {
   PyObject *types;
 };
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":22
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/protocol.pyx":22
  * cimport purple
  * 
  * cdef class Protocol:             # <<<<<<<<<<<<<<
@@ -374,7 +359,7 @@ struct __pyx_vtabstruct_6purple_Conversation {
 static struct __pyx_vtabstruct_6purple_Conversation *__pyx_vtabptr_6purple_Conversation;
 
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":61
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/purple.pyx":61
  * include "util.pxd"
  * 
  * cdef class Purple:             # <<<<<<<<<<<<<<
@@ -392,7 +377,7 @@ struct __pyx_vtabstruct_6purple_Purple {
 static struct __pyx_vtabstruct_6purple_Purple *__pyx_vtabptr_6purple_Purple;
 
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":22
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account.pyx":22
  * cimport purple
  * 
  * cdef class Account:             # <<<<<<<<<<<<<<
@@ -554,5926 +539,4447 @@ static void __pyx_f_6purple_jabber_receiving_xmlnode_cb(PurpleConnection *, xmln
 
 
 /* Implementation of purple */
-static PyObject *__pyx_int_0;
-static PyObject *__pyx_int_1;
-static PyObject *__pyx_int_2;
-static PyObject *__pyx_int_3;
-static PyObject *__pyx_int_4;
-static PyObject *__pyx_int_5;
-static PyObject *__pyx_int_6;
-static PyObject *__pyx_int_7;
-static PyObject *__pyx_int_8;
-static PyObject *__pyx_int_9;
-static PyObject *__pyx_int_10;
-static PyObject *__pyx_int_11;
-static PyObject *__pyx_int_12;
-static PyObject *__pyx_int_13;
-static PyObject *__pyx_int_14;
-static PyObject *__pyx_int_15;
-static PyObject *__pyx_int_16;
+
+
 static char __pyx_k___init__[] = "__init__";
-static PyObject *__pyx_kp___init__;
 static char __pyx_k_destroy[] = "destroy";
-static PyObject *__pyx_kp_destroy;
 static char __pyx_k___get_ui_name[] = "__get_ui_name";
-static PyObject *__pyx_kp___get_ui_name;
 static char __pyx_k_ui_name[] = "ui_name";
-static PyObject *__pyx_kp_ui_name;
 static char __pyx_k_1[] = "__glib_iteration_when_idle";
-static PyObject *__pyx_kp_1;
 static char __pyx_k_purple_init[] = "purple_init";
-static PyObject *__pyx_kp_purple_init;
 static char __pyx_k_add_callback[] = "add_callback";
-static PyObject *__pyx_kp_add_callback;
 static char __pyx_k_signal_connect[] = "signal_connect";
-static PyObject *__pyx_kp_signal_connect;
 static char __pyx_k_accounts_get_all[] = "accounts_get_all";
-static PyObject *__pyx_kp_accounts_get_all;
 static char __pyx_k_2[] = "accounts_get_all_active";
-static PyObject *__pyx_kp_2;
 static char __pyx_k_protocols_get_all[] = "protocols_get_all";
-static PyObject *__pyx_kp_protocols_get_all;
 static char __pyx_k___get_exists[] = "__get_exists";
-static PyObject *__pyx_kp___get_exists;
 static char __pyx_k_exists[] = "exists";
-static PyObject *__pyx_kp_exists;
 static char __pyx_k___get_id[] = "__get_id";
-static PyObject *__pyx_kp___get_id;
 static char __pyx_k_id[] = "id";
-static PyObject *__pyx_kp_id;
 static char __pyx_k___get_name[] = "__get_name";
-static PyObject *__pyx_kp___get_name;
 static char __pyx_k_name[] = "name";
-static PyObject *__pyx_kp_name;
 static char __pyx_k_3[] = "__get_options_labels";
-static PyObject *__pyx_kp_3;
 static char __pyx_k_options_labels[] = "options_labels";
-static PyObject *__pyx_kp_options_labels;
 static char __pyx_k_4[] = "__get_options_values";
-static PyObject *__pyx_kp_4;
 static char __pyx_k_options_values[] = "options_values";
-static PyObject *__pyx_kp_options_values;
 static char __pyx_k_get_NONE[] = "get_NONE";
-static PyObject *__pyx_kp_get_NONE;
 static char __pyx_k_NONE[] = "NONE";
-static PyObject *__pyx_kp_NONE;
 static char __pyx_k_get_USE_GLOBAL[] = "get_USE_GLOBAL";
-static PyObject *__pyx_kp_get_USE_GLOBAL;
 static char __pyx_k_USE_GLOBAL[] = "USE_GLOBAL";
-static PyObject *__pyx_kp_USE_GLOBAL;
 static char __pyx_k_get_HTTP[] = "get_HTTP";
-static PyObject *__pyx_kp_get_HTTP;
 static char __pyx_k_HTTP[] = "HTTP";
-static PyObject *__pyx_kp_HTTP;
 static char __pyx_k_5[] = "get_SOCKS4";
-static PyObject *__pyx_kp_5;
 static char __pyx_k_6[] = "get_SOCKS5";
-static PyObject *__pyx_kp_6;
 static char __pyx_k_get_USE_ENVVAR[] = "get_USE_ENVVAR";
-static PyObject *__pyx_kp_get_USE_ENVVAR;
 static char __pyx_k_USE_ENVVAR[] = "USE_ENVVAR";
-static PyObject *__pyx_kp_USE_ENVVAR;
 static char __pyx_k_set_type[] = "set_type";
-static PyObject *__pyx_kp_set_type;
 static char __pyx_k_set_host[] = "set_host";
-static PyObject *__pyx_kp_set_host;
 static char __pyx_k_set_port[] = "set_port";
-static PyObject *__pyx_kp_set_port;
 static char __pyx_k_set_username[] = "set_username";
-static PyObject *__pyx_kp_set_username;
 static char __pyx_k_set_password[] = "set_password";
-static PyObject *__pyx_kp_set_password;
 static char __pyx_k_get_types[] = "get_types";
-static PyObject *__pyx_kp_get_types;
 static char __pyx_k_set_info[] = "set_info";
-static PyObject *__pyx_kp_set_info;
 static char __pyx_k___is_connected[] = "__is_connected";
-static PyObject *__pyx_kp___is_connected;
 static char __pyx_k_is_connected[] = "is_connected";
-static PyObject *__pyx_kp_is_connected;
 static char __pyx_k___is_connecting[] = "__is_connecting";
-static PyObject *__pyx_kp___is_connecting;
 static char __pyx_k_is_connecting[] = "is_connecting";
-static PyObject *__pyx_kp_is_connecting;
 static char __pyx_k___is_disconnected[] = "__is_disconnected";
-static PyObject *__pyx_kp___is_disconnected;
 static char __pyx_k_is_disconnected[] = "is_disconnected";
-static PyObject *__pyx_kp_is_disconnected;
 static char __pyx_k___get_core[] = "__get_core";
-static PyObject *__pyx_kp___get_core;
 static char __pyx_k_core[] = "core";
-static PyObject *__pyx_kp_core;
 static char __pyx_k___get_username[] = "__get_username";
-static PyObject *__pyx_kp___get_username;
 static char __pyx_k_username[] = "username";
-static PyObject *__pyx_kp_username;
 static char __pyx_k___get_protocol[] = "__get_protocol";
-static PyObject *__pyx_kp___get_protocol;
 static char __pyx_k_protocol[] = "protocol";
-static PyObject *__pyx_kp_protocol;
 static char __pyx_k_7[] = "_get_protocol_options";
-static PyObject *__pyx_kp_7;
 static char __pyx_k_protocol_options[] = "protocol_options";
-static PyObject *__pyx_kp_protocol_options;
 static char __pyx_k___get_password[] = "__get_password";
-static PyObject *__pyx_kp___get_password;
 static char __pyx_k_password[] = "password";
-static PyObject *__pyx_kp_password;
 static char __pyx_k___get_alias[] = "__get_alias";
-static PyObject *__pyx_kp___get_alias;
 static char __pyx_k_alias[] = "alias";
-static PyObject *__pyx_kp_alias;
 static char __pyx_k___get_user_info[] = "__get_user_info";
-static PyObject *__pyx_kp___get_user_info;
 static char __pyx_k_user_info[] = "user_info";
-static PyObject *__pyx_kp_user_info;
 static char __pyx_k_8[] = "__get_remember_password";
-static PyObject *__pyx_kp_8;
 static char __pyx_k_remember_password[] = "remember_password";
-static PyObject *__pyx_kp_remember_password;
 static char __pyx_k___get_enabled[] = "__get_enabled";
-static PyObject *__pyx_kp___get_enabled;
 static char __pyx_k_enabled[] = "enabled";
-static PyObject *__pyx_kp_enabled;
 static char __pyx_k___get_status_types[] = "__get_status_types";
-static PyObject *__pyx_kp___get_status_types;
 static char __pyx_k_status_types[] = "status_types";
-static PyObject *__pyx_kp_status_types;
 static char __pyx_k___get_active_status[] = "__get_active_status";
-static PyObject *__pyx_kp___get_active_status;
 static char __pyx_k_active_status[] = "active_status";
-static PyObject *__pyx_kp_active_status;
 static char __pyx_k_set_protocol[] = "set_protocol";
-static PyObject *__pyx_kp_set_protocol;
 static char __pyx_k_9[] = "set_protocol_options";
-static PyObject *__pyx_kp_9;
 static char __pyx_k_set_alias[] = "set_alias";
-static PyObject *__pyx_kp_set_alias;
 static char __pyx_k_set_user_info[] = "set_user_info";
-static PyObject *__pyx_kp_set_user_info;
 static char __pyx_k_10[] = "set_remember_password";
-static PyObject *__pyx_kp_10;
 static char __pyx_k_set_enabled[] = "set_enabled";
-static PyObject *__pyx_kp_set_enabled;
 static char __pyx_k_new[] = "new";
-static PyObject *__pyx_kp_new;
 static char __pyx_k_remove[] = "remove";
-static PyObject *__pyx_kp_remove;
 static char __pyx_k_connect[] = "connect";
-static PyObject *__pyx_kp_connect;
 static char __pyx_k_disconnect[] = "disconnect";
-static PyObject *__pyx_kp_disconnect;
 static char __pyx_k_add_buddy[] = "add_buddy";
-static PyObject *__pyx_kp_add_buddy;
 static char __pyx_k_remove_buddy[] = "remove_buddy";
-static PyObject *__pyx_kp_remove_buddy;
 static char __pyx_k_get_buddies_online[] = "get_buddies_online";
-static PyObject *__pyx_kp_get_buddies_online;
+static char __pyx_k_get_buddies[] = "get_buddies";
 static char __pyx_k_request_add_buddy[] = "request_add_buddy";
-static PyObject *__pyx_kp_request_add_buddy;
 static char __pyx_k_set_active_status[] = "set_active_status";
-static PyObject *__pyx_kp_set_active_status;
 static char __pyx_k_set_status_message[] = "set_status_message";
-static PyObject *__pyx_kp_set_status_message;
 static char __pyx_k___get_account[] = "__get_account";
-static PyObject *__pyx_kp___get_account;
 static char __pyx_k_account[] = "account";
-static PyObject *__pyx_kp_account;
 static char __pyx_k___get_group[] = "__get_group";
-static PyObject *__pyx_kp___get_group;
 static char __pyx_k_group[] = "group";
-static PyObject *__pyx_kp_group;
 static char __pyx_k___get_server_alias[] = "__get_server_alias";
-static PyObject *__pyx_kp___get_server_alias;
 static char __pyx_k_server_alias[] = "server_alias";
-static PyObject *__pyx_kp_server_alias;
 static char __pyx_k___get_contact_alias[] = "__get_contact_alias";
-static PyObject *__pyx_kp___get_contact_alias;
 static char __pyx_k_contact_alias[] = "contact_alias";
-static PyObject *__pyx_kp_contact_alias;
 static char __pyx_k___get_local_alias[] = "__get_local_alias";
-static PyObject *__pyx_kp___get_local_alias;
 static char __pyx_k_local_alias[] = "local_alias";
-static PyObject *__pyx_kp_local_alias;
 static char __pyx_k___get_available[] = "__get_available";
-static PyObject *__pyx_kp___get_available;
 static char __pyx_k_available[] = "available";
-static PyObject *__pyx_kp_available;
 static char __pyx_k___get_online[] = "__get_online";
-static PyObject *__pyx_kp___get_online;
 static char __pyx_k_online[] = "online";
-static PyObject *__pyx_kp_online;
 static char __pyx_k___get_idle[] = "__get_idle";
-static PyObject *__pyx_kp___get_idle;
 static char __pyx_k_idle[] = "idle";
-static PyObject *__pyx_kp_idle;
 static char __pyx_k_set_group[] = "set_group";
-static PyObject *__pyx_kp_set_group;
 static char __pyx_k_set_ui_ops[] = "set_ui_ops";
-static PyObject *__pyx_kp_set_ui_ops;
 static char __pyx_k_im_send[] = "im_send";
-static PyObject *__pyx_kp_im_send;
-static char __pyx_k_message[] = "message";
-static PyObject *__pyx_kp_message;
-static char __pyx_k_ui_version[] = "ui_version";
-static PyObject *__pyx_kp_ui_version;
-static char __pyx_k_ui_website[] = "ui_website";
-static PyObject *__pyx_kp_ui_website;
-static char __pyx_k_ui_dev_website[] = "ui_dev_website";
-static PyObject *__pyx_kp_ui_dev_website;
-static char __pyx_k_debug_enabled[] = "debug_enabled";
-static PyObject *__pyx_kp_debug_enabled;
-static char __pyx_k_default_path[] = "default_path";
-static PyObject *__pyx_kp_default_path;
-static char __pyx_k_type[] = "type";
-static PyObject *__pyx_kp_type;
-static char __pyx_k_callback[] = "callback";
-static PyObject *__pyx_kp_callback;
-static char __pyx_k_cb[] = "cb";
-static PyObject *__pyx_kp_cb;
-static char __pyx_k_host[] = "host";
-static PyObject *__pyx_kp_host;
-static char __pyx_k_port[] = "port";
-static PyObject *__pyx_kp_port;
-static char __pyx_k_acc[] = "acc";
-static PyObject *__pyx_kp_acc;
-static char __pyx_k_info[] = "info";
-static PyObject *__pyx_kp_info;
-static char __pyx_k_po[] = "po";
-static PyObject *__pyx_kp_po;
-static char __pyx_k_value[] = "value";
-static PyObject *__pyx_kp_value;
-static char __pyx_k_buddy_username[] = "buddy_username";
-static PyObject *__pyx_kp_buddy_username;
-static char __pyx_k_buddy_alias[] = "buddy_alias";
-static PyObject *__pyx_kp_buddy_alias;
-static char __pyx_k_msg[] = "msg";
-static PyObject *__pyx_kp_msg;
-static char __pyx_k_cbs[] = "cbs";
-static PyObject *__pyx_kp_cbs;
 static char __pyx_k_ecore[] = "ecore";
-static PyObject *__pyx_kp_ecore;
 static char __pyx_k_account_cbs[] = "account_cbs";
-static PyObject *__pyx_kp_account_cbs;
 static char __pyx_k_blist_cbs[] = "blist_cbs";
-static PyObject *__pyx_kp_blist_cbs;
 static char __pyx_k_connection_cbs[] = "connection_cbs";
-static PyObject *__pyx_kp_connection_cbs;
 static char __pyx_k_conversation_cbs[] = "conversation_cbs";
-static PyObject *__pyx_kp_conversation_cbs;
 static char __pyx_k_notify_cbs[] = "notify_cbs";
-static PyObject *__pyx_kp_notify_cbs;
 static char __pyx_k_request_cbs[] = "request_cbs";
-static PyObject *__pyx_kp_request_cbs;
 static char __pyx_k_signal_cbs[] = "signal_cbs";
-static PyObject *__pyx_kp_signal_cbs;
 static char __pyx_k_property[] = "property";
-static PyObject *__pyx_kp_property;
-static char __pyx_k_has_key[] = "has_key";
-static PyObject *__pyx_kp_has_key;
-static char __pyx_k_call_authorize_cb[] = "call_authorize_cb";
-static PyObject *__pyx_kp_call_authorize_cb;
-static char __pyx_k_call_deny_cb[] = "call_deny_cb";
-static PyObject *__pyx_kp_call_deny_cb;
-static char __pyx_k_54[] = "show";
-static PyObject *__pyx_kp_54;
-static char __pyx_k_55[] = "show";
-static PyObject *__pyx_kp_55;
-static char __pyx_k_60[] = "update";
-static PyObject *__pyx_kp_60;
-static char __pyx_k_61[] = "update";
-static PyObject *__pyx_kp_61;
-static char __pyx_k_62[] = "update";
-static PyObject *__pyx_kp_62;
-static char __pyx_k_63[] = "update";
-static PyObject *__pyx_kp_63;
-static char __pyx_k_64[] = "update";
-static PyObject *__pyx_kp_64;
-static char __pyx_k_65[] = "update";
-static PyObject *__pyx_kp_65;
-static char __pyx_k_69[] = "remove";
-static PyObject *__pyx_kp_69;
-static char __pyx_k_70[] = "remove";
-static PyObject *__pyx_kp_70;
-static char __pyx_k_71[] = "remove";
-static PyObject *__pyx_kp_71;
-static char __pyx_k_72[] = "remove";
-static PyObject *__pyx_kp_72;
-static char __pyx_k_73[] = "remove";
-static PyObject *__pyx_kp_73;
-static char __pyx_k_74[] = "remove";
-static PyObject *__pyx_kp_74;
-static char __pyx_k_78[] = "destroy";
-static PyObject *__pyx_kp_78;
-static char __pyx_k_79[] = "destroy";
-static PyObject *__pyx_kp_79;
-static char __pyx_k_112[] = "connected";
-static PyObject *__pyx_kp_112;
-static char __pyx_k_113[] = "connected";
-static PyObject *__pyx_kp_113;
-static char __pyx_k_118[] = "disconnected";
-static PyObject *__pyx_kp_118;
-static char __pyx_k_119[] = "disconnected";
-static PyObject *__pyx_kp_119;
-static char __pyx_k_124[] = "notice";
-static PyObject *__pyx_kp_124;
-static char __pyx_k_125[] = "notice";
-static PyObject *__pyx_kp_125;
-static char __pyx_k_185[] = "SEND";
-static PyObject *__pyx_kp_185;
-static char __pyx_k_186[] = "RECV";
-static PyObject *__pyx_kp_186;
-static char __pyx_k_222[] = "present";
-static PyObject *__pyx_kp_222;
-static char __pyx_k_223[] = "present";
-static PyObject *__pyx_kp_223;
-static char __pyx_k_timer_add[] = "timer_add";
-static PyObject *__pyx_kp_timer_add;
-static char __pyx_k_c_ui_info[] = "c_ui_info";
-static PyObject *__pyx_kp_c_ui_info;
-static char __pyx_k_405[] = "account";
-static PyObject *__pyx_kp_405;
-static char __pyx_k_406[] = "blist";
-static PyObject *__pyx_kp_406;
-static char __pyx_k_407[] = "connection";
-static PyObject *__pyx_kp_407;
-static char __pyx_k_408[] = "conversation";
-static PyObject *__pyx_kp_408;
-static char __pyx_k_409[] = "notify";
-static PyObject *__pyx_kp_409;
-static char __pyx_k_410[] = "request";
-static PyObject *__pyx_kp_410;
-static char __pyx_k_append[] = "append";
-static PyObject *__pyx_kp_append;
-static char __pyx_k_427[] = "HTTP";
-static PyObject *__pyx_kp_427;
-static char __pyx_k_428[] = "USER_GLOBAL";
-static PyObject *__pyx_kp_428;
-static char __pyx_k_429[] = "USE_ENVVAR";
-static PyObject *__pyx_kp_429;
-static char __pyx_k_430[] = "SOCKS4";
-static PyObject *__pyx_kp_430;
-static char __pyx_k_431[] = "SOCKS5";
-static PyObject *__pyx_kp_431;
-static char __pyx_k_432[] = "NONE";
-static PyObject *__pyx_kp_432;
-static char __pyx_k_keys[] = "keys";
-static PyObject *__pyx_kp_keys;
-static char __pyx_k_433[] = "type";
-static PyObject *__pyx_kp_433;
-static char __pyx_k_434[] = "type";
-static PyObject *__pyx_kp_434;
-static char __pyx_k_435[] = "type";
-static PyObject *__pyx_kp_435;
-static char __pyx_k_436[] = "HTTP";
-static PyObject *__pyx_kp_436;
-static char __pyx_k_437[] = "host";
-static PyObject *__pyx_kp_437;
-static char __pyx_k_438[] = "host";
-static PyObject *__pyx_kp_438;
-static char __pyx_k_439[] = "host";
-static PyObject *__pyx_kp_439;
-static char __pyx_k_440[] = "port";
-static PyObject *__pyx_kp_440;
-static char __pyx_k_441[] = "port";
-static PyObject *__pyx_kp_441;
-static char __pyx_k_442[] = "port";
-static PyObject *__pyx_kp_442;
-static char __pyx_k_443[] = "username";
-static PyObject *__pyx_kp_443;
-static char __pyx_k_444[] = "username";
-static PyObject *__pyx_kp_444;
-static char __pyx_k_445[] = "username";
-static PyObject *__pyx_kp_445;
-static char __pyx_k_446[] = "password";
-static PyObject *__pyx_kp_446;
-static char __pyx_k_447[] = "password";
-static PyObject *__pyx_kp_447;
-static char __pyx_k_448[] = "password";
-static PyObject *__pyx_kp_448;
-static char __pyx_k_451[] = "type";
-static PyObject *__pyx_kp_451;
-static char __pyx_k_452[] = "name";
-static PyObject *__pyx_kp_452;
-static char __pyx_k_453[] = "message";
-static PyObject *__pyx_kp_453;
-static char __pyx_k_459[] = "type";
-static PyObject *__pyx_kp_459;
-static char __pyx_k_460[] = "name";
-static PyObject *__pyx_kp_460;
-static char __pyx_k_461[] = "message";
-static PyObject *__pyx_kp_461;
-static char __pyx_k_462[] = "UNKNOWN";
-static PyObject *__pyx_kp_462;
-static char __pyx_k_463[] = "IM";
-static PyObject *__pyx_kp_463;
-static char __pyx_k_464[] = "CHAT";
-static PyObject *__pyx_kp_464;
-static char __pyx_k_465[] = "MISC";
-static PyObject *__pyx_kp_465;
-static char __pyx_k_466[] = "ANY";
-static PyObject *__pyx_kp_466;
+
+static PyObject *__pyx_kp___init__;
+static PyObject *__pyx_kp_destroy;
+static PyObject *__pyx_kp___get_ui_name;
+static PyObject *__pyx_kp_ui_name;
+static PyObject *__pyx_kp_1;
+static PyObject *__pyx_kp_purple_init;
+static PyObject *__pyx_kp_add_callback;
+static PyObject *__pyx_kp_signal_connect;
+static PyObject *__pyx_kp_accounts_get_all;
+static PyObject *__pyx_kp_2;
+static PyObject *__pyx_kp_protocols_get_all;
+static PyObject *__pyx_kp___get_exists;
+static PyObject *__pyx_kp_exists;
+static PyObject *__pyx_kp___get_id;
+static PyObject *__pyx_kp_id;
+static PyObject *__pyx_kp___get_name;
+static PyObject *__pyx_kp_name;
+static PyObject *__pyx_kp_3;
+static PyObject *__pyx_kp_options_labels;
+static PyObject *__pyx_kp_4;
+static PyObject *__pyx_kp_options_values;
+static PyObject *__pyx_kp_get_NONE;
+static PyObject *__pyx_kp_NONE;
+static PyObject *__pyx_kp_get_USE_GLOBAL;
+static PyObject *__pyx_kp_USE_GLOBAL;
+static PyObject *__pyx_kp_get_HTTP;
+static PyObject *__pyx_kp_HTTP;
+static PyObject *__pyx_kp_5;
+static PyObject *__pyx_kp_6;
+static PyObject *__pyx_kp_get_USE_ENVVAR;
+static PyObject *__pyx_kp_USE_ENVVAR;
+static PyObject *__pyx_kp_set_type;
+static PyObject *__pyx_kp_set_host;
+static PyObject *__pyx_kp_set_port;
+static PyObject *__pyx_kp_set_username;
+static PyObject *__pyx_kp_set_password;
+static PyObject *__pyx_kp_get_types;
+static PyObject *__pyx_kp_set_info;
+static PyObject *__pyx_kp___is_connected;
+static PyObject *__pyx_kp_is_connected;
+static PyObject *__pyx_kp___is_connecting;
+static PyObject *__pyx_kp_is_connecting;
+static PyObject *__pyx_kp___is_disconnected;
+static PyObject *__pyx_kp_is_disconnected;
+static PyObject *__pyx_kp___get_core;
+static PyObject *__pyx_kp_core;
+static PyObject *__pyx_kp___get_username;
+static PyObject *__pyx_kp_username;
+static PyObject *__pyx_kp___get_protocol;
+static PyObject *__pyx_kp_protocol;
+static PyObject *__pyx_kp_7;
+static PyObject *__pyx_kp_protocol_options;
+static PyObject *__pyx_kp___get_password;
+static PyObject *__pyx_kp_password;
+static PyObject *__pyx_kp___get_alias;
+static PyObject *__pyx_kp_alias;
+static PyObject *__pyx_kp___get_user_info;
+static PyObject *__pyx_kp_user_info;
+static PyObject *__pyx_kp_8;
+static PyObject *__pyx_kp_remember_password;
+static PyObject *__pyx_kp___get_enabled;
+static PyObject *__pyx_kp_enabled;
+static PyObject *__pyx_kp___get_status_types;
+static PyObject *__pyx_kp_status_types;
+static PyObject *__pyx_kp___get_active_status;
+static PyObject *__pyx_kp_active_status;
+static PyObject *__pyx_kp_set_protocol;
+static PyObject *__pyx_kp_9;
+static PyObject *__pyx_kp_set_alias;
+static PyObject *__pyx_kp_set_user_info;
+static PyObject *__pyx_kp_10;
+static PyObject *__pyx_kp_set_enabled;
+static PyObject *__pyx_kp_new;
+static PyObject *__pyx_kp_remove;
+static PyObject *__pyx_kp_connect;
+static PyObject *__pyx_kp_disconnect;
+static PyObject *__pyx_kp_add_buddy;
+static PyObject *__pyx_kp_remove_buddy;
+static PyObject *__pyx_kp_get_buddies_online;
+static PyObject *__pyx_kp_get_buddies;
+static PyObject *__pyx_kp_request_add_buddy;
+static PyObject *__pyx_kp_set_active_status;
+static PyObject *__pyx_kp_set_status_message;
+static PyObject *__pyx_kp___get_account;
+static PyObject *__pyx_kp_account;
+static PyObject *__pyx_kp___get_group;
+static PyObject *__pyx_kp_group;
+static PyObject *__pyx_kp___get_server_alias;
+static PyObject *__pyx_kp_server_alias;
+static PyObject *__pyx_kp___get_contact_alias;
+static PyObject *__pyx_kp_contact_alias;
+static PyObject *__pyx_kp___get_local_alias;
+static PyObject *__pyx_kp_local_alias;
+static PyObject *__pyx_kp___get_available;
+static PyObject *__pyx_kp_available;
+static PyObject *__pyx_kp___get_online;
+static PyObject *__pyx_kp_online;
+static PyObject *__pyx_kp___get_idle;
+static PyObject *__pyx_kp_idle;
+static PyObject *__pyx_kp_set_group;
+static PyObject *__pyx_kp_set_ui_ops;
+static PyObject *__pyx_kp_im_send;
+static PyObject *__pyx_kp_ecore;
+static PyObject *__pyx_kp_account_cbs;
+static PyObject *__pyx_kp_blist_cbs;
+static PyObject *__pyx_kp_connection_cbs;
+static PyObject *__pyx_kp_conversation_cbs;
+static PyObject *__pyx_kp_notify_cbs;
+static PyObject *__pyx_kp_request_cbs;
+static PyObject *__pyx_kp_signal_cbs;
+static PyObject *__pyx_kp_property;
+
+
 static PyObject *__pyx_builtin_property;
-static PyObject *__pyx_kp_14;
-static PyObject *__pyx_kp_15;
-static char __pyx_k_11[] = "account";
-static char __pyx_k_12[] = "%s";
-static char __pyx_k_13[] = "notify-added\n";
-static char __pyx_k_14[] = "notify-added";
-static char __pyx_k_15[] = "notify-added";
-static PyObject *__pyx_kp_19;
-static PyObject *__pyx_kp_20;
-static char __pyx_k_16[] = "account";
-static char __pyx_k_17[] = "%s";
-static char __pyx_k_18[] = "status-changed\n";
-static char __pyx_k_19[] = "status-changed";
-static char __pyx_k_20[] = "status-changed";
-static PyObject *__pyx_kp_24;
-static PyObject *__pyx_kp_25;
-static char __pyx_k_21[] = "account";
-static char __pyx_k_22[] = "%s";
-static char __pyx_k_23[] = "request-add\n";
-static char __pyx_k_24[] = "request-add";
-static char __pyx_k_25[] = "request-add";
-static PyObject *__pyx_kp_29;
-static PyObject *__pyx_kp_30;
-static char __pyx_k_26[] = "account";
-static char __pyx_k_27[] = "%s";
-static char __pyx_k_28[] = "request-authorize\n";
-static char __pyx_k_29[] = "request-authorize";
-static char __pyx_k_30[] = "request-authorize";
-static PyObject *__pyx_kp_34;
-static PyObject *__pyx_kp_35;
-static char __pyx_k_31[] = "account";
-static char __pyx_k_32[] = "%s";
-static char __pyx_k_33[] = "close-account-request\n";
-static char __pyx_k_34[] = "close-account-request";
-static char __pyx_k_35[] = "close-account-request";
-static PyObject *__pyx_kp_39;
-static PyObject *__pyx_kp_40;
-static PyObject *__pyx_kp_41;
-static char __pyx_k_36[] = "blist";
-static char __pyx_k_37[] = "%s";
-static char __pyx_k_38[] = "new-list\n";
-static char __pyx_k_39[] = "new-list";
-static char __pyx_k_40[] = "new-list";
-static char __pyx_k_41[] = "new-list: TODO";
-static PyObject *__pyx_kp_45;
-static PyObject *__pyx_kp_46;
-static PyObject *__pyx_kp_47;
-static PyObject *__pyx_kp_48;
-static PyObject *__pyx_kp_49;
-static PyObject *__pyx_kp_50;
-static char __pyx_k_42[] = "blist";
-static char __pyx_k_43[] = "%s";
-static char __pyx_k_44[] = "new-node\n";
-static char __pyx_k_45[] = "new-node";
-static char __pyx_k_46[] = "new-node";
-static char __pyx_k_47[] = "new-node";
-static char __pyx_k_48[] = "new-node";
-static char __pyx_k_49[] = "new-node";
-static char __pyx_k_50[] = "new-node";
-static PyObject *__pyx_kp_56;
-static char __pyx_k_51[] = "blist";
-static char __pyx_k_52[] = "%s";
-static char __pyx_k_53[] = "show\n";
-static char __pyx_k_56[] = "show: TODO";
-static char __pyx_k_57[] = "blist";
-static char __pyx_k_58[] = "%s";
-static char __pyx_k_59[] = "update\n";
-static char __pyx_k_66[] = "blist";
-static char __pyx_k_67[] = "%s";
-static char __pyx_k_68[] = "remove\n";
-static PyObject *__pyx_kp_80;
-static char __pyx_k_75[] = "blist";
-static char __pyx_k_76[] = "%s";
-static char __pyx_k_77[] = "destroy\n";
-static char __pyx_k_80[] = "destroy: TODO";
-static PyObject *__pyx_kp_84;
-static PyObject *__pyx_kp_85;
-static PyObject *__pyx_kp_86;
-static char __pyx_k_81[] = "blist";
-static char __pyx_k_82[] = "%s";
-static char __pyx_k_83[] = "set-visible\n";
-static char __pyx_k_84[] = "set-visible";
-static char __pyx_k_85[] = "set-visible";
-static char __pyx_k_86[] = "set-visible: TODO";
-static PyObject *__pyx_kp_90;
-static PyObject *__pyx_kp_91;
-static char __pyx_k_87[] = "blist";
-static char __pyx_k_88[] = "%s";
-static char __pyx_k_89[] = "request-add-buddy\n";
-static char __pyx_k_90[] = "request-add-buddy";
-static char __pyx_k_91[] = "request-add-buddy";
-static PyObject *__pyx_kp_95;
-static PyObject *__pyx_kp_96;
-static PyObject *__pyx_kp_97;
-static char __pyx_k_92[] = "blist";
-static char __pyx_k_93[] = "%s";
-static char __pyx_k_94[] = "request-add-chat\n";
-static char __pyx_k_95[] = "request-add-chat";
-static char __pyx_k_96[] = "request-add-chat";
-static char __pyx_k_97[] = "request-add-chat: TODO";
-static PyObject *__pyx_kp_101;
-static PyObject *__pyx_kp_102;
-static PyObject *__pyx_kp_103;
-static char __pyx_k_98[] = "blist";
-static char __pyx_k_99[] = "%s";
-static char __pyx_k_100[] = "request-add-group\n";
-static char __pyx_k_101[] = "request-add-chat";
-static char __pyx_k_102[] = "request-add-chat";
-static char __pyx_k_103[] = "request-add-group: TODO";
-static PyObject *__pyx_kp_107;
-static PyObject *__pyx_kp_108;
-static char __pyx_k_104[] = "connection";
-static char __pyx_k_105[] = "%s";
-static char __pyx_k_106[] = "connect-progress\n";
-static char __pyx_k_107[] = "connect-progress";
-static char __pyx_k_108[] = "connect-progress";
-static PyObject *__pyx_kp_114;
-static char __pyx_k_109[] = "connection";
-static char __pyx_k_110[] = "%s";
-static char __pyx_k_111[] = "connected\n";
-static char __pyx_k_114[] = "connected: TODO";
-static PyObject *__pyx_kp_120;
-static char __pyx_k_115[] = "connection";
-static char __pyx_k_116[] = "%s";
-static char __pyx_k_117[] = "disconnected\n";
-static char __pyx_k_120[] = "disconnected: TODO";
-static PyObject *__pyx_kp_126;
-static char __pyx_k_121[] = "connection";
-static char __pyx_k_122[] = "%s";
-static char __pyx_k_123[] = "notice\n";
-static char __pyx_k_126[] = "notice: TODO";
-static PyObject *__pyx_kp_130;
-static PyObject *__pyx_kp_131;
-static char __pyx_k_127[] = "connection";
-static char __pyx_k_128[] = "%s";
-static char __pyx_k_129[] = "report-disconnect\n";
-static char __pyx_k_130[] = "report-disconnect";
-static char __pyx_k_131[] = "report-disconnect";
-static PyObject *__pyx_kp_135;
-static PyObject *__pyx_kp_136;
-static char __pyx_k_132[] = "connection";
-static char __pyx_k_133[] = "%s";
-static char __pyx_k_134[] = "network-connected\n";
-static char __pyx_k_135[] = "network-connected";
-static char __pyx_k_136[] = "network-connected";
-static PyObject *__pyx_kp_140;
-static PyObject *__pyx_kp_141;
-static char __pyx_k_137[] = "connection";
-static char __pyx_k_138[] = "%s";
-static char __pyx_k_139[] = "network-disconnected\n";
-static char __pyx_k_140[] = "network-disconnected";
-static char __pyx_k_141[] = "network-disconnected";
-static PyObject *__pyx_kp_145;
-static PyObject *__pyx_kp_146;
-static PyObject *__pyx_kp_147;
-static PyObject *__pyx_kp_148;
-static PyObject *__pyx_kp_149;
-static PyObject *__pyx_kp_150;
-static PyObject *__pyx_kp_151;
-static PyObject *__pyx_kp_152;
-static PyObject *__pyx_kp_153;
-static PyObject *__pyx_kp_154;
-static PyObject *__pyx_kp_155;
-static PyObject *__pyx_kp_156;
-static PyObject *__pyx_kp_157;
-static PyObject *__pyx_kp_158;
-static PyObject *__pyx_kp_159;
-static PyObject *__pyx_kp_160;
-static PyObject *__pyx_kp_161;
-static PyObject *__pyx_kp_162;
-static PyObject *__pyx_kp_163;
-static char __pyx_k_142[] = "connection";
-static char __pyx_k_143[] = "%s";
-static char __pyx_k_144[] = "report-disconnect-reason\n";
-static char __pyx_k_145[] = "Network error";
-static char __pyx_k_146[] = "Invalid username";
-static char __pyx_k_147[] = "Authentication failed";
-static char __pyx_k_148[] = "Authentication impossible";
-static char __pyx_k_149[] = "No SSL support";
-static char __pyx_k_150[] = "Encryption error";
-static char __pyx_k_151[] = "Name in use";
-static char __pyx_k_152[] = "Invalid settings";
-static char __pyx_k_153[] = "Certificate not provided";
-static char __pyx_k_154[] = "Certificate untrusted";
-static char __pyx_k_155[] = "Certificate expired";
-static char __pyx_k_156[] = "Certificate not activated";
-static char __pyx_k_157[] = "Certificate hostname mismatch";
-static char __pyx_k_158[] = "Certificate fingerprint mismatch";
-static char __pyx_k_159[] = "Certificate self signed";
-static char __pyx_k_160[] = "Certificate error (other)";
-static char __pyx_k_161[] = "Other error";
-static char __pyx_k_162[] = "report-disconnect-reason";
-static char __pyx_k_163[] = "report-disconnect-reason";
-static PyObject *__pyx_kp_167;
-static PyObject *__pyx_kp_168;
-static char __pyx_k_164[] = "conversation";
-static char __pyx_k_165[] = "%s";
-static char __pyx_k_166[] = "create-conversation\n";
-static char __pyx_k_167[] = "create-conversation";
-static char __pyx_k_168[] = "create-conversation";
-static PyObject *__pyx_kp_172;
-static PyObject *__pyx_kp_173;
-static PyObject *__pyx_kp_174;
-static char __pyx_k_169[] = "conversation";
-static char __pyx_k_170[] = "%s";
-static char __pyx_k_171[] = "destroy-conversation\n";
-static char __pyx_k_172[] = "destroy-conversation";
-static char __pyx_k_173[] = "destroy-conversation";
-static char __pyx_k_174[] = "destroy-conversation: TODO";
-static PyObject *__pyx_kp_178;
-static PyObject *__pyx_kp_179;
-static PyObject *__pyx_kp_180;
-static char __pyx_k_175[] = "conversation";
-static char __pyx_k_176[] = "%s";
-static char __pyx_k_177[] = "write-chat\n";
-static char __pyx_k_178[] = "write-chat";
-static char __pyx_k_179[] = "write-chat";
-static char __pyx_k_180[] = "write-chat: TODO";
-static PyObject *__pyx_kp_184;
-static PyObject *__pyx_kp_187;
-static PyObject *__pyx_kp_188;
-static char __pyx_k_181[] = "conversation";
-static char __pyx_k_182[] = "%s";
-static char __pyx_k_183[] = "write-im\n";
-static char __pyx_k_184[] = "utf-8";
-static char __pyx_k_187[] = "write-im";
-static char __pyx_k_188[] = "write-im";
-static PyObject *__pyx_kp_192;
-static PyObject *__pyx_kp_193;
-static PyObject *__pyx_kp_194;
-static char __pyx_k_189[] = "conversation";
-static char __pyx_k_190[] = "%s";
-static char __pyx_k_191[] = "write-conv\n";
-static char __pyx_k_192[] = "write-conv";
-static char __pyx_k_193[] = "write-conv";
-static char __pyx_k_194[] = "write-conv: TODO";
-static PyObject *__pyx_kp_198;
-static PyObject *__pyx_kp_199;
-static PyObject *__pyx_kp_200;
-static char __pyx_k_195[] = "conversation";
-static char __pyx_k_196[] = "%s";
-static char __pyx_k_197[] = "chat-add-users\n";
-static char __pyx_k_198[] = "chat-add-users";
-static char __pyx_k_199[] = "chat-add-users";
-static char __pyx_k_200[] = "chat-add-users: TODO";
-static PyObject *__pyx_kp_204;
-static PyObject *__pyx_kp_205;
-static PyObject *__pyx_kp_206;
-static char __pyx_k_201[] = "conversation";
-static char __pyx_k_202[] = "%s";
-static char __pyx_k_203[] = "chat-rename-user\n";
-static char __pyx_k_204[] = "chat-rename-user";
-static char __pyx_k_205[] = "chat-rename-user";
-static char __pyx_k_206[] = "chat-rename-user: TODO";
-static PyObject *__pyx_kp_210;
-static PyObject *__pyx_kp_211;
-static PyObject *__pyx_kp_212;
-static char __pyx_k_207[] = "conversation";
-static char __pyx_k_208[] = "%s";
-static char __pyx_k_209[] = "chat-remove-users\n";
-static char __pyx_k_210[] = "chat-remove-users";
-static char __pyx_k_211[] = "chat-remove-users";
-static char __pyx_k_212[] = "chat-remove-users: TODO";
-static PyObject *__pyx_kp_216;
-static PyObject *__pyx_kp_217;
-static PyObject *__pyx_kp_218;
-static char __pyx_k_213[] = "conversation";
-static char __pyx_k_214[] = "%s";
-static char __pyx_k_215[] = "chat-update-user\n";
-static char __pyx_k_216[] = "chat-update-user";
-static char __pyx_k_217[] = "chat-update-user";
-static char __pyx_k_218[] = "chat-update-user: TODO";
-static PyObject *__pyx_kp_224;
-static char __pyx_k_219[] = "conversation";
-static char __pyx_k_220[] = "%s";
-static char __pyx_k_221[] = "present\n";
-static char __pyx_k_224[] = "present: TODO";
-static PyObject *__pyx_kp_228;
-static PyObject *__pyx_kp_229;
-static PyObject *__pyx_kp_230;
-static char __pyx_k_225[] = "conversation";
-static char __pyx_k_226[] = "%s";
-static char __pyx_k_227[] = "has-focus\n";
-static char __pyx_k_228[] = "has-focus";
-static char __pyx_k_229[] = "has-focus";
-static char __pyx_k_230[] = "has-focus: TODO";
-static PyObject *__pyx_kp_234;
-static PyObject *__pyx_kp_235;
-static PyObject *__pyx_kp_236;
-static char __pyx_k_231[] = "conversation";
-static char __pyx_k_232[] = "%s";
-static char __pyx_k_233[] = "custom-smiley-add\n";
-static char __pyx_k_234[] = "custom-smiley-add";
-static char __pyx_k_235[] = "custom-smiley-add";
-static char __pyx_k_236[] = "custom-smiley-add: TODO";
-static PyObject *__pyx_kp_240;
-static PyObject *__pyx_kp_241;
-static PyObject *__pyx_kp_242;
-static char __pyx_k_237[] = "conversation";
-static char __pyx_k_238[] = "%s";
-static char __pyx_k_239[] = "custom-smiley-write\n";
-static char __pyx_k_240[] = "custom-smiley-write";
-static char __pyx_k_241[] = "custom-smiley-write";
-static char __pyx_k_242[] = "custom-smiley-write: TODO";
-static PyObject *__pyx_kp_246;
-static PyObject *__pyx_kp_247;
-static PyObject *__pyx_kp_248;
-static char __pyx_k_243[] = "conversation";
-static char __pyx_k_244[] = "%s";
-static char __pyx_k_245[] = "custom-smiley-close\n";
-static char __pyx_k_246[] = "custom-smiley-close";
-static char __pyx_k_247[] = "custom-smiley-close";
-static char __pyx_k_248[] = "custom-smiley-close: TODO";
-static PyObject *__pyx_kp_252;
-static PyObject *__pyx_kp_253;
-static PyObject *__pyx_kp_254;
-static char __pyx_k_249[] = "conversation";
-static char __pyx_k_250[] = "%s";
-static char __pyx_k_251[] = "send-confirm\n";
-static char __pyx_k_252[] = "send-confirm";
-static char __pyx_k_253[] = "send-confirm";
-static char __pyx_k_254[] = "send-confirm: TODO";
-static PyObject *__pyx_kp_258;
-static PyObject *__pyx_kp_259;
-static PyObject *__pyx_kp_260;
-static char __pyx_k_255[] = "notify";
-static char __pyx_k_256[] = "%s";
-static char __pyx_k_257[] = "notify-message\n";
-static char __pyx_k_258[] = "notif-message";
-static char __pyx_k_259[] = "notify-message";
-static char __pyx_k_260[] = "notify-message: TODO";
-static PyObject *__pyx_kp_264;
-static PyObject *__pyx_kp_265;
-static PyObject *__pyx_kp_266;
-static char __pyx_k_261[] = "notify";
-static char __pyx_k_262[] = "%s";
-static char __pyx_k_263[] = "notify-email\n";
-static char __pyx_k_264[] = "notify-email";
-static char __pyx_k_265[] = "notify-email";
-static char __pyx_k_266[] = "notify-email: TODO";
-static PyObject *__pyx_kp_270;
-static PyObject *__pyx_kp_271;
-static PyObject *__pyx_kp_272;
-static char __pyx_k_267[] = "notify";
-static char __pyx_k_268[] = "%s";
-static char __pyx_k_269[] = "notify-emails\n";
-static char __pyx_k_270[] = "notify-emails";
-static char __pyx_k_271[] = "notify-emails";
-static char __pyx_k_272[] = "notify-emails: TODO";
-static PyObject *__pyx_kp_276;
-static PyObject *__pyx_kp_277;
-static PyObject *__pyx_kp_278;
-static char __pyx_k_273[] = "notify";
-static char __pyx_k_274[] = "%s";
-static char __pyx_k_275[] = "notify-formatted\n";
-static char __pyx_k_276[] = "notify-formatted";
-static char __pyx_k_277[] = "notify-formatted";
-static char __pyx_k_278[] = "notify-formatted: TODO";
-static PyObject *__pyx_kp_282;
-static PyObject *__pyx_kp_283;
-static PyObject *__pyx_kp_284;
-static char __pyx_k_279[] = "notify";
-static char __pyx_k_280[] = "%s";
-static char __pyx_k_281[] = "notify-searchresults\n";
-static char __pyx_k_282[] = "notify-searchresults";
-static char __pyx_k_283[] = "notify-searchresults";
-static char __pyx_k_284[] = "notify-searchresults: TODO";
-static PyObject *__pyx_kp_288;
-static PyObject *__pyx_kp_289;
-static PyObject *__pyx_kp_290;
-static char __pyx_k_285[] = "notify";
-static char __pyx_k_286[] = "%s";
-static char __pyx_k_287[] = "notify-searchresults-new-rows\n";
-static char __pyx_k_288[] = "notify-searchresults-new-rows";
-static char __pyx_k_289[] = "notify-searchresults-new-rows";
-static char __pyx_k_290[] = "notify-searchresults-new-rows: TODO";
-static PyObject *__pyx_kp_294;
-static PyObject *__pyx_kp_295;
-static PyObject *__pyx_kp_296;
-static char __pyx_k_291[] = "notify";
-static char __pyx_k_292[] = "%s";
-static char __pyx_k_293[] = "notify-userinfo\n";
-static char __pyx_k_294[] = "notify-userinfo";
-static char __pyx_k_295[] = "notify-userinfo";
-static char __pyx_k_296[] = "notify-userinfo: TODO";
-static PyObject *__pyx_kp_300;
-static PyObject *__pyx_kp_301;
-static PyObject *__pyx_kp_302;
-static char __pyx_k_297[] = "notify";
-static char __pyx_k_298[] = "%s";
-static char __pyx_k_299[] = "notify-uri\n";
-static char __pyx_k_300[] = "notify-uri";
-static char __pyx_k_301[] = "notify-uri";
-static char __pyx_k_302[] = "notify-uri: TODO";
-static PyObject *__pyx_kp_306;
-static PyObject *__pyx_kp_307;
-static PyObject *__pyx_kp_308;
-static char __pyx_k_303[] = "notify";
-static char __pyx_k_304[] = "%s";
-static char __pyx_k_305[] = "close-notify\n";
-static char __pyx_k_306[] = "close-notify";
-static char __pyx_k_307[] = "close-notify";
-static char __pyx_k_308[] = "close-notify: TODO";
-static PyObject *__pyx_kp_312;
-static PyObject *__pyx_kp_313;
-static PyObject *__pyx_kp_314;
-static char __pyx_k_309[] = "request";
-static char __pyx_k_310[] = "%s";
-static char __pyx_k_311[] = "request-input\n";
-static char __pyx_k_312[] = "request-input";
-static char __pyx_k_313[] = "request-input";
-static char __pyx_k_314[] = "request-input: TODO";
-static PyObject *__pyx_kp_318;
-static PyObject *__pyx_kp_319;
-static PyObject *__pyx_kp_320;
-static char __pyx_k_315[] = "request";
-static char __pyx_k_316[] = "%s";
-static char __pyx_k_317[] = "request-choice\n";
-static char __pyx_k_318[] = "request-choice";
-static char __pyx_k_319[] = "request-choice";
-static char __pyx_k_320[] = "request-choice: TODO";
-static PyObject *__pyx_kp_324;
-static PyObject *__pyx_kp_325;
-static PyObject *__pyx_kp_326;
-static char __pyx_k_321[] = "request";
-static char __pyx_k_322[] = "%s";
-static char __pyx_k_323[] = "request-action\n";
-static char __pyx_k_324[] = "request-action";
-static char __pyx_k_325[] = "request-action";
-static char __pyx_k_326[] = "request-action: TODo";
-static PyObject *__pyx_kp_330;
-static PyObject *__pyx_kp_331;
-static PyObject *__pyx_kp_332;
-static char __pyx_k_327[] = "request";
-static char __pyx_k_328[] = "%s";
-static char __pyx_k_329[] = "request-fields\n";
-static char __pyx_k_330[] = "request-fields";
-static char __pyx_k_331[] = "request-fields";
-static char __pyx_k_332[] = "request-fields: TODO";
-static PyObject *__pyx_kp_336;
-static PyObject *__pyx_kp_337;
-static PyObject *__pyx_kp_338;
-static char __pyx_k_333[] = "request";
-static char __pyx_k_334[] = "%s";
-static char __pyx_k_335[] = "request-file\n";
-static char __pyx_k_336[] = "request-file";
-static char __pyx_k_337[] = "request-file";
-static char __pyx_k_338[] = "request-file: TODO";
-static PyObject *__pyx_kp_342;
-static PyObject *__pyx_kp_343;
-static PyObject *__pyx_kp_344;
-static char __pyx_k_339[] = "request";
-static char __pyx_k_340[] = "%s";
-static char __pyx_k_341[] = "close-request\n";
-static char __pyx_k_342[] = "close-request";
-static char __pyx_k_343[] = "close-request";
-static char __pyx_k_344[] = "close-request: TODO";
-static PyObject *__pyx_kp_348;
-static PyObject *__pyx_kp_349;
-static PyObject *__pyx_kp_350;
-static char __pyx_k_345[] = "request";
-static char __pyx_k_346[] = "%s";
-static char __pyx_k_347[] = "request-folder\n";
-static char __pyx_k_348[] = "request-folder";
-static char __pyx_k_349[] = "request-folder";
-static char __pyx_k_350[] = "request-folder: TODO";
-static PyObject *__pyx_kp_351;
-static PyObject *__pyx_kp_352;
-static char __pyx_k_351[] = "signed-on";
-static char __pyx_k_352[] = "signed-on";
-static PyObject *__pyx_kp_353;
-static PyObject *__pyx_kp_354;
-static char __pyx_k_353[] = "signed-off";
-static char __pyx_k_354[] = "signed-off";
-static PyObject *__pyx_kp_355;
-static PyObject *__pyx_kp_356;
-static PyObject *__pyx_kp_357;
-static PyObject *__pyx_kp_358;
-static PyObject *__pyx_kp_359;
-static PyObject *__pyx_kp_360;
-static PyObject *__pyx_kp_361;
-static PyObject *__pyx_kp_362;
-static PyObject *__pyx_kp_363;
-static PyObject *__pyx_kp_364;
-static PyObject *__pyx_kp_365;
-static PyObject *__pyx_kp_366;
-static PyObject *__pyx_kp_367;
-static PyObject *__pyx_kp_368;
-static PyObject *__pyx_kp_369;
-static PyObject *__pyx_kp_370;
-static PyObject *__pyx_kp_371;
-static PyObject *__pyx_kp_372;
-static PyObject *__pyx_kp_373;
-static char __pyx_k_355[] = "Network error";
-static char __pyx_k_356[] = "Invalid username";
-static char __pyx_k_357[] = "Authentication failed";
-static char __pyx_k_358[] = "Authentication impossible";
-static char __pyx_k_359[] = "No SSL support";
-static char __pyx_k_360[] = "Encryption error";
-static char __pyx_k_361[] = "Name in use";
-static char __pyx_k_362[] = "Invalid settings";
-static char __pyx_k_363[] = "SSL certificate not provided";
-static char __pyx_k_364[] = "SSL certificate untrusted";
-static char __pyx_k_365[] = "SSL certificate expired";
-static char __pyx_k_366[] = "SSL certificate not activated";
-static char __pyx_k_367[] = "SSL certificate hostname mismatch";
-static char __pyx_k_368[] = "SSL certificate fingerprint mismatch";
-static char __pyx_k_369[] = "SSL certificate self signed";
-static char __pyx_k_370[] = "SSL certificate other error";
-static char __pyx_k_371[] = "Other error";
-static char __pyx_k_372[] = "connection-error";
-static char __pyx_k_373[] = "connection-error";
-static PyObject *__pyx_kp_374;
-static PyObject *__pyx_kp_375;
-static char __pyx_k_374[] = "buddy-signed-on";
-static char __pyx_k_375[] = "buddy-signed-on";
-static PyObject *__pyx_kp_376;
-static PyObject *__pyx_kp_377;
-static char __pyx_k_376[] = "buddy-signed-off";
-static char __pyx_k_377[] = "buddy-signed-off";
-static PyObject *__pyx_kp_378;
-static PyObject *__pyx_kp_379;
-static char __pyx_k_378[] = "receiving-im-msg";
-static char __pyx_k_379[] = "receiving-im-msg";
-static PyObject *__pyx_kp_380;
-static PyObject *__pyx_kp_381;
-static char __pyx_k_380[] = "jabber-receiving-xmlnode";
-static char __pyx_k_381[] = "jabber-receiving-xmlnode";
-static char __pyx_k_382[] = "core_ui_ops";
-static char __pyx_k_383[] = "%s";
-static char __pyx_k_384[] = "ui_prefs_init\n";
-static char __pyx_k_385[] = "/carman";
-static char __pyx_k_386[] = "core_ui_ops";
-static char __pyx_k_387[] = "%s";
-static char __pyx_k_388[] = "debug_ui_init\n";
-static char __pyx_k_389[] = "core_ui_ops";
-static char __pyx_k_390[] = "%s";
-static char __pyx_k_391[] = "ui_init\n";
-static char __pyx_k_392[] = "core_ui_ops";
-static char __pyx_k_393[] = "%s";
-static char __pyx_k_394[] = "quit\n";
-static char __pyx_k_395[] = "name";
-static char __pyx_k_396[] = "version";
-static char __pyx_k_397[] = "website";
-static char __pyx_k_398[] = "dev_website";
-static char __pyx_k_399[] = "main";
-static char __pyx_k_400[] = "%s";
-static char __pyx_k_401[] = "libpurple initialization failed.\n";
-static char __pyx_k_402[] = "main";
-static char __pyx_k_403[] = "%s";
-static char __pyx_k_404[] = "Another instance of libpurple is already running.\n";
-static PyObject *__pyx_kp_412;
-static PyObject *__pyx_kp_414;
-static PyObject *__pyx_kp_416;
-static PyObject *__pyx_kp_418;
-static PyObject *__pyx_kp_420;
-static PyObject *__pyx_kp_422;
-static PyObject *__pyx_kp_424;
-static char __pyx_k_411[] = "prpl-jabber";
-static char __pyx_k_412[] = "signed-on";
-static char __pyx_k_413[] = "signed-on";
-static char __pyx_k_414[] = "signed-off";
-static char __pyx_k_415[] = "signed-off";
-static char __pyx_k_416[] = "connection-error";
-static char __pyx_k_417[] = "connection-error";
-static char __pyx_k_418[] = "buddy-signed-on";
-static char __pyx_k_419[] = "buddy-signed-on";
-static char __pyx_k_420[] = "buddy-signed-off";
-static char __pyx_k_421[] = "buddy-signed-off";
-static char __pyx_k_422[] = "receiving-im-msg";
-static char __pyx_k_423[] = "receiving-im-msg";
-static char __pyx_k_424[] = "jabber-receiving-xmlnode";
-static char __pyx_k_425[] = "jabber-receiving-xmlnode";
-static char __pyx_k_426[] = "";
-static char __pyx_k_449[] = "";
-static char __pyx_k_450[] = "message";
-static char __pyx_k_454[] = "message";
-static char __pyx_k_455[] = "/purple/savedstatus/idleaway";
-static char __pyx_k_456[] = "message";
-static PyObject *__pyx_kp_457;
-static char __pyx_k_457[] = "utf-8";
-static char __pyx_k_458[] = "message";
-
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":31
- * cdef void *c_request_authorize_user_data = NULL
- * 
- * def call_authorize_cb():             # <<<<<<<<<<<<<<
- *     global c_request_authorize_authorize_cb
- *     global c_request_authorize_deny_cb
- */
-
-static PyObject *__pyx_pf_6purple_call_authorize_cb(PyObject *__pyx_self, PyObject *unused); /*proto*/
-static PyObject *__pyx_pf_6purple_call_authorize_cb(PyObject *__pyx_self, PyObject *unused) {
-  PyObject *__pyx_r;
-  int __pyx_1;
-  __pyx_self = __pyx_self;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":36
- *     global c_request_authorize_user_data
- * 
- *     if c_request_authorize_authorize_cb:             # <<<<<<<<<<<<<<
- *         c_request_authorize_authorize_cb(c_request_authorize_user_data)
- *     c_request_authorize_authorize_cb = NULL
- */
-  __pyx_1 = (__pyx_v_6purple_c_request_authorize_authorize_cb != 0);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":37
- * 
- *     if c_request_authorize_authorize_cb:
- *         c_request_authorize_authorize_cb(c_request_authorize_user_data)             # <<<<<<<<<<<<<<
- *     c_request_authorize_authorize_cb = NULL
- *     c_request_authorize_deny_cb = NULL
- */
-    __pyx_v_6purple_c_request_authorize_authorize_cb(__pyx_v_6purple_c_request_authorize_user_data);
-    goto __pyx_L5;
-  }
-  __pyx_L5:;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":38
- *     if c_request_authorize_authorize_cb:
- *         c_request_authorize_authorize_cb(c_request_authorize_user_data)
- *     c_request_authorize_authorize_cb = NULL             # <<<<<<<<<<<<<<
- *     c_request_authorize_deny_cb = NULL
- *     c_request_authorize_user_data = NULL
- */
-  __pyx_v_6purple_c_request_authorize_authorize_cb = NULL;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":39
- *         c_request_authorize_authorize_cb(c_request_authorize_user_data)
- *     c_request_authorize_authorize_cb = NULL
- *     c_request_authorize_deny_cb = NULL             # <<<<<<<<<<<<<<
- *     c_request_authorize_user_data = NULL
- * 
- */
-  __pyx_v_6purple_c_request_authorize_deny_cb = NULL;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":40
- *     c_request_authorize_authorize_cb = NULL
- *     c_request_authorize_deny_cb = NULL
- *     c_request_authorize_user_data = NULL             # <<<<<<<<<<<<<<
- * 
- * def call_deny_cb():
- */
-  __pyx_v_6purple_c_request_authorize_user_data = NULL;
-
-  __pyx_r = Py_None; Py_INCREF(Py_None);
-  return __pyx_r;
-}
-
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":42
- *     c_request_authorize_user_data = NULL
- * 
- * def call_deny_cb():             # <<<<<<<<<<<<<<
- *     global c_request_authorize_authorize_cb
- *     global c_request_authorize_deny_cb
- */
-
-static PyObject *__pyx_pf_6purple_call_deny_cb(PyObject *__pyx_self, PyObject *unused); /*proto*/
-static PyObject *__pyx_pf_6purple_call_deny_cb(PyObject *__pyx_self, PyObject *unused) {
-  PyObject *__pyx_r;
-  int __pyx_1;
-  __pyx_self = __pyx_self;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":47
- *     global c_request_authorize_user_data
- * 
- *     if c_request_authorize_deny_cb:             # <<<<<<<<<<<<<<
- *         c_request_authorize_deny_cb(c_request_authorize_user_data)
- *     c_request_authorize_authorize_cb = NULL
- */
-  __pyx_1 = (__pyx_v_6purple_c_request_authorize_deny_cb != 0);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":48
- * 
- *     if c_request_authorize_deny_cb:
- *         c_request_authorize_deny_cb(c_request_authorize_user_data)             # <<<<<<<<<<<<<<
- *     c_request_authorize_authorize_cb = NULL
- *     c_request_authorize_deny_cb = NULL
- */
-    __pyx_v_6purple_c_request_authorize_deny_cb(__pyx_v_6purple_c_request_authorize_user_data);
-    goto __pyx_L5;
-  }
-  __pyx_L5:;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":49
- *     if c_request_authorize_deny_cb:
- *         c_request_authorize_deny_cb(c_request_authorize_user_data)
- *     c_request_authorize_authorize_cb = NULL             # <<<<<<<<<<<<<<
- *     c_request_authorize_deny_cb = NULL
- *     c_request_authorize_user_data = NULL
- */
-  __pyx_v_6purple_c_request_authorize_authorize_cb = NULL;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":50
- *         c_request_authorize_deny_cb(c_request_authorize_user_data)
- *     c_request_authorize_authorize_cb = NULL
- *     c_request_authorize_deny_cb = NULL             # <<<<<<<<<<<<<<
- *     c_request_authorize_user_data = NULL
- * 
- */
-  __pyx_v_6purple_c_request_authorize_deny_cb = NULL;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":51
- *     c_request_authorize_authorize_cb = NULL
- *     c_request_authorize_deny_cb = NULL
- *     c_request_authorize_user_data = NULL             # <<<<<<<<<<<<<<
- * 
- * cdef void notify_added(account.PurpleAccount *c_account, \
- */
-  __pyx_v_6purple_c_request_authorize_user_data = NULL;
-
-  __pyx_r = Py_None; Py_INCREF(Py_None);
-  return __pyx_r;
-}
-
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":53
- *     c_request_authorize_user_data = NULL
- * 
- * cdef void notify_added(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
- *         const_char *remote_user, const_char *id, const_char *alias, \
- *         const_char *c_message):
- */
-
-static  void __pyx_f_6purple_notify_added(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_remote_user, const char *__pyx_v_id, const char *__pyx_v_alias, const char *__pyx_v_c_message) {
-  PurpleConnection *__pyx_v_gc;
-  PyObject *__pyx_v_remote_alias;
-  PyObject *__pyx_v_username;
-  PyObject *__pyx_v_protocol_id;
-  PyObject *__pyx_v_message;
-  int __pyx_1;
-  PyObject *__pyx_2 = 0;
-  PyObject *__pyx_3 = 0;
-  PyObject *__pyx_4 = 0;
-  PyObject *__pyx_5 = 0;
-  __pyx_v_remote_alias = Py_None; Py_INCREF(Py_None);
-  __pyx_v_username = Py_None; Py_INCREF(Py_None);
-  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
-  __pyx_v_message = Py_None; Py_INCREF(Py_None);
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":61
- *     """
- *     cdef connection.PurpleConnection *gc = \
- *             account.purple_account_get_connection(c_account)             # <<<<<<<<<<<<<<
- * 
- *     debug.purple_debug_info("account", "%s", "notify-added\n")
- */
-  __pyx_v_gc = purple_account_get_connection(__pyx_v_c_account);
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":63
- *             account.purple_account_get_connection(c_account)
- * 
- *     debug.purple_debug_info("account", "%s", "notify-added\n")             # <<<<<<<<<<<<<<
- * 
- *     if alias:
- */
-  purple_debug_info(__pyx_k_11, __pyx_k_12, __pyx_k_13);
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":65
- *     debug.purple_debug_info("account", "%s", "notify-added\n")
- * 
- *     if alias:             # <<<<<<<<<<<<<<
- *         remote_alias = <char *> alias
- *     else:
- */
-  __pyx_1 = (__pyx_v_alias != 0);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":66
- * 
- *     if alias:
- *         remote_alias = <char *> alias             # <<<<<<<<<<<<<<
- *     else:
- *         remote_alias = None
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_alias)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_remote_alias);
-    __pyx_v_remote_alias = __pyx_2;
-    __pyx_2 = 0;
-    goto __pyx_L3;
-  }
-  /*else*/ {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":68
- *         remote_alias = <char *> alias
- *     else:
- *         remote_alias = None             # <<<<<<<<<<<<<<
- * 
- *     if id:
- */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_remote_alias);
-    __pyx_v_remote_alias = Py_None;
-  }
-  __pyx_L3:;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":70
- *         remote_alias = None
- * 
- *     if id:             # <<<<<<<<<<<<<<
- *         username = <char *> id
- *     elif connection.purple_connection_get_display_name(gc) != NULL:
- */
-  __pyx_1 = (__pyx_v_id != 0);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":71
- * 
- *     if id:
- *         username = <char *> id             # <<<<<<<<<<<<<<
- *     elif connection.purple_connection_get_display_name(gc) != NULL:
- *         username = connection.purple_connection_get_display_name(gc)
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_id)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_username);
-    __pyx_v_username = __pyx_2;
-    __pyx_2 = 0;
-    goto __pyx_L4;
-  }
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":72
- *     if id:
- *         username = <char *> id
- *     elif connection.purple_connection_get_display_name(gc) != NULL:             # <<<<<<<<<<<<<<
- *         username = connection.purple_connection_get_display_name(gc)
- *     else:
- */
-  __pyx_1 = (purple_connection_get_display_name(__pyx_v_gc) != NULL);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":73
- *         username = <char *> id
- *     elif connection.purple_connection_get_display_name(gc) != NULL:
- *         username = connection.purple_connection_get_display_name(gc)             # <<<<<<<<<<<<<<
- *     else:
- *         username = account.purple_account_get_username(c_account)
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(purple_connection_get_display_name(__pyx_v_gc)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_username);
-    __pyx_v_username = __pyx_2;
-    __pyx_2 = 0;
-    goto __pyx_L4;
-  }
-  /*else*/ {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":75
- *         username = connection.purple_connection_get_display_name(gc)
- *     else:
- *         username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
- * 
- *     protocol_id = account.purple_account_get_protocol_id(c_account)
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_username);
-    __pyx_v_username = __pyx_2;
-    __pyx_2 = 0;
-  }
-  __pyx_L4:;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":77
- *         username = account.purple_account_get_username(c_account)
- * 
- *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
- * 
- *     if c_message:
- */
-  __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_v_protocol_id);
-  __pyx_v_protocol_id = __pyx_2;
-  __pyx_2 = 0;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":79
- *     protocol_id = account.purple_account_get_protocol_id(c_account)
- * 
- *     if c_message:             # <<<<<<<<<<<<<<
- *         message = <char *> c_message
- *     else:
- */
-  __pyx_1 = (__pyx_v_c_message != 0);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":80
- * 
- *     if c_message:
- *         message = <char *> c_message             # <<<<<<<<<<<<<<
- *     else:
- *         message = None
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_message)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_message);
-    __pyx_v_message = __pyx_2;
-    __pyx_2 = 0;
-    goto __pyx_L5;
-  }
-  /*else*/ {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":82
- *         message = <char *> c_message
- *     else:
- *         message = None             # <<<<<<<<<<<<<<
- * 
- *     if account_cbs.has_key("notify-added"):
- */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_message);
-    __pyx_v_message = Py_None;
-  }
-  __pyx_L5:;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":84
- *         message = None
- * 
- *     if account_cbs.has_key("notify-added"):             # <<<<<<<<<<<<<<
- *         (<object> account_cbs["notify-added"])( \
- *                 (<char *> remote_user, remote_alias), \
- */
-  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_14);
-  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_14);
-  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
-  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_4); __pyx_4 = 0;
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":85
- * 
- *     if account_cbs.has_key("notify-added"):
- *         (<object> account_cbs["notify-added"])( \             # <<<<<<<<<<<<<<
- *                 (<char *> remote_user, remote_alias), \
- *                 (username, protocol_id), message)
- */
-    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_15); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":86
- *     if account_cbs.has_key("notify-added"):
- *         (<object> account_cbs["notify-added"])( \
- *                 (<char *> remote_user, remote_alias), \             # <<<<<<<<<<<<<<
- *                 (username, protocol_id), message)
- * 
- */
-    __pyx_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_remote_user)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
-    Py_INCREF(__pyx_v_remote_alias);
-    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_remote_alias);
-    __pyx_4 = 0;
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":87
- *         (<object> account_cbs["notify-added"])( \
- *                 (<char *> remote_user, remote_alias), \
- *                 (username, protocol_id), message)             # <<<<<<<<<<<<<<
- * 
- * cdef void status_changed(account.PurpleAccount *c_account, \
- */
-    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_v_username);
-    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
-    Py_INCREF(__pyx_v_protocol_id);
-    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
-    __pyx_5 = PyTuple_New(3); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_3));
-    PyTuple_SET_ITEM(__pyx_5, 1, ((PyObject *)__pyx_4));
-    Py_INCREF(__pyx_v_message);
-    PyTuple_SET_ITEM(__pyx_5, 2, __pyx_v_message);
-    __pyx_3 = 0;
-    __pyx_4 = 0;
-    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-    goto __pyx_L6;
-  }
-  __pyx_L6:;
-
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_2);
-  Py_XDECREF(__pyx_3);
-  Py_XDECREF(__pyx_4);
-  Py_XDECREF(__pyx_5);
-  __Pyx_WriteUnraisable("purple.notify_added");
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_remote_alias);
-  Py_DECREF(__pyx_v_username);
-  Py_DECREF(__pyx_v_protocol_id);
-  Py_DECREF(__pyx_v_message);
-}
-
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":89
- *                 (username, protocol_id), message)
- * 
- * cdef void status_changed(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
- *         status.PurpleStatus *c_status):
- *     """
- */
-
-static  void __pyx_f_6purple_status_changed(PurpleAccount *__pyx_v_c_account, PurpleStatus *__pyx_v_c_status) {
-  PyObject *__pyx_v_username;
-  PyObject *__pyx_v_protocol_id;
-  PyObject *__pyx_v_status_id;
-  PyObject *__pyx_v_status_name;
-  PyObject *__pyx_1 = 0;
-  PyObject *__pyx_2 = 0;
-  PyObject *__pyx_3 = 0;
-  int __pyx_4;
-  __pyx_v_username = Py_None; Py_INCREF(Py_None);
-  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
-  __pyx_v_status_id = Py_None; Py_INCREF(Py_None);
-  __pyx_v_status_name = Py_None; Py_INCREF(Py_None);
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":94
- *     This account's status changed.
- *     """
- *     debug.purple_debug_info("account", "%s", "status-changed\n")             # <<<<<<<<<<<<<<
- * 
- *     username = account.purple_account_get_username(c_account)
- */
-  purple_debug_info(__pyx_k_16, __pyx_k_17, __pyx_k_18);
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":96
- *     debug.purple_debug_info("account", "%s", "status-changed\n")
- * 
- *     username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
- *     protocol_id = account.purple_account_get_protocol_id(c_account)
- * 
- */
-  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_v_username);
-  __pyx_v_username = __pyx_1;
-  __pyx_1 = 0;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":97
- * 
- *     username = account.purple_account_get_username(c_account)
- *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
- * 
- *     status_id = status.purple_status_get_id(c_status)
- */
-  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_v_protocol_id);
-  __pyx_v_protocol_id = __pyx_1;
-  __pyx_1 = 0;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":99
- *     protocol_id = account.purple_account_get_protocol_id(c_account)
- * 
- *     status_id = status.purple_status_get_id(c_status)             # <<<<<<<<<<<<<<
- *     status_name = status.purple_status_get_name(c_status)
- * 
- */
-  __pyx_1 = __Pyx_PyBytes_FromString(purple_status_get_id(__pyx_v_c_status)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_v_status_id);
-  __pyx_v_status_id = __pyx_1;
-  __pyx_1 = 0;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":100
- * 
- *     status_id = status.purple_status_get_id(c_status)
- *     status_name = status.purple_status_get_name(c_status)             # <<<<<<<<<<<<<<
- * 
- *     if account_cbs.has_key("status-changed"):
- */
-  __pyx_1 = __Pyx_PyBytes_FromString(purple_status_get_name(__pyx_v_c_status)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_v_status_name);
-  __pyx_v_status_name = __pyx_1;
-  __pyx_1 = 0;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":102
- *     status_name = status.purple_status_get_name(c_status)
- * 
- *     if account_cbs.has_key("status-changed"):             # <<<<<<<<<<<<<<
- *         (<object> account_cbs["status-changed"])( \
- *                 (username, protocol_id), status_id, status_name)
- */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_19);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_19);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  if (__pyx_4) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":103
- * 
- *     if account_cbs.has_key("status-changed"):
- *         (<object> account_cbs["status-changed"])( \             # <<<<<<<<<<<<<<
- *                 (username, protocol_id), status_id, status_name)
- * 
- */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_20); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":104
- *     if account_cbs.has_key("status-changed"):
- *         (<object> account_cbs["status-changed"])( \
- *                 (username, protocol_id), status_id, status_name)             # <<<<<<<<<<<<<<
- * 
- * cdef void request_add(account.PurpleAccount *c_account, \
- */
-    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_v_username);
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_username);
-    Py_INCREF(__pyx_v_protocol_id);
-    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_protocol_id);
-    __pyx_2 = PyTuple_New(3); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_3));
-    Py_INCREF(__pyx_v_status_id);
-    PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_status_id);
-    Py_INCREF(__pyx_v_status_name);
-    PyTuple_SET_ITEM(__pyx_2, 2, __pyx_v_status_name);
-    __pyx_3 = 0;
-    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_1);
-  Py_XDECREF(__pyx_2);
-  Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.status_changed");
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_username);
-  Py_DECREF(__pyx_v_protocol_id);
-  Py_DECREF(__pyx_v_status_id);
-  Py_DECREF(__pyx_v_status_name);
-}
-
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":106
- *                 (username, protocol_id), status_id, status_name)
- * 
- * cdef void request_add(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
- *         const_char *remote_user, const_char *id, const_char *alias, \
- *         const_char *c_message):
- */
-
-static  void __pyx_f_6purple_request_add(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_remote_user, const char *__pyx_v_id, const char *__pyx_v_alias, const char *__pyx_v_c_message) {
-  PurpleConnection *__pyx_v_gc;
-  PyObject *__pyx_v_remote_alias;
-  PyObject *__pyx_v_username;
-  PyObject *__pyx_v_protocol_id;
-  PyObject *__pyx_v_message;
-  int __pyx_1;
-  PyObject *__pyx_2 = 0;
-  PyObject *__pyx_3 = 0;
-  PyObject *__pyx_4 = 0;
-  PyObject *__pyx_5 = 0;
-  __pyx_v_remote_alias = Py_None; Py_INCREF(Py_None);
-  __pyx_v_username = Py_None; Py_INCREF(Py_None);
-  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
-  __pyx_v_message = Py_None; Py_INCREF(Py_None);
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":113
- *     """
- *     cdef connection.PurpleConnection *gc = \
- *             account.purple_account_get_connection(c_account)             # <<<<<<<<<<<<<<
- * 
- *     debug.purple_debug_info("account", "%s", "request-add\n")
- */
-  __pyx_v_gc = purple_account_get_connection(__pyx_v_c_account);
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":115
- *             account.purple_account_get_connection(c_account)
- * 
- *     debug.purple_debug_info("account", "%s", "request-add\n")             # <<<<<<<<<<<<<<
- * 
- *     if alias:
- */
-  purple_debug_info(__pyx_k_21, __pyx_k_22, __pyx_k_23);
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":117
- *     debug.purple_debug_info("account", "%s", "request-add\n")
- * 
- *     if alias:             # <<<<<<<<<<<<<<
- *         remote_alias = <char *> alias
- *     else:
- */
-  __pyx_1 = (__pyx_v_alias != 0);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":118
- * 
- *     if alias:
- *         remote_alias = <char *> alias             # <<<<<<<<<<<<<<
- *     else:
- *         remote_alias = None
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_alias)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_remote_alias);
-    __pyx_v_remote_alias = __pyx_2;
-    __pyx_2 = 0;
-    goto __pyx_L3;
-  }
-  /*else*/ {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":120
- *         remote_alias = <char *> alias
- *     else:
- *         remote_alias = None             # <<<<<<<<<<<<<<
- * 
- *     if id:
- */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_remote_alias);
-    __pyx_v_remote_alias = Py_None;
-  }
-  __pyx_L3:;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":122
- *         remote_alias = None
- * 
- *     if id:             # <<<<<<<<<<<<<<
- *         username = <char *> id
- *     elif connection.purple_connection_get_display_name(gc) != NULL:
- */
-  __pyx_1 = (__pyx_v_id != 0);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":123
- * 
- *     if id:
- *         username = <char *> id             # <<<<<<<<<<<<<<
- *     elif connection.purple_connection_get_display_name(gc) != NULL:
- *         username = connection.purple_connection_get_display_name(gc)
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_id)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_username);
-    __pyx_v_username = __pyx_2;
-    __pyx_2 = 0;
-    goto __pyx_L4;
-  }
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":124
- *     if id:
- *         username = <char *> id
- *     elif connection.purple_connection_get_display_name(gc) != NULL:             # <<<<<<<<<<<<<<
- *         username = connection.purple_connection_get_display_name(gc)
- *     else:
- */
-  __pyx_1 = (purple_connection_get_display_name(__pyx_v_gc) != NULL);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":125
- *         username = <char *> id
- *     elif connection.purple_connection_get_display_name(gc) != NULL:
- *         username = connection.purple_connection_get_display_name(gc)             # <<<<<<<<<<<<<<
- *     else:
- *         username = account.purple_account_get_username(c_account)
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(purple_connection_get_display_name(__pyx_v_gc)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_username);
-    __pyx_v_username = __pyx_2;
-    __pyx_2 = 0;
-    goto __pyx_L4;
-  }
-  /*else*/ {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":127
- *         username = connection.purple_connection_get_display_name(gc)
- *     else:
- *         username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
- * 
- *     protocol_id = account.purple_account_get_protocol_id(c_account)
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_username);
-    __pyx_v_username = __pyx_2;
-    __pyx_2 = 0;
-  }
-  __pyx_L4:;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":129
- *         username = account.purple_account_get_username(c_account)
- * 
- *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
- * 
- *     if c_message:
- */
-  __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_v_protocol_id);
-  __pyx_v_protocol_id = __pyx_2;
-  __pyx_2 = 0;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":131
- *     protocol_id = account.purple_account_get_protocol_id(c_account)
- * 
- *     if c_message:             # <<<<<<<<<<<<<<
- *         message = <char *> c_message
- *     else:
- */
-  __pyx_1 = (__pyx_v_c_message != 0);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":132
- * 
- *     if c_message:
- *         message = <char *> c_message             # <<<<<<<<<<<<<<
- *     else:
- *         message = None
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_message)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_message);
-    __pyx_v_message = __pyx_2;
-    __pyx_2 = 0;
-    goto __pyx_L5;
-  }
-  /*else*/ {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":134
- *         message = <char *> c_message
- *     else:
- *         message = None             # <<<<<<<<<<<<<<
- * 
- *     if account_cbs.has_key("request-add"):
- */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_message);
-    __pyx_v_message = Py_None;
-  }
-  __pyx_L5:;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":136
- *         message = None
- * 
- *     if account_cbs.has_key("request-add"):             # <<<<<<<<<<<<<<
- *         (<object> account_cbs["request-add"])( \
- *                 (<char *> remote_user, remote_alias), \
- */
-  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_24);
-  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_24);
-  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
-  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_4); __pyx_4 = 0;
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":137
- * 
- *     if account_cbs.has_key("request-add"):
- *         (<object> account_cbs["request-add"])( \             # <<<<<<<<<<<<<<
- *                 (<char *> remote_user, remote_alias), \
- *                 (username, protocol_id), message)
- */
-    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_25); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":138
- *     if account_cbs.has_key("request-add"):
- *         (<object> account_cbs["request-add"])( \
- *                 (<char *> remote_user, remote_alias), \             # <<<<<<<<<<<<<<
- *                 (username, protocol_id), message)
- * 
- */
-    __pyx_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_remote_user)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
-    Py_INCREF(__pyx_v_remote_alias);
-    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_remote_alias);
-    __pyx_4 = 0;
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":139
- *         (<object> account_cbs["request-add"])( \
- *                 (<char *> remote_user, remote_alias), \
- *                 (username, protocol_id), message)             # <<<<<<<<<<<<<<
- * 
- * cdef void *request_authorize(account.PurpleAccount *c_account, \
- */
-    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_v_username);
-    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
-    Py_INCREF(__pyx_v_protocol_id);
-    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
-    __pyx_5 = PyTuple_New(3); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_3));
-    PyTuple_SET_ITEM(__pyx_5, 1, ((PyObject *)__pyx_4));
-    Py_INCREF(__pyx_v_message);
-    PyTuple_SET_ITEM(__pyx_5, 2, __pyx_v_message);
-    __pyx_3 = 0;
-    __pyx_4 = 0;
-    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-    goto __pyx_L6;
-  }
-  __pyx_L6:;
-
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_2);
-  Py_XDECREF(__pyx_3);
-  Py_XDECREF(__pyx_4);
-  Py_XDECREF(__pyx_5);
-  __Pyx_WriteUnraisable("purple.request_add");
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_remote_alias);
-  Py_DECREF(__pyx_v_username);
-  Py_DECREF(__pyx_v_protocol_id);
-  Py_DECREF(__pyx_v_message);
-}
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":141
- *                 (username, protocol_id), message)
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":31
+ * cdef void *c_request_authorize_user_data = NULL
  * 
- * cdef void *request_authorize(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
- *         const_char *remote_user, const_char *id, const_char *alias, \
- *         const_char *c_message, glib.gboolean on_list, \
+ * def call_authorize_cb():             # <<<<<<<<<<<<<<
+ *     global c_request_authorize_authorize_cb
+ *     global c_request_authorize_deny_cb
  */
 
-static  void *__pyx_f_6purple_request_authorize(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_remote_user, const char *__pyx_v_id, const char *__pyx_v_alias, const char *__pyx_v_c_message, gboolean __pyx_v_on_list, PurpleAccountRequestAuthorizationCb __pyx_v_authorize_cb, PurpleAccountRequestAuthorizationCb __pyx_v_deny_cb, void *__pyx_v_user_data) {
-  PurpleConnection *__pyx_v_gc;
-  PyObject *__pyx_v_remote_alias;
-  PyObject *__pyx_v_username;
-  PyObject *__pyx_v_protocol_id;
-  PyObject *__pyx_v_message;
-  void *__pyx_r;
+static PyObject *__pyx_pf_6purple_call_authorize_cb(PyObject *__pyx_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_call_authorize_cb(PyObject *__pyx_self, PyObject *unused) {
+  PyObject *__pyx_r;
   int __pyx_1;
-  PyObject *__pyx_2 = 0;
-  PyObject *__pyx_3 = 0;
-  PyObject *__pyx_4 = 0;
-  PyObject *__pyx_5 = 0;
-  PyObject *__pyx_6 = 0;
-  PyObject *__pyx_7 = 0;
-  PyObject *__pyx_8 = 0;
-  __pyx_v_remote_alias = Py_None; Py_INCREF(Py_None);
-  __pyx_v_username = Py_None; Py_INCREF(Py_None);
-  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
-  __pyx_v_message = Py_None; Py_INCREF(Py_None);
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":154
- *     """
- *     cdef connection.PurpleConnection *gc = \
- *             account.purple_account_get_connection(c_account)             # <<<<<<<<<<<<<<
- * 
- *     debug.purple_debug_info("account", "%s", "request-authorize\n")
- */
-  __pyx_v_gc = purple_account_get_connection(__pyx_v_c_account);
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":156
- *             account.purple_account_get_connection(c_account)
- * 
- *     debug.purple_debug_info("account", "%s", "request-authorize\n")             # <<<<<<<<<<<<<<
- * 
- *     global c_request_authorize_authorize_cb
- */
-  purple_debug_info(__pyx_k_26, __pyx_k_27, __pyx_k_28);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":162
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":36
  *     global c_request_authorize_user_data
  * 
- *     c_request_authorize_authorize_cb = authorize_cb             # <<<<<<<<<<<<<<
- *     c_request_authorize_deny_cb = deny_cb
- *     c_request_authorize_user_data = user_data
- */
-  __pyx_v_6purple_c_request_authorize_authorize_cb = __pyx_v_authorize_cb;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":163
- * 
- *     c_request_authorize_authorize_cb = authorize_cb
- *     c_request_authorize_deny_cb = deny_cb             # <<<<<<<<<<<<<<
- *     c_request_authorize_user_data = user_data
- * 
- */
-  __pyx_v_6purple_c_request_authorize_deny_cb = __pyx_v_deny_cb;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":164
- *     c_request_authorize_authorize_cb = authorize_cb
- *     c_request_authorize_deny_cb = deny_cb
- *     c_request_authorize_user_data = user_data             # <<<<<<<<<<<<<<
- * 
- *     if alias:
- */
-  __pyx_v_6purple_c_request_authorize_user_data = __pyx_v_user_data;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":166
- *     c_request_authorize_user_data = user_data
- * 
- *     if alias:             # <<<<<<<<<<<<<<
- *         remote_alias = <char *> alias
- *     else:
- */
-  __pyx_1 = (__pyx_v_alias != 0);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":167
- * 
- *     if alias:
- *         remote_alias = <char *> alias             # <<<<<<<<<<<<<<
- *     else:
- *         remote_alias = None
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_alias)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_remote_alias);
-    __pyx_v_remote_alias = __pyx_2;
-    __pyx_2 = 0;
-    goto __pyx_L3;
-  }
-  /*else*/ {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":169
- *         remote_alias = <char *> alias
- *     else:
- *         remote_alias = None             # <<<<<<<<<<<<<<
- * 
- *     if id:
- */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_remote_alias);
-    __pyx_v_remote_alias = Py_None;
-  }
-  __pyx_L3:;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":171
- *         remote_alias = None
- * 
- *     if id:             # <<<<<<<<<<<<<<
- *         username = <char *> id
- *     elif connection.purple_connection_get_display_name(gc) != NULL:
- */
-  __pyx_1 = (__pyx_v_id != 0);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":172
- * 
- *     if id:
- *         username = <char *> id             # <<<<<<<<<<<<<<
- *     elif connection.purple_connection_get_display_name(gc) != NULL:
- *         username = connection.purple_connection_get_display_name(gc)
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_id)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_username);
-    __pyx_v_username = __pyx_2;
-    __pyx_2 = 0;
-    goto __pyx_L4;
-  }
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":173
- *     if id:
- *         username = <char *> id
- *     elif connection.purple_connection_get_display_name(gc) != NULL:             # <<<<<<<<<<<<<<
- *         username = connection.purple_connection_get_display_name(gc)
- *     else:
- */
-  __pyx_1 = (purple_connection_get_display_name(__pyx_v_gc) != NULL);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":174
- *         username = <char *> id
- *     elif connection.purple_connection_get_display_name(gc) != NULL:
- *         username = connection.purple_connection_get_display_name(gc)             # <<<<<<<<<<<<<<
- *     else:
- *         username = account.purple_account_get_username(c_account)
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(purple_connection_get_display_name(__pyx_v_gc)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_username);
-    __pyx_v_username = __pyx_2;
-    __pyx_2 = 0;
-    goto __pyx_L4;
-  }
-  /*else*/ {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":176
- *         username = connection.purple_connection_get_display_name(gc)
- *     else:
- *         username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
- * 
- *     protocol_id = account.purple_account_get_protocol_id(c_account)
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_username);
-    __pyx_v_username = __pyx_2;
-    __pyx_2 = 0;
-  }
-  __pyx_L4:;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":178
- *         username = account.purple_account_get_username(c_account)
- * 
- *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
- * 
- *     if c_message:
- */
-  __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_v_protocol_id);
-  __pyx_v_protocol_id = __pyx_2;
-  __pyx_2 = 0;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":180
- *     protocol_id = account.purple_account_get_protocol_id(c_account)
- * 
- *     if c_message:             # <<<<<<<<<<<<<<
- *         message = <char *> c_message
- *     else:
- */
-  __pyx_1 = (__pyx_v_c_message != 0);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":181
- * 
- *     if c_message:
- *         message = <char *> c_message             # <<<<<<<<<<<<<<
- *     else:
- *         message = None
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_message)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_message);
-    __pyx_v_message = __pyx_2;
-    __pyx_2 = 0;
-    goto __pyx_L5;
-  }
-  /*else*/ {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":183
- *         message = <char *> c_message
- *     else:
- *         message = None             # <<<<<<<<<<<<<<
- * 
- *     if account_cbs.has_key("request-authorize"):
- */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_message);
-    __pyx_v_message = Py_None;
-  }
-  __pyx_L5:;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":185
- *         message = None
- * 
- *     if account_cbs.has_key("request-authorize"):             # <<<<<<<<<<<<<<
- *         (<object> account_cbs["request-authorize"])( \
- *                 (<char *> remote_user, remote_alias), \
- */
-  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_29);
-  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_29);
-  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
-  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_4); __pyx_4 = 0;
+ *     if c_request_authorize_authorize_cb:             # <<<<<<<<<<<<<<
+ *         c_request_authorize_authorize_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL
+ */
+  __pyx_1 = (__pyx_v_6purple_c_request_authorize_authorize_cb != 0);
   if (__pyx_1) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":186
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":37
  * 
- *     if account_cbs.has_key("request-authorize"):
- *         (<object> account_cbs["request-authorize"])( \             # <<<<<<<<<<<<<<
- *                 (<char *> remote_user, remote_alias), \
- *                 (username, protocol_id), \
- */
-    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_30); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":187
- *     if account_cbs.has_key("request-authorize"):
- *         (<object> account_cbs["request-authorize"])( \
- *                 (<char *> remote_user, remote_alias), \             # <<<<<<<<<<<<<<
- *                 (username, protocol_id), \
- *                 message, on_list, \
+ *     if c_request_authorize_authorize_cb:
+ *         c_request_authorize_authorize_cb(c_request_authorize_user_data)             # <<<<<<<<<<<<<<
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL
  */
-    __pyx_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_remote_user)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
-    Py_INCREF(__pyx_v_remote_alias);
-    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_remote_alias);
-    __pyx_4 = 0;
+    __pyx_v_6purple_c_request_authorize_authorize_cb(__pyx_v_6purple_c_request_authorize_user_data);
+    goto __pyx_L4;
+  }
+  __pyx_L4:;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":188
- *         (<object> account_cbs["request-authorize"])( \
- *                 (<char *> remote_user, remote_alias), \
- *                 (username, protocol_id), \             # <<<<<<<<<<<<<<
- *                 message, on_list, \
- *                 call_authorize_cb, call_deny_cb)
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":38
+ *     if c_request_authorize_authorize_cb:
+ *         c_request_authorize_authorize_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL             # <<<<<<<<<<<<<<
+ *     c_request_authorize_deny_cb = NULL
+ *     c_request_authorize_user_data = NULL
  */
-    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_v_username);
-    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
-    Py_INCREF(__pyx_v_protocol_id);
-    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+  __pyx_v_6purple_c_request_authorize_authorize_cb = NULL;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":189
- *                 (<char *> remote_user, remote_alias), \
- *                 (username, protocol_id), \
- *                 message, on_list, \             # <<<<<<<<<<<<<<
- *                 call_authorize_cb, call_deny_cb)
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":39
+ *         c_request_authorize_authorize_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL             # <<<<<<<<<<<<<<
+ *     c_request_authorize_user_data = NULL
  * 
  */
-    __pyx_5 = PyInt_FromLong(__pyx_v_on_list); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_6purple_c_request_authorize_deny_cb = NULL;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":190
- *                 (username, protocol_id), \
- *                 message, on_list, \
- *                 call_authorize_cb, call_deny_cb)             # <<<<<<<<<<<<<<
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":40
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL
+ *     c_request_authorize_user_data = NULL             # <<<<<<<<<<<<<<
  * 
- * cdef void close_account_request (void *ui_handle):
+ * def call_deny_cb():
  */
-    __pyx_6 = __Pyx_GetName(__pyx_m, __pyx_kp_call_authorize_cb); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_7 = __Pyx_GetName(__pyx_m, __pyx_kp_call_deny_cb); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_8 = PyTuple_New(6); if (unlikely(!__pyx_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_8, 0, ((PyObject *)__pyx_3));
-    PyTuple_SET_ITEM(__pyx_8, 1, ((PyObject *)__pyx_4));
-    Py_INCREF(__pyx_v_message);
-    PyTuple_SET_ITEM(__pyx_8, 2, __pyx_v_message);
-    PyTuple_SET_ITEM(__pyx_8, 3, __pyx_5);
-    PyTuple_SET_ITEM(__pyx_8, 4, __pyx_6);
-    PyTuple_SET_ITEM(__pyx_8, 5, __pyx_7);
-    __pyx_3 = 0;
-    __pyx_4 = 0;
-    __pyx_5 = 0;
-    __pyx_6 = 0;
-    __pyx_7 = 0;
-    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_8), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    Py_DECREF(((PyObject *)__pyx_8)); __pyx_8 = 0;
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-    goto __pyx_L6;
-  }
-  __pyx_L6:;
+  __pyx_v_6purple_c_request_authorize_user_data = NULL;
 
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_2);
-  Py_XDECREF(__pyx_3);
-  Py_XDECREF(__pyx_4);
-  Py_XDECREF(__pyx_5);
-  Py_XDECREF(__pyx_6);
-  Py_XDECREF(__pyx_7);
-  Py_XDECREF(__pyx_8);
-  __Pyx_WriteUnraisable("purple.request_authorize");
-  __pyx_r = 0;
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_remote_alias);
-  Py_DECREF(__pyx_v_username);
-  Py_DECREF(__pyx_v_protocol_id);
-  Py_DECREF(__pyx_v_message);
+  __pyx_r = Py_None; Py_INCREF(Py_None);
   return __pyx_r;
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":192
- *                 call_authorize_cb, call_deny_cb)
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":42
+ *     c_request_authorize_user_data = NULL
  * 
- * cdef void close_account_request (void *ui_handle):             # <<<<<<<<<<<<<<
- *     """
- *     Close a pending request for authorization. ui_handle is a handle as
+ * def call_deny_cb():             # <<<<<<<<<<<<<<
+ *     global c_request_authorize_authorize_cb
+ *     global c_request_authorize_deny_cb
  */
 
-static  void __pyx_f_6purple_close_account_request(void *__pyx_v_ui_handle) {
-  PyObject *__pyx_1 = 0;
-  PyObject *__pyx_2 = 0;
-  PyObject *__pyx_3 = 0;
-  int __pyx_4;
+static PyObject *__pyx_pf_6purple_call_deny_cb(PyObject *__pyx_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_call_deny_cb(PyObject *__pyx_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":197
- *     returned by request_authorize.
- *     """
- *     debug.purple_debug_info("account", "%s", "close-account-request\n")             # <<<<<<<<<<<<<<
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":47
+ *     global c_request_authorize_user_data
  * 
- *     request.purple_request_close(request.PURPLE_REQUEST_ACTION, ui_handle)
+ *     if c_request_authorize_deny_cb:             # <<<<<<<<<<<<<<
+ *         c_request_authorize_deny_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL
  */
-  purple_debug_info(__pyx_k_31, __pyx_k_32, __pyx_k_33);
+  __pyx_1 = (__pyx_v_6purple_c_request_authorize_deny_cb != 0);
+  if (__pyx_1) {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":199
- *     debug.purple_debug_info("account", "%s", "close-account-request\n")
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":48
  * 
- *     request.purple_request_close(request.PURPLE_REQUEST_ACTION, ui_handle)             # <<<<<<<<<<<<<<
- * 
- *     if account_cbs.has_key("close-account-request"):
+ *     if c_request_authorize_deny_cb:
+ *         c_request_authorize_deny_cb(c_request_authorize_user_data)             # <<<<<<<<<<<<<<
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL
  */
-  purple_request_close(PURPLE_REQUEST_ACTION, __pyx_v_ui_handle);
+    __pyx_v_6purple_c_request_authorize_deny_cb(__pyx_v_6purple_c_request_authorize_user_data);
+    goto __pyx_L4;
+  }
+  __pyx_L4:;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":201
- *     request.purple_request_close(request.PURPLE_REQUEST_ACTION, ui_handle)
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":49
+ *     if c_request_authorize_deny_cb:
+ *         c_request_authorize_deny_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL             # <<<<<<<<<<<<<<
+ *     c_request_authorize_deny_cb = NULL
+ *     c_request_authorize_user_data = NULL
+ */
+  __pyx_v_6purple_c_request_authorize_authorize_cb = NULL;
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":50
+ *         c_request_authorize_deny_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL             # <<<<<<<<<<<<<<
+ *     c_request_authorize_user_data = NULL
  * 
- *     if account_cbs.has_key("close-account-request"):             # <<<<<<<<<<<<<<
- *         (<object> account_cbs["close-account-request"])()
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_34);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_34);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  if (__pyx_4) {
+  __pyx_v_6purple_c_request_authorize_deny_cb = NULL;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":202
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":51
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL
+ *     c_request_authorize_user_data = NULL             # <<<<<<<<<<<<<<
  * 
- *     if account_cbs.has_key("close-account-request"):
- *         (<object> account_cbs["close-account-request"])()             # <<<<<<<<<<<<<<
+ * cdef void notify_added(account.PurpleAccount *c_account, \
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_35); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_v_6purple_c_request_authorize_user_data = NULL;
 
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_1);
-  Py_XDECREF(__pyx_2);
-  Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.close_account_request");
-  __pyx_L0:;
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  return __pyx_r;
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":27
- * blist_cbs = {}
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":53
+ *     c_request_authorize_user_data = NULL
  * 
- * cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
- *     cdef blist.PurpleGroup *group = <blist.PurpleGroup *>node
- *     cdef char *c_name = NULL
+ * cdef void notify_added(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
+ *         const_char *remote_user, const_char *id, const_char *alias, \
+ *         const_char *c_message):
  */
 
-static  void __pyx_f_6purple___group_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
-  PurpleGroup *__pyx_v_group;
-  char *__pyx_v_c_name;
-  PyObject *__pyx_v_name;
-  PyObject *__pyx_v_currentsize;
-  PyObject *__pyx_v_totalsize;
-  PyObject *__pyx_v_online;
+static char __pyx_k_has_key[] = "has_key";
+
+static PyObject *__pyx_kp_has_key;
+
+static PyObject *__pyx_kp_14;
+static PyObject *__pyx_kp_15;
+
+static char __pyx_k_11[] = "account";
+static char __pyx_k_12[] = "%s";
+static char __pyx_k_13[] = "notify-added\n";
+static char __pyx_k_14[] = "notify-added";
+static char __pyx_k_15[] = "notify-added";
+
+static  void __pyx_f_6purple_notify_added(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_remote_user, const char *__pyx_v_id, const char *__pyx_v_alias, const char *__pyx_v_c_message) {
+  PurpleConnection *__pyx_v_gc;
+  PyObject *__pyx_v_remote_alias;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_message;
   int __pyx_1;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
-  __pyx_v_name = Py_None; Py_INCREF(Py_None);
-  __pyx_v_currentsize = Py_None; Py_INCREF(Py_None);
-  __pyx_v_totalsize = Py_None; Py_INCREF(Py_None);
-  __pyx_v_online = Py_None; Py_INCREF(Py_None);
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  __pyx_v_remote_alias = Py_None; Py_INCREF(Py_None);
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_message = Py_None; Py_INCREF(Py_None);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":28
- * 
- * cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback):
- *     cdef blist.PurpleGroup *group = <blist.PurpleGroup *>node             # <<<<<<<<<<<<<<
- *     cdef char *c_name = NULL
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":61
+ *     """
+ *     cdef connection.PurpleConnection *gc = \
+ *             account.purple_account_get_connection(c_account)             # <<<<<<<<<<<<<<
  * 
+ *     debug.purple_debug_info("account", "%s", "notify-added\n")
  */
-  __pyx_v_group = ((PurpleGroup *)__pyx_v_node);
+  __pyx_v_gc = purple_account_get_connection(__pyx_v_c_account);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":29
- * cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback):
- *     cdef blist.PurpleGroup *group = <blist.PurpleGroup *>node
- *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
- * 
- *     c_name = <char *> blist.purple_group_get_name(group)
- */
-  __pyx_v_c_name = NULL;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":31
- *     cdef char *c_name = NULL
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":63
+ *             account.purple_account_get_connection(c_account)
  * 
- *     c_name = <char *> blist.purple_group_get_name(group)             # <<<<<<<<<<<<<<
- *     if c_name == NULL:
- *         name = None
+ *     debug.purple_debug_info("account", "%s", "notify-added\n")             # <<<<<<<<<<<<<<
+ * 
+ *     if alias:
  */
-  __pyx_v_c_name = ((char *)purple_group_get_name(__pyx_v_group));
+  purple_debug_info(__pyx_k_11, __pyx_k_12, __pyx_k_13);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":32
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":65
+ *     debug.purple_debug_info("account", "%s", "notify-added\n")
  * 
- *     c_name = <char *> blist.purple_group_get_name(group)
- *     if c_name == NULL:             # <<<<<<<<<<<<<<
- *         name = None
+ *     if alias:             # <<<<<<<<<<<<<<
+ *         remote_alias = <char *> alias
  *     else:
  */
-  __pyx_1 = (__pyx_v_c_name == NULL);
+  __pyx_1 = (__pyx_v_alias != 0);
   if (__pyx_1) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":33
- *     c_name = <char *> blist.purple_group_get_name(group)
- *     if c_name == NULL:
- *         name = None             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":66
+ * 
+ *     if alias:
+ *         remote_alias = <char *> alias             # <<<<<<<<<<<<<<
  *     else:
- *         name = c_name
+ *         remote_alias = None
  */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_name);
-    __pyx_v_name = Py_None;
-    goto __pyx_L3;
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_alias)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L2;
   }
   /*else*/ {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":35
- *         name = None
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":68
+ *         remote_alias = <char *> alias
  *     else:
- *         name = c_name             # <<<<<<<<<<<<<<
+ *         remote_alias = None             # <<<<<<<<<<<<<<
  * 
- *     currentsize = blist.purple_blist_get_group_size(group, False)
+ *     if id:
  */
-    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_name);
-    __pyx_v_name = __pyx_2;
-    __pyx_2 = 0;
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = Py_None;
   }
-  __pyx_L3:;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":37
- *         name = c_name
- * 
- *     currentsize = blist.purple_blist_get_group_size(group, False)             # <<<<<<<<<<<<<<
- *     totalsize = blist.purple_blist_get_group_size(group, True)
- *     online = blist.purple_blist_get_group_online_count(group)
- */
-  __pyx_2 = PyInt_FromLong(purple_blist_get_group_size(__pyx_v_group, 0)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_v_currentsize);
-  __pyx_v_currentsize = __pyx_2;
-  __pyx_2 = 0;
+  __pyx_L2:;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":38
- * 
- *     currentsize = blist.purple_blist_get_group_size(group, False)
- *     totalsize = blist.purple_blist_get_group_size(group, True)             # <<<<<<<<<<<<<<
- *     online = blist.purple_blist_get_group_online_count(group)
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":70
+ *         remote_alias = None
  * 
+ *     if id:             # <<<<<<<<<<<<<<
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
  */
-  __pyx_2 = PyInt_FromLong(purple_blist_get_group_size(__pyx_v_group, 1)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_v_totalsize);
-  __pyx_v_totalsize = __pyx_2;
-  __pyx_2 = 0;
+  __pyx_1 = (__pyx_v_id != 0);
+  if (__pyx_1) {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":39
- *     currentsize = blist.purple_blist_get_group_size(group, False)
- *     totalsize = blist.purple_blist_get_group_size(group, True)
- *     online = blist.purple_blist_get_group_online_count(group)             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":71
  * 
- *     callback(node.type, name, totalsize, currentsize, online)
+ *     if id:
+ *         username = <char *> id             # <<<<<<<<<<<<<<
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)
  */
-  __pyx_2 = PyInt_FromLong(purple_blist_get_group_online_count(__pyx_v_group)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_v_online);
-  __pyx_v_online = __pyx_2;
-  __pyx_2 = 0;
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_id)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L3;
+  }
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":41
- *     online = blist.purple_blist_get_group_online_count(group)
- * 
- *     callback(node.type, name, totalsize, currentsize, online)             # <<<<<<<<<<<<<<
- * 
- * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":72
+ *     if id:
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:             # <<<<<<<<<<<<<<
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
  */
-  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyTuple_New(5); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
-  Py_INCREF(__pyx_v_name);
-  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_name);
-  Py_INCREF(__pyx_v_totalsize);
-  PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_totalsize);
-  Py_INCREF(__pyx_v_currentsize);
-  PyTuple_SET_ITEM(__pyx_3, 3, __pyx_v_currentsize);
-  Py_INCREF(__pyx_v_online);
-  PyTuple_SET_ITEM(__pyx_3, 4, __pyx_v_online);
-  __pyx_2 = 0;
-  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_2);
-  Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.__group_node_cb");
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_name);
-  Py_DECREF(__pyx_v_currentsize);
-  Py_DECREF(__pyx_v_totalsize);
-  Py_DECREF(__pyx_v_online);
-}
+  __pyx_1 = (purple_connection_get_display_name(__pyx_v_gc) != NULL);
+  if (__pyx_1) {
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":43
- *     callback(node.type, name, totalsize, currentsize, online)
- * 
- * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
- *     cdef blist.PurpleContact *contact = <blist.PurpleContact *>node
- *     cdef char *c_alias = NULL
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":73
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = account.purple_account_get_username(c_account)
  */
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_connection_get_display_name(__pyx_v_gc)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
 
-static  void __pyx_f_6purple___contact_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
-  PurpleContact *__pyx_v_contact;
-  char *__pyx_v_c_alias;
-  PyObject *__pyx_v_alias;
-  int __pyx_1;
-  PyObject *__pyx_2 = 0;
-  PyObject *__pyx_3 = 0;
-  PyObject *__pyx_4 = 0;
-  PyObject *__pyx_5 = 0;
-  PyObject *__pyx_6 = 0;
-  __pyx_v_alias = Py_None; Py_INCREF(Py_None);
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":44
- * 
- * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):
- *     cdef blist.PurpleContact *contact = <blist.PurpleContact *>node             # <<<<<<<<<<<<<<
- *     cdef char *c_alias = NULL
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":75
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
+ *         username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
  * 
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
  */
-  __pyx_v_contact = ((PurpleContact *)__pyx_v_node);
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":45
- * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):
- *     cdef blist.PurpleContact *contact = <blist.PurpleContact *>node
- *     cdef char *c_alias = NULL             # <<<<<<<<<<<<<<
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":77
+ *         username = account.purple_account_get_username(c_account)
  * 
- *     c_alias = <char *> blist.purple_contact_get_alias(contact)
- */
-  __pyx_v_c_alias = NULL;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":47
- *     cdef char *c_alias = NULL
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
  * 
- *     c_alias = <char *> blist.purple_contact_get_alias(contact)             # <<<<<<<<<<<<<<
- *     if c_alias == NULL:
- *         alias = None
+ *     if c_message:
  */
-  __pyx_v_c_alias = ((char *)purple_contact_get_alias(__pyx_v_contact));
+  __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_v_protocol_id);
+  __pyx_v_protocol_id = __pyx_2;
+  __pyx_2 = 0;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":48
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":79
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
  * 
- *     c_alias = <char *> blist.purple_contact_get_alias(contact)
- *     if c_alias == NULL:             # <<<<<<<<<<<<<<
- *         alias = None
+ *     if c_message:             # <<<<<<<<<<<<<<
+ *         message = <char *> c_message
  *     else:
  */
-  __pyx_1 = (__pyx_v_c_alias == NULL);
+  __pyx_1 = (__pyx_v_c_message != 0);
   if (__pyx_1) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":49
- *     c_alias = <char *> blist.purple_contact_get_alias(contact)
- *     if c_alias == NULL:
- *         alias = None             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":80
+ * 
+ *     if c_message:
+ *         message = <char *> c_message             # <<<<<<<<<<<<<<
  *     else:
- *         alias = c_alias
+ *         message = None
  */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_alias);
-    __pyx_v_alias = Py_None;
-    goto __pyx_L3;
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_message)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
   }
   /*else*/ {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":51
- *         alias = None
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":82
+ *         message = <char *> c_message
  *     else:
- *         alias = c_alias             # <<<<<<<<<<<<<<
+ *         message = None             # <<<<<<<<<<<<<<
  * 
- *     callback(node.type, alias, contact.totalsize, contact.currentsize, \
+ *     if account_cbs.has_key("notify-added"):
  */
-    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_alias);
-    __pyx_v_alias = __pyx_2;
-    __pyx_2 = 0;
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = Py_None;
   }
-  __pyx_L3:;
+  __pyx_L4:;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":53
- *         alias = c_alias
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":84
+ *         message = None
  * 
- *     callback(node.type, alias, contact.totalsize, contact.currentsize, \             # <<<<<<<<<<<<<<
- *              contact.online)
+ *     if account_cbs.has_key("notify-added"):             # <<<<<<<<<<<<<<
+ *         (<object> account_cbs["notify-added"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_14);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_14);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":85
  * 
+ *     if account_cbs.has_key("notify-added"):
+ *         (<object> account_cbs["notify-added"])( \             # <<<<<<<<<<<<<<
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), message)
  */
-  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyInt_FromLong(__pyx_v_contact->totalsize); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_4 = PyInt_FromLong(__pyx_v_contact->currentsize); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_15); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":54
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":86
+ *     if account_cbs.has_key("notify-added"):
+ *         (<object> account_cbs["notify-added"])( \
+ *                 (<char *> remote_user, remote_alias), \             # <<<<<<<<<<<<<<
+ *                 (username, protocol_id), message)
  * 
- *     callback(node.type, alias, contact.totalsize, contact.currentsize, \
- *              contact.online)             # <<<<<<<<<<<<<<
+ */
+    __pyx_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_remote_user)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
+    Py_INCREF(__pyx_v_remote_alias);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_remote_alias);
+    __pyx_4 = 0;
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":87
+ *         (<object> account_cbs["notify-added"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), message)             # <<<<<<<<<<<<<<
  * 
- * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):
+ * cdef void status_changed(account.PurpleAccount *c_account, \
  */
-  __pyx_5 = PyInt_FromLong(__pyx_v_contact->online); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_6 = PyTuple_New(5); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_6, 0, __pyx_2);
-  Py_INCREF(__pyx_v_alias);
-  PyTuple_SET_ITEM(__pyx_6, 1, __pyx_v_alias);
-  PyTuple_SET_ITEM(__pyx_6, 2, __pyx_3);
-  PyTuple_SET_ITEM(__pyx_6, 3, __pyx_4);
-  PyTuple_SET_ITEM(__pyx_6, 4, __pyx_5);
-  __pyx_2 = 0;
-  __pyx_3 = 0;
-  __pyx_4 = 0;
-  __pyx_5 = 0;
-  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_6), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(((PyObject *)__pyx_6)); __pyx_6 = 0;
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+    __pyx_5 = PyTuple_New(3); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_3));
+    PyTuple_SET_ITEM(__pyx_5, 1, ((PyObject *)__pyx_4));
+    Py_INCREF(__pyx_v_message);
+    PyTuple_SET_ITEM(__pyx_5, 2, __pyx_v_message);
+    __pyx_3 = 0;
+    __pyx_4 = 0;
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
+  __pyx_L1:;
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
   Py_XDECREF(__pyx_4);
   Py_XDECREF(__pyx_5);
-  Py_XDECREF(__pyx_6);
-  __Pyx_WriteUnraisable("purple.__contact_node_cb");
+  __Pyx_WriteUnraisable("purple.notify_added");
   __pyx_L0:;
-  Py_DECREF(__pyx_v_alias);
+  Py_DECREF(__pyx_v_remote_alias);
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_message);
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":56
- *              contact.online)
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":89
+ *                 (username, protocol_id), message)
  * 
- * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
- *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node
- *     cdef char *c_name = NULL
+ * cdef void status_changed(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
+ *         status.PurpleStatus *c_status):
+ *     """
  */
 
-static  void __pyx_f_6purple___buddy_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
-  PurpleBuddy *__pyx_v_buddy;
-  char *__pyx_v_c_name;
-  char *__pyx_v_c_alias;
-  PyObject *__pyx_v_name;
-  PyObject *__pyx_v_alias;
-  int __pyx_1;
+static PyObject *__pyx_kp_19;
+static PyObject *__pyx_kp_20;
+
+static char __pyx_k_16[] = "account";
+static char __pyx_k_17[] = "%s";
+static char __pyx_k_18[] = "status-changed\n";
+static char __pyx_k_19[] = "status-changed";
+static char __pyx_k_20[] = "status-changed";
+
+static  void __pyx_f_6purple_status_changed(PurpleAccount *__pyx_v_c_account, PurpleStatus *__pyx_v_c_status) {
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_status_id;
+  PyObject *__pyx_v_status_name;
+  PyObject *__pyx_1 = 0;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
-  __pyx_v_name = Py_None; Py_INCREF(Py_None);
-  __pyx_v_alias = Py_None; Py_INCREF(Py_None);
+  int __pyx_4;
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_status_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_status_name = Py_None; Py_INCREF(Py_None);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":57
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":94
+ *     This account's status changed.
+ *     """
+ *     debug.purple_debug_info("account", "%s", "status-changed\n")             # <<<<<<<<<<<<<<
  * 
- * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):
- *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node             # <<<<<<<<<<<<<<
- *     cdef char *c_name = NULL
- *     cdef char *c_alias = NULL
+ *     username = account.purple_account_get_username(c_account)
  */
-  __pyx_v_buddy = ((PurpleBuddy *)__pyx_v_node);
+  purple_debug_info(__pyx_k_16, __pyx_k_17, __pyx_k_18);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":58
- * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):
- *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node
- *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
- *     cdef char *c_alias = NULL
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":96
+ *     debug.purple_debug_info("account", "%s", "status-changed\n")
  * 
- */
-  __pyx_v_c_name = NULL;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":59
- *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node
- *     cdef char *c_name = NULL
- *     cdef char *c_alias = NULL             # <<<<<<<<<<<<<<
+ *     username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
  * 
- *     c_name = <char *> blist.purple_buddy_get_name(buddy)
  */
-  __pyx_v_c_alias = NULL;
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_v_username);
+  __pyx_v_username = __pyx_1;
+  __pyx_1 = 0;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":61
- *     cdef char *c_alias = NULL
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":97
  * 
- *     c_name = <char *> blist.purple_buddy_get_name(buddy)             # <<<<<<<<<<<<<<
- *     if c_name == NULL:
- *         name = None
- */
-  __pyx_v_c_name = ((char *)purple_buddy_get_name(__pyx_v_buddy));
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":62
+ *     username = account.purple_account_get_username(c_account)
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
  * 
- *     c_name = <char *> blist.purple_buddy_get_name(buddy)
- *     if c_name == NULL:             # <<<<<<<<<<<<<<
- *         name = None
- *     else:
- */
-  __pyx_1 = (__pyx_v_c_name == NULL);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":63
- *     c_name = <char *> blist.purple_buddy_get_name(buddy)
- *     if c_name == NULL:
- *         name = None             # <<<<<<<<<<<<<<
- *     else:
- *         name = c_name
+ *     status_id = status.purple_status_get_id(c_status)
  */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_name);
-    __pyx_v_name = Py_None;
-    goto __pyx_L3;
-  }
-  /*else*/ {
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_v_protocol_id);
+  __pyx_v_protocol_id = __pyx_1;
+  __pyx_1 = 0;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":65
- *         name = None
- *     else:
- *         name = c_name             # <<<<<<<<<<<<<<
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":99
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
  * 
- *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_name);
-    __pyx_v_name = __pyx_2;
-    __pyx_2 = 0;
-  }
-  __pyx_L3:;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":67
- *         name = c_name
+ *     status_id = status.purple_status_get_id(c_status)             # <<<<<<<<<<<<<<
+ *     status_name = status.purple_status_get_name(c_status)
  * 
- *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)             # <<<<<<<<<<<<<<
- *     if c_alias == NULL:
- *         alias = None
  */
-  __pyx_v_c_alias = ((char *)purple_buddy_get_alias_only(__pyx_v_buddy));
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_status_get_id(__pyx_v_c_status)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_v_status_id);
+  __pyx_v_status_id = __pyx_1;
+  __pyx_1 = 0;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":68
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":100
  * 
- *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
- *     if c_alias == NULL:             # <<<<<<<<<<<<<<
- *         alias = None
- *     else:
+ *     status_id = status.purple_status_get_id(c_status)
+ *     status_name = status.purple_status_get_name(c_status)             # <<<<<<<<<<<<<<
+ * 
+ *     if account_cbs.has_key("status-changed"):
  */
-  __pyx_1 = (__pyx_v_c_alias == NULL);
-  if (__pyx_1) {
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_status_get_name(__pyx_v_c_status)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_v_status_name);
+  __pyx_v_status_name = __pyx_1;
+  __pyx_1 = 0;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":69
- *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
- *     if c_alias == NULL:
- *         alias = None             # <<<<<<<<<<<<<<
- *     else:
- *         alias = c_alias
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":102
+ *     status_name = status.purple_status_get_name(c_status)
+ * 
+ *     if account_cbs.has_key("status-changed"):             # <<<<<<<<<<<<<<
+ *         (<object> account_cbs["status-changed"])( \
+ *                 (username, protocol_id), status_id, status_name)
  */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_alias);
-    __pyx_v_alias = Py_None;
-    goto __pyx_L4;
-  }
-  /*else*/ {
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_19);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_19);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":71
- *         alias = None
- *     else:
- *         alias = c_alias             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":103
+ * 
+ *     if account_cbs.has_key("status-changed"):
+ *         (<object> account_cbs["status-changed"])( \             # <<<<<<<<<<<<<<
+ *                 (username, protocol_id), status_id, status_name)
  * 
- *     callback(node.type, name, alias)
  */
-    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_alias);
-    __pyx_v_alias = __pyx_2;
-    __pyx_2 = 0;
-  }
-  __pyx_L4:;
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_20); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":73
- *         alias = c_alias
- * 
- *     callback(node.type, name, alias)             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":104
+ *     if account_cbs.has_key("status-changed"):
+ *         (<object> account_cbs["status-changed"])( \
+ *                 (username, protocol_id), status_id, status_name)             # <<<<<<<<<<<<<<
  * 
- * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):
+ * cdef void request_add(account.PurpleAccount *c_account, \
  */
-  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyTuple_New(3); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
-  Py_INCREF(__pyx_v_name);
-  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_name);
-  Py_INCREF(__pyx_v_alias);
-  PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_alias);
-  __pyx_2 = 0;
-  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_protocol_id);
+    __pyx_2 = PyTuple_New(3); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_3));
+    Py_INCREF(__pyx_v_status_id);
+    PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_status_id);
+    Py_INCREF(__pyx_v_status_name);
+    PyTuple_SET_ITEM(__pyx_2, 2, __pyx_v_status_name);
+    __pyx_3 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L2;
+  }
+  __pyx_L2:;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
+  __pyx_L1:;
+  Py_XDECREF(__pyx_1);
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.__buddy_node_cb");
+  __Pyx_WriteUnraisable("purple.status_changed");
   __pyx_L0:;
-  Py_DECREF(__pyx_v_name);
-  Py_DECREF(__pyx_v_alias);
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_status_id);
+  Py_DECREF(__pyx_v_status_name);
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":75
- *     callback(node.type, name, alias)
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":106
+ *                 (username, protocol_id), status_id, status_name)
  * 
- * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
- *     cdef blist.PurpleChat *chat = <blist.PurpleChat *>node
- *     cdef char *c_name = NULL
+ * cdef void request_add(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
+ *         const_char *remote_user, const_char *id, const_char *alias, \
+ *         const_char *c_message):
  */
 
-static  void __pyx_f_6purple___chat_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
-  PurpleChat *__pyx_v_chat;
-  char *__pyx_v_c_name;
-  PyObject *__pyx_v_name;
+static PyObject *__pyx_kp_24;
+static PyObject *__pyx_kp_25;
+
+static char __pyx_k_21[] = "account";
+static char __pyx_k_22[] = "%s";
+static char __pyx_k_23[] = "request-add\n";
+static char __pyx_k_24[] = "request-add";
+static char __pyx_k_25[] = "request-add";
+
+static  void __pyx_f_6purple_request_add(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_remote_user, const char *__pyx_v_id, const char *__pyx_v_alias, const char *__pyx_v_c_message) {
+  PurpleConnection *__pyx_v_gc;
+  PyObject *__pyx_v_remote_alias;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_message;
   int __pyx_1;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
-  __pyx_v_name = Py_None; Py_INCREF(Py_None);
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  __pyx_v_remote_alias = Py_None; Py_INCREF(Py_None);
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_message = Py_None; Py_INCREF(Py_None);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":76
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":113
+ *     """
+ *     cdef connection.PurpleConnection *gc = \
+ *             account.purple_account_get_connection(c_account)             # <<<<<<<<<<<<<<
  * 
- * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):
- *     cdef blist.PurpleChat *chat = <blist.PurpleChat *>node             # <<<<<<<<<<<<<<
- *     cdef char *c_name = NULL
+ *     debug.purple_debug_info("account", "%s", "request-add\n")
+ */
+  __pyx_v_gc = purple_account_get_connection(__pyx_v_c_account);
+
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":115
+ *             account.purple_account_get_connection(c_account)
+ * 
+ *     debug.purple_debug_info("account", "%s", "request-add\n")             # <<<<<<<<<<<<<<
  * 
+ *     if alias:
  */
-  __pyx_v_chat = ((PurpleChat *)__pyx_v_node);
+  purple_debug_info(__pyx_k_21, __pyx_k_22, __pyx_k_23);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":77
- * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):
- *     cdef blist.PurpleChat *chat = <blist.PurpleChat *>node
- *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":117
+ *     debug.purple_debug_info("account", "%s", "request-add\n")
  * 
- *     c_name = <char *> blist.purple_chat_get_name(chat)
+ *     if alias:             # <<<<<<<<<<<<<<
+ *         remote_alias = <char *> alias
+ *     else:
  */
-  __pyx_v_c_name = NULL;
+  __pyx_1 = (__pyx_v_alias != 0);
+  if (__pyx_1) {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":79
- *     cdef char *c_name = NULL
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":118
  * 
- *     c_name = <char *> blist.purple_chat_get_name(chat)             # <<<<<<<<<<<<<<
- *     if c_name == NULL:
- *         name = None
+ *     if alias:
+ *         remote_alias = <char *> alias             # <<<<<<<<<<<<<<
+ *     else:
+ *         remote_alias = None
  */
-  __pyx_v_c_name = ((char *)purple_chat_get_name(__pyx_v_chat));
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_alias)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L2;
+  }
+  /*else*/ {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":80
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":120
+ *         remote_alias = <char *> alias
+ *     else:
+ *         remote_alias = None             # <<<<<<<<<<<<<<
  * 
- *     c_name = <char *> blist.purple_chat_get_name(chat)
- *     if c_name == NULL:             # <<<<<<<<<<<<<<
- *         name = None
+ *     if id:
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = Py_None;
+  }
+  __pyx_L2:;
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":122
+ *         remote_alias = None
+ * 
+ *     if id:             # <<<<<<<<<<<<<<
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ */
+  __pyx_1 = (__pyx_v_id != 0);
+  if (__pyx_1) {
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":123
+ * 
+ *     if id:
+ *         username = <char *> id             # <<<<<<<<<<<<<<
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_id)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":124
+ *     if id:
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:             # <<<<<<<<<<<<<<
+ *         username = connection.purple_connection_get_display_name(gc)
  *     else:
  */
-  __pyx_1 = (__pyx_v_c_name == NULL);
+  __pyx_1 = (purple_connection_get_display_name(__pyx_v_gc) != NULL);
   if (__pyx_1) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":81
- *     c_name = <char *> blist.purple_chat_get_name(chat)
- *     if c_name == NULL:
- *         name = None             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":125
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)             # <<<<<<<<<<<<<<
  *     else:
- *         name = c_name
+ *         username = account.purple_account_get_username(c_account)
  */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_name);
-    __pyx_v_name = Py_None;
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_connection_get_display_name(__pyx_v_gc)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
     goto __pyx_L3;
   }
   /*else*/ {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":83
- *         name = None
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":127
+ *         username = connection.purple_connection_get_display_name(gc)
  *     else:
- *         name = c_name             # <<<<<<<<<<<<<<
+ *         username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
  * 
- *     callback(node.type, name)
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
  */
-    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_name);
-    __pyx_v_name = __pyx_2;
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
     __pyx_2 = 0;
   }
   __pyx_L3:;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":85
- *         name = c_name
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":129
+ *         username = account.purple_account_get_username(c_account)
  * 
- *     callback(node.type, name)             # <<<<<<<<<<<<<<
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
  * 
- * cdef void __other_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     if c_message:
  */
-  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
-  Py_INCREF(__pyx_v_name);
-  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_name);
+  __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_v_protocol_id);
+  __pyx_v_protocol_id = __pyx_2;
   __pyx_2 = 0;
-  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_2);
-  Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.__chat_node_cb");
-  __pyx_L0:;
-  Py_DECREF(__pyx_v_name);
-}
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":87
- *     callback(node.type, name)
- * 
- * cdef void __other_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
- *     callback(node.type)
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":131
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
  * 
+ *     if c_message:             # <<<<<<<<<<<<<<
+ *         message = <char *> c_message
+ *     else:
  */
+  __pyx_1 = (__pyx_v_c_message != 0);
+  if (__pyx_1) {
 
-static  void __pyx_f_6purple___other_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
-  PyObject *__pyx_1 = 0;
-  PyObject *__pyx_2 = 0;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":88
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":132
  * 
- * cdef void __other_node_cb(blist.PurpleBlistNode *node, object callback):
- *     callback(node.type)             # <<<<<<<<<<<<<<
- * 
- * cdef void new_list(blist.PurpleBuddyList *list):
+ *     if c_message:
+ *         message = <char *> c_message             # <<<<<<<<<<<<<<
+ *     else:
+ *         message = None
  */
-  __pyx_1 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
-  __pyx_1 = 0;
-  __pyx_1 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_1);
-  Py_XDECREF(__pyx_2);
-  __Pyx_WriteUnraisable("purple.__other_node_cb");
-  __pyx_L0:;
-}
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_message)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+  /*else*/ {
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":90
- *     callback(node.type)
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":134
+ *         message = <char *> c_message
+ *     else:
+ *         message = None             # <<<<<<<<<<<<<<
  * 
- * cdef void new_list(blist.PurpleBuddyList *list):             # <<<<<<<<<<<<<<
- *     """
- *     Sets UI-specific data on a buddy list.
+ *     if account_cbs.has_key("request-add"):
  */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = Py_None;
+  }
+  __pyx_L4:;
 
-static  void __pyx_f_6purple_new_list(PurpleBuddyList *__pyx_v_list) {
-  PyObject *__pyx_1 = 0;
-  PyObject *__pyx_2 = 0;
-  PyObject *__pyx_3 = 0;
-  int __pyx_4;
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":136
+ *         message = None
+ * 
+ *     if account_cbs.has_key("request-add"):             # <<<<<<<<<<<<<<
+ *         (<object> account_cbs["request-add"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_24);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_24);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":94
- *     Sets UI-specific data on a buddy list.
- *     """
- *     debug.purple_debug_info("blist", "%s", "new-list\n")             # <<<<<<<<<<<<<<
- *     if blist_cbs.has_key("new-list"):
- *         (<object> blist_cbs["new-list"])("new-list: TODO")
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":137
+ * 
+ *     if account_cbs.has_key("request-add"):
+ *         (<object> account_cbs["request-add"])( \             # <<<<<<<<<<<<<<
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), message)
  */
-  purple_debug_info(__pyx_k_36, __pyx_k_37, __pyx_k_38);
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_25); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":95
- *     """
- *     debug.purple_debug_info("blist", "%s", "new-list\n")
- *     if blist_cbs.has_key("new-list"):             # <<<<<<<<<<<<<<
- *         (<object> blist_cbs["new-list"])("new-list: TODO")
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":138
+ *     if account_cbs.has_key("request-add"):
+ *         (<object> account_cbs["request-add"])( \
+ *                 (<char *> remote_user, remote_alias), \             # <<<<<<<<<<<<<<
+ *                 (username, protocol_id), message)
  * 
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_39);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_39);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  if (__pyx_4) {
+    __pyx_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_remote_user)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
+    Py_INCREF(__pyx_v_remote_alias);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_remote_alias);
+    __pyx_4 = 0;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":96
- *     debug.purple_debug_info("blist", "%s", "new-list\n")
- *     if blist_cbs.has_key("new-list"):
- *         (<object> blist_cbs["new-list"])("new-list: TODO")             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":139
+ *         (<object> account_cbs["request-add"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), message)             # <<<<<<<<<<<<<<
  * 
- * cdef void new_node(blist.PurpleBlistNode *node):
+ * cdef void *request_authorize(account.PurpleAccount *c_account, \
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_40); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_kp_41);
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_41);
-    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+    __pyx_5 = PyTuple_New(3); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_3));
+    PyTuple_SET_ITEM(__pyx_5, 1, ((PyObject *)__pyx_4));
+    Py_INCREF(__pyx_v_message);
+    PyTuple_SET_ITEM(__pyx_5, 2, __pyx_v_message);
+    __pyx_3 = 0;
+    __pyx_4 = 0;
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1;}
     Py_DECREF(__pyx_2); __pyx_2 = 0;
-    goto __pyx_L3;
+    Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L5;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_1);
+  __pyx_L1:;
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.new_list");
+  Py_XDECREF(__pyx_4);
+  Py_XDECREF(__pyx_5);
+  __Pyx_WriteUnraisable("purple.request_add");
   __pyx_L0:;
+  Py_DECREF(__pyx_v_remote_alias);
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_message);
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":98
- *         (<object> blist_cbs["new-list"])("new-list: TODO")
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":141
+ *                 (username, protocol_id), message)
  * 
- * cdef void new_node(blist.PurpleBlistNode *node):             # <<<<<<<<<<<<<<
- *     """
- *     Sets UI-specific data on a node.
+ * cdef void *request_authorize(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
+ *         const_char *remote_user, const_char *id, const_char *alias, \
+ *         const_char *c_message, glib.gboolean on_list, \
  */
 
-static  void __pyx_f_6purple_new_node(PurpleBlistNode *__pyx_v_node) {
-  PyObject *__pyx_1 = 0;
-  PyObject *__pyx_2 = 0;
-  PyObject *__pyx_3 = 0;
-  int __pyx_4;
+static char __pyx_k_call_authorize_cb[] = "call_authorize_cb";
+static char __pyx_k_call_deny_cb[] = "call_deny_cb";
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":102
- *     Sets UI-specific data on a node.
- *     """
- *     debug.purple_debug_info("blist", "%s", "new-node\n")             # <<<<<<<<<<<<<<
- *     if blist_cbs.has_key("new-node"):
- *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
- */
-  purple_debug_info(__pyx_k_42, __pyx_k_43, __pyx_k_44);
+static PyObject *__pyx_kp_call_authorize_cb;
+static PyObject *__pyx_kp_call_deny_cb;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":103
- *     """
- *     debug.purple_debug_info("blist", "%s", "new-node\n")
- *     if blist_cbs.has_key("new-node"):             # <<<<<<<<<<<<<<
- *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
- *             __group_node_cb(node, blist_cbs["new-node"])
- */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_45);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_45);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  if (__pyx_4) {
+static PyObject *__pyx_kp_29;
+static PyObject *__pyx_kp_30;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":104
- *     debug.purple_debug_info("blist", "%s", "new-node\n")
- *     if blist_cbs.has_key("new-node"):
- *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:             # <<<<<<<<<<<<<<
- *             __group_node_cb(node, blist_cbs["new-node"])
- *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
- */
-    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_GROUP_NODE);
-    if (__pyx_4) {
+static char __pyx_k_26[] = "account";
+static char __pyx_k_27[] = "%s";
+static char __pyx_k_28[] = "request-authorize\n";
+static char __pyx_k_29[] = "request-authorize";
+static char __pyx_k_30[] = "request-authorize";
 
-      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":105
- *     if blist_cbs.has_key("new-node"):
- *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
- *             __group_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
- *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
- *             __contact_node_cb(node, blist_cbs["new-node"])
- */
-      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_46); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_2); __pyx_2 = 0;
-      __pyx_f_6purple___group_node_cb(__pyx_v_node, __pyx_1);
-      Py_DECREF(__pyx_1); __pyx_1 = 0;
-      goto __pyx_L4;
-    }
+static  void *__pyx_f_6purple_request_authorize(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_remote_user, const char *__pyx_v_id, const char *__pyx_v_alias, const char *__pyx_v_c_message, gboolean __pyx_v_on_list, PurpleAccountRequestAuthorizationCb __pyx_v_authorize_cb, PurpleAccountRequestAuthorizationCb __pyx_v_deny_cb, void *__pyx_v_user_data) {
+  PurpleConnection *__pyx_v_gc;
+  PyObject *__pyx_v_remote_alias;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_message;
+  void *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  PyObject *__pyx_6 = 0;
+  PyObject *__pyx_7 = 0;
+  PyObject *__pyx_8 = 0;
+  __pyx_v_remote_alias = Py_None; Py_INCREF(Py_None);
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_message = Py_None; Py_INCREF(Py_None);
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":106
- *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
- *             __group_node_cb(node, blist_cbs["new-node"])
- *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:             # <<<<<<<<<<<<<<
- *             __contact_node_cb(node, blist_cbs["new-node"])
- *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":154
+ *     """
+ *     cdef connection.PurpleConnection *gc = \
+ *             account.purple_account_get_connection(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     debug.purple_debug_info("account", "%s", "request-authorize\n")
  */
-    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CONTACT_NODE);
-    if (__pyx_4) {
+  __pyx_v_gc = purple_account_get_connection(__pyx_v_c_account);
 
-      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":107
- *             __group_node_cb(node, blist_cbs["new-node"])
- *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
- *             __contact_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
- *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
- *             __buddy_node_cb(node, blist_cbs["new-node"])
- */
-      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_47); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_3); __pyx_3 = 0;
-      __pyx_f_6purple___contact_node_cb(__pyx_v_node, __pyx_2);
-      Py_DECREF(__pyx_2); __pyx_2 = 0;
-      goto __pyx_L4;
-    }
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":108
- *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
- *             __contact_node_cb(node, blist_cbs["new-node"])
- *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:             # <<<<<<<<<<<<<<
- *             __buddy_node_cb(node, blist_cbs["new-node"])
- *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":156
+ *             account.purple_account_get_connection(c_account)
+ * 
+ *     debug.purple_debug_info("account", "%s", "request-authorize\n")             # <<<<<<<<<<<<<<
+ * 
+ *     global c_request_authorize_authorize_cb
  */
-    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_BUDDY_NODE);
-    if (__pyx_4) {
+  purple_debug_info(__pyx_k_26, __pyx_k_27, __pyx_k_28);
 
-      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":109
- *             __contact_node_cb(node, blist_cbs["new-node"])
- *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
- *             __buddy_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
- *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
- *             __chat_node_cb(node, blist_cbs["new-node"])
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":162
+ *     global c_request_authorize_user_data
+ * 
+ *     c_request_authorize_authorize_cb = authorize_cb             # <<<<<<<<<<<<<<
+ *     c_request_authorize_deny_cb = deny_cb
+ *     c_request_authorize_user_data = user_data
  */
-      __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_3 = PyObject_GetItem(__pyx_1, __pyx_kp_48); if (!__pyx_3) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_1); __pyx_1 = 0;
-      __pyx_f_6purple___buddy_node_cb(__pyx_v_node, __pyx_3);
-      Py_DECREF(__pyx_3); __pyx_3 = 0;
-      goto __pyx_L4;
-    }
+  __pyx_v_6purple_c_request_authorize_authorize_cb = __pyx_v_authorize_cb;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":110
- *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
- *             __buddy_node_cb(node, blist_cbs["new-node"])
- *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:             # <<<<<<<<<<<<<<
- *             __chat_node_cb(node, blist_cbs["new-node"])
- *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":163
+ * 
+ *     c_request_authorize_authorize_cb = authorize_cb
+ *     c_request_authorize_deny_cb = deny_cb             # <<<<<<<<<<<<<<
+ *     c_request_authorize_user_data = user_data
+ * 
  */
-    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CHAT_NODE);
-    if (__pyx_4) {
+  __pyx_v_6purple_c_request_authorize_deny_cb = __pyx_v_deny_cb;
 
-      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":111
- *             __buddy_node_cb(node, blist_cbs["new-node"])
- *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
- *             __chat_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
- *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
- *             __other_node_cb(node, blist_cbs["new-node"])
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":164
+ *     c_request_authorize_authorize_cb = authorize_cb
+ *     c_request_authorize_deny_cb = deny_cb
+ *     c_request_authorize_user_data = user_data             # <<<<<<<<<<<<<<
+ * 
+ *     if alias:
  */
-      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_49); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_2); __pyx_2 = 0;
-      __pyx_f_6purple___chat_node_cb(__pyx_v_node, __pyx_1);
-      Py_DECREF(__pyx_1); __pyx_1 = 0;
-      goto __pyx_L4;
-    }
+  __pyx_v_6purple_c_request_authorize_user_data = __pyx_v_user_data;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":112
- *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
- *             __chat_node_cb(node, blist_cbs["new-node"])
- *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:             # <<<<<<<<<<<<<<
- *             __other_node_cb(node, blist_cbs["new-node"])
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":166
+ *     c_request_authorize_user_data = user_data
  * 
+ *     if alias:             # <<<<<<<<<<<<<<
+ *         remote_alias = <char *> alias
+ *     else:
  */
-    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_OTHER_NODE);
-    if (__pyx_4) {
+  __pyx_1 = (__pyx_v_alias != 0);
+  if (__pyx_1) {
 
-      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":113
- *             __chat_node_cb(node, blist_cbs["new-node"])
- *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
- *             __other_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":167
  * 
- * cdef void show(blist.PurpleBuddyList *list):
+ *     if alias:
+ *         remote_alias = <char *> alias             # <<<<<<<<<<<<<<
+ *     else:
+ *         remote_alias = None
  */
-      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_50); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_3); __pyx_3 = 0;
-      __pyx_f_6purple___other_node_cb(__pyx_v_node, __pyx_2);
-      Py_DECREF(__pyx_2); __pyx_2 = 0;
-      goto __pyx_L4;
-    }
-    __pyx_L4:;
-    goto __pyx_L3;
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_alias)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L2;
   }
-  __pyx_L3:;
-
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_1);
-  Py_XDECREF(__pyx_2);
-  Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.new_node");
-  __pyx_L0:;
-}
+  /*else*/ {
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":115
- *             __other_node_cb(node, blist_cbs["new-node"])
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":169
+ *         remote_alias = <char *> alias
+ *     else:
+ *         remote_alias = None             # <<<<<<<<<<<<<<
  * 
- * cdef void show(blist.PurpleBuddyList *list):             # <<<<<<<<<<<<<<
- *     """
- *     The core will call this when it's finished doing its core stuff.
- */
-
-static  void __pyx_f_6purple_show(PurpleBuddyList *__pyx_v_list) {
-  PyObject *__pyx_1 = 0;
-  PyObject *__pyx_2 = 0;
-  PyObject *__pyx_3 = 0;
-  int __pyx_4;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":119
- *     The core will call this when it's finished doing its core stuff.
- *     """
- *     debug.purple_debug_info("blist", "%s", "show\n")             # <<<<<<<<<<<<<<
- *     if blist_cbs.has_key("show"):
- *         (<object> blist_cbs["show"])("show: TODO")
+ *     if id:
  */
-  purple_debug_info(__pyx_k_51, __pyx_k_52, __pyx_k_53);
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = Py_None;
+  }
+  __pyx_L2:;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":120
- *     """
- *     debug.purple_debug_info("blist", "%s", "show\n")
- *     if blist_cbs.has_key("show"):             # <<<<<<<<<<<<<<
- *         (<object> blist_cbs["show"])("show: TODO")
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":171
+ *         remote_alias = None
  * 
- */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_54);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_54);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  if (__pyx_4) {
+ *     if id:             # <<<<<<<<<<<<<<
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ */
+  __pyx_1 = (__pyx_v_id != 0);
+  if (__pyx_1) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":121
- *     debug.purple_debug_info("blist", "%s", "show\n")
- *     if blist_cbs.has_key("show"):
- *         (<object> blist_cbs["show"])("show: TODO")             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":172
  * 
- * cdef void update(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):
+ *     if id:
+ *         username = <char *> id             # <<<<<<<<<<<<<<
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_55); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_kp_56);
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_56);
-    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_id)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
     goto __pyx_L3;
   }
-  __pyx_L3:;
-
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_1);
-  Py_XDECREF(__pyx_2);
-  Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.show");
-  __pyx_L0:;
-}
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":123
- *         (<object> blist_cbs["show"])("show: TODO")
- * 
- * cdef void update(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):             # <<<<<<<<<<<<<<
- *     """
- *     This will update a node in the buddy list.
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":173
+ *     if id:
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:             # <<<<<<<<<<<<<<
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
  */
+  __pyx_1 = (purple_connection_get_display_name(__pyx_v_gc) != NULL);
+  if (__pyx_1) {
 
-static  void __pyx_f_6purple_update(PurpleBuddyList *__pyx_v_list, PurpleBlistNode *__pyx_v_node) {
-  PyObject *__pyx_1 = 0;
-  PyObject *__pyx_2 = 0;
-  PyObject *__pyx_3 = 0;
-  int __pyx_4;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":127
- *     This will update a node in the buddy list.
- *     """
- *     debug.purple_debug_info("blist", "%s", "update\n")             # <<<<<<<<<<<<<<
- *     if blist_cbs.has_key("update"):
- *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":174
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = account.purple_account_get_username(c_account)
  */
-  purple_debug_info(__pyx_k_57, __pyx_k_58, __pyx_k_59);
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_connection_get_display_name(__pyx_v_gc)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":128
- *     """
- *     debug.purple_debug_info("blist", "%s", "update\n")
- *     if blist_cbs.has_key("update"):             # <<<<<<<<<<<<<<
- *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
- *             __group_node_cb(node, blist_cbs["update"])
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":176
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
+ *         username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_60);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_60);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  if (__pyx_4) {
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":129
- *     debug.purple_debug_info("blist", "%s", "update\n")
- *     if blist_cbs.has_key("update"):
- *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:             # <<<<<<<<<<<<<<
- *             __group_node_cb(node, blist_cbs["update"])
- *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":178
+ *         username = account.purple_account_get_username(c_account)
+ * 
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     if c_message:
  */
-    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_GROUP_NODE);
-    if (__pyx_4) {
+  __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_v_protocol_id);
+  __pyx_v_protocol_id = __pyx_2;
+  __pyx_2 = 0;
 
-      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":130
- *     if blist_cbs.has_key("update"):
- *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
- *             __group_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
- *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
- *             __contact_node_cb(node, blist_cbs["update"])
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":180
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ *     if c_message:             # <<<<<<<<<<<<<<
+ *         message = <char *> c_message
+ *     else:
  */
-      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_61); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_2); __pyx_2 = 0;
-      __pyx_f_6purple___group_node_cb(__pyx_v_node, __pyx_1);
-      Py_DECREF(__pyx_1); __pyx_1 = 0;
-      goto __pyx_L4;
-    }
+  __pyx_1 = (__pyx_v_c_message != 0);
+  if (__pyx_1) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":131
- *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
- *             __group_node_cb(node, blist_cbs["update"])
- *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:             # <<<<<<<<<<<<<<
- *             __contact_node_cb(node, blist_cbs["update"])
- *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":181
+ * 
+ *     if c_message:
+ *         message = <char *> c_message             # <<<<<<<<<<<<<<
+ *     else:
+ *         message = None
  */
-    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CONTACT_NODE);
-    if (__pyx_4) {
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_message)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+  /*else*/ {
 
-      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":132
- *             __group_node_cb(node, blist_cbs["update"])
- *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
- *             __contact_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
- *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
- *             __buddy_node_cb(node, blist_cbs["update"])
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":183
+ *         message = <char *> c_message
+ *     else:
+ *         message = None             # <<<<<<<<<<<<<<
+ * 
+ *     if account_cbs.has_key("request-authorize"):
  */
-      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_62); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_3); __pyx_3 = 0;
-      __pyx_f_6purple___contact_node_cb(__pyx_v_node, __pyx_2);
-      Py_DECREF(__pyx_2); __pyx_2 = 0;
-      goto __pyx_L4;
-    }
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = Py_None;
+  }
+  __pyx_L4:;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":133
- *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
- *             __contact_node_cb(node, blist_cbs["update"])
- *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:             # <<<<<<<<<<<<<<
- *             __buddy_node_cb(node, blist_cbs["update"])
- *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":185
+ *         message = None
+ * 
+ *     if account_cbs.has_key("request-authorize"):             # <<<<<<<<<<<<<<
+ *         (<object> account_cbs["request-authorize"])( \
+ *                 (<char *> remote_user, remote_alias), \
  */
-    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_BUDDY_NODE);
-    if (__pyx_4) {
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_29);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_29);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
 
-      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":134
- *             __contact_node_cb(node, blist_cbs["update"])
- *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
- *             __buddy_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
- *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
- *             __chat_node_cb(node, blist_cbs["update"])
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":186
+ * 
+ *     if account_cbs.has_key("request-authorize"):
+ *         (<object> account_cbs["request-authorize"])( \             # <<<<<<<<<<<<<<
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), \
  */
-      __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_3 = PyObject_GetItem(__pyx_1, __pyx_kp_63); if (!__pyx_3) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_1); __pyx_1 = 0;
-      __pyx_f_6purple___buddy_node_cb(__pyx_v_node, __pyx_3);
-      Py_DECREF(__pyx_3); __pyx_3 = 0;
-      goto __pyx_L4;
-    }
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_30); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":135
- *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
- *             __buddy_node_cb(node, blist_cbs["update"])
- *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:             # <<<<<<<<<<<<<<
- *             __chat_node_cb(node, blist_cbs["update"])
- *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":187
+ *     if account_cbs.has_key("request-authorize"):
+ *         (<object> account_cbs["request-authorize"])( \
+ *                 (<char *> remote_user, remote_alias), \             # <<<<<<<<<<<<<<
+ *                 (username, protocol_id), \
+ *                 message, on_list, \
  */
-    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CHAT_NODE);
-    if (__pyx_4) {
+    __pyx_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_remote_user)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
+    Py_INCREF(__pyx_v_remote_alias);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_remote_alias);
+    __pyx_4 = 0;
 
-      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":136
- *             __buddy_node_cb(node, blist_cbs["update"])
- *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
- *             __chat_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
- *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
- *             __other_node_cb(node, blist_cbs["update"])
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":188
+ *         (<object> account_cbs["request-authorize"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), \             # <<<<<<<<<<<<<<
+ *                 message, on_list, \
+ *                 call_authorize_cb, call_deny_cb)
  */
-      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_64); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_2); __pyx_2 = 0;
-      __pyx_f_6purple___chat_node_cb(__pyx_v_node, __pyx_1);
-      Py_DECREF(__pyx_1); __pyx_1 = 0;
-      goto __pyx_L4;
-    }
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":137
- *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
- *             __chat_node_cb(node, blist_cbs["update"])
- *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:             # <<<<<<<<<<<<<<
- *             __other_node_cb(node, blist_cbs["update"])
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":189
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), \
+ *                 message, on_list, \             # <<<<<<<<<<<<<<
+ *                 call_authorize_cb, call_deny_cb)
  * 
  */
-    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_OTHER_NODE);
-    if (__pyx_4) {
+    __pyx_5 = PyInt_FromLong(__pyx_v_on_list); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1;}
 
-      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":138
- *             __chat_node_cb(node, blist_cbs["update"])
- *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
- *             __other_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":190
+ *                 (username, protocol_id), \
+ *                 message, on_list, \
+ *                 call_authorize_cb, call_deny_cb)             # <<<<<<<<<<<<<<
  * 
- * cdef void remove(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):
+ * cdef void close_account_request (void *ui_handle):
  */
-      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_65); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_3); __pyx_3 = 0;
-      __pyx_f_6purple___other_node_cb(__pyx_v_node, __pyx_2);
-      Py_DECREF(__pyx_2); __pyx_2 = 0;
-      goto __pyx_L4;
-    }
-    __pyx_L4:;
-    goto __pyx_L3;
+    __pyx_6 = __Pyx_GetName(__pyx_m, __pyx_kp_call_authorize_cb); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_7 = __Pyx_GetName(__pyx_m, __pyx_kp_call_deny_cb); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_8 = PyTuple_New(6); if (unlikely(!__pyx_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    PyTuple_SET_ITEM(__pyx_8, 0, ((PyObject *)__pyx_3));
+    PyTuple_SET_ITEM(__pyx_8, 1, ((PyObject *)__pyx_4));
+    Py_INCREF(__pyx_v_message);
+    PyTuple_SET_ITEM(__pyx_8, 2, __pyx_v_message);
+    PyTuple_SET_ITEM(__pyx_8, 3, __pyx_5);
+    PyTuple_SET_ITEM(__pyx_8, 4, __pyx_6);
+    PyTuple_SET_ITEM(__pyx_8, 5, __pyx_7);
+    __pyx_3 = 0;
+    __pyx_4 = 0;
+    __pyx_5 = 0;
+    __pyx_6 = 0;
+    __pyx_7 = 0;
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_8), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_8)); __pyx_8 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L5;
   }
-  __pyx_L3:;
+  __pyx_L5:;
 
+  __pyx_r = 0;
   goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_1);
+  __pyx_L1:;
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.update");
+  Py_XDECREF(__pyx_4);
+  Py_XDECREF(__pyx_5);
+  Py_XDECREF(__pyx_6);
+  Py_XDECREF(__pyx_7);
+  Py_XDECREF(__pyx_8);
+  __Pyx_WriteUnraisable("purple.request_authorize");
+  __pyx_r = 0;
   __pyx_L0:;
+  Py_DECREF(__pyx_v_remote_alias);
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_message);
+  return __pyx_r;
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":140
- *             __other_node_cb(node, blist_cbs["update"])
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":192
+ *                 call_authorize_cb, call_deny_cb)
  * 
- * cdef void remove(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):             # <<<<<<<<<<<<<<
+ * cdef void close_account_request (void *ui_handle):             # <<<<<<<<<<<<<<
  *     """
- *     This removes a node from the list.
+ *     Close a pending request for authorization. ui_handle is a handle as
  */
 
-static  void __pyx_f_6purple_remove(PurpleBuddyList *__pyx_v_list, PurpleBlistNode *__pyx_v_node) {
+static PyObject *__pyx_kp_34;
+static PyObject *__pyx_kp_35;
+
+static char __pyx_k_31[] = "account";
+static char __pyx_k_32[] = "%s";
+static char __pyx_k_33[] = "close-account-request\n";
+static char __pyx_k_34[] = "close-account-request";
+static char __pyx_k_35[] = "close-account-request";
+
+static  void __pyx_f_6purple_close_account_request(void *__pyx_v_ui_handle) {
   PyObject *__pyx_1 = 0;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
   int __pyx_4;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":144
- *     This removes a node from the list.
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":197
+ *     returned by request_authorize.
  *     """
- *     debug.purple_debug_info("blist", "%s", "remove\n")             # <<<<<<<<<<<<<<
- *     if blist_cbs.has_key("remove"):
- *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *     debug.purple_debug_info("account", "%s", "close-account-request\n")             # <<<<<<<<<<<<<<
+ * 
+ *     request.purple_request_close(request.PURPLE_REQUEST_ACTION, ui_handle)
  */
-  purple_debug_info(__pyx_k_66, __pyx_k_67, __pyx_k_68);
+  purple_debug_info(__pyx_k_31, __pyx_k_32, __pyx_k_33);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":145
- *     """
- *     debug.purple_debug_info("blist", "%s", "remove\n")
- *     if blist_cbs.has_key("remove"):             # <<<<<<<<<<<<<<
- *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
- *             __group_node_cb(node, blist_cbs["remove"])
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":199
+ *     debug.purple_debug_info("account", "%s", "close-account-request\n")
+ * 
+ *     request.purple_request_close(request.PURPLE_REQUEST_ACTION, ui_handle)             # <<<<<<<<<<<<<<
+ * 
+ *     if account_cbs.has_key("close-account-request"):
+ */
+  purple_request_close(PURPLE_REQUEST_ACTION, __pyx_v_ui_handle);
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":201
+ *     request.purple_request_close(request.PURPLE_REQUEST_ACTION, ui_handle)
+ * 
+ *     if account_cbs.has_key("close-account-request"):             # <<<<<<<<<<<<<<
+ *         (<object> account_cbs["close-account-request"])()
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_69);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_69);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_34);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_34);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
   if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":146
- *     debug.purple_debug_info("blist", "%s", "remove\n")
- *     if blist_cbs.has_key("remove"):
- *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:             # <<<<<<<<<<<<<<
- *             __group_node_cb(node, blist_cbs["remove"])
- *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/account_cbs.pxd":202
+ * 
+ *     if account_cbs.has_key("close-account-request"):
+ *         (<object> account_cbs["close-account-request"])()             # <<<<<<<<<<<<<<
  */
-    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_GROUP_NODE);
-    if (__pyx_4) {
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_35); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L2;
+  }
+  __pyx_L2:;
 
-      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":147
- *     if blist_cbs.has_key("remove"):
- *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
- *             __group_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
- *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
- *             __contact_node_cb(node, blist_cbs["remove"])
+  goto __pyx_L0;
+  __pyx_L1:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.close_account_request");
+  __pyx_L0:;
+}
+
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":27
+ * blist_cbs = {}
+ * 
+ * cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
+ *     cdef blist.PurpleGroup *group = <blist.PurpleGroup *>node
+ *     cdef char *c_name = NULL
  */
-      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_70); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_2); __pyx_2 = 0;
-      __pyx_f_6purple___group_node_cb(__pyx_v_node, __pyx_1);
-      Py_DECREF(__pyx_1); __pyx_1 = 0;
-      goto __pyx_L4;
-    }
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":148
- *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
- *             __group_node_cb(node, blist_cbs["remove"])
- *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:             # <<<<<<<<<<<<<<
- *             __contact_node_cb(node, blist_cbs["remove"])
- *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+static  void __pyx_f_6purple___group_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
+  PurpleGroup *__pyx_v_group;
+  char *__pyx_v_c_name;
+  PyObject *__pyx_v_name;
+  PyObject *__pyx_v_currentsize;
+  PyObject *__pyx_v_totalsize;
+  PyObject *__pyx_v_online;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  __pyx_v_name = Py_None; Py_INCREF(Py_None);
+  __pyx_v_currentsize = Py_None; Py_INCREF(Py_None);
+  __pyx_v_totalsize = Py_None; Py_INCREF(Py_None);
+  __pyx_v_online = Py_None; Py_INCREF(Py_None);
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":28
+ * 
+ * cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleGroup *group = <blist.PurpleGroup *>node             # <<<<<<<<<<<<<<
+ *     cdef char *c_name = NULL
+ * 
  */
-    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CONTACT_NODE);
-    if (__pyx_4) {
+  __pyx_v_group = ((PurpleGroup *)__pyx_v_node);
 
-      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":149
- *             __group_node_cb(node, blist_cbs["remove"])
- *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
- *             __contact_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
- *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
- *             __buddy_node_cb(node, blist_cbs["remove"])
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":29
+ * cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleGroup *group = <blist.PurpleGroup *>node
+ *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_name = <char *> blist.purple_group_get_name(group)
  */
-      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_71); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_3); __pyx_3 = 0;
-      __pyx_f_6purple___contact_node_cb(__pyx_v_node, __pyx_2);
-      Py_DECREF(__pyx_2); __pyx_2 = 0;
-      goto __pyx_L4;
-    }
+  __pyx_v_c_name = NULL;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":150
- *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
- *             __contact_node_cb(node, blist_cbs["remove"])
- *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:             # <<<<<<<<<<<<<<
- *             __buddy_node_cb(node, blist_cbs["remove"])
- *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":31
+ *     cdef char *c_name = NULL
+ * 
+ *     c_name = <char *> blist.purple_group_get_name(group)             # <<<<<<<<<<<<<<
+ *     if c_name == NULL:
+ *         name = None
  */
-    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_BUDDY_NODE);
-    if (__pyx_4) {
+  __pyx_v_c_name = ((char *)purple_group_get_name(__pyx_v_group));
 
-      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":151
- *             __contact_node_cb(node, blist_cbs["remove"])
- *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
- *             __buddy_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
- *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
- *             __chat_node_cb(node, blist_cbs["remove"])
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":32
+ * 
+ *     c_name = <char *> blist.purple_group_get_name(group)
+ *     if c_name == NULL:             # <<<<<<<<<<<<<<
+ *         name = None
+ *     else:
  */
-      __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_3 = PyObject_GetItem(__pyx_1, __pyx_kp_72); if (!__pyx_3) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_1); __pyx_1 = 0;
-      __pyx_f_6purple___buddy_node_cb(__pyx_v_node, __pyx_3);
-      Py_DECREF(__pyx_3); __pyx_3 = 0;
-      goto __pyx_L4;
-    }
+  __pyx_1 = (__pyx_v_c_name == NULL);
+  if (__pyx_1) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":152
- *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
- *             __buddy_node_cb(node, blist_cbs["remove"])
- *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:             # <<<<<<<<<<<<<<
- *             __chat_node_cb(node, blist_cbs["remove"])
- *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":33
+ *     c_name = <char *> blist.purple_group_get_name(group)
+ *     if c_name == NULL:
+ *         name = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         name = c_name
  */
-    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CHAT_NODE);
-    if (__pyx_4) {
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = Py_None;
+    goto __pyx_L2;
+  }
+  /*else*/ {
 
-      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":153
- *             __buddy_node_cb(node, blist_cbs["remove"])
- *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
- *             __chat_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
- *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
- *             __other_node_cb(node, blist_cbs["remove"])
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":35
+ *         name = None
+ *     else:
+ *         name = c_name             # <<<<<<<<<<<<<<
+ * 
+ *     currentsize = blist.purple_blist_get_group_size(group, False)
  */
-      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_73); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_2); __pyx_2 = 0;
-      __pyx_f_6purple___chat_node_cb(__pyx_v_node, __pyx_1);
-      Py_DECREF(__pyx_1); __pyx_1 = 0;
-      goto __pyx_L4;
-    }
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L2:;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":154
- *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
- *             __chat_node_cb(node, blist_cbs["remove"])
- *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:             # <<<<<<<<<<<<<<
- *             __other_node_cb(node, blist_cbs["remove"])
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":37
+ *         name = c_name
+ * 
+ *     currentsize = blist.purple_blist_get_group_size(group, False)             # <<<<<<<<<<<<<<
+ *     totalsize = blist.purple_blist_get_group_size(group, True)
+ *     online = blist.purple_blist_get_group_online_count(group)
+ */
+  __pyx_2 = PyInt_FromLong(purple_blist_get_group_size(__pyx_v_group, 0)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_v_currentsize);
+  __pyx_v_currentsize = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":38
+ * 
+ *     currentsize = blist.purple_blist_get_group_size(group, False)
+ *     totalsize = blist.purple_blist_get_group_size(group, True)             # <<<<<<<<<<<<<<
+ *     online = blist.purple_blist_get_group_online_count(group)
  * 
  */
-    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_OTHER_NODE);
-    if (__pyx_4) {
+  __pyx_2 = PyInt_FromLong(purple_blist_get_group_size(__pyx_v_group, 1)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_v_totalsize);
+  __pyx_v_totalsize = __pyx_2;
+  __pyx_2 = 0;
 
-      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":155
- *             __chat_node_cb(node, blist_cbs["remove"])
- *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
- *             __other_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":39
+ *     currentsize = blist.purple_blist_get_group_size(group, False)
+ *     totalsize = blist.purple_blist_get_group_size(group, True)
+ *     online = blist.purple_blist_get_group_online_count(group)             # <<<<<<<<<<<<<<
  * 
- * cdef void destroy(blist.PurpleBuddyList *list):
+ *     callback(node.type, name, totalsize, currentsize, online)
+ */
+  __pyx_2 = PyInt_FromLong(purple_blist_get_group_online_count(__pyx_v_group)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_v_online);
+  __pyx_v_online = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":41
+ *     online = blist.purple_blist_get_group_online_count(group)
+ * 
+ *     callback(node.type, name, totalsize, currentsize, online)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):
  */
-      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_74); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_3); __pyx_3 = 0;
-      __pyx_f_6purple___other_node_cb(__pyx_v_node, __pyx_2);
-      Py_DECREF(__pyx_2); __pyx_2 = 0;
-      goto __pyx_L4;
-    }
-    __pyx_L4:;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_3 = PyTuple_New(5); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
+  Py_INCREF(__pyx_v_name);
+  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_name);
+  Py_INCREF(__pyx_v_totalsize);
+  PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_totalsize);
+  Py_INCREF(__pyx_v_currentsize);
+  PyTuple_SET_ITEM(__pyx_3, 3, __pyx_v_currentsize);
+  Py_INCREF(__pyx_v_online);
+  PyTuple_SET_ITEM(__pyx_3, 4, __pyx_v_online);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_1);
+  __pyx_L1:;
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.remove");
+  __Pyx_WriteUnraisable("purple.__group_node_cb");
   __pyx_L0:;
+  Py_DECREF(__pyx_v_name);
+  Py_DECREF(__pyx_v_currentsize);
+  Py_DECREF(__pyx_v_totalsize);
+  Py_DECREF(__pyx_v_online);
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":157
- *             __other_node_cb(node, blist_cbs["remove"])
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":43
+ *     callback(node.type, name, totalsize, currentsize, online)
  * 
- * cdef void destroy(blist.PurpleBuddyList *list):             # <<<<<<<<<<<<<<
- *     """
- *     When the list gets destroyed, this gets called to destroy the UI.
+ * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
+ *     cdef blist.PurpleContact *contact = <blist.PurpleContact *>node
+ *     cdef char *c_alias = NULL
  */
 
-static  void __pyx_f_6purple_destroy(PurpleBuddyList *__pyx_v_list) {
-  PyObject *__pyx_1 = 0;
+static  void __pyx_f_6purple___contact_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
+  PurpleContact *__pyx_v_contact;
+  char *__pyx_v_c_alias;
+  PyObject *__pyx_v_alias;
+  int __pyx_1;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
-  int __pyx_4;
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  PyObject *__pyx_6 = 0;
+  __pyx_v_alias = Py_None; Py_INCREF(Py_None);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":161
- *     When the list gets destroyed, this gets called to destroy the UI.
- *     """
- *     debug.purple_debug_info("blist", "%s", "destroy\n")             # <<<<<<<<<<<<<<
- *     if blist_cbs.has_key("destroy"):
- *         (<object> blist_cbs["destroy"])("destroy: TODO")
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":44
+ * 
+ * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleContact *contact = <blist.PurpleContact *>node             # <<<<<<<<<<<<<<
+ *     cdef char *c_alias = NULL
+ * 
  */
-  purple_debug_info(__pyx_k_75, __pyx_k_76, __pyx_k_77);
+  __pyx_v_contact = ((PurpleContact *)__pyx_v_node);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":162
- *     """
- *     debug.purple_debug_info("blist", "%s", "destroy\n")
- *     if blist_cbs.has_key("destroy"):             # <<<<<<<<<<<<<<
- *         (<object> blist_cbs["destroy"])("destroy: TODO")
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":45
+ * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleContact *contact = <blist.PurpleContact *>node
+ *     cdef char *c_alias = NULL             # <<<<<<<<<<<<<<
  * 
+ *     c_alias = <char *> blist.purple_contact_get_alias(contact)
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_78);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_78);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  if (__pyx_4) {
+  __pyx_v_c_alias = NULL;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":163
- *     debug.purple_debug_info("blist", "%s", "destroy\n")
- *     if blist_cbs.has_key("destroy"):
- *         (<object> blist_cbs["destroy"])("destroy: TODO")             # <<<<<<<<<<<<<<
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":47
+ *     cdef char *c_alias = NULL
  * 
- * cdef void set_visible(blist.PurpleBuddyList *list, glib.gboolean show):
+ *     c_alias = <char *> blist.purple_contact_get_alias(contact)             # <<<<<<<<<<<<<<
+ *     if c_alias == NULL:
+ *         alias = None
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_79); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_kp_80);
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_80);
-    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    goto __pyx_L3;
+  __pyx_v_c_alias = ((char *)purple_contact_get_alias(__pyx_v_contact));
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":48
+ * 
+ *     c_alias = <char *> blist.purple_contact_get_alias(contact)
+ *     if c_alias == NULL:             # <<<<<<<<<<<<<<
+ *         alias = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_alias == NULL);
+  if (__pyx_1) {
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":49
+ *     c_alias = <char *> blist.purple_contact_get_alias(contact)
+ *     if c_alias == NULL:
+ *         alias = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         alias = c_alias
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = Py_None;
+    goto __pyx_L2;
   }
-  __pyx_L3:;
+  /*else*/ {
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":51
+ *         alias = None
+ *     else:
+ *         alias = c_alias             # <<<<<<<<<<<<<<
+ * 
+ *     callback(node.type, alias, contact.totalsize, contact.currentsize, \
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L2:;
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":53
+ *         alias = c_alias
+ * 
+ *     callback(node.type, alias, contact.totalsize, contact.currentsize, \             # <<<<<<<<<<<<<<
+ *              contact.online)
+ * 
+ */
+  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_3 = PyInt_FromLong(__pyx_v_contact->totalsize); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_4 = PyInt_FromLong(__pyx_v_contact->currentsize); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1;}
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":54
+ * 
+ *     callback(node.type, alias, contact.totalsize, contact.currentsize, \
+ *              contact.online)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):
+ */
+  __pyx_5 = PyInt_FromLong(__pyx_v_contact->online); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_6 = PyTuple_New(5); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  PyTuple_SET_ITEM(__pyx_6, 0, __pyx_2);
+  Py_INCREF(__pyx_v_alias);
+  PyTuple_SET_ITEM(__pyx_6, 1, __pyx_v_alias);
+  PyTuple_SET_ITEM(__pyx_6, 2, __pyx_3);
+  PyTuple_SET_ITEM(__pyx_6, 3, __pyx_4);
+  PyTuple_SET_ITEM(__pyx_6, 4, __pyx_5);
+  __pyx_2 = 0;
+  __pyx_3 = 0;
+  __pyx_4 = 0;
+  __pyx_5 = 0;
+  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_6), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(((PyObject *)__pyx_6)); __pyx_6 = 0;
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_1);
+  __pyx_L1:;
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.destroy");
+  Py_XDECREF(__pyx_4);
+  Py_XDECREF(__pyx_5);
+  Py_XDECREF(__pyx_6);
+  __Pyx_WriteUnraisable("purple.__contact_node_cb");
   __pyx_L0:;
+  Py_DECREF(__pyx_v_alias);
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":165
- *         (<object> blist_cbs["destroy"])("destroy: TODO")
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":56
+ *              contact.online)
  * 
- * cdef void set_visible(blist.PurpleBuddyList *list, glib.gboolean show):             # <<<<<<<<<<<<<<
- *     """
- *     Hides or unhides the buddy list.
+ * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
+ *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node
+ *     cdef char *c_name = NULL
  */
 
-static  void __pyx_f_6purple_set_visible(PurpleBuddyList *__pyx_v_list, gboolean __pyx_v_show) {
-  PyObject *__pyx_1 = 0;
+static  void __pyx_f_6purple___buddy_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
+  PurpleBuddy *__pyx_v_buddy;
+  char *__pyx_v_c_name;
+  char *__pyx_v_c_alias;
+  PyObject *__pyx_v_name;
+  PyObject *__pyx_v_alias;
+  int __pyx_1;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
-  int __pyx_4;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":169
- *     Hides or unhides the buddy list.
- *     """
- *     debug.purple_debug_info("blist", "%s", "set-visible\n")             # <<<<<<<<<<<<<<
- *     if blist_cbs.has_key("set-visible"):
- *         (<object> blist_cbs["set-visible"])("set-visible: TODO")
- */
-  purple_debug_info(__pyx_k_81, __pyx_k_82, __pyx_k_83);
+  __pyx_v_name = Py_None; Py_INCREF(Py_None);
+  __pyx_v_alias = Py_None; Py_INCREF(Py_None);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":170
- *     """
- *     debug.purple_debug_info("blist", "%s", "set-visible\n")
- *     if blist_cbs.has_key("set-visible"):             # <<<<<<<<<<<<<<
- *         (<object> blist_cbs["set-visible"])("set-visible: TODO")
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":57
  * 
+ * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node             # <<<<<<<<<<<<<<
+ *     cdef char *c_name = NULL
+ *     cdef char *c_alias = NULL
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_84);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_84);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  if (__pyx_4) {
+  __pyx_v_buddy = ((PurpleBuddy *)__pyx_v_node);
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":171
- *     debug.purple_debug_info("blist", "%s", "set-visible\n")
- *     if blist_cbs.has_key("set-visible"):
- *         (<object> blist_cbs["set-visible"])("set-visible: TODO")             # <<<<<<<<<<<<<<
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":58
+ * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node
+ *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
+ *     cdef char *c_alias = NULL
  * 
- * cdef void request_add_buddy(account.PurpleAccount *c_account, \
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_85); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_kp_86);
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_86);
-    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_v_c_name = NULL;
 
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_1);
-  Py_XDECREF(__pyx_2);
-  Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.set_visible");
-  __pyx_L0:;
-}
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":173
- *         (<object> blist_cbs["set-visible"])("set-visible: TODO")
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":59
+ *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node
+ *     cdef char *c_name = NULL
+ *     cdef char *c_alias = NULL             # <<<<<<<<<<<<<<
  * 
- * cdef void request_add_buddy(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
- *         const_char *c_buddy_username, const_char *c_buddy_group, \
- *         const_char *c_buddy_alias):
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)
  */
+  __pyx_v_c_alias = NULL;
 
-static  void __pyx_f_6purple_request_add_buddy(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_c_buddy_username, const char *__pyx_v_c_buddy_group, const char *__pyx_v_c_buddy_alias) {
-  PyObject *__pyx_v_username;
-  PyObject *__pyx_v_protocol_id;
-  PyObject *__pyx_v_buddy_username;
-  PyObject *__pyx_v_buddy_group;
-  PyObject *__pyx_v_buddy_alias;
-  PyObject *__pyx_1 = 0;
-  int __pyx_2;
-  PyObject *__pyx_3 = 0;
-  PyObject *__pyx_4 = 0;
-  __pyx_v_username = Py_None; Py_INCREF(Py_None);
-  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
-  __pyx_v_buddy_username = Py_None; Py_INCREF(Py_None);
-  __pyx_v_buddy_group = Py_None; Py_INCREF(Py_None);
-  __pyx_v_buddy_alias = Py_None; Py_INCREF(Py_None);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":180
- *     list.
- *     """
- *     debug.purple_debug_info("blist", "%s", "request-add-buddy\n")             # <<<<<<<<<<<<<<
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":61
+ *     cdef char *c_alias = NULL
  * 
- *     username = account.purple_account_get_username(c_account)
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)             # <<<<<<<<<<<<<<
+ *     if c_name == NULL:
+ *         name = None
  */
-  purple_debug_info(__pyx_k_87, __pyx_k_88, __pyx_k_89);
+  __pyx_v_c_name = ((char *)purple_buddy_get_name(__pyx_v_buddy));
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":182
- *     debug.purple_debug_info("blist", "%s", "request-add-buddy\n")
- * 
- *     username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
- *     protocol_id = account.purple_account_get_protocol_id(c_account)
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":62
  * 
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)
+ *     if c_name == NULL:             # <<<<<<<<<<<<<<
+ *         name = None
+ *     else:
  */
-  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_v_username);
-  __pyx_v_username = __pyx_1;
-  __pyx_1 = 0;
+  __pyx_1 = (__pyx_v_c_name == NULL);
+  if (__pyx_1) {
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":63
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)
+ *     if c_name == NULL:
+ *         name = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         name = c_name
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = Py_None;
+    goto __pyx_L2;
+  }
+  /*else*/ {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":183
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":65
+ *         name = None
+ *     else:
+ *         name = c_name             # <<<<<<<<<<<<<<
  * 
- *     username = account.purple_account_get_username(c_account)
- *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L2:;
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":67
+ *         name = c_name
  * 
- *     if c_buddy_username:
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)             # <<<<<<<<<<<<<<
+ *     if c_alias == NULL:
+ *         alias = None
  */
-  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_v_protocol_id);
-  __pyx_v_protocol_id = __pyx_1;
-  __pyx_1 = 0;
+  __pyx_v_c_alias = ((char *)purple_buddy_get_alias_only(__pyx_v_buddy));
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":185
- *     protocol_id = account.purple_account_get_protocol_id(c_account)
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":68
  * 
- *     if c_buddy_username:             # <<<<<<<<<<<<<<
- *         buddy_username = <char *> c_buddy_username
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ *     if c_alias == NULL:             # <<<<<<<<<<<<<<
+ *         alias = None
  *     else:
  */
-  __pyx_2 = (__pyx_v_c_buddy_username != 0);
-  if (__pyx_2) {
+  __pyx_1 = (__pyx_v_c_alias == NULL);
+  if (__pyx_1) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":186
- * 
- *     if c_buddy_username:
- *         buddy_username = <char *> c_buddy_username             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":69
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ *     if c_alias == NULL:
+ *         alias = None             # <<<<<<<<<<<<<<
  *     else:
- *         buddy_username = None
+ *         alias = c_alias
  */
-    __pyx_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_buddy_username)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_buddy_username);
-    __pyx_v_buddy_username = __pyx_1;
-    __pyx_1 = 0;
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = Py_None;
     goto __pyx_L3;
   }
   /*else*/ {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":188
- *         buddy_username = <char *> c_buddy_username
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":71
+ *         alias = None
  *     else:
- *         buddy_username = None             # <<<<<<<<<<<<<<
+ *         alias = c_alias             # <<<<<<<<<<<<<<
  * 
- *     if c_buddy_group:
+ *     callback(node.type, name, alias)
  */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_buddy_username);
-    __pyx_v_buddy_username = Py_None;
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = __pyx_2;
+    __pyx_2 = 0;
   }
   __pyx_L3:;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":190
- *         buddy_username = None
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":73
+ *         alias = c_alias
  * 
- *     if c_buddy_group:             # <<<<<<<<<<<<<<
- *         buddy_group = <char *> c_buddy_group
- *     else:
+ *     callback(node.type, name, alias)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):
  */
-  __pyx_2 = (__pyx_v_c_buddy_group != 0);
-  if (__pyx_2) {
+  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_3 = PyTuple_New(3); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
+  Py_INCREF(__pyx_v_name);
+  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_name);
+  Py_INCREF(__pyx_v_alias);
+  PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_alias);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  goto __pyx_L0;
+  __pyx_L1:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.__buddy_node_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_name);
+  Py_DECREF(__pyx_v_alias);
+}
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":191
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":75
+ *     callback(node.type, name, alias)
  * 
- *     if c_buddy_group:
- *         buddy_group = <char *> c_buddy_group             # <<<<<<<<<<<<<<
- *     else:
- *         buddy_group = None
+ * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
+ *     cdef blist.PurpleChat *chat = <blist.PurpleChat *>node
+ *     cdef char *c_name = NULL
  */
-    __pyx_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_buddy_group)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_buddy_group);
-    __pyx_v_buddy_group = __pyx_1;
-    __pyx_1 = 0;
-    goto __pyx_L4;
-  }
-  /*else*/ {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":193
- *         buddy_group = <char *> c_buddy_group
- *     else:
- *         buddy_group = None             # <<<<<<<<<<<<<<
+static  void __pyx_f_6purple___chat_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
+  PurpleChat *__pyx_v_chat;
+  char *__pyx_v_c_name;
+  PyObject *__pyx_v_name;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  __pyx_v_name = Py_None; Py_INCREF(Py_None);
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":76
+ * 
+ * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleChat *chat = <blist.PurpleChat *>node             # <<<<<<<<<<<<<<
+ *     cdef char *c_name = NULL
  * 
- *     if c_buddy_alias:
  */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_buddy_group);
-    __pyx_v_buddy_group = Py_None;
-  }
-  __pyx_L4:;
+  __pyx_v_chat = ((PurpleChat *)__pyx_v_node);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":195
- *         buddy_group = None
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":77
+ * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleChat *chat = <blist.PurpleChat *>node
+ *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
  * 
- *     if c_buddy_alias:             # <<<<<<<<<<<<<<
- *         buddy_alias = <char *> c_buddy_alias
- *     else:
+ *     c_name = <char *> blist.purple_chat_get_name(chat)
  */
-  __pyx_2 = (__pyx_v_c_buddy_alias != 0);
-  if (__pyx_2) {
+  __pyx_v_c_name = NULL;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":196
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":79
+ *     cdef char *c_name = NULL
  * 
- *     if c_buddy_alias:
- *         buddy_alias = <char *> c_buddy_alias             # <<<<<<<<<<<<<<
+ *     c_name = <char *> blist.purple_chat_get_name(chat)             # <<<<<<<<<<<<<<
+ *     if c_name == NULL:
+ *         name = None
+ */
+  __pyx_v_c_name = ((char *)purple_chat_get_name(__pyx_v_chat));
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":80
+ * 
+ *     c_name = <char *> blist.purple_chat_get_name(chat)
+ *     if c_name == NULL:             # <<<<<<<<<<<<<<
+ *         name = None
  *     else:
- *         buddy_alias = None
  */
-    __pyx_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_buddy_alias)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_buddy_alias);
-    __pyx_v_buddy_alias = __pyx_1;
-    __pyx_1 = 0;
-    goto __pyx_L5;
-  }
-  /*else*/ {
+  __pyx_1 = (__pyx_v_c_name == NULL);
+  if (__pyx_1) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":198
- *         buddy_alias = <char *> c_buddy_alias
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":81
+ *     c_name = <char *> blist.purple_chat_get_name(chat)
+ *     if c_name == NULL:
+ *         name = None             # <<<<<<<<<<<<<<
  *     else:
- *         buddy_alias = None             # <<<<<<<<<<<<<<
- * 
- *     if blist_cbs.has_key("request-add-buddy"):
+ *         name = c_name
  */
     Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_buddy_alias);
-    __pyx_v_buddy_alias = Py_None;
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = Py_None;
+    goto __pyx_L2;
   }
-  __pyx_L5:;
+  /*else*/ {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":200
- *         buddy_alias = None
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":83
+ *         name = None
+ *     else:
+ *         name = c_name             # <<<<<<<<<<<<<<
  * 
- *     if blist_cbs.has_key("request-add-buddy"):             # <<<<<<<<<<<<<<
- *         (<object> blist_cbs["request-add-buddy"])( \
- *                 (username, protocol_id), \
+ *     callback(node.type, name)
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_90);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_90);
-  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_2 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_2 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_4); __pyx_4 = 0;
-  if (__pyx_2) {
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L2:;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":201
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":85
+ *         name = c_name
  * 
- *     if blist_cbs.has_key("request-add-buddy"):
- *         (<object> blist_cbs["request-add-buddy"])( \             # <<<<<<<<<<<<<<
- *                 (username, protocol_id), \
- *                 buddy_username, buddy_group, buddy_alias)
+ *     callback(node.type, name)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void __other_node_cb(blist.PurpleBlistNode *node, object callback):
  */
-    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_3, __pyx_kp_91); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
+  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
+  Py_INCREF(__pyx_v_name);
+  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_name);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":202
- *     if blist_cbs.has_key("request-add-buddy"):
- *         (<object> blist_cbs["request-add-buddy"])( \
- *                 (username, protocol_id), \             # <<<<<<<<<<<<<<
- *                 buddy_username, buddy_group, buddy_alias)
+  goto __pyx_L0;
+  __pyx_L1:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.__chat_node_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_name);
+}
+
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":87
+ *     callback(node.type, name)
  * 
- */
-    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_v_username);
-    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
-    Py_INCREF(__pyx_v_protocol_id);
-    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+ * cdef void __other_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
+ *     callback(node.type)
+ * 
+ */
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":203
- *         (<object> blist_cbs["request-add-buddy"])( \
- *                 (username, protocol_id), \
- *                 buddy_username, buddy_group, buddy_alias)             # <<<<<<<<<<<<<<
+static  void __pyx_f_6purple___other_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":88
  * 
- * cdef void request_add_chat(account.PurpleAccount *acc, \
+ * cdef void __other_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     callback(node.type)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void new_list(blist.PurpleBuddyList *list):
  */
-    __pyx_3 = PyTuple_New(4); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_3, 0, ((PyObject *)__pyx_4));
-    Py_INCREF(__pyx_v_buddy_username);
-    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_buddy_username);
-    Py_INCREF(__pyx_v_buddy_group);
-    PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_buddy_group);
-    Py_INCREF(__pyx_v_buddy_alias);
-    PyTuple_SET_ITEM(__pyx_3, 3, __pyx_v_buddy_alias);
-    __pyx_4 = 0;
-    __pyx_4 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-    Py_DECREF(__pyx_4); __pyx_4 = 0;
-    goto __pyx_L6;
-  }
-  __pyx_L6:;
+  __pyx_1 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
+  __pyx_L1:;
   Py_XDECREF(__pyx_1);
-  Py_XDECREF(__pyx_3);
-  Py_XDECREF(__pyx_4);
-  __Pyx_WriteUnraisable("purple.request_add_buddy");
+  Py_XDECREF(__pyx_2);
+  __Pyx_WriteUnraisable("purple.__other_node_cb");
   __pyx_L0:;
-  Py_DECREF(__pyx_v_username);
-  Py_DECREF(__pyx_v_protocol_id);
-  Py_DECREF(__pyx_v_buddy_username);
-  Py_DECREF(__pyx_v_buddy_group);
-  Py_DECREF(__pyx_v_buddy_alias);
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":205
- *                 buddy_username, buddy_group, buddy_alias)
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":90
+ *     callback(node.type)
  * 
- * cdef void request_add_chat(account.PurpleAccount *acc, \             # <<<<<<<<<<<<<<
- *         blist.PurpleGroup *group, const_char *alias, const_char *name):
+ * cdef void new_list(blist.PurpleBuddyList *list):             # <<<<<<<<<<<<<<
  *     """
+ *     Sets UI-specific data on a buddy list.
  */
 
-static  void __pyx_f_6purple_request_add_chat(PurpleAccount *__pyx_v_acc, PurpleGroup *__pyx_v_group, const char *__pyx_v_alias, const char *__pyx_v_name) {
+static PyObject *__pyx_kp_39;
+static PyObject *__pyx_kp_40;
+static PyObject *__pyx_kp_41;
+
+static char __pyx_k_36[] = "blist";
+static char __pyx_k_37[] = "%s";
+static char __pyx_k_38[] = "new-list\n";
+static char __pyx_k_39[] = "new-list";
+static char __pyx_k_40[] = "new-list";
+static char __pyx_k_41[] = "new-list: TODO";
+
+static  void __pyx_f_6purple_new_list(PurpleBuddyList *__pyx_v_list) {
   PyObject *__pyx_1 = 0;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
   int __pyx_4;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":210
- *     TODO
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":94
+ *     Sets UI-specific data on a buddy list.
  *     """
- *     debug.purple_debug_info("blist", "%s", "request-add-chat\n")             # <<<<<<<<<<<<<<
- *     if blist_cbs.has_key("request-add-chat"):
- *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")
+ *     debug.purple_debug_info("blist", "%s", "new-list\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("new-list"):
+ *         (<object> blist_cbs["new-list"])("new-list: TODO")
  */
-  purple_debug_info(__pyx_k_92, __pyx_k_93, __pyx_k_94);
+  purple_debug_info(__pyx_k_36, __pyx_k_37, __pyx_k_38);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":211
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":95
  *     """
- *     debug.purple_debug_info("blist", "%s", "request-add-chat\n")
- *     if blist_cbs.has_key("request-add-chat"):             # <<<<<<<<<<<<<<
- *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")
+ *     debug.purple_debug_info("blist", "%s", "new-list\n")
+ *     if blist_cbs.has_key("new-list"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["new-list"])("new-list: TODO")
  * 
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_95);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_95);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_39);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_39);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
   if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":212
- *     debug.purple_debug_info("blist", "%s", "request-add-chat\n")
- *     if blist_cbs.has_key("request-add-chat"):
- *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":96
+ *     debug.purple_debug_info("blist", "%s", "new-list\n")
+ *     if blist_cbs.has_key("new-list"):
+ *         (<object> blist_cbs["new-list"])("new-list: TODO")             # <<<<<<<<<<<<<<
  * 
- * cdef void request_add_group():
+ * cdef void new_node(blist.PurpleBlistNode *node):
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_96); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_40); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1;}
     Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_kp_97);
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_97);
-    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_INCREF(__pyx_kp_41);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_41);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1;}
     Py_DECREF(__pyx_1); __pyx_1 = 0;
     Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
     Py_DECREF(__pyx_2); __pyx_2 = 0;
-    goto __pyx_L3;
+    goto __pyx_L2;
   }
-  __pyx_L3:;
+  __pyx_L2:;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
+  __pyx_L1:;
   Py_XDECREF(__pyx_1);
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.request_add_chat");
+  __Pyx_WriteUnraisable("purple.new_list");
   __pyx_L0:;
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":214
- *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":98
+ *         (<object> blist_cbs["new-list"])("new-list: TODO")
  * 
- * cdef void request_add_group():             # <<<<<<<<<<<<<<
+ * cdef void new_node(blist.PurpleBlistNode *node):             # <<<<<<<<<<<<<<
  *     """
- *     TODO
+ *     Sets UI-specific data on a node.
  */
 
-static  void __pyx_f_6purple_request_add_group(void) {
+static PyObject *__pyx_kp_45;
+static PyObject *__pyx_kp_46;
+static PyObject *__pyx_kp_47;
+static PyObject *__pyx_kp_48;
+static PyObject *__pyx_kp_49;
+static PyObject *__pyx_kp_50;
+
+static char __pyx_k_42[] = "blist";
+static char __pyx_k_43[] = "%s";
+static char __pyx_k_44[] = "new-node\n";
+static char __pyx_k_45[] = "new-node";
+static char __pyx_k_46[] = "new-node";
+static char __pyx_k_47[] = "new-node";
+static char __pyx_k_48[] = "new-node";
+static char __pyx_k_49[] = "new-node";
+static char __pyx_k_50[] = "new-node";
+
+static  void __pyx_f_6purple_new_node(PurpleBlistNode *__pyx_v_node) {
   PyObject *__pyx_1 = 0;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
   int __pyx_4;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":218
- *     TODO
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":102
+ *     Sets UI-specific data on a node.
  *     """
- *     debug.purple_debug_info("blist", "%s", "request-add-group\n")             # <<<<<<<<<<<<<<
- *     if blist_cbs.has_key("request-add-chat"):
- *         (<object>blist_cbs["request-add-chat"])("request-add-group: TODO")
+ *     debug.purple_debug_info("blist", "%s", "new-node\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("new-node"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
  */
-  purple_debug_info(__pyx_k_98, __pyx_k_99, __pyx_k_100);
+  purple_debug_info(__pyx_k_42, __pyx_k_43, __pyx_k_44);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":219
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":103
  *     """
- *     debug.purple_debug_info("blist", "%s", "request-add-group\n")
- *     if blist_cbs.has_key("request-add-chat"):             # <<<<<<<<<<<<<<
- *         (<object>blist_cbs["request-add-chat"])("request-add-group: TODO")
+ *     debug.purple_debug_info("blist", "%s", "new-node\n")
+ *     if blist_cbs.has_key("new-node"):             # <<<<<<<<<<<<<<
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["new-node"])
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_101);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_101);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_45);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_45);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
   if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":220
- *     debug.purple_debug_info("blist", "%s", "request-add-group\n")
- *     if blist_cbs.has_key("request-add-chat"):
- *         (<object>blist_cbs["request-add-chat"])("request-add-group: TODO")             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":104
+ *     debug.purple_debug_info("blist", "%s", "new-node\n")
+ *     if blist_cbs.has_key("new-node"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:             # <<<<<<<<<<<<<<
+ *             __group_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_102); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_kp_103);
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_103);
-    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_GROUP_NODE);
+    if (__pyx_4) {
 
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_1);
-  Py_XDECREF(__pyx_2);
-  Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.request_add_group");
-  __pyx_L0:;
-}
+      /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":105
+ *     if blist_cbs.has_key("new-node"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["new-node"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_46); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___group_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L3;
+    }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":30
- *     ctypedef int size_t
- * 
- * cdef void connect_progress(connection.PurpleConnection *gc, const_char *text, \             # <<<<<<<<<<<<<<
- *         size_t step, size_t step_count):
- *     """
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":106
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:             # <<<<<<<<<<<<<<
+ *             __contact_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
  */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CONTACT_NODE);
+    if (__pyx_4) {
 
-static  void __pyx_f_6purple_connect_progress(PurpleConnection *__pyx_v_gc, const char *__pyx_v_text, size_t __pyx_v_step, size_t __pyx_v_step_count) {
-  PyObject *__pyx_1 = 0;
-  PyObject *__pyx_2 = 0;
-  PyObject *__pyx_3 = 0;
-  int __pyx_4;
-  PyObject *__pyx_5 = 0;
-  PyObject *__pyx_6 = 0;
+      /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":107
+ *             __group_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["new-node"])
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_47); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___contact_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L3;
+    }
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":37
- *     reached (which might be displayed as a progress bar).
- *     """
- *     debug.purple_debug_info("connection", "%s", "connect-progress\n")             # <<<<<<<<<<<<<<
- *     if connection_cbs.has_key("connect-progress"):
- *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":108
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:             # <<<<<<<<<<<<<<
+ *             __buddy_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
  */
-  purple_debug_info(__pyx_k_104, __pyx_k_105, __pyx_k_106);
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_BUDDY_NODE);
+    if (__pyx_4) {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":38
- *     """
- *     debug.purple_debug_info("connection", "%s", "connect-progress\n")
- *     if connection_cbs.has_key("connect-progress"):             # <<<<<<<<<<<<<<
- *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)
+      /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":109
+ *             __contact_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["new-node"])
+ */
+      __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      __pyx_3 = PyObject_GetItem(__pyx_1, __pyx_kp_48); if (!__pyx_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      __pyx_f_6purple___buddy_node_cb(__pyx_v_node, __pyx_3);
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      goto __pyx_L3;
+    }
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":110
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:             # <<<<<<<<<<<<<<
+ *             __chat_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CHAT_NODE);
+    if (__pyx_4) {
+
+      /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":111
+ *             __buddy_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["new-node"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_49); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___chat_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L3;
+    }
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":112
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:             # <<<<<<<<<<<<<<
+ *             __other_node_cb(node, blist_cbs["new-node"])
  * 
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_107);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_107);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  if (__pyx_4) {
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_OTHER_NODE);
+    if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":39
- *     debug.purple_debug_info("connection", "%s", "connect-progress\n")
- *     if connection_cbs.has_key("connect-progress"):
- *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)             # <<<<<<<<<<<<<<
+      /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":113
+ *             __chat_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
  * 
- * cdef void connected(connection.PurpleConnection *gc):
+ * cdef void show(blist.PurpleBuddyList *list):
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_108); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = __Pyx_PyBytes_FromString(((char *)__pyx_v_text)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_2 = PyInt_FromLong(__pyx_v_step); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_5 = PyInt_FromLong(__pyx_v_step_count); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_6 = PyTuple_New(3); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_6, 0, __pyx_3);
-    PyTuple_SET_ITEM(__pyx_6, 1, __pyx_2);
-    PyTuple_SET_ITEM(__pyx_6, 2, __pyx_5);
-    __pyx_3 = 0;
-    __pyx_2 = 0;
-    __pyx_5 = 0;
-    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_6), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    Py_DECREF(((PyObject *)__pyx_6)); __pyx_6 = 0;
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-    goto __pyx_L3;
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_50); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___other_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L3;
+    }
+    __pyx_L3:;
+    goto __pyx_L2;
   }
-  __pyx_L3:;
+  __pyx_L2:;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
+  __pyx_L1:;
   Py_XDECREF(__pyx_1);
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  Py_XDECREF(__pyx_5);
-  Py_XDECREF(__pyx_6);
-  __Pyx_WriteUnraisable("purple.connect_progress");
+  __Pyx_WriteUnraisable("purple.new_node");
   __pyx_L0:;
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":41
- *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":115
+ *             __other_node_cb(node, blist_cbs["new-node"])
  * 
- * cdef void connected(connection.PurpleConnection *gc):             # <<<<<<<<<<<<<<
+ * cdef void show(blist.PurpleBuddyList *list):             # <<<<<<<<<<<<<<
  *     """
- *     Called when a connection is established (just before the signed-on signal).
+ *     The core will call this when it's finished doing its core stuff.
  */
 
-static  void __pyx_f_6purple_connected(PurpleConnection *__pyx_v_gc) {
+static char __pyx_k_54[] = "show";
+static char __pyx_k_55[] = "show";
+
+static PyObject *__pyx_kp_54;
+static PyObject *__pyx_kp_55;
+
+static PyObject *__pyx_kp_56;
+
+static char __pyx_k_51[] = "blist";
+static char __pyx_k_52[] = "%s";
+static char __pyx_k_53[] = "show\n";
+static char __pyx_k_56[] = "show: TODO";
+
+static  void __pyx_f_6purple_show(PurpleBuddyList *__pyx_v_list) {
   PyObject *__pyx_1 = 0;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
   int __pyx_4;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":45
- *     Called when a connection is established (just before the signed-on signal).
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":119
+ *     The core will call this when it's finished doing its core stuff.
  *     """
- *     debug.purple_debug_info("connection", "%s", "connected\n")             # <<<<<<<<<<<<<<
- *     if connection_cbs.has_key("connected"):
- *         (<object> connection_cbs["connected"])("connected: TODO")
+ *     debug.purple_debug_info("blist", "%s", "show\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("show"):
+ *         (<object> blist_cbs["show"])("show: TODO")
  */
-  purple_debug_info(__pyx_k_109, __pyx_k_110, __pyx_k_111);
+  purple_debug_info(__pyx_k_51, __pyx_k_52, __pyx_k_53);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":46
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":120
  *     """
- *     debug.purple_debug_info("connection", "%s", "connected\n")
- *     if connection_cbs.has_key("connected"):             # <<<<<<<<<<<<<<
- *         (<object> connection_cbs["connected"])("connected: TODO")
+ *     debug.purple_debug_info("blist", "%s", "show\n")
+ *     if blist_cbs.has_key("show"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["show"])("show: TODO")
  * 
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_112);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_112);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_54);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_54);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
   if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":47
- *     debug.purple_debug_info("connection", "%s", "connected\n")
- *     if connection_cbs.has_key("connected"):
- *         (<object> connection_cbs["connected"])("connected: TODO")             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":121
+ *     debug.purple_debug_info("blist", "%s", "show\n")
+ *     if blist_cbs.has_key("show"):
+ *         (<object> blist_cbs["show"])("show: TODO")             # <<<<<<<<<<<<<<
  * 
- * cdef void disconnected(connection.PurpleConnection *gc):
+ * cdef void update(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_113); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_55); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1;}
     Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_kp_114);
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_114);
-    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_INCREF(__pyx_kp_56);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_56);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1;}
     Py_DECREF(__pyx_1); __pyx_1 = 0;
     Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
     Py_DECREF(__pyx_2); __pyx_2 = 0;
-    goto __pyx_L3;
+    goto __pyx_L2;
   }
-  __pyx_L3:;
+  __pyx_L2:;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
+  __pyx_L1:;
   Py_XDECREF(__pyx_1);
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.connected");
+  __Pyx_WriteUnraisable("purple.show");
   __pyx_L0:;
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":49
- *         (<object> connection_cbs["connected"])("connected: TODO")
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":123
+ *         (<object> blist_cbs["show"])("show: TODO")
  * 
- * cdef void disconnected(connection.PurpleConnection *gc):             # <<<<<<<<<<<<<<
+ * cdef void update(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):             # <<<<<<<<<<<<<<
  *     """
- *     Called when a connection is ended (between the signing-off and signed-off
+ *     This will update a node in the buddy list.
  */
 
-static  void __pyx_f_6purple_disconnected(PurpleConnection *__pyx_v_gc) {
+static char __pyx_k_60[] = "update";
+static char __pyx_k_61[] = "update";
+static char __pyx_k_62[] = "update";
+static char __pyx_k_63[] = "update";
+static char __pyx_k_64[] = "update";
+static char __pyx_k_65[] = "update";
+
+static PyObject *__pyx_kp_60;
+static PyObject *__pyx_kp_61;
+static PyObject *__pyx_kp_62;
+static PyObject *__pyx_kp_63;
+static PyObject *__pyx_kp_64;
+static PyObject *__pyx_kp_65;
+
+
+static char __pyx_k_57[] = "blist";
+static char __pyx_k_58[] = "%s";
+static char __pyx_k_59[] = "update\n";
+
+static  void __pyx_f_6purple_update(PurpleBuddyList *__pyx_v_list, PurpleBlistNode *__pyx_v_node) {
   PyObject *__pyx_1 = 0;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
   int __pyx_4;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":54
- *     signal).
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":127
+ *     This will update a node in the buddy list.
  *     """
- *     debug.purple_debug_info("connection", "%s", "disconnected\n")             # <<<<<<<<<<<<<<
- *     if connection_cbs.has_key("disconnected"):
- *         (<object> connection_cbs["disconnected"])("disconnected: TODO")
+ *     debug.purple_debug_info("blist", "%s", "update\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("update"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
  */
-  purple_debug_info(__pyx_k_115, __pyx_k_116, __pyx_k_117);
+  purple_debug_info(__pyx_k_57, __pyx_k_58, __pyx_k_59);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":55
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":128
  *     """
- *     debug.purple_debug_info("connection", "%s", "disconnected\n")
- *     if connection_cbs.has_key("disconnected"):             # <<<<<<<<<<<<<<
- *         (<object> connection_cbs["disconnected"])("disconnected: TODO")
- * 
+ *     debug.purple_debug_info("blist", "%s", "update\n")
+ *     if blist_cbs.has_key("update"):             # <<<<<<<<<<<<<<
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["update"])
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_118);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_118);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_60);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_60);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
   if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":56
- *     debug.purple_debug_info("connection", "%s", "disconnected\n")
- *     if connection_cbs.has_key("disconnected"):
- *         (<object> connection_cbs["disconnected"])("disconnected: TODO")             # <<<<<<<<<<<<<<
- * 
- * cdef void notice(connection.PurpleConnection *gc, const_char *text):
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":129
+ *     debug.purple_debug_info("blist", "%s", "update\n")
+ *     if blist_cbs.has_key("update"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:             # <<<<<<<<<<<<<<
+ *             __group_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_119); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_kp_120);
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_120);
-    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_GROUP_NODE);
+    if (__pyx_4) {
 
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  Py_XDECREF(__pyx_1);
-  Py_XDECREF(__pyx_2);
-  Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.disconnected");
-  __pyx_L0:;
-}
+      /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":130
+ *     if blist_cbs.has_key("update"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["update"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_61); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___group_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L3;
+    }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":58
- *         (<object> connection_cbs["disconnected"])("disconnected: TODO")
- * 
- * cdef void notice(connection.PurpleConnection *gc, const_char *text):             # <<<<<<<<<<<<<<
- *     """
- *     Used to display connection-specific notices. (Pidgin's Gtk user interface
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":131
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:             # <<<<<<<<<<<<<<
+ *             __contact_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
  */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CONTACT_NODE);
+    if (__pyx_4) {
 
-static  void __pyx_f_6purple_notice(PurpleConnection *__pyx_v_gc, const char *__pyx_v_text) {
-  PyObject *__pyx_1 = 0;
-  PyObject *__pyx_2 = 0;
-  PyObject *__pyx_3 = 0;
-  int __pyx_4;
+      /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":132
+ *             __group_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["update"])
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_62); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___contact_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L3;
+    }
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":64
- *     operation, is not used by any of the protocols shipped with libpurple.)
- *     """
- *     debug.purple_debug_info("connection", "%s", "notice\n")             # <<<<<<<<<<<<<<
- *     if connection_cbs.has_key("notice"):
- *         (<object> connection_cbs["notice"])("notice: TODO")
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":133
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:             # <<<<<<<<<<<<<<
+ *             __buddy_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
  */
-  purple_debug_info(__pyx_k_121, __pyx_k_122, __pyx_k_123);
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_BUDDY_NODE);
+    if (__pyx_4) {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":65
- *     """
- *     debug.purple_debug_info("connection", "%s", "notice\n")
- *     if connection_cbs.has_key("notice"):             # <<<<<<<<<<<<<<
- *         (<object> connection_cbs["notice"])("notice: TODO")
+      /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":134
+ *             __contact_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["update"])
+ */
+      __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      __pyx_3 = PyObject_GetItem(__pyx_1, __pyx_kp_63); if (!__pyx_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      __pyx_f_6purple___buddy_node_cb(__pyx_v_node, __pyx_3);
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      goto __pyx_L3;
+    }
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":135
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:             # <<<<<<<<<<<<<<
+ *             __chat_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CHAT_NODE);
+    if (__pyx_4) {
+
+      /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":136
+ *             __buddy_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["update"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_64); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___chat_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L3;
+    }
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":137
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:             # <<<<<<<<<<<<<<
+ *             __other_node_cb(node, blist_cbs["update"])
  * 
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_124);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_124);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  if (__pyx_4) {
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_OTHER_NODE);
+    if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":66
- *     debug.purple_debug_info("connection", "%s", "notice\n")
- *     if connection_cbs.has_key("notice"):
- *         (<object> connection_cbs["notice"])("notice: TODO")             # <<<<<<<<<<<<<<
+      /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":138
+ *             __chat_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
  * 
- * cdef void report_disconnect(connection.PurpleConnection *gc, const_char *text):
+ * cdef void remove(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_125); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_kp_126);
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_126);
-    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    goto __pyx_L3;
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_65); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___other_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L3;
+    }
+    __pyx_L3:;
+    goto __pyx_L2;
   }
-  __pyx_L3:;
+  __pyx_L2:;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
+  __pyx_L1:;
   Py_XDECREF(__pyx_1);
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.notice");
+  __Pyx_WriteUnraisable("purple.update");
   __pyx_L0:;
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":68
- *         (<object> connection_cbs["notice"])("notice: TODO")
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":140
+ *             __other_node_cb(node, blist_cbs["update"])
  * 
- * cdef void report_disconnect(connection.PurpleConnection *gc, const_char *text):             # <<<<<<<<<<<<<<
+ * cdef void remove(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):             # <<<<<<<<<<<<<<
  *     """
- *     Called when an error causes a connection to be disconnected.
+ *     This removes a node from the list.
  */
 
-static  void __pyx_f_6purple_report_disconnect(PurpleConnection *__pyx_v_gc, const char *__pyx_v_text) {
+static char __pyx_k_69[] = "remove";
+static char __pyx_k_70[] = "remove";
+static char __pyx_k_71[] = "remove";
+static char __pyx_k_72[] = "remove";
+static char __pyx_k_73[] = "remove";
+static char __pyx_k_74[] = "remove";
+
+static PyObject *__pyx_kp_69;
+static PyObject *__pyx_kp_70;
+static PyObject *__pyx_kp_71;
+static PyObject *__pyx_kp_72;
+static PyObject *__pyx_kp_73;
+static PyObject *__pyx_kp_74;
+
+
+static char __pyx_k_66[] = "blist";
+static char __pyx_k_67[] = "%s";
+static char __pyx_k_68[] = "remove\n";
+
+static  void __pyx_f_6purple_remove(PurpleBuddyList *__pyx_v_list, PurpleBlistNode *__pyx_v_node) {
   PyObject *__pyx_1 = 0;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
   int __pyx_4;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":77
- *                 PurpleConnectionUiOps.report_disconnect_reason.
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":144
+ *     This removes a node from the list.
  *     """
- *     debug.purple_debug_info("connection", "%s", "report-disconnect\n")             # <<<<<<<<<<<<<<
- *     if connection_cbs.has_key("report-disconnect"):
- *         (<object> connection_cbs["report-disconnect"])(<char *> text)
+ *     debug.purple_debug_info("blist", "%s", "remove\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("remove"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
  */
-  purple_debug_info(__pyx_k_127, __pyx_k_128, __pyx_k_129);
+  purple_debug_info(__pyx_k_66, __pyx_k_67, __pyx_k_68);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":78
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":145
  *     """
- *     debug.purple_debug_info("connection", "%s", "report-disconnect\n")
- *     if connection_cbs.has_key("report-disconnect"):             # <<<<<<<<<<<<<<
- *         (<object> connection_cbs["report-disconnect"])(<char *> text)
- * 
+ *     debug.purple_debug_info("blist", "%s", "remove\n")
+ *     if blist_cbs.has_key("remove"):             # <<<<<<<<<<<<<<
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["remove"])
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_130);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_130);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_69);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_69);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
   if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":79
- *     debug.purple_debug_info("connection", "%s", "report-disconnect\n")
- *     if connection_cbs.has_key("report-disconnect"):
- *         (<object> connection_cbs["report-disconnect"])(<char *> text)             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":146
+ *     debug.purple_debug_info("blist", "%s", "remove\n")
+ *     if blist_cbs.has_key("remove"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:             # <<<<<<<<<<<<<<
+ *             __group_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_GROUP_NODE);
+    if (__pyx_4) {
+
+      /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":147
+ *     if blist_cbs.has_key("remove"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["remove"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_70); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___group_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L3;
+    }
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":148
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:             # <<<<<<<<<<<<<<
+ *             __contact_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CONTACT_NODE);
+    if (__pyx_4) {
+
+      /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":149
+ *             __group_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["remove"])
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_71); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___contact_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L3;
+    }
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":150
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:             # <<<<<<<<<<<<<<
+ *             __buddy_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_BUDDY_NODE);
+    if (__pyx_4) {
+
+      /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":151
+ *             __contact_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["remove"])
+ */
+      __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      __pyx_3 = PyObject_GetItem(__pyx_1, __pyx_kp_72); if (!__pyx_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      __pyx_f_6purple___buddy_node_cb(__pyx_v_node, __pyx_3);
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      goto __pyx_L3;
+    }
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":152
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:             # <<<<<<<<<<<<<<
+ *             __chat_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CHAT_NODE);
+    if (__pyx_4) {
+
+      /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":153
+ *             __buddy_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["remove"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_73); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___chat_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L3;
+    }
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":154
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:             # <<<<<<<<<<<<<<
+ *             __other_node_cb(node, blist_cbs["remove"])
  * 
- * cdef void network_connected():
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_131); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = __Pyx_PyBytes_FromString(((char *)__pyx_v_text)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3);
-    __pyx_3 = 0;
-    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-    goto __pyx_L3;
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_OTHER_NODE);
+    if (__pyx_4) {
+
+      /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":155
+ *             __chat_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+ * 
+ * cdef void destroy(blist.PurpleBuddyList *list):
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_74); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___other_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L3;
+    }
+    __pyx_L3:;
+    goto __pyx_L2;
   }
-  __pyx_L3:;
+  __pyx_L2:;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
+  __pyx_L1:;
   Py_XDECREF(__pyx_1);
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.report_disconnect");
+  __Pyx_WriteUnraisable("purple.remove");
   __pyx_L0:;
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":81
- *         (<object> connection_cbs["report-disconnect"])(<char *> text)
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":157
+ *             __other_node_cb(node, blist_cbs["remove"])
  * 
- * cdef void network_connected():             # <<<<<<<<<<<<<<
+ * cdef void destroy(blist.PurpleBuddyList *list):             # <<<<<<<<<<<<<<
  *     """
- *     Called when libpurple discovers that the computer's network connection
+ *     When the list gets destroyed, this gets called to destroy the UI.
  */
 
-static  void __pyx_f_6purple_network_connected(void) {
+static char __pyx_k_78[] = "destroy";
+static char __pyx_k_79[] = "destroy";
+
+static PyObject *__pyx_kp_78;
+static PyObject *__pyx_kp_79;
+
+static PyObject *__pyx_kp_80;
+
+static char __pyx_k_75[] = "blist";
+static char __pyx_k_76[] = "%s";
+static char __pyx_k_77[] = "destroy\n";
+static char __pyx_k_80[] = "destroy: TODO";
+
+static  void __pyx_f_6purple_destroy(PurpleBuddyList *__pyx_v_list) {
   PyObject *__pyx_1 = 0;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
   int __pyx_4;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":87
- *     it uses Win32's network change notification infrastructure.
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":161
+ *     When the list gets destroyed, this gets called to destroy the UI.
  *     """
- *     debug.purple_debug_info("connection", "%s", "network-connected\n")             # <<<<<<<<<<<<<<
- *     if connection_cbs.has_key("network-connected"):
- *         (<object> connection_cbs["network-connected"])()
+ *     debug.purple_debug_info("blist", "%s", "destroy\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("destroy"):
+ *         (<object> blist_cbs["destroy"])("destroy: TODO")
  */
-  purple_debug_info(__pyx_k_132, __pyx_k_133, __pyx_k_134);
+  purple_debug_info(__pyx_k_75, __pyx_k_76, __pyx_k_77);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":88
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":162
  *     """
- *     debug.purple_debug_info("connection", "%s", "network-connected\n")
- *     if connection_cbs.has_key("network-connected"):             # <<<<<<<<<<<<<<
- *         (<object> connection_cbs["network-connected"])()
+ *     debug.purple_debug_info("blist", "%s", "destroy\n")
+ *     if blist_cbs.has_key("destroy"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["destroy"])("destroy: TODO")
  * 
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_135);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_135);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_78);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_78);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
   if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":89
- *     debug.purple_debug_info("connection", "%s", "network-connected\n")
- *     if connection_cbs.has_key("network-connected"):
- *         (<object> connection_cbs["network-connected"])()             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":163
+ *     debug.purple_debug_info("blist", "%s", "destroy\n")
+ *     if blist_cbs.has_key("destroy"):
+ *         (<object> blist_cbs["destroy"])("destroy: TODO")             # <<<<<<<<<<<<<<
  * 
- * cdef void network_disconnected():
+ * cdef void set_visible(blist.PurpleBuddyList *list, glib.gboolean show):
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_136); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_79); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1;}
     Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_INCREF(__pyx_kp_80);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_80);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1;}
     Py_DECREF(__pyx_1); __pyx_1 = 0;
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-    goto __pyx_L3;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L2;
   }
-  __pyx_L3:;
+  __pyx_L2:;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
+  __pyx_L1:;
   Py_XDECREF(__pyx_1);
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.network_connected");
+  __Pyx_WriteUnraisable("purple.destroy");
   __pyx_L0:;
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":91
- *         (<object> connection_cbs["network-connected"])()
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":165
+ *         (<object> blist_cbs["destroy"])("destroy: TODO")
  * 
- * cdef void network_disconnected():             # <<<<<<<<<<<<<<
+ * cdef void set_visible(blist.PurpleBuddyList *list, glib.gboolean show):             # <<<<<<<<<<<<<<
  *     """
- *     Called when libpurple discovers that the computer's network connection
+ *     Hides or unhides the buddy list.
  */
 
-static  void __pyx_f_6purple_network_disconnected(void) {
+static PyObject *__pyx_kp_84;
+static PyObject *__pyx_kp_85;
+static PyObject *__pyx_kp_86;
+
+static char __pyx_k_81[] = "blist";
+static char __pyx_k_82[] = "%s";
+static char __pyx_k_83[] = "set-visible\n";
+static char __pyx_k_84[] = "set-visible";
+static char __pyx_k_85[] = "set-visible";
+static char __pyx_k_86[] = "set-visible: TODO";
+
+static  void __pyx_f_6purple_set_visible(PurpleBuddyList *__pyx_v_list, gboolean __pyx_v_show) {
   PyObject *__pyx_1 = 0;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
   int __pyx_4;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":96
- *     has gone away.
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":169
+ *     Hides or unhides the buddy list.
  *     """
- *     debug.purple_debug_info("connection", "%s", "network-disconnected\n")             # <<<<<<<<<<<<<<
- *     if connection_cbs.has_key("network-disconnected"):
- *         (<object> connection_cbs["network-disconnected"])()
+ *     debug.purple_debug_info("blist", "%s", "set-visible\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("set-visible"):
+ *         (<object> blist_cbs["set-visible"])("set-visible: TODO")
  */
-  purple_debug_info(__pyx_k_137, __pyx_k_138, __pyx_k_139);
+  purple_debug_info(__pyx_k_81, __pyx_k_82, __pyx_k_83);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":97
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":170
  *     """
- *     debug.purple_debug_info("connection", "%s", "network-disconnected\n")
- *     if connection_cbs.has_key("network-disconnected"):             # <<<<<<<<<<<<<<
- *         (<object> connection_cbs["network-disconnected"])()
+ *     debug.purple_debug_info("blist", "%s", "set-visible\n")
+ *     if blist_cbs.has_key("set-visible"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["set-visible"])("set-visible: TODO")
  * 
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_140);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_140);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_84);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_84);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
   if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":98
- *     debug.purple_debug_info("connection", "%s", "network-disconnected\n")
- *     if connection_cbs.has_key("network-disconnected"):
- *         (<object> connection_cbs["network-disconnected"])()             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":171
+ *     debug.purple_debug_info("blist", "%s", "set-visible\n")
+ *     if blist_cbs.has_key("set-visible"):
+ *         (<object> blist_cbs["set-visible"])("set-visible: TODO")             # <<<<<<<<<<<<<<
  * 
- * cdef void report_disconnect_reason(connection.PurpleConnection *gc, \
+ * cdef void request_add_buddy(account.PurpleAccount *c_account, \
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_141); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_85); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1;}
     Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_INCREF(__pyx_kp_86);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_86);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1;}
     Py_DECREF(__pyx_1); __pyx_1 = 0;
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-    goto __pyx_L3;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L2;
   }
-  __pyx_L3:;
+  __pyx_L2:;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
+  __pyx_L1:;
   Py_XDECREF(__pyx_1);
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.network_disconnected");
+  __Pyx_WriteUnraisable("purple.set_visible");
   __pyx_L0:;
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":100
- *         (<object> connection_cbs["network-disconnected"])()
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":173
+ *         (<object> blist_cbs["set-visible"])("set-visible: TODO")
  * 
- * cdef void report_disconnect_reason(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
- *         connection.PurpleConnectionError reason, const_char *c_text):
- *     """
+ * cdef void request_add_buddy(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
+ *         const_char *c_buddy_username, const_char *c_buddy_group, \
+ *         const_char *c_buddy_alias):
  */
 
-static  void __pyx_f_6purple_report_disconnect_reason(PurpleConnection *__pyx_v_gc, PurpleConnectionError __pyx_v_reason, const char *__pyx_v_c_text) {
-  PyObject *__pyx_v_reason_string;
-  PyObject *__pyx_v_text;
+static PyObject *__pyx_kp_90;
+static PyObject *__pyx_kp_91;
+
+static char __pyx_k_87[] = "blist";
+static char __pyx_k_88[] = "%s";
+static char __pyx_k_89[] = "request-add-buddy\n";
+static char __pyx_k_90[] = "request-add-buddy";
+static char __pyx_k_91[] = "request-add-buddy";
+
+static  void __pyx_f_6purple_request_add_buddy(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_c_buddy_username, const char *__pyx_v_c_buddy_group, const char *__pyx_v_c_buddy_alias) {
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_buddy_username;
+  PyObject *__pyx_v_buddy_group;
+  PyObject *__pyx_v_buddy_alias;
   PyObject *__pyx_1 = 0;
-  PyObject *__pyx_2 = 0;
+  int __pyx_2;
   PyObject *__pyx_3 = 0;
-  int __pyx_4;
-  char *__pyx_5;
-  __pyx_v_reason_string = Py_None; Py_INCREF(Py_None);
-  __pyx_v_text = Py_None; Py_INCREF(Py_None);
+  PyObject *__pyx_4 = 0;
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_buddy_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_buddy_group = Py_None; Py_INCREF(Py_None);
+  __pyx_v_buddy_alias = Py_None; Py_INCREF(Py_None);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":114
- *     @since 2.3.0
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":180
+ *     list.
  *     """
- *     debug.purple_debug_info("connection", "%s", "report-disconnect-reason\n")             # <<<<<<<<<<<<<<
+ *     debug.purple_debug_info("blist", "%s", "request-add-buddy\n")             # <<<<<<<<<<<<<<
  * 
- *     reason_string = {
+ *     username = account.purple_account_get_username(c_account)
  */
-  purple_debug_info(__pyx_k_142, __pyx_k_143, __pyx_k_144);
+  purple_debug_info(__pyx_k_87, __pyx_k_88, __pyx_k_89);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":133
- *         14: 'Certificate self signed',
- *         15: 'Certificate error (other)',
- *         16: 'Other error' }[reason]             # <<<<<<<<<<<<<<
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":182
+ *     debug.purple_debug_info("blist", "%s", "request-add-buddy\n")
  * 
- *     if c_text:
- */
-  __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":117
+ *     username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
  * 
- *     reason_string = {
- *         0: 'Network error',             # <<<<<<<<<<<<<<
- *         1: 'Invalid username',
- *         2: 'Authentication failed',
- */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_0, __pyx_kp_145) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":118
- *     reason_string = {
- *         0: 'Network error',
- *         1: 'Invalid username',             # <<<<<<<<<<<<<<
- *         2: 'Authentication failed',
- *         3: 'Authentication impossible',
- */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_1, __pyx_kp_146) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":119
- *         0: 'Network error',
- *         1: 'Invalid username',
- *         2: 'Authentication failed',             # <<<<<<<<<<<<<<
- *         3: 'Authentication impossible',
- *         4: 'No SSL support',
- */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_2, __pyx_kp_147) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":120
- *         1: 'Invalid username',
- *         2: 'Authentication failed',
- *         3: 'Authentication impossible',             # <<<<<<<<<<<<<<
- *         4: 'No SSL support',
- *         5: 'Encryption error',
- */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_3, __pyx_kp_148) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":121
- *         2: 'Authentication failed',
- *         3: 'Authentication impossible',
- *         4: 'No SSL support',             # <<<<<<<<<<<<<<
- *         5: 'Encryption error',
- *         6: 'Name in use',
- */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_4, __pyx_kp_149) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":122
- *         3: 'Authentication impossible',
- *         4: 'No SSL support',
- *         5: 'Encryption error',             # <<<<<<<<<<<<<<
- *         6: 'Name in use',
- *         7: 'Invalid settings',
- */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_5, __pyx_kp_150) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":123
- *         4: 'No SSL support',
- *         5: 'Encryption error',
- *         6: 'Name in use',             # <<<<<<<<<<<<<<
- *         7: 'Invalid settings',
- *         8: 'Certificate not provided',
- */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_6, __pyx_kp_151) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":124
- *         5: 'Encryption error',
- *         6: 'Name in use',
- *         7: 'Invalid settings',             # <<<<<<<<<<<<<<
- *         8: 'Certificate not provided',
- *         9: 'Certificate untrusted',
- */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_7, __pyx_kp_152) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":125
- *         6: 'Name in use',
- *         7: 'Invalid settings',
- *         8: 'Certificate not provided',             # <<<<<<<<<<<<<<
- *         9: 'Certificate untrusted',
- *         10: 'Certificate expired',
- */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_8, __pyx_kp_153) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":126
- *         7: 'Invalid settings',
- *         8: 'Certificate not provided',
- *         9: 'Certificate untrusted',             # <<<<<<<<<<<<<<
- *         10: 'Certificate expired',
- *         11: 'Certificate not activated',
  */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_9, __pyx_kp_154) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_v_username);
+  __pyx_v_username = __pyx_1;
+  __pyx_1 = 0;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":127
- *         8: 'Certificate not provided',
- *         9: 'Certificate untrusted',
- *         10: 'Certificate expired',             # <<<<<<<<<<<<<<
- *         11: 'Certificate not activated',
- *         12: 'Certificate hostname mismatch',
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":183
+ * 
+ *     username = account.purple_account_get_username(c_account)
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     if c_buddy_username:
  */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_10, __pyx_kp_155) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_v_protocol_id);
+  __pyx_v_protocol_id = __pyx_1;
+  __pyx_1 = 0;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":128
- *         9: 'Certificate untrusted',
- *         10: 'Certificate expired',
- *         11: 'Certificate not activated',             # <<<<<<<<<<<<<<
- *         12: 'Certificate hostname mismatch',
- *         13: 'Certificate fingerprint mismatch',
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":185
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ *     if c_buddy_username:             # <<<<<<<<<<<<<<
+ *         buddy_username = <char *> c_buddy_username
+ *     else:
  */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_11, __pyx_kp_156) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = (__pyx_v_c_buddy_username != 0);
+  if (__pyx_2) {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":129
- *         10: 'Certificate expired',
- *         11: 'Certificate not activated',
- *         12: 'Certificate hostname mismatch',             # <<<<<<<<<<<<<<
- *         13: 'Certificate fingerprint mismatch',
- *         14: 'Certificate self signed',
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":186
+ * 
+ *     if c_buddy_username:
+ *         buddy_username = <char *> c_buddy_username             # <<<<<<<<<<<<<<
+ *     else:
+ *         buddy_username = None
  */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_12, __pyx_kp_157) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_buddy_username)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_buddy_username);
+    __pyx_v_buddy_username = __pyx_1;
+    __pyx_1 = 0;
+    goto __pyx_L2;
+  }
+  /*else*/ {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":130
- *         11: 'Certificate not activated',
- *         12: 'Certificate hostname mismatch',
- *         13: 'Certificate fingerprint mismatch',             # <<<<<<<<<<<<<<
- *         14: 'Certificate self signed',
- *         15: 'Certificate error (other)',
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":188
+ *         buddy_username = <char *> c_buddy_username
+ *     else:
+ *         buddy_username = None             # <<<<<<<<<<<<<<
+ * 
+ *     if c_buddy_group:
  */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_13, __pyx_kp_158) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_buddy_username);
+    __pyx_v_buddy_username = Py_None;
+  }
+  __pyx_L2:;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":131
- *         12: 'Certificate hostname mismatch',
- *         13: 'Certificate fingerprint mismatch',
- *         14: 'Certificate self signed',             # <<<<<<<<<<<<<<
- *         15: 'Certificate error (other)',
- *         16: 'Other error' }[reason]
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":190
+ *         buddy_username = None
+ * 
+ *     if c_buddy_group:             # <<<<<<<<<<<<<<
+ *         buddy_group = <char *> c_buddy_group
+ *     else:
  */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_14, __pyx_kp_159) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = (__pyx_v_c_buddy_group != 0);
+  if (__pyx_2) {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":132
- *         13: 'Certificate fingerprint mismatch',
- *         14: 'Certificate self signed',
- *         15: 'Certificate error (other)',             # <<<<<<<<<<<<<<
- *         16: 'Other error' }[reason]
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":191
  * 
+ *     if c_buddy_group:
+ *         buddy_group = <char *> c_buddy_group             # <<<<<<<<<<<<<<
+ *     else:
+ *         buddy_group = None
  */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_15, __pyx_kp_160) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_buddy_group)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_buddy_group);
+    __pyx_v_buddy_group = __pyx_1;
+    __pyx_1 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":133
- *         14: 'Certificate self signed',
- *         15: 'Certificate error (other)',
- *         16: 'Other error' }[reason]             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":193
+ *         buddy_group = <char *> c_buddy_group
+ *     else:
+ *         buddy_group = None             # <<<<<<<<<<<<<<
  * 
- *     if c_text:
+ *     if c_buddy_alias:
  */
-  if (PyDict_SetItem(__pyx_1, __pyx_int_16, __pyx_kp_161) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyInt_FromLong(__pyx_v_reason); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyObject_GetItem(((PyObject *)__pyx_1), __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(__pyx_v_reason_string);
-  __pyx_v_reason_string = __pyx_3;
-  __pyx_3 = 0;
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_buddy_group);
+    __pyx_v_buddy_group = Py_None;
+  }
+  __pyx_L3:;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":135
- *         16: 'Other error' }[reason]
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":195
+ *         buddy_group = None
  * 
- *     if c_text:             # <<<<<<<<<<<<<<
- *         text = <char *> c_text
+ *     if c_buddy_alias:             # <<<<<<<<<<<<<<
+ *         buddy_alias = <char *> c_buddy_alias
  *     else:
  */
-  __pyx_4 = (__pyx_v_c_text != 0);
-  if (__pyx_4) {
+  __pyx_2 = (__pyx_v_c_buddy_alias != 0);
+  if (__pyx_2) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":136
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":196
  * 
- *     if c_text:
- *         text = <char *> c_text             # <<<<<<<<<<<<<<
+ *     if c_buddy_alias:
+ *         buddy_alias = <char *> c_buddy_alias             # <<<<<<<<<<<<<<
  *     else:
- *         text = None
+ *         buddy_alias = None
  */
-    __pyx_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_text)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_text);
-    __pyx_v_text = __pyx_1;
+    __pyx_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_buddy_alias)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_v_buddy_alias);
+    __pyx_v_buddy_alias = __pyx_1;
     __pyx_1 = 0;
-    goto __pyx_L3;
+    goto __pyx_L4;
   }
   /*else*/ {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":138
- *         text = <char *> c_text
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":198
+ *         buddy_alias = <char *> c_buddy_alias
  *     else:
- *         text = None             # <<<<<<<<<<<<<<
+ *         buddy_alias = None             # <<<<<<<<<<<<<<
  * 
- *     if connection_cbs.has_key("report-disconnect-reason"):
+ *     if blist_cbs.has_key("request-add-buddy"):
  */
     Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_text);
-    __pyx_v_text = Py_None;
+    Py_DECREF(__pyx_v_buddy_alias);
+    __pyx_v_buddy_alias = Py_None;
   }
-  __pyx_L3:;
+  __pyx_L4:;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":140
- *         text = None
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":200
+ *         buddy_alias = None
  * 
- *     if connection_cbs.has_key("report-disconnect-reason"):             # <<<<<<<<<<<<<<
- *         (<object> connection_cbs["report-disconnect-reason"])(reason_string, <char *> text)
+ *     if blist_cbs.has_key("request-add-buddy"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["request-add-buddy"])( \
+ *                 (username, protocol_id), \
  */
-  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_162);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_162);
-  __pyx_2 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_3 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_90);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_90);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
   Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  if (__pyx_4) {
+  __pyx_2 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_2 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_2) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":141
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":201
  * 
- *     if connection_cbs.has_key("report-disconnect-reason"):
- *         (<object> connection_cbs["report-disconnect-reason"])(reason_string, <char *> text)             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("request-add-buddy"):
+ *         (<object> blist_cbs["request-add-buddy"])( \             # <<<<<<<<<<<<<<
+ *                 (username, protocol_id), \
+ *                 buddy_username, buddy_group, buddy_alias)
  */
-    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_3, __pyx_kp_163); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_1 = PyObject_GetItem(__pyx_3, __pyx_kp_91); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1;}
     Py_DECREF(__pyx_3); __pyx_3 = 0;
-    __pyx_5 = __Pyx_PyBytes_AsString(__pyx_v_text); if (unlikely((!__pyx_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_5)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_v_reason_string);
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_reason_string);
-    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2);
-    __pyx_2 = 0;
-    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":202
+ *     if blist_cbs.has_key("request-add-buddy"):
+ *         (<object> blist_cbs["request-add-buddy"])( \
+ *                 (username, protocol_id), \             # <<<<<<<<<<<<<<
+ *                 buddy_username, buddy_group, buddy_alias)
+ * 
+ */
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":203
+ *         (<object> blist_cbs["request-add-buddy"])( \
+ *                 (username, protocol_id), \
+ *                 buddy_username, buddy_group, buddy_alias)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void request_add_chat(account.PurpleAccount *acc, \
+ */
+    __pyx_3 = PyTuple_New(4); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    PyTuple_SET_ITEM(__pyx_3, 0, ((PyObject *)__pyx_4));
+    Py_INCREF(__pyx_v_buddy_username);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_buddy_username);
+    Py_INCREF(__pyx_v_buddy_group);
+    PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_buddy_group);
+    Py_INCREF(__pyx_v_buddy_alias);
+    PyTuple_SET_ITEM(__pyx_3, 3, __pyx_v_buddy_alias);
+    __pyx_4 = 0;
+    __pyx_4 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1;}
     Py_DECREF(__pyx_1); __pyx_1 = 0;
     Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    goto __pyx_L4;
+    Py_DECREF(__pyx_4); __pyx_4 = 0;
+    goto __pyx_L5;
   }
-  __pyx_L4:;
+  __pyx_L5:;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
+  __pyx_L1:;
   Py_XDECREF(__pyx_1);
-  Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.report_disconnect_reason");
+  Py_XDECREF(__pyx_4);
+  __Pyx_WriteUnraisable("purple.request_add_buddy");
   __pyx_L0:;
-  Py_DECREF(__pyx_v_reason_string);
-  Py_DECREF(__pyx_v_text);
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_buddy_username);
+  Py_DECREF(__pyx_v_buddy_group);
+  Py_DECREF(__pyx_v_buddy_alias);
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":29
- * conversation_cbs = {}
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":205
+ *                 buddy_username, buddy_group, buddy_alias)
  * 
- * cdef void create_conversation(conversation.PurpleConversation *conv):             # <<<<<<<<<<<<<<
+ * cdef void request_add_chat(account.PurpleAccount *acc, \             # <<<<<<<<<<<<<<
+ *         blist.PurpleGroup *group, const_char *alias, const_char *name):
  *     """
- *     Called when a conv is created (but before the conversation-created
  */
 
-static  void __pyx_f_6purple_create_conversation(PurpleConversation *__pyx_v_conv) {
-  char *__pyx_v_c_name;
-  PyObject *__pyx_v_name;
-  PyObject *__pyx_v_type;
-  int __pyx_1;
+static PyObject *__pyx_kp_95;
+static PyObject *__pyx_kp_96;
+static PyObject *__pyx_kp_97;
+
+static char __pyx_k_92[] = "blist";
+static char __pyx_k_93[] = "%s";
+static char __pyx_k_94[] = "request-add-chat\n";
+static char __pyx_k_95[] = "request-add-chat";
+static char __pyx_k_96[] = "request-add-chat";
+static char __pyx_k_97[] = "request-add-chat: TODO";
+
+static  void __pyx_f_6purple_request_add_chat(PurpleAccount *__pyx_v_acc, PurpleGroup *__pyx_v_group, const char *__pyx_v_alias, const char *__pyx_v_name) {
+  PyObject *__pyx_1 = 0;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
-  PyObject *__pyx_4 = 0;
-  __pyx_v_name = Py_None; Py_INCREF(Py_None);
-  __pyx_v_type = Py_None; Py_INCREF(Py_None);
+  int __pyx_4;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":34
- *     signal is emitted).
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":210
+ *     TODO
  *     """
- *     debug.purple_debug_info("conversation", "%s", "create-conversation\n")             # <<<<<<<<<<<<<<
- *     cdef char *c_name = NULL
- * 
+ *     debug.purple_debug_info("blist", "%s", "request-add-chat\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("request-add-chat"):
+ *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")
  */
-  purple_debug_info(__pyx_k_164, __pyx_k_165, __pyx_k_166);
+  purple_debug_info(__pyx_k_92, __pyx_k_93, __pyx_k_94);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":35
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":211
  *     """
- *     debug.purple_debug_info("conversation", "%s", "create-conversation\n")
- *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
- * 
- *     c_name = <char *> conversation.purple_conversation_get_name(conv)
- */
-  __pyx_v_c_name = NULL;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":37
- *     cdef char *c_name = NULL
- * 
- *     c_name = <char *> conversation.purple_conversation_get_name(conv)             # <<<<<<<<<<<<<<
- *     if c_name == NULL:
- *         name = None
- */
-  __pyx_v_c_name = ((char *)purple_conversation_get_name(__pyx_v_conv));
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":38
- * 
- *     c_name = <char *> conversation.purple_conversation_get_name(conv)
- *     if c_name == NULL:             # <<<<<<<<<<<<<<
- *         name = None
- *     else:
- */
-  __pyx_1 = (__pyx_v_c_name == NULL);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":39
- *     c_name = <char *> conversation.purple_conversation_get_name(conv)
- *     if c_name == NULL:
- *         name = None             # <<<<<<<<<<<<<<
- *     else:
- *         name = c_name
- */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_name);
-    __pyx_v_name = Py_None;
-    goto __pyx_L3;
-  }
-  /*else*/ {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":41
- *         name = None
- *     else:
- *         name = c_name             # <<<<<<<<<<<<<<
- * 
- *     type = conversation.purple_conversation_get_type(conv)
- */
-    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_name);
-    __pyx_v_name = __pyx_2;
-    __pyx_2 = 0;
-  }
-  __pyx_L3:;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":43
- *         name = c_name
- * 
- *     type = conversation.purple_conversation_get_type(conv)             # <<<<<<<<<<<<<<
- * 
- *     if conversation_cbs.has_key("create-conversation"):
- */
-  __pyx_2 = PyInt_FromLong(purple_conversation_get_type(__pyx_v_conv)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_v_type);
-  __pyx_v_type = __pyx_2;
-  __pyx_2 = 0;
-
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":45
- *     type = conversation.purple_conversation_get_type(conv)
- * 
- *     if conversation_cbs.has_key("create-conversation"):             # <<<<<<<<<<<<<<
- *         (<object> conversation_cbs["create-conversation"])(name, type)
+ *     debug.purple_debug_info("blist", "%s", "request-add-chat\n")
+ *     if blist_cbs.has_key("request-add-chat"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")
  * 
  */
-  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_95);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_95);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
-  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_167);
-  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_167);
-  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
-  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
-  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_4); __pyx_4 = 0;
-  if (__pyx_1) {
+  if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":46
- * 
- *     if conversation_cbs.has_key("create-conversation"):
- *         (<object> conversation_cbs["create-conversation"])(name, type)             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":212
+ *     debug.purple_debug_info("blist", "%s", "request-add-chat\n")
+ *     if blist_cbs.has_key("request-add-chat"):
+ *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")             # <<<<<<<<<<<<<<
  * 
- * cdef void destroy_conversation(conversation.PurpleConversation *conv):
+ * cdef void request_add_group():
  */
-    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_168); if (!__pyx_2) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_v_name);
-    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_name);
-    Py_INCREF(__pyx_v_type);
-    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_type);
-    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_96); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_INCREF(__pyx_kp_97);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_97);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
     Py_DECREF(__pyx_2); __pyx_2 = 0;
-    Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-    goto __pyx_L4;
+    goto __pyx_L2;
   }
-  __pyx_L4:;
+  __pyx_L2:;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
+  __pyx_L1:;
+  Py_XDECREF(__pyx_1);
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  Py_XDECREF(__pyx_4);
-  __Pyx_WriteUnraisable("purple.create_conversation");
+  __Pyx_WriteUnraisable("purple.request_add_chat");
   __pyx_L0:;
-  Py_DECREF(__pyx_v_name);
-  Py_DECREF(__pyx_v_type);
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":48
- *         (<object> conversation_cbs["create-conversation"])(name, type)
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":214
+ *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")
  * 
- * cdef void destroy_conversation(conversation.PurpleConversation *conv):             # <<<<<<<<<<<<<<
+ * cdef void request_add_group():             # <<<<<<<<<<<<<<
  *     """
- *     Called just before a conv is freed.
+ *     TODO
  */
 
-static  void __pyx_f_6purple_destroy_conversation(PurpleConversation *__pyx_v_conv) {
+static PyObject *__pyx_kp_101;
+static PyObject *__pyx_kp_102;
+static PyObject *__pyx_kp_103;
+
+static char __pyx_k_98[] = "blist";
+static char __pyx_k_99[] = "%s";
+static char __pyx_k_100[] = "request-add-group\n";
+static char __pyx_k_101[] = "request-add-chat";
+static char __pyx_k_102[] = "request-add-chat";
+static char __pyx_k_103[] = "request-add-group: TODO";
+
+static  void __pyx_f_6purple_request_add_group(void) {
   PyObject *__pyx_1 = 0;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
   int __pyx_4;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":52
- *     Called just before a conv is freed.
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":218
+ *     TODO
  *     """
- *     debug.purple_debug_info("conversation", "%s", "destroy-conversation\n")             # <<<<<<<<<<<<<<
- *     if conversation_cbs.has_key("destroy-conversation"):
- *         (<object> conversation_cbs["destroy-conversation"])("destroy-conversation: TODO")
+ *     debug.purple_debug_info("blist", "%s", "request-add-group\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("request-add-chat"):
+ *         (<object>blist_cbs["request-add-chat"])("request-add-group: TODO")
  */
-  purple_debug_info(__pyx_k_169, __pyx_k_170, __pyx_k_171);
+  purple_debug_info(__pyx_k_98, __pyx_k_99, __pyx_k_100);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":53
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":219
  *     """
- *     debug.purple_debug_info("conversation", "%s", "destroy-conversation\n")
- *     if conversation_cbs.has_key("destroy-conversation"):             # <<<<<<<<<<<<<<
- *         (<object> conversation_cbs["destroy-conversation"])("destroy-conversation: TODO")
- * 
+ *     debug.purple_debug_info("blist", "%s", "request-add-group\n")
+ *     if blist_cbs.has_key("request-add-chat"):             # <<<<<<<<<<<<<<
+ *         (<object>blist_cbs["request-add-chat"])("request-add-group: TODO")
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_172);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_172);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_101);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_101);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
   if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":54
- *     debug.purple_debug_info("conversation", "%s", "destroy-conversation\n")
- *     if conversation_cbs.has_key("destroy-conversation"):
- *         (<object> conversation_cbs["destroy-conversation"])("destroy-conversation: TODO")             # <<<<<<<<<<<<<<
- * 
- * cdef void write_chat(conversation.PurpleConversation *conv, const_char *who, \
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/blist_cbs.pxd":220
+ *     debug.purple_debug_info("blist", "%s", "request-add-group\n")
+ *     if blist_cbs.has_key("request-add-chat"):
+ *         (<object>blist_cbs["request-add-chat"])("request-add-group: TODO")             # <<<<<<<<<<<<<<
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_173); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_102); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1;}
     Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_kp_174);
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_174);
-    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_INCREF(__pyx_kp_103);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_103);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1;}
     Py_DECREF(__pyx_1); __pyx_1 = 0;
     Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
     Py_DECREF(__pyx_2); __pyx_2 = 0;
-    goto __pyx_L3;
+    goto __pyx_L2;
   }
-  __pyx_L3:;
+  __pyx_L2:;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
+  __pyx_L1:;
   Py_XDECREF(__pyx_1);
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.destroy_conversation");
+  __Pyx_WriteUnraisable("purple.request_add_group");
   __pyx_L0:;
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":56
- *         (<object> conversation_cbs["destroy-conversation"])("destroy-conversation: TODO")
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":30
+ *     ctypedef int size_t
  * 
- * cdef void write_chat(conversation.PurpleConversation *conv, const_char *who, \             # <<<<<<<<<<<<<<
- *         const_char *message, conversation.PurpleMessageFlags flags, \
- *         time_t mtime):
+ * cdef void connect_progress(connection.PurpleConnection *gc, const_char *text, \             # <<<<<<<<<<<<<<
+ *         size_t step, size_t step_count):
+ *     """
  */
 
-static  void __pyx_f_6purple_write_chat(PurpleConversation *__pyx_v_conv, const char *__pyx_v_who, const char *__pyx_v_message, PurpleMessageFlags __pyx_v_flags, time_t __pyx_v_mtime) {
+static PyObject *__pyx_kp_107;
+static PyObject *__pyx_kp_108;
+
+static char __pyx_k_104[] = "connection";
+static char __pyx_k_105[] = "%s";
+static char __pyx_k_106[] = "connect-progress\n";
+static char __pyx_k_107[] = "connect-progress";
+static char __pyx_k_108[] = "connect-progress";
+
+static  void __pyx_f_6purple_connect_progress(PurpleConnection *__pyx_v_gc, const char *__pyx_v_text, size_t __pyx_v_step, size_t __pyx_v_step_count) {
   PyObject *__pyx_1 = 0;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
   int __pyx_4;
+  PyObject *__pyx_5 = 0;
+  PyObject *__pyx_6 = 0;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":64
- *     @see purple_conv_chat_write()
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":37
+ *     reached (which might be displayed as a progress bar).
  *     """
- *     debug.purple_debug_info("conversation", "%s", "write-chat\n")             # <<<<<<<<<<<<<<
- *     if conversation_cbs.has_key("write-chat"):
- *         (<object> conversation_cbs["write-chat"])("write-chat: TODO")
+ *     debug.purple_debug_info("connection", "%s", "connect-progress\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("connect-progress"):
+ *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)
  */
-  purple_debug_info(__pyx_k_175, __pyx_k_176, __pyx_k_177);
+  purple_debug_info(__pyx_k_104, __pyx_k_105, __pyx_k_106);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":65
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":38
  *     """
- *     debug.purple_debug_info("conversation", "%s", "write-chat\n")
- *     if conversation_cbs.has_key("write-chat"):             # <<<<<<<<<<<<<<
- *         (<object> conversation_cbs["write-chat"])("write-chat: TODO")
+ *     debug.purple_debug_info("connection", "%s", "connect-progress\n")
+ *     if connection_cbs.has_key("connect-progress"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)
  * 
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_kp_178);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_178);
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_107);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_107);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
   if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":66
- *     debug.purple_debug_info("conversation", "%s", "write-chat\n")
- *     if conversation_cbs.has_key("write-chat"):
- *         (<object> conversation_cbs["write-chat"])("write-chat: TODO")             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":39
+ *     debug.purple_debug_info("connection", "%s", "connect-progress\n")
+ *     if connection_cbs.has_key("connect-progress"):
+ *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)             # <<<<<<<<<<<<<<
  * 
- * cdef void write_im(conversation.PurpleConversation *conv, const_char *who, \
+ * cdef void connected(connection.PurpleConnection *gc):
  */
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_179); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_108); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1;}
     Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_kp_180);
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_180);
-    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = __Pyx_PyBytes_FromString(((char *)__pyx_v_text)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_2 = PyInt_FromLong(__pyx_v_step); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_5 = PyInt_FromLong(__pyx_v_step_count); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_6 = PyTuple_New(3); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    PyTuple_SET_ITEM(__pyx_6, 0, __pyx_3);
+    PyTuple_SET_ITEM(__pyx_6, 1, __pyx_2);
+    PyTuple_SET_ITEM(__pyx_6, 2, __pyx_5);
+    __pyx_3 = 0;
+    __pyx_2 = 0;
+    __pyx_5 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_6), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1;}
     Py_DECREF(__pyx_1); __pyx_1 = 0;
-    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    goto __pyx_L3;
+    Py_DECREF(((PyObject *)__pyx_6)); __pyx_6 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L2;
   }
-  __pyx_L3:;
+  __pyx_L2:;
 
   goto __pyx_L0;
-  __pyx_L1_error:;
+  __pyx_L1:;
   Py_XDECREF(__pyx_1);
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
-  __Pyx_WriteUnraisable("purple.write_chat");
+  Py_XDECREF(__pyx_5);
+  Py_XDECREF(__pyx_6);
+  __Pyx_WriteUnraisable("purple.connect_progress");
   __pyx_L0:;
 }
 
-/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":68
- *         (<object> conversation_cbs["write-chat"])("write-chat: TODO")
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":41
+ *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)
  * 
- * cdef void write_im(conversation.PurpleConversation *conv, const_char *who, \             # <<<<<<<<<<<<<<
- *         const_char *c_message, conversation.PurpleMessageFlags flags, \
- *         time_t mtime):
+ * cdef void connected(connection.PurpleConnection *gc):             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when a connection is established (just before the signed-on signal).
  */
 
-static  void __pyx_f_6purple_write_im(PurpleConversation *__pyx_v_conv, const char *__pyx_v_who, const char *__pyx_v_c_message, PurpleMessageFlags __pyx_v_flags, time_t __pyx_v_mtime) {
-  PurpleAccount *__pyx_v_acc;
-  PurpleBuddy *__pyx_v_buddy;
-  char *__pyx_v_c_username;
-  char *__pyx_v_c_sender_alias;
-  PyObject *__pyx_v_username;
-  PyObject *__pyx_v_sender;
-  PyObject *__pyx_v_sender_alias;
-  PyObject *__pyx_v_message;
-  PyObject *__pyx_v_flag;
-  int __pyx_1;
+static char __pyx_k_112[] = "connected";
+static char __pyx_k_113[] = "connected";
+
+static PyObject *__pyx_kp_112;
+static PyObject *__pyx_kp_113;
+
+static PyObject *__pyx_kp_114;
+
+static char __pyx_k_109[] = "connection";
+static char __pyx_k_110[] = "%s";
+static char __pyx_k_111[] = "connected\n";
+static char __pyx_k_114[] = "connected: TODO";
+
+static  void __pyx_f_6purple_connected(PurpleConnection *__pyx_v_gc) {
+  PyObject *__pyx_1 = 0;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
   int __pyx_4;
-  PyObject *__pyx_5 = 0;
-  __pyx_v_username = Py_None; Py_INCREF(Py_None);
-  __pyx_v_sender = Py_None; Py_INCREF(Py_None);
-  __pyx_v_sender_alias = Py_None; Py_INCREF(Py_None);
-  __pyx_v_message = Py_None; Py_INCREF(Py_None);
-  __pyx_v_flag = Py_None; Py_INCREF(Py_None);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":76
- *     @see purple_conv_im_write()
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":45
+ *     Called when a connection is established (just before the signed-on signal).
  *     """
- *     debug.purple_debug_info("conversation", "%s", "write-im\n")             # <<<<<<<<<<<<<<
- *     cdef account.PurpleAccount *acc = conversation.purple_conversation_get_account(conv)
- *     cdef blist.PurpleBuddy *buddy = NULL
+ *     debug.purple_debug_info("connection", "%s", "connected\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("connected"):
+ *         (<object> connection_cbs["connected"])("connected: TODO")
  */
-  purple_debug_info(__pyx_k_181, __pyx_k_182, __pyx_k_183);
+  purple_debug_info(__pyx_k_109, __pyx_k_110, __pyx_k_111);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":77
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":46
  *     """
- *     debug.purple_debug_info("conversation", "%s", "write-im\n")
- *     cdef account.PurpleAccount *acc = conversation.purple_conversation_get_account(conv)             # <<<<<<<<<<<<<<
- *     cdef blist.PurpleBuddy *buddy = NULL
- *     cdef char *c_username = NULL
+ *     debug.purple_debug_info("connection", "%s", "connected\n")
+ *     if connection_cbs.has_key("connected"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["connected"])("connected: TODO")
+ * 
  */
-  __pyx_v_acc = purple_conversation_get_account(__pyx_v_conv);
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_112);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_112);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":78
- *     debug.purple_debug_info("conversation", "%s", "write-im\n")
- *     cdef account.PurpleAccount *acc = conversation.purple_conversation_get_account(conv)
- *     cdef blist.PurpleBuddy *buddy = NULL             # <<<<<<<<<<<<<<
- *     cdef char *c_username = NULL
- *     cdef char *c_sender_alias = NULL
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":47
+ *     debug.purple_debug_info("connection", "%s", "connected\n")
+ *     if connection_cbs.has_key("connected"):
+ *         (<object> connection_cbs["connected"])("connected: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void disconnected(connection.PurpleConnection *gc):
  */
-  __pyx_v_buddy = NULL;
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_113); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_INCREF(__pyx_kp_114);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_114);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L2;
+  }
+  __pyx_L2:;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":79
- *     cdef account.PurpleAccount *acc = conversation.purple_conversation_get_account(conv)
- *     cdef blist.PurpleBuddy *buddy = NULL
- *     cdef char *c_username = NULL             # <<<<<<<<<<<<<<
- *     cdef char *c_sender_alias = NULL
+  goto __pyx_L0;
+  __pyx_L1:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.connected");
+  __pyx_L0:;
+}
+
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":49
+ *         (<object> connection_cbs["connected"])("connected: TODO")
  * 
+ * cdef void disconnected(connection.PurpleConnection *gc):             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when a connection is ended (between the signing-off and signed-off
  */
-  __pyx_v_c_username = NULL;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":80
- *     cdef blist.PurpleBuddy *buddy = NULL
- *     cdef char *c_username = NULL
- *     cdef char *c_sender_alias = NULL             # <<<<<<<<<<<<<<
- * 
- *     c_username = <char *> account.purple_account_get_username(acc)
+static char __pyx_k_118[] = "disconnected";
+static char __pyx_k_119[] = "disconnected";
+
+static PyObject *__pyx_kp_118;
+static PyObject *__pyx_kp_119;
+
+static PyObject *__pyx_kp_120;
+
+static char __pyx_k_115[] = "connection";
+static char __pyx_k_116[] = "%s";
+static char __pyx_k_117[] = "disconnected\n";
+static char __pyx_k_120[] = "disconnected: TODO";
+
+static  void __pyx_f_6purple_disconnected(PurpleConnection *__pyx_v_gc) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":54
+ *     signal).
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "disconnected\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("disconnected"):
+ *         (<object> connection_cbs["disconnected"])("disconnected: TODO")
  */
-  __pyx_v_c_sender_alias = NULL;
+  purple_debug_info(__pyx_k_115, __pyx_k_116, __pyx_k_117);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":82
- *     cdef char *c_sender_alias = NULL
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":55
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "disconnected\n")
+ *     if connection_cbs.has_key("disconnected"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["disconnected"])("disconnected: TODO")
  * 
- *     c_username = <char *> account.purple_account_get_username(acc)             # <<<<<<<<<<<<<<
- *     if c_username:
- *         username = c_username
  */
-  __pyx_v_c_username = ((char *)purple_account_get_username(__pyx_v_acc));
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_118);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_118);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":83
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":56
+ *     debug.purple_debug_info("connection", "%s", "disconnected\n")
+ *     if connection_cbs.has_key("disconnected"):
+ *         (<object> connection_cbs["disconnected"])("disconnected: TODO")             # <<<<<<<<<<<<<<
  * 
- *     c_username = <char *> account.purple_account_get_username(acc)
- *     if c_username:             # <<<<<<<<<<<<<<
- *         username = c_username
- *     else:
- */
-  __pyx_1 = (__pyx_v_c_username != 0);
-  if (__pyx_1) {
-
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":84
- *     c_username = <char *> account.purple_account_get_username(acc)
- *     if c_username:
- *         username = c_username             # <<<<<<<<<<<<<<
- *     else:
- *         username = None
+ * cdef void notice(connection.PurpleConnection *gc, const_char *text):
  */
-    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_username); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_username);
-    __pyx_v_username = __pyx_2;
-    __pyx_2 = 0;
-    goto __pyx_L3;
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_119); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_INCREF(__pyx_kp_120);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_120);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L2;
   }
-  /*else*/ {
+  __pyx_L2:;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":86
- *         username = c_username
- *     else:
- *         username = None             # <<<<<<<<<<<<<<
- * 
- *     if who == NULL:
- */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_username);
-    __pyx_v_username = Py_None;
-  }
-  __pyx_L3:;
+  goto __pyx_L0;
+  __pyx_L1:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.disconnected");
+  __pyx_L0:;
+}
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":88
- *         username = None
- * 
- *     if who == NULL:             # <<<<<<<<<<<<<<
- *         who = conversation.purple_conversation_get_name(conv)
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":58
+ *         (<object> connection_cbs["disconnected"])("disconnected: TODO")
  * 
+ * cdef void notice(connection.PurpleConnection *gc, const_char *text):             # <<<<<<<<<<<<<<
+ *     """
+ *     Used to display connection-specific notices. (Pidgin's Gtk user interface
  */
-  __pyx_1 = (__pyx_v_who == NULL);
-  if (__pyx_1) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":89
- * 
- *     if who == NULL:
- *         who = conversation.purple_conversation_get_name(conv)             # <<<<<<<<<<<<<<
- * 
- *     sender = <char *> who
- */
-    __pyx_v_who = purple_conversation_get_name(__pyx_v_conv);
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
+static char __pyx_k_124[] = "notice";
+static char __pyx_k_125[] = "notice";
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":91
- *         who = conversation.purple_conversation_get_name(conv)
- * 
- *     sender = <char *> who             # <<<<<<<<<<<<<<
- *     buddy = blist.purple_find_buddy(acc, <char *> who)
- *     if buddy:
- */
-  __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_who)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_v_sender);
-  __pyx_v_sender = __pyx_2;
-  __pyx_2 = 0;
+static PyObject *__pyx_kp_124;
+static PyObject *__pyx_kp_125;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":92
- * 
- *     sender = <char *> who
- *     buddy = blist.purple_find_buddy(acc, <char *> who)             # <<<<<<<<<<<<<<
- *     if buddy:
- *         c_sender_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
- */
-  __pyx_v_buddy = purple_find_buddy(__pyx_v_acc, ((char *)__pyx_v_who));
+static PyObject *__pyx_kp_126;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":93
- *     sender = <char *> who
- *     buddy = blist.purple_find_buddy(acc, <char *> who)
- *     if buddy:             # <<<<<<<<<<<<<<
- *         c_sender_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
- * 
- */
-  __pyx_1 = (__pyx_v_buddy != 0);
-  if (__pyx_1) {
+static char __pyx_k_121[] = "connection";
+static char __pyx_k_122[] = "%s";
+static char __pyx_k_123[] = "notice\n";
+static char __pyx_k_126[] = "notice: TODO";
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":94
- *     buddy = blist.purple_find_buddy(acc, <char *> who)
- *     if buddy:
- *         c_sender_alias = <char *> blist.purple_buddy_get_alias_only(buddy)             # <<<<<<<<<<<<<<
- * 
- *     if c_sender_alias:
+static  void __pyx_f_6purple_notice(PurpleConnection *__pyx_v_gc, const char *__pyx_v_text) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":64
+ *     operation, is not used by any of the protocols shipped with libpurple.)
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "notice\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("notice"):
+ *         (<object> connection_cbs["notice"])("notice: TODO")
  */
-    __pyx_v_c_sender_alias = ((char *)purple_buddy_get_alias_only(__pyx_v_buddy));
-    goto __pyx_L5;
-  }
-  __pyx_L5:;
+  purple_debug_info(__pyx_k_121, __pyx_k_122, __pyx_k_123);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":96
- *         c_sender_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":65
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "notice\n")
+ *     if connection_cbs.has_key("notice"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["notice"])("notice: TODO")
  * 
- *     if c_sender_alias:             # <<<<<<<<<<<<<<
- *         sender_alias = unicode(c_sender_alias, 'utf-8')
- *     else:
  */
-  __pyx_1 = (__pyx_v_c_sender_alias != 0);
-  if (__pyx_1) {
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_124);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_124);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":97
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":66
+ *     debug.purple_debug_info("connection", "%s", "notice\n")
+ *     if connection_cbs.has_key("notice"):
+ *         (<object> connection_cbs["notice"])("notice: TODO")             # <<<<<<<<<<<<<<
  * 
- *     if c_sender_alias:
- *         sender_alias = unicode(c_sender_alias, 'utf-8')             # <<<<<<<<<<<<<<
- *     else:
- *         sender_alias = None
+ * cdef void report_disconnect(connection.PurpleConnection *gc, const_char *text):
  */
-    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_sender_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
-    Py_INCREF(__pyx_kp_184);
-    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_kp_184);
-    __pyx_2 = 0;
-    __pyx_2 = PyObject_Call(((PyObject *)((PyObject*)&PyUnicode_Type)), ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_125); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_INCREF(__pyx_kp_126);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_126);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
     Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-    Py_DECREF(__pyx_v_sender_alias);
-    __pyx_v_sender_alias = __pyx_2;
-    __pyx_2 = 0;
-    goto __pyx_L6;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L2;
   }
-  /*else*/ {
+  __pyx_L2:;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":99
- *         sender_alias = unicode(c_sender_alias, 'utf-8')
- *     else:
- *         sender_alias = None             # <<<<<<<<<<<<<<
+  goto __pyx_L0;
+  __pyx_L1:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notice");
+  __pyx_L0:;
+}
+
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":68
+ *         (<object> connection_cbs["notice"])("notice: TODO")
  * 
- *     if c_message:
+ * cdef void report_disconnect(connection.PurpleConnection *gc, const_char *text):             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when an error causes a connection to be disconnected.
  */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_sender_alias);
-    __pyx_v_sender_alias = Py_None;
-  }
-  __pyx_L6:;
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":101
- *         sender_alias = None
- * 
- *     if c_message:             # <<<<<<<<<<<<<<
- *         message = <char *> c_message
- *     else:
+static PyObject *__pyx_kp_130;
+static PyObject *__pyx_kp_131;
+
+static char __pyx_k_127[] = "connection";
+static char __pyx_k_128[] = "%s";
+static char __pyx_k_129[] = "report-disconnect\n";
+static char __pyx_k_130[] = "report-disconnect";
+static char __pyx_k_131[] = "report-disconnect";
+
+static  void __pyx_f_6purple_report_disconnect(PurpleConnection *__pyx_v_gc, const char *__pyx_v_text) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":77
+ *                 PurpleConnectionUiOps.report_disconnect_reason.
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "report-disconnect\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("report-disconnect"):
+ *         (<object> connection_cbs["report-disconnect"])(<char *> text)
  */
-  __pyx_1 = (__pyx_v_c_message != 0);
-  if (__pyx_1) {
+  purple_debug_info(__pyx_k_127, __pyx_k_128, __pyx_k_129);
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":102
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":78
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "report-disconnect\n")
+ *     if connection_cbs.has_key("report-disconnect"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["report-disconnect"])(<char *> text)
  * 
- *     if c_message:
- *         message = <char *> c_message             # <<<<<<<<<<<<<<
- *     else:
- *         message = None
  */
-    __pyx_3 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_message)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_v_message);
-    __pyx_v_message = __pyx_3;
-    __pyx_3 = 0;
-    goto __pyx_L7;
-  }
-  /*else*/ {
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_INCREF(__pyx_kp_130);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_130);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":104
- *         message = <char *> c_message
- *     else:
- *         message = None             # <<<<<<<<<<<<<<
+    /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":79
+ *     debug.purple_debug_info("connection", "%s", "report-disconnect\n")
+ *     if connection_cbs.has_key("report-disconnect"):
+ *         (<object> connection_cbs["report-disconnect"])(<char *> text)             # <<<<<<<<<<<<<<
  * 
- *     # FIXME: Maybe we need add more purple flags in the future
+ * cdef void network_connected():
  */
-    Py_INCREF(Py_None);
-    Py_DECREF(__pyx_v_message);
-    __pyx_v_message = Py_None;
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_131); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = __Pyx_PyBytes_FromString(((char *)__pyx_v_text)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3);
+    __pyx_3 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L2;
   }
-  __pyx_L7:;
+  __pyx_L2:;
+
+  goto __pyx_L0;
+  __pyx_L1:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.report_disconnect");
+  __pyx_L0:;
+}
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":107
+/* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":81
+ *         (<object> connection_cbs["report-disconnect"])(<char *> text)
  * 
- *     # FIXME: Maybe we need add more purple flags in the future
- *     if flags & conversation.PURPLE_MESSAGE_SEND:             # <<<<<<<<<<<<<<
- *         flag = "SEND"
- *     else:
+ * cdef void network_connected():             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when libpurple discovers that the computer's network connection
  */
-  __pyx_4 = (__pyx_v_flags & PURPLE_MESSAGE_SEND);
-  if (__pyx_4) {
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":108
- *     # FIXME: Maybe we need add more purple flags in the future
- *     if flags & conversation.PURPLE_MESSAGE_SEND:
- *         flag = "SEND"             # <<<<<<<<<<<<<<
- *     else:
- *         flag = "RECV"
- */
-    Py_INCREF(__pyx_kp_185);
-    Py_DECREF(__pyx_v_flag);
-    __pyx_v_flag = __pyx_kp_185;
-    goto __pyx_L8;
-  }
-  /*else*/ {
+static PyObject *__pyx_kp_135;
+static PyObject *__pyx_kp_136;
 
-    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":110
- *         flag = "SEND"
- *     else:
- *         flag = "RECV"             # <<<<<<<<<<<<<<
- * 
- *     if conversation_cbs.has_key("write-im"):
+static char __pyx_k_132[] = "connection";
+static char __pyx_k_133[] = "%s";
+static char __pyx_k_134[] = "network-connected\n";
+static char __pyx_k_135[] = "network-connected";
+static char __pyx_k_136[] = "network-connected";
+
+static  void __pyx_f_6purple_network_connected(void) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":87
+ *     it uses Win32's network change notification infrastructure.
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "network-connected\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("network-connected"):
+ *         (<object> connection_cbs["network-connected"])()
  */
-    Py_INCREF(__pyx_kp_186);
-    Py_DECREF(__pyx_v_flag);
-    __pyx_v_flag = __pyx_kp_186;
-  }
-  __pyx_L8:;
+  purple_debug_info(__pyx_k_132, __pyx_k_133, __pyx_k_134);
 
-  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":112
- *         flag = "RECV"
+  /* "/opt/wrk/indt/workspace/git-svn/carman/python-purple/connection_cbs.pxd":88
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "network-connected\n")
+ *     if connection_cbs.has_key("network-connected"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["network-connected"])()
  * 
- *     if conversation_cbs.has_key("write-im"):             # <<<<<<<<<<<<<<
- *         (<object> conversation_cbs["write-im"])(username, sender, \
- *                             sender_alias, message, flag)
  */
-  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_GetName(__