add memoize method