improve the design