added method caching