Chip,
I've just been struggling with these same problems, so found this discussion very helpful. Thank you. The documentation doesn't say that subroutines have to go in a special folder. I'd totally forgotten there is such a folder. Also, it doesn't say whether the subroutine needs to end with M99. Frankly, it seems daft that you need an M99. End of file should have the same effect.
Regards
Chris