re-factored for more discrete responsibilities, improved file reading
and validity checks for GL Strings