divide impls: make types more perfect