compareTo support done + safe toString + various refacs