This is a lot of changes so please pull. Right now according to my test's everything works great except for the logic that we have to add!