closed #5,#7, be careful of #9