a little more sugar
allow external executor
upsert instead of save