Nice
Let me see now...
In initialize, you create a file handle to sUserEmail.quotes and if it's not valid you create a file handle to Default.quotes
Then you parse all the quotes from the file into... an array of an array of chars? (an array of strings).
Then when the tag is parsed you select one at random (Rnd()%Number of quotes)?
I haven't downloaded it yet, these are just assumptions from the fact that the quotes are loaded in Initialize().
As long as the quotes file isn't too big, wouldn't it be easier to parse the quotes file on each parsetag call? Because it's unlikely that anyone will have a REALLY huge quotes file, there wouldn't be too much processing time wasted and it would eliminate the need for /xrquotes
Or you could check if the last modified time has changed and reload only if it has been
And in case i didn't mention it... nice plugin