more functional, add chemical naming