add improved IDF function