rewrite with new implementation
cache search result and filter on demand