more work on observer