added synchronization, exceptions and preconditions