better doit function