(Not really readable right now. Will clean up today and probably tomorrow) 1. Remove implicit conversion; 2. Companion trait;