Add proper memoization