synchronized whole method, new version