Implement observer API