Implemented custom observer and changed ObserverArgs so it can push or pull.