improve the struct