I just had an idea. What if traderoute transports delivers packages instead of yields? A package should then be a class containing: Destination city Yield type Yield amount The transport can then store 30 lumber for city A and 20 for city B. The cities can be aware that they are getting those yields and will not cause other transports to deliver those as well, hence avoid overflowing the warehouse. I'm not completely sure about the memory management. Storing a list of packages in this fashion might not be the most efficient. However this specific detail is not important for the concept.