LOCAL; lnHeight AS INTEGER,; lnRows AS INTEGER,; lnLoop AS INTEGER WITH oGrid lnHeight = .HEIGHT lnRows = ROUND(((lnHeight-.HEADERHEIGHT)/.ROWHEIGHT)/2,0) .HEIGHT = .ROWHEIGHT+.HEADERHEIGHT .REFRESH() .HEIGHT = lnHeight FOR lnLoop = 1 TO lnRows-1 .DOSCROLL(0) ENDFOR &&lnLoop ENDWITH &&oGridthis works fine as long as the grid is not in focus. If the grid is in focus and the code beyond is run, the recordpointer will move. This is not easy to trace, because the grid needs to be in focus. I figured out that the change of recordpointer happens in REFRESH(). There is no code in REFRESH() event, I've checked with a plain grid.