(congratulations on bug #40000! :-) I'm attaching a patch which solves the issue. Now, all the `next-*-property-change' functions return LIMIT when it has been specified and no properties where found up to the buffer's end. On the other hand, the `previous-*-property-change' functions are a bit inconsistent for negative values of LIMIT: (previous-single-char-property-change 2 'test nil -1) -> `args-out-of-range' (previous-single-property-change 2 'test nil -1) -> -1 (previous-char-property-change 2 -1) -> 1 (previous-property-change 2 nil -1) -> -1 For positive values of LIMIT I didn't find any problems. Although a negative value for LIMIT doesn't make any sense, only the documentation for `previous-char-property-change' mentions that "LIMIT is a no-op if it is less than (point-min)". So maybe this behavior could be added to the other 3 functions as well.