redesign client factory