Do we need to expose these values? If not, then what about turning it into memoize type function that will cache its output inside function object so it can be safely called many times.