A method of motion vector prediction of a current motion vector of a current block, the method comprising: determining a given motion vector for the current block, wherein the given motion vector points from the current block in a first direction; identifying a first reference block in a first reference frame pointed by the given motion vector; identifying a reference motion vector associated with the first reference block pointing to a second reference block in a second reference frame in a second direction different from a first direction; deriving, based on the reference motion vector and the given motion vector, a temporal derived motion vector pointing from the current block to the second reference block by adding either the given motion vector or the scaled given motion vector to either the reference motion vector or the scaled reference motion vector, wherein if the given motion vector points to another reference frame different from the first reference frame, the given motion vector is scaled to point to the first reference frame, and wherein if the reference motion vector points to another reference frame different from the second reference frame, the reference motion vector is scaled to point to the second reference frame; forming a temporal-derived bi-direction, TDB, motion vector predictor, MVP, for the current block based on the given motion vector and the temporal derived motion vector; wherein the TDB MVP is formed by either the given motion vector or the scaled given motion vector and either the temporal derived motion vector or the scaled temporal derived motion vector, wherein if the temporal derived motion vector points to another reference frame different from the second reference frame, the temporal derived motion vector is scaled to point to the second reference frame; adding the TDB MVP into a candidate list for the current block; and encoding or decoding the current motion vector of the current block using the candidate list. determining a given motion vector for the current block, wherein the given motion vector points from the current block in a first direction; identifying a first reference block in a first reference frame pointed by the given motion vector; identifying a reference motion vector associated with the first reference block pointing to a second reference block in a second reference frame in a second direction different from a first direction; deriving, based on the reference motion vector and the given motion vector, a temporal derived motion vector pointing from the current block to the second reference block by adding either the given motion vector or the scaled given motion vector to either the reference motion vector or the scaled reference motion vector, wherein if the given motion vector points to another reference frame different from the first reference frame, the given motion vector is scaled to point to the first reference frame, and wherein if the reference motion vector points to another reference frame different from the second reference frame, the reference motion vector is scaled to point to the second reference frame; forming a temporal-derived bi-direction, TDB, motion vector predictor, MVP, for the current block based on the given motion vector and the temporal derived motion vector; wherein the TDB MVP is formed by either the given motion vector or the scaled given motion vector and either the temporal derived motion vector or the scaled temporal derived motion vector, wherein if the temporal derived motion vector points to another reference frame different from the second reference frame, the temporal derived motion vector is scaled to point to the second reference frame; adding the TDB MVP into a candidate list for the current block; and encoding or decoding the current motion vector of the current block using the candidate list.