this is going to take a lot of time to look through...