Yes, that's what I had in mind. Routine `eraise' (I assume everything goes through this routine to raise an exception) could call EIF_ENTER_EIFFEL at the beginning, then lock and unlock `eif_gc_mutex' to ensure synchronization but only if multithreaded. In other words, at beginning of `eraise' add: EIF_ENTER_EIFFEL; GC_THREAD_PROTECT(EIF_GC_MUTEX_LOCK); GC_THREAD_PROTECT(EIF_GC_MUTEX_UNLOCK); The disadvantage is you have to lock and unlock the mutex whenever an exception is raised. So perhaps the above 3 lines should be done only if the thread GC status is not already EIF_THREAD_RUNNING. Not sure if `eraise' can be called when thread GC status is EIF_THREAD_GC_RUNNING or what should be executed in that case. Seems right, but my brain is a bit fuzzy after a 7 day backpacking trip.