Ken, Nice compilation. Very thoughtful and diplomatic of you to include all the different versions. Let me suggest that those who foresee regular use of these FNs select one version of each and put them into an include file. It might be interesting for someone to evaluate, among similar FNs, which is faster, which compiles to more compact code (both objective), and (more subjective) which is easier to read, which is easier to use. Please don't set these in stone (pun intended) yet, as I am nearly finished with a monster REPLACE FN that will accomplish replacements in large (multi-megabyte) containers so fast you'll think it didn't work. It includes a non-case-sensitive option, and initial results on my slow old 240Mhz G3 look like this: >Searching a 4500000-char container comprising 100000 repetitions >of "1234567890-=qwertyuiop[]asdfghjkl;'zxcvbnm,./" >Non-case-sensitive search > >replacing "1234567890" with "01020304050607080910" > 100000 instances replaced in 0.7176 seconds. BUGS In at least 2 of my FNs in your listing (LTrim & RTrim), there seem to be missing underscores in a IF strVar[i] = _" " syntax. There is also a superfluous line in the LTrim FN, which should read as follows: '~LTRIM (Example 1) // Contributed by Jay Reeve LOCAL FN LTRIM$( lTrimStr AS STR255 ) dim c,L L = lTrimStr[0] for c = 1 to L long if lTrimStr[c] <> _" " ltrimStr = mid$(ltrimStr,c) exit fn end if next lTrimStr[0] = 0 END FN = lTrimStr 0"0 =J= a y "