refactor: separate data structs into their own classes...
refactor method signatures