Redesigned the client to be more decoupled and easier to configure