Revise : separate some function