RexxRegisterFunctionExe() for some interpreters is case-sensitive with regard to names. For example, if you register a function with the REXX name of "testfunc" and the REXX script tries to call it as TestFunc(), then the interpreter will not find such a registered function. For this reason, it is best to upper case the REXX name you pass to RexxRegisterFunctionExe(). You don't need to actually make the real names of your functions all upper case -- just the first arg passed to RexxRegisterFunctionExe() -- ie, the "REXX name" that you give to the function. That way, when the REXX script calls your function and doesn't put quotes around the name, the REXX interpreter will upper case it as well. Reginald upper cases any REXX name you pass to RexxRegisterFunctionExe(), so you need not worry about doing that yourself. I recommend that you preface all of your REXX names with a certain string of characters. For example, in this tutorial I chose to begin all function names with the 4 characters "Test". This helps you to identify calls to your functions (as opposed to functions in some DLL that the script may RXFUNCADD()) when you write a REXX script. Also, if you pick a unique preface, then it helps to avoid name collisions with other external functions. (ie, You don't want to have identical REXX names with another DLL function library, otherwise your call to RexxRegisterFunctionExe() will fail with RXFUNC_DEFINED if the other guy registered his first).