Not pretty, but mostly done with assignment