based on Jinsuo's suggestions