A method for programming a set of memory cells connected to a selected word line in a memory device, comprising: performing one programming pass of a multi-pass programming operation for the set of memory cells, wherein a first set of step-wise increasing program voltages is applied to the selected word line during the one programming pass; determining a programming speed-indicating program voltage (Vrep) of the first set of step-wise increasing program voltages which indicates a programming speed of the set of memory cells during the one programming pass; determining an adjusted pass voltage (VpassH) to be used for another programming pass of the multi-pass programming operation based on an adjustment to a reference pass voltage, the adjustment to the reference pass voltage is based on the programming speed-indicating program voltage, wherein the one programming pass is a first programming pass of the multi-pass programming operation, the another programming pass is a second programming pass of the multi-pass programming operation and the set of memory cells comprises non-volatile memory cells having floating gates; determining a first initial value of a second set of step-wise increasing program voltages (1400, 1500) for the another programming pass based on the programming speed-indicating program voltage; characterized in that the method further comprising: determining an adjustment to the first initial value based on the adjustment to the reference pass voltage, to provide a second initial value (Vpgm_init2, Vpgm_init3), the adjustment to the first initial value is of opposite polarity to the adjustment to the reference pass voltage; and performing the another programming pass for the set of memory cells, wherein the second set of step-wise increasing program voltages is applied to the selected word line during the another programming pass, the second set of step-wise increasing program voltages has the second initial value, and the adjusted pass voltage is applied to at least one unselected word line (WL1, WL3) during one or more program voltages (1401-1413; 1501-1515) of the second set of step-wise increasing program voltages. performing one programming pass of a multi-pass programming operation for the set of memory cells, wherein a first set of step-wise increasing program voltages is applied to the selected word line during the one programming pass; determining a programming speed-indicating program voltage (Vrep) of the first set of step-wise increasing program voltages which indicates a programming speed of the set of memory cells during the one programming pass; determining an adjusted pass voltage (VpassH) to be used for another programming pass of the multi-pass programming operation based on an adjustment to a reference pass voltage, the adjustment to the reference pass voltage is based on the programming speed-indicating program voltage, wherein the one programming pass is a first programming pass of the multi-pass programming operation, the another programming pass is a second programming pass of the multi-pass programming operation and the set of memory cells comprises non-volatile memory cells having floating gates; determining a first initial value of a second set of step-wise increasing program voltages (1400, 1500) for the another programming pass based on the programming speed-indicating program voltage; characterized in that the method further comprising: determining an adjustment to the first initial value based on the adjustment to the reference pass voltage, to provide a second initial value (Vpgm_init2, Vpgm_init3), the adjustment to the first initial value is of opposite polarity to the adjustment to the reference pass voltage; and performing the another programming pass for the set of memory cells, wherein the second set of step-wise increasing program voltages is applied to the selected word line during the another programming pass, the second set of step-wise increasing program voltages has the second initial value, and the adjusted pass voltage is applied to at least one unselected word line (WL1, WL3) during one or more program voltages (1401-1413; 1501-1515) of the second set of step-wise increasing program voltages. determining an adjustment to the first initial value based on the adjustment to the reference pass voltage, to provide a second initial value (Vpgm_init2, Vpgm_init3), the adjustment to the first initial value is of opposite polarity to the adjustment to the reference pass voltage; and performing the another programming pass for the set of memory cells, wherein the second set of step-wise increasing program voltages is applied to the selected word line during the another programming pass, the second set of step-wise increasing program voltages has the second initial value, and the adjusted pass voltage is applied to at least one unselected word line (WL1, WL3) during one or more program voltages (1401-1413; 1501-1515) of the second set of step-wise increasing program voltages.