final version minus extra credit