observer adapter