improve the structure