this is a lot of changes. too many to say here, oops