do not modify structure directly use