three core functions working