Hilmar,
if you have to process more than one or two lines of code in each step, this might be an (ok, a little unusual) option. As long as your single step functions return .T., the next function is run. If all functions return .T., OTHERWISE is the last step.
DO CASE
CASE NOT DoFirstStep()
llSuccess = .F.
CASE NOT DoSecondStep()
llSuccess = .F.
CASE NOT DoThirdStep()
llSuccess = .F.
OTHERWISE
llSuccess = .T.
ENDCASE
RETURN llSuccess
Armin