i think a few of these could be useful in a utils function to be reused