add more tests and rework a lot of utility structures