big cleanup, finally have proper separated implementations for bitstring and char list