Thanks for the help. I can confirm that surrounding EVERY call to the API with Py_BEGIN/END_ALLOW_THREADS and acquiring the lock in the callback does work. I do mean EVERY call. Even IUnknown->Release() might cause re-entry. gb