fixed bug & add a new func