oh man this is gonna be a lot of work :(