some polishing, some todos