observer pattern closes #2