A method of constructing a merge candidate list for Intra block copy, IBC, mode, the method comprising the following ordered steps: inserting a block vector of a left neighboring block of a current block into an initial merge candidate list of the current block, when the left neighboring block is available and the left neighboring block is using IBC mode; inserting a block vector of an above neighboring block of the current block into the merge candidate list, when the above neighboring block is available, the above neighboring block is using IBC mode and the block vector of the above neighboring block is not same as the block vector of the left neighboring block; inserting a block vector of last candidate in a history based motion vector predictor, HMVP, list into the merge candidate list, when the block vector of the above neighboring block is not same as the block vector of the last candidate in the HMVP list and when the block vector of the left neighboring block is not same as the block vector of the last candidate in the HMVP list; inserting one by one block vectors of other candidates in the HMVP list into the merge candidate list without pruning, until a number of block vectors in the merge candidate list is equal to a maximum number of block vectors in the merge candidate list or until the block vectors of all the candidates in the HMVP list are inserted into the merge candidate list, wherein the pruning means comparing whether two merge candidates in the merge candidate list are same, wherein if the maximum number of block vectors in the merge candidate list is reached, the last block vector in the merge candidate list of the current block is a block vector of one of the other candidates in the HMVP list; and wherein if all the candidates in the HMVP list are inserted into the merge candidate list and the number of block vectors in the merge candidate list is less than the maximum number of block vectors in the merge candidate list, one or more zeros are inserted into the merge candidate list until the number of block vectors in the merge candidate list is equal to the maximum number of block vectors in the merge candidate list. inserting a block vector of a left neighboring block of a current block into an initial merge candidate list of the current block, when the left neighboring block is available and the left neighboring block is using IBC mode; inserting a block vector of an above neighboring block of the current block into the merge candidate list, when the above neighboring block is available, the above neighboring block is using IBC mode and the block vector of the above neighboring block is not same as the block vector of the left neighboring block; inserting a block vector of last candidate in a history based motion vector predictor, HMVP, list into the merge candidate list, when the block vector of the above neighboring block is not same as the block vector of the last candidate in the HMVP list and when the block vector of the left neighboring block is not same as the block vector of the last candidate in the HMVP list; inserting one by one block vectors of other candidates in the HMVP list into the merge candidate list without pruning, until a number of block vectors in the merge candidate list is equal to a maximum number of block vectors in the merge candidate list or until the block vectors of all the candidates in the HMVP list are inserted into the merge candidate list, wherein the pruning means comparing whether two merge candidates in the merge candidate list are same, wherein if the maximum number of block vectors in the merge candidate list is reached, the last block vector in the merge candidate list of the current block is a block vector of one of the other candidates in the HMVP list; and wherein if all the candidates in the HMVP list are inserted into the merge candidate list and the number of block vectors in the merge candidate list is less than the maximum number of block vectors in the merge candidate list, one or more zeros are inserted into the merge candidate list until the number of block vectors in the merge candidate list is equal to the maximum number of block vectors in the merge candidate list.