all public methods are now in critical section