check for empty payload, renamed methods
added run_once