+1 we can move a lot of code to this