this is done as a reference, in the stack, and the heap