fix bug & add function