add and change a lot of code