Fundemental Object class design: Objects: Universe - Contains state information, ie: sectors, etc etc etc. Responds to requests to do "stuff", ie: move ships, engage in combat,etc. OnlineUser - class that represents an online user. Contains communication code. Interaction: on the main loop, select(3) is called, after which the main loop uses an mapping to turn file descriptors into OnlineUser pointers (references) and call the "comm()" method which handles IO for the user. Reads information from the socket, then does the action. OnlineUser calls the Universe methods to get stuff to happen. One additional note: in the OnlineUser class, the user is going to be in a certain state at any given time, ie: they are going to be in the ship moving from sector to sector, or perhaps at a starbase doing trading. And so on. Ideally we would like to abstract the code somehow so that adding to the game by introducing new modes (say a special starbase or something, or an astroid outpost) is easy. Or at least not difficult. One way to do this is to have some kind of Base class and derive new classes from it. ie: class OnlineUser { private: Mode *cur_mode; // more stuff }; so the class "Mode" would be a pure virtual class, to provide for a common interface only. So basically you would use the cur_mode pointer to get user interaction. Obviously this would have to be slightly more complex (ie: changing modes: ship pilot mode to ship computer mode to starbase docked, etc), and abstracted in some way to make adding stuff if not simple, at least not extremely difficult. Obviously the "cur_mode" would do alot of interaction with the "Universe" class.