Thanks for the feedback all of you.

I've decided to take on a slightly different approach to this. The server will hold the complete simulation and inform the clients of changes to any object this isn't directly "owned" by the client (unless a collision occurs). The client will be responsible for handling it's own physics and will therefore update it's own position, lin vel and ang vel etc to the server.

So in a two player system the player who is the server will have two worlds one for the player object and one for the whole world, remote players will have one world. This might seem unfair but the extra processing a server client will have to do might make up for the lack of any lag on the network It should also linit the number of ODE objects the would need manual updates.

I had already implemented a rather interesting comms system. The client connects via TCP and the server then sends all messages via UDP socket to a specific port on the client. (the client has already opened a specific upd port) unless it's flagged as urgent in which case it used TCP. All client messages are sent via TCP to ensure they make it. I haven't done any serious load testing on this but it seems to work nicely.

I've had a look around on www.gamedev.net and there are a few articles on "dead reckoning" that seemed useful. I'll hopefully be able to share some of my insights in my "Network Programming using SDL Net" series at some point in the future, so watch this space

and thanks again for the feedback.