add UserMessageError, and use it at a few places
replace the commands with a --step, tailor some messages