Done parts 1 to 4