supports multiple simultaneous users, cleaned up routing