both optional steps implemented