should we just catch Throwable here to be safe?