call dispatches at runtime but memoize