don’t use observer