add a lot of methods AND tests