modification singleton + observer