further work on Observer pattern