I guess this is mostly just refactoring