call-by-value for objects is deadly slow. avoid it if possible