* added synchronization

* cache listener moved to separate class