Think I may have figured it out:
CREATE FUNCTION [dbo].[ProperCase]
(
@StrIn VARCHAR(255)
)
RETURNS TABLE WITH SCHEMABINDING
AS
RETURN
SELECTProperCaseString = (
(SELECTCASE
WHEN GN.N = 1 THEN UPPER(SUBSTRING(@StrIn,GN.N,1))
WHEN SUBSTRING(@StrIn,GN.N-1,1) IN (' ','-','''') THEN UPPER(SUBSTRING(@StrIn,GN.N,1))
ELSE LOWER(SUBSTRING(@StrIn,GN.N,1))
END AS [text()]
FROMdbo.GetNums(1,ISNULL(LEN(@StrIn),1)) AS GN
FOR XML PATH(''), TYPE
).value('.','varchar(8000)')
);
Now to see if it actually is an improvement!
And if anyone has anything to add please do.