lparameter pcOrder, plAscending local i, j, llLockScreen, lnRecno, lnRelativeRow, lnDirection, lcDescending llLockScreen = thisform.LockScreen && prevent user from seeing all of the jumping thisform.LockScreen = .t. lnRecno = recno() lnRelativeRow = this.RelativeRow lcDescending = iif( ! plAscending, "descending", "ascending" ) set order to pcOrder &lcDescending this.Refresh() goto lnRecno && move record pointer back this.Refresh() if ( lnRelativeRow != this.RelativeRow ) * the record didn't wind up at the same grid row, so we scroll the grid lnDirection = iif( lnRelativeRow > this.RelativeRow, 0, 1 ) j = abs( lnRelativeRow - this.RelativeRow ) for i = 1 to j this.DoScroll( lnDirection ) endfor this.Refresh() && YAR endif thisform.LockScreen = llLockScreen>I am having a slight problem with the index solution. If I click the header of a column to change the sorting order, it works fine the first time. When I change columns and select a different column header, it sorts using the original index and not the new column.