Implement XHR cache; walk with funnel UI