final copied and pasted