improve the architecture