takes args, function, complete (fixes #2)