implement good old observer pattern