nearly done, need to fix assignment operator