removed hasExited, it wasn't used. done and completed calls now only add the handler if it exists