updated with more funcs