final with optional steps