doesn't need to be `memoized`