introduced double-run compilation
diff --git a/win32/Makefile.msvc b/win32/Makefile.msvc
index 0c8ea14..c687678 100644
--- a/win32/Makefile.msvc
+++ b/win32/Makefile.msvc
@@ -65,6 +65,7 @@
 
 # Place where we let the compiler put its intermediate trash.
 XML_INTDIR = $(XML_BASENAME).int
+XML_INTDIR_A = $(XML_BASENAME)_a.int
 UTILS_INTDIR = utils.int
 
 # The preprocessor and its options.
@@ -94,12 +95,8 @@
 LIBS = $(LIBS) wsock32.lib
 !endif 
 !if "$(WITH_ICONV)" == "1"
-!if "$(STATIC)" == "1"
-LIBS = $(LIBS) iconv_a.lib
-!else
 LIBS = $(LIBS) iconv.lib
 !endif 
-!endif 
 !if "$(WITH_ZLIB)" == "1"
 LIBS = $(LIBS) zlib.lib
 !endif
@@ -150,6 +147,39 @@
 	$(XML_INTDIR)\xpath.obj\
 	$(XML_INTDIR)\xpointer.obj
 
+# Static libxml object files.
+XML_OBJS_A = $(XML_INTDIR_A)\c14n.obj\
+	$(XML_INTDIR_A)\catalog.obj\
+	$(XML_INTDIR_A)\debugXML.obj\
+	$(XML_INTDIR_A)\DOCBparser.obj\
+	$(XML_INTDIR_A)\encoding.obj\
+	$(XML_INTDIR_A)\entities.obj\
+	$(XML_INTDIR_A)\error.obj\
+	$(XML_INTDIR_A)\globals.obj\
+	$(XML_INTDIR_A)\hash.obj\
+	$(XML_INTDIR_A)\HTMLparser.obj\
+	$(XML_INTDIR_A)\HTMLtree.obj\
+	$(XML_INTDIR_A)\list.obj\
+	$(XML_INTDIR_A)\nanoftp.obj\
+	$(XML_INTDIR_A)\nanohttp.obj\
+	$(XML_INTDIR_A)\parser.obj\
+	$(XML_INTDIR_A)\parserInternals.obj\
+	$(XML_INTDIR_A)\SAX.obj\
+	$(XML_INTDIR_A)\threads.obj\
+	$(XML_INTDIR_A)\tree.obj\
+	$(XML_INTDIR_A)\uri.obj\
+	$(XML_INTDIR_A)\valid.obj\
+	$(XML_INTDIR_A)\xinclude.obj\
+	$(XML_INTDIR_A)\xlink.obj\
+	$(XML_INTDIR_A)\xmlIO.obj\
+	$(XML_INTDIR_A)\xmlmemory.obj\
+	$(XML_INTDIR_A)\xmlregexp.obj\
+	$(XML_INTDIR_A)\xmlschemas.obj\
+	$(XML_INTDIR_A)\xmlschemastypes.obj\
+	$(XML_INTDIR_A)\xmlunicode.obj\
+	$(XML_INTDIR_A)\xpath.obj\
+	$(XML_INTDIR_A)\xpointer.obj
+
 # Xmllint and friends executables.
 UTILS = $(BINDIR)\xmllint.exe\
 	$(BINDIR)\xmlcatalog.exe\
@@ -163,14 +193,17 @@
 	$(BINDIR)\testURI.exe\
 	$(BINDIR)\testXPath.exe
 
-all : libxml utils
+all : libxml libxmla utils
 
-libxml : $(BINDIR)\$(XML_SO) $(BINDIR)\$(XML_A)
+libxml : $(BINDIR)\$(XML_SO) 
+
+libxmla : $(BINDIR)\$(XML_A)
 
 utils : $(UTILS)
 
 clean :
 	if exist $(XML_INTDIR) rmdir /S /Q $(XML_INTDIR)
+	if exist $(XML_INTDIR_A) rmdir /S /Q $(XML_INTDIR_A)
 	if exist $(UTILS_INTDIR) rmdir /S /Q $(UTILS_INTDIR)
 	if exist $(BINDIR) rmdir /S /Q $(BINDIR)
 
@@ -205,13 +238,24 @@
 $(XML_INTDIR) :
 	if not exist $(XML_INTDIR) mkdir $(XML_INTDIR)
 
+# Makes the static libxml intermediate directory.
+$(XML_INTDIR_A) :
+	if not exist $(XML_INTDIR_A) mkdir $(XML_INTDIR_A)
+
 # An implicit rule for libxml compilation.
 {$(XML_SRCDIR)}.c{$(XML_INTDIR)}.obj::
 	$(CC) $(CFLAGS) /Fo$(XML_INTDIR)\ /c $<
 
+# An implicit rule for static libxml compilation.
+{$(XML_SRCDIR)}.c{$(XML_INTDIR_A)}.obj::
+	$(CC) $(CFLAGS) /D "LIBXML_STATIC" /Fo$(XML_INTDIR_A)\ /c $<
+
 # Compiles libxml source. Uses the implicit rule for commands.
 $(XML_OBJS) : $(XML_INTDIR) 
 
+# Compiles static libxml source. Uses the implicit rule for commands.
+$(XML_OBJS_A) : $(XML_INTDIR_A) 
+
 # Creates the export definition file (DEF) for libxml.
 $(XML_INTDIR)\$(XML_DEF) : $(XML_INTDIR) $(XML_DEF).src
 	$(CPP) $(CPPFLAGS) $(XML_DEF).src > $(XML_INTDIR)\$(XML_DEF)
@@ -222,8 +266,8 @@
 		/IMPLIB:$(BINDIR)\$(XML_IMP) /OUT:$(BINDIR)\$(XML_SO) $(XML_OBJS) $(LIBS)
 
 # Creates the libxml archive.
-$(BINDIR)\$(XML_A) : $(BINDIR) $(XML_OBJS)
-	$(AR) $(ARFLAGS) /OUT:$(BINDIR)\$(XML_A) $(XML_OBJS)
+$(BINDIR)\$(XML_A) : $(BINDIR) $(XML_OBJS_A)
+	$(AR) $(ARFLAGS) /OUT:$(BINDIR)\$(XML_A) $(XML_OBJS_A)
 
 
 # Makes the utils intermediate directory.
@@ -242,7 +286,7 @@
 !endif
 
 # Builds xmllint and friends. Uses the implicit rule for commands.
-$(UTILS) : $(UTILS_INTDIR) $(BINDIR) libxml
+$(UTILS) : $(UTILS_INTDIR) $(BINDIR) libxml libxmla
 
 
 # Source dependences should be autogenerated somehow here, but how to