use structs where possible