update and re-organize