basic functions complete