First version: Single client thread only