re-organize the structure to be more clean