diff --git a/threads.c b/threads.c
index 07a1469..505133e 100644
--- a/threads.c
+++ b/threads.c
@@ -27,9 +27,10 @@
 #ifdef HAVE_PTHREAD_H
 #include <pthread.h>
 #endif
+
 #ifdef HAVE_WIN32_THREADS
 #include <windows.h>
-#ifndef _MSC_VER
+#ifndef HAVE_COMPILER_TLS
 #include <process.h>
 #endif
 #endif
@@ -53,7 +54,7 @@
 #ifdef HAVE_PTHREAD_H
     pthread_mutex_t lock;
 #elif defined HAVE_WIN32_THREADS
-	HANDLE mutex;
+    HANDLE mutex;
 #else
     int empty;
 #endif
@@ -70,8 +71,8 @@
     pthread_t       tid;
     pthread_cond_t  cv;
 #elif defined HAVE_WIN32_THREADS
-	CRITICAL_SECTION cs;
-	unsigned int count;
+    CRITICAL_SECTION cs;
+    unsigned int count;
 #else
     int empty;
 #endif
@@ -87,15 +88,16 @@
 static pthread_t	mainthread;
 static pthread_once_t once_control = PTHREAD_ONCE_INIT;
 #elif defined HAVE_WIN32_THREADS
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-static __declspec (thread) xmlGlobalState tlstate;
-static __declspec (thread) int tlstate_inited = 0;
-#else
+#if defined(HAVE_COMPILER_TLS)
+static __declspec(thread) xmlGlobalState tlstate;
+static __declspec(thread) int tlstate_inited = 0;
+#else /* HAVE_COMPILER_TLS */
 static DWORD globalkey;
-#endif /* _MSC_VER */
+#endif /* HAVE_COMPILER_TLS */
 static DWORD mainthread;
 static int run_once_init = 1;
 #endif /* HAVE_WIN32_THREADS */
+
 static xmlRMutexPtr	xmlLibraryLock = NULL;
 static void xmlOnceInit(void);
 
@@ -117,7 +119,7 @@
 #ifdef HAVE_PTHREAD_H
     pthread_mutex_init(&tok->lock, NULL);
 #elif defined HAVE_WIN32_THREADS
-	tok->mutex = CreateMutex (NULL, FALSE, NULL);
+    tok->mutex = CreateMutex(NULL, FALSE, NULL);
 #endif
     return (tok);
 }
@@ -135,7 +137,7 @@
 #ifdef HAVE_PTHREAD_H
     pthread_mutex_destroy(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
-	CloseHandle (tok->mutex);
+    CloseHandle(tok->mutex);
 #endif
     free(tok);
 }
@@ -152,7 +154,7 @@
 #ifdef HAVE_PTHREAD_H
     pthread_mutex_lock(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
-	WaitForSingleObject (tok->mutex, INFINITE);
+    WaitForSingleObject(tok->mutex, INFINITE);
 #endif
 
 }
@@ -169,7 +171,7 @@
 #ifdef HAVE_PTHREAD_H
     pthread_mutex_unlock(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
-	ReleaseMutex (tok->mutex);
+    ReleaseMutex(tok->mutex);
 #endif
 }
 
@@ -195,8 +197,8 @@
     tok->held = 0;
     tok->waiters = 0;
 #elif defined HAVE_WIN32_THREADS
-	InitializeCriticalSection (&tok->cs);
-	tok->count = 0;
+    InitializeCriticalSection(&tok->cs);
+    tok->count = 0;
 #endif
     return (tok);
 }
@@ -214,7 +216,7 @@
 #ifdef HAVE_PTHREAD_H
     pthread_mutex_destroy(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
-	DeleteCriticalSection (&tok->cs);
+    DeleteCriticalSection(&tok->cs);
 #endif
     free(tok);
 }
@@ -246,8 +248,8 @@
     tok->held = 1;
     pthread_mutex_unlock(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
-	EnterCriticalSection (&tok->cs);
-	++tok->count;
+    EnterCriticalSection(&tok->cs);
+    ++tok->count;
 #endif
 }
 
@@ -270,7 +272,8 @@
     }
     pthread_mutex_unlock(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
-	if (!--tok->count) LeaveCriticalSection (&tok->cs);
+    if (!--tok->count) 
+	LeaveCriticalSection(&tok->cs);
 #endif
 }
 
@@ -281,7 +284,6 @@
  ************************************************************************/
 
 #ifdef LIBXML_THREAD_ENABLED
-#ifndef _MSC_VER
 /**
  * xmlFreeGlobalState:
  * @state:  a thread global state
@@ -317,7 +319,6 @@
     xmlInitializeGlobalState(gs);
     return (gs);
 }
-#endif /* _MSC_VER */
 #endif /* LIBXML_THREAD_ENABLED */
 
 
@@ -330,23 +331,23 @@
  */
 
 #ifdef HAVE_WIN32_THREADS
-#if !defined(_MSC_VER) && !defined(__BORLANDC__)
+#if !defined(HAVE_COMPILER_TLS)
 typedef struct _xmlGlobalStateCleanupHelperParams
 {
-	HANDLE thread;
-	void *memory;
+    HANDLE thread;
+    void *memory;
 } xmlGlobalStateCleanupHelperParams;
 
