refactor pin observer interface