Quick notes on how the common stuff works: The GUI aspect of the client controls its own event loop. All it needs to do is check the network socket to see if it has input, and call do_network(). do_network() then reads the data and parses it, taking care of the protocol and making function calls on its own. In some cases, this results in function calls back to the GUI area. the common/external.h lists the functions the common area will call. In some cases, the gui functin call may do nothing at all - it may just provide that function because _some_ clients do something with that. The common area also sets up data structures - the most notable of these is the_map structure which is what the map looks at. Other things it maintains is the players inventory, stats, etc. In the case of the opengl client, it basically doesn't do anything with the disaply_map_..() functions, other than to set that the map has changed. It then just redraws the map on its own timeframe (basically when there is no input left on the socket). I have no idea if this callback method works with objective C. But as others have said, if you can continue to use the common area, it certainly will save you work in the long run - while the protocol may change, these functions and data structures are less likely to change.