re-organize the structure