add more functions and docs