Hi Elisha, does the number 146 in {} change if you restart the application? If not, then try put the line : _CrtSetBreakAlloc(146); in your code before you create the thread. VC7.1 will break when the 146th object is created. If I do that I end up here, in the line where the "new" is: [mutex.inl] inline void* new_critical_section() { try { LPCRITICAL_SECTION critical_section = new CRITICAL_SECTION; if (critical_section == 0) throw boost::thread_resource_error(); InitializeCriticalSection(critical_section); return critical_section; } catch(...) { throw boost::thread_resource_error(); } } Do you have the same behavior? I will do some tests to see if the critical section is also deleted correctly. Christian