better sanity checks, and make ping a simpler method instead of a second round-trip