optimize haulers
extract role algorithms into separate functions