moved a lot of code, no restrictions on moving