-void __cdecl xmlGlobalStateCleanupHelper (void *p)
+void xmlGlobalStateCleanupHelper (void *p)
 {
-	xmlGlobalStateCleanupHelperParams *params = (xmlGlobalStateCleanupHelperParams *) p;
-	WaitForSingleObject (params->thread, INFINITE);
-	CloseHandle (params->thread);
-	xmlFreeGlobalState (params->memory);
-	free (params);
-	_endthread ();
+    xmlGlobalStateCleanupHelperParams *params = (xmlGlobalStateCleanupHelperParams *) p;
+    WaitForSingleObject(params->thread, INFINITE);
+    CloseHandle(params->thread);
+    xmlFreeGlobalState(params->memory);
+    free(params);
+    _endthread();
 }
-#endif /* _MSC_VER */
+#endif /* HAVE_COMPILER_TLS */
 #endif /* HAVE_WIN32_THREADS */
 
 xmlGlobalStatePtr
@@ -358,7 +359,7 @@
     pthread_once(&once_control, xmlOnceInit);
 
     if ((globalval = (xmlGlobalState *)
-         pthread_getspecific(globalkey)) == NULL) {
+		pthread_getspecific(globalkey)) == NULL) {
         xmlGlobalState *tsd = xmlNewGlobalState();
 
         pthread_setspecific(globalkey, tsd);
@@ -366,34 +367,33 @@
     }
     return (globalval);
 #elif defined HAVE_WIN32_THREADS
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-	if (!tlstate_inited)
-	{
-		tlstate_inited = 1;
-		xmlInitializeGlobalState (&tlstate);
-	}
+#if defined(HAVE_COMPILER_TLS)
+    if (!tlstate_inited) {
+	tlstate_inited = 1;
+	xmlInitializeGlobalState(&tlstate);
+    }
+    return &tlstate;
+#else /* HAVE_COMPILER_TLS */
+    xmlGlobalState *globalval;
 
-	return &tlstate;
-#else /* !_MSC_VER */
-	xmlGlobalState *globalval;
+    if (run_once_init) { 
+	run_once_init = 0; 
+	xmlOnceInit(); 
+    }
+    if ((globalval = (xmlGlobalState *) TlsGetValue(globalkey)) == NULL) {
+	xmlGlobalState *tsd = xmlNewGlobalState();
+	xmlGlobalStateCleanupHelperParams *p = 
+	    (xmlGlobalStateCleanupHelperParams *) malloc(sizeof(xmlGlobalStateCleanupHelperParams));
+	p->memory = tsd;
+	DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), 
+		GetCurrentProcess(), &p->thread, 0, TRUE, DUPLICATE_SAME_ACCESS);
+	TlsSetValue(globalkey, tsd);
+	_beginthread(xmlGlobalStateCleanupHelper, 0, p);
 
-	if (run_once_init) { run_once_init = 0; xmlOnceInit (); }
-
-	if ((globalval = (xmlGlobalState *) TlsGetValue (globalkey)) == NULL)
-	{
-		xmlGlobalState *tsd = xmlNewGlobalState();
-		xmlGlobalStateCleanupHelperParams *p = (xmlGlobalStateCleanupHelperParams *) malloc (sizeof (xmlGlobalStateCleanupHelperParams));
-
-		p->memory = tsd;
-		DuplicateHandle (GetCurrentProcess (), GetCurrentThread (), GetCurrentProcess (), &p->thread, 0, TRUE, DUPLICATE_SAME_ACCESS);
-
-		TlsSetValue (globalkey, tsd);
-		_beginthread (xmlGlobalStateCleanupHelper, 0, p);
-
-		return (tsd);
-	}
-	return (globalval);
-#endif /* _MSC_VER */
+	return (tsd);
+    }
+    return (globalval);
+#endif /* HAVE_COMPILER_TLS */
 #else
     return(NULL);
 #endif
@@ -418,7 +418,7 @@
 #ifdef HAVE_PTHREAD_H
     return((int) pthread_self());
 #elif defined HAVE_WIN32_THREADS
-	return GetCurrentThreadId ();
+    return GetCurrentThreadId();
 #else
     return((int) 0);
 #endif
@@ -437,7 +437,10 @@
 #ifdef HAVE_PTHREAD_H
     pthread_once(&once_control, xmlOnceInit);
 #elif defined HAVE_WIN32_THREADS
-	if (run_once_init) { run_once_init = 0; xmlOnceInit (); }
+    if (run_once_init) { 
+	run_once_init = 0; 
+	xmlOnceInit (); 
+    }
 #endif
         
 #ifdef DEBUG_THREADS
@@ -446,7 +449,7 @@
 #ifdef HAVE_PTHREAD_H
     return(mainthread == pthread_self());
 #elif defined HAVE_WIN32_THREADS
-	return (mainthread == GetCurrentThreadId ());
+    return(mainthread == GetCurrentThreadId ());
 #else
     return(1);
 #endif
@@ -522,12 +525,14 @@
 static void
 xmlOnceInit(void) {
 #ifdef HAVE_PTHREAD_H
-   (void) pthread_key_create(&globalkey, xmlFreeGlobalState);
+    (void) pthread_key_create(&globalkey, xmlFreeGlobalState);
     mainthread = pthread_self();
-#elif defined HAVE_WIN32_THREADS
-#if !defined(_MSC_VER) && !defined(__BORLANDC__)
-	globalkey = TlsAlloc ();
-#endif /* _MSC_VER */
-	mainthread = GetCurrentThreadId ();
+#endif
+
+#if defined(HAVE_WIN32_THREADS)
+#if !defined(HAVE_COMPILER_TLS)
+    globalkey = TlsAlloc();
+#endif
+    mainthread = GetCurrentThreadId();
 #endif
 }
