add spy
modify design
modify design
modify design