ft moved into their own file. now it can be independently tested