change to memoized decorator