add and implement Observer, add refcnt