change a lot of logic