callbacks and observers