add idempotent path functions