re-organize program structure