no need for synchronized block