Creating a new string only causes a heap allocation if the string is longer than SSO_CHARS-1 (15).  ToLower is really a poor API, and I toyed with not even providing it at all...  But in this case, it almost makes sense to use it.  Mostly because I don't provide a CompareI() for individual characters ^_^.