add oberver pattern