refactor to make it more usable 0