diff --git a/build_glob.py b/build_glob.py
index dc42c24..8855ec7 100755
--- a/build_glob.py
+++ b/build_glob.py
@@ -16,10 +16,15 @@
         self.type=type
         self.name=name
 
+def striplinesep(line):
+    while line and line[-1] in ('\r','\n'):
+        line = line[:-1]
+    return line
+
 def writeline(file, line=None):
     if line:
         file.write(line)
-    file.write(os.linesep)
+    file.write("\n")
 
 if __name__ == "__main__":
     globals={}
@@ -34,8 +39,7 @@
     # Automatically generated string
     # 
     for line in global_hdr:
-        if line[-len(os.linesep):] == os.linesep:
-            line = line[:-len(os.linesep)]
+        line = striplinesep(line)
         if line == " * Automatically generated by build_glob.py.":
 	    break
 	writeline(global_functions_hdr, line)
@@ -46,8 +50,7 @@
     writeline(global_functions_hdr)
 
     for line in global_code:
-        if line[-len(os.linesep):] == os.linesep:
-            line = line[:-len(os.linesep)]
+        line = striplinesep(line)
         if line == " * Automatically generated by build_glob.py.":
 	    break
 	writeline(global_functions_impl, line)
@@ -61,36 +64,38 @@
     for line in global_data:
         if line[0]=='#':
             continue
-        if line[-len(os.linesep):] == os.linesep:
-            line = line[:-len(os.linesep)]
+        line = striplinesep(line)
         fields = string.split(line, ",")
         # Update the header file
         writeline(global_functions_hdr)
         global_functions_hdr.write("extern "+fields[0]+" *")
-        if len(fields) == 3:
+        if fields[2]:
             global_functions_hdr.write("(*")
         global_functions_hdr.write("__"+fields[1]+"(void)")
-        if len(fields) == 3:
+        if fields[2]:
             global_functions_hdr.write(")"+fields[2])
         writeline(global_functions_hdr,";")
         writeline(global_functions_hdr, "#ifdef LIBXML_THREAD_ENABLED")
         writeline(global_functions_hdr,"#define "+fields[1]+" \\")
         writeline(global_functions_hdr,"(*(__"+fields[1]+"()))")
         writeline(global_functions_hdr,"#else")
-        if len(fields) == 3:
+        if fields[2]:
             writeline(global_functions_hdr,"LIBXML_DLL_IMPORT extern "+fields[0]+" "+fields[1]+fields[2]+";")
         else:
             writeline(global_functions_hdr,"LIBXML_DLL_IMPORT extern "+fields[0]+" "+fields[1]+";")
         writeline(global_functions_hdr,"#endif")
+        # set/get for per-thread global defaults
+        if fields[3]:
+            writeline(global_functions_hdr,fields[0]+" "+fields[1][:3]+"ThrDef"+fields[1][3:]+"("+fields[0]+" v);")
         # Update the implementation file
         writeline(global_functions_impl)
 #        writeline(global_functions_impl, "extern "+fields[0]+" "+fields[1]+";")
         writeline(global_functions_impl, "#undef\t"+fields[1])
         writeline(global_functions_impl, fields[0]+" *")
-        if len(fields) == 3:
+        if fields[2]:
             global_functions_impl.write("(*")
         global_functions_impl.write("__"+fields[1]+"(void)")
-        if len(fields) == 3:
+        if fields[2]:
             writeline(global_functions_impl, ")[]")
         writeline(global_functions_impl, " {")
         writeline(global_functions_impl, "    if (IS_MAIN_THREAD)")
@@ -98,6 +103,16 @@
         writeline(global_functions_impl, "    else")
         writeline(global_functions_impl, "\treturn (&xmlGetGlobalState()->"+fields[1]+");")
         writeline(global_functions_impl, "}")
+        # set/get for per-thread global defaults
+        if fields[3]:
+            writeline(global_functions_impl,fields[0]+" "+fields[1][:3]+"ThrDef"+fields[1][3:]+"("+fields[0]+" v) {")
+            writeline(global_functions_impl,"    "+fields[0]+" ret;");
+            writeline(global_functions_impl,"    xmlMutexLock(xmlThrDefMutex);")
+            writeline(global_functions_impl,"    ret = "+fields[1][:3]+fields[1][3:]+"ThrDef;")
+            writeline(global_functions_impl,"    "+fields[1][:3]+fields[1][3:]+"ThrDef = v;")
+            writeline(global_functions_impl,"    xmlMutexUnlock(xmlThrDefMutex);")
+            writeline(global_functions_impl,"    return ret;")
+            writeline(global_functions_impl,"}")
     # Terminate the header file with appropriate boilerplate
     writeline(global_functions_hdr)
     writeline(global_functions_hdr, "#ifdef __cplusplus")
