diff --git a/pom.xml b/pom.xml
index 7952eb0..0413e80 100644
--- a/pom.xml
+++ b/pom.xml
@@ -310,7 +310,7 @@
 
 			<plugin>
 				<artifactId>maven-assembly-plugin</artifactId>
-				<version>2.3</version>
+				<version>3.2.0</version>
 				<configuration>
 					<descriptors>
 						<descriptor>src/assembly/source.xml</descriptor>
@@ -320,8 +320,9 @@
 				</configuration>
 				<executions>
 					<execution>
+						<phase>package</phase>
 						<goals>
-							<goal>assembly</goal>
+							<goal>single</goal>
 						</goals>
 					</execution>
 				</executions>
diff --git a/src/examples/cpp/delayedloop.cpp b/src/examples/cpp/delayedloop.cpp
index ff785d5..194473a 100644
--- a/src/examples/cpp/delayedloop.cpp
+++ b/src/examples/cpp/delayedloop.cpp
@@ -93,7 +93,7 @@
                         {
                                 apr_sleep(1000000);
                         }
-                        catch(std::exception& e)
+                        catch(std::exception&)
                         {
                         }
                 }
diff --git a/src/main/cpp/appenderattachableimpl.cpp b/src/main/cpp/appenderattachableimpl.cpp
index 92c4fad..ad85216 100644
--- a/src/main/cpp/appenderattachableimpl.cpp
+++ b/src/main/cpp/appenderattachableimpl.cpp
@@ -73,7 +73,7 @@
 		(*it)->doAppend(event, p);
 	}
 
-	return appenderList.size();
+	return (int)appenderList.size();
 }
 
 AppenderList AppenderAttachableImpl::getAllAppenders() const
diff --git a/src/main/cpp/asyncappender.cpp b/src/main/cpp/asyncappender.cpp
index 603b42c..20b80b7 100644
--- a/src/main/cpp/asyncappender.cpp
+++ b/src/main/cpp/asyncappender.cpp
@@ -143,9 +143,9 @@
 
 		while (true)
 		{
-			int previousSize = buffer.size();
+			size_t previousSize = buffer.size();
 
-			if (previousSize < bufferSize)
+			if (previousSize < (size_t)bufferSize)
 			{
 				buffer.push_back(event);
 
@@ -175,7 +175,7 @@
 					bufferNotFull.await(bufferMutex);
 					discard = false;
 				}
-				catch (InterruptedException& e)
+				catch (InterruptedException&)
 				{
 					//
 					//  reset interrupt status so
@@ -442,7 +442,7 @@
 			}
 		}
 	}
-	catch (InterruptedException& ex)
+	catch (InterruptedException&)
 	{
 		Thread::currentThreadInterrupt();
 	}
diff --git a/src/main/cpp/bytearrayinputstream.cpp b/src/main/cpp/bytearrayinputstream.cpp
index ee89744..566cffa 100644
--- a/src/main/cpp/bytearrayinputstream.cpp
+++ b/src/main/cpp/bytearrayinputstream.cpp
@@ -57,6 +57,6 @@
 		memcpy(dst.current(), &buf[pos], bytesCopied);
 		pos += bytesCopied;
 		dst.position(dst.position() + bytesCopied);
-		return bytesCopied;
+		return (int)bytesCopied;
 	}
 }
diff --git a/src/main/cpp/cacheddateformat.cpp b/src/main/cpp/cacheddateformat.cpp
index 713086c..37fa8ea 100644
--- a/src/main/cpp/cacheddateformat.cpp
+++ b/src/main/cpp/cacheddateformat.cpp
@@ -169,7 +169,7 @@
 				// the millis can occur everywhere in formatted. See LOGCXX-420 and following.
 				size_t  magicLength     = magicString.length();
 				size_t  overlapping     = magicString.find(plusMagic[i]);
-				int     possibleRetVal  = i - overlapping;
+				int     possibleRetVal  = int(i - overlapping);
 
 				if (plusZero.length() == formatted.length()
 					&& regionMatches(magicString,       0, plusMagic,   possibleRetVal, magicLength)
diff --git a/src/main/cpp/charsetdecoder.cpp b/src/main/cpp/charsetdecoder.cpp
index 1736414..395ee75 100644
--- a/src/main/cpp/charsetdecoder.cpp
+++ b/src/main/cpp/charsetdecoder.cpp
@@ -471,7 +471,7 @@
 							Transcoder::decode(encoding, e);
 							decoder = getDecoder(e);
 						}
-						catch (IllegalArgumentException& ex)
+						catch (IllegalArgumentException&)
 						{
 							decoder = new USASCIICharsetDecoder();
 						}
diff --git a/src/main/cpp/charsetencoder.cpp b/src/main/cpp/charsetencoder.cpp
index 6d6e309..1d4fd75 100644
--- a/src/main/cpp/charsetencoder.cpp
+++ b/src/main/cpp/charsetencoder.cpp
@@ -501,7 +501,7 @@
 						{
 							encoder = CharsetEncoder::getEncoder(ename);
 						}
-						catch (IllegalArgumentException& ex)
+						catch (IllegalArgumentException&)
 						{
 							encoder = new USASCIICharsetEncoder();
 						}
diff --git a/src/main/cpp/classnamepatternconverter.cpp b/src/main/cpp/classnamepatternconverter.cpp
index 7d9c72e..e39027a 100644
--- a/src/main/cpp/classnamepatternconverter.cpp
+++ b/src/main/cpp/classnamepatternconverter.cpp
@@ -55,7 +55,7 @@
 	LogString& toAppendTo,
 	Pool& /* p */) const
 {
-	int initialLength = toAppendTo.length();
+	int initialLength = (int)toAppendTo.length();
 	append(toAppendTo, event->getLocationInformation().getClassName());
 	abbreviate(initialLength, toAppendTo);
 }
diff --git a/src/main/cpp/fileappender.cpp b/src/main/cpp/fileappender.cpp
index b83f0e1..8d678d4 100644
--- a/src/main/cpp/fileappender.cpp
+++ b/src/main/cpp/fileappender.cpp
@@ -306,7 +306,7 @@
 	{
 		outStream = new FileOutputStream(filename, append1);
 	}
-	catch (IOException& ex)
+	catch (IOException&)
 	{
 		LogString parentName = File().setPath(filename).getParent(p);
 
@@ -353,7 +353,7 @@
 	this->fileAppend = append1;
 	this->bufferedIO = bufferedIO1;
 	this->fileName = filename;
-	this->bufferSize = bufferSize1;
+	this->bufferSize = (int)bufferSize1;
 	writeHeader(p);
 
 }
diff --git a/src/main/cpp/fileinputstream.cpp b/src/main/cpp/fileinputstream.cpp
index c177362..c075193 100644
--- a/src/main/cpp/fileinputstream.cpp
+++ b/src/main/cpp/fileinputstream.cpp
@@ -107,7 +107,7 @@
 		}
 
 		buf.position(buf.position() + bytesRead);
-		retval = bytesRead;
+		retval = (int)bytesRead;
 	}
 
 	return retval;
diff --git a/src/main/cpp/filewatchdog.cpp b/src/main/cpp/filewatchdog.cpp
index beea70d..b2771ff 100644
--- a/src/main/cpp/filewatchdog.cpp
+++ b/src/main/cpp/filewatchdog.cpp
@@ -46,7 +46,7 @@
 		thread.interrupt();
 		thread.join();
 	}
-	catch (Exception& e)
+	catch (Exception&)
 	{
 	}
 }
@@ -91,7 +91,7 @@
 			Thread::sleep(pThis->delay);
 			pThis->checkAndConfigure();
 		}
-		catch (InterruptedException& ex)
+		catch (InterruptedException&)
 		{
 			interrupted = apr_atomic_read32(&pThis->interrupted);
 		}
diff --git a/src/main/cpp/fixedwindowrollingpolicy.cpp b/src/main/cpp/fixedwindowrollingpolicy.cpp
index 4f03e10..0cd9cea 100644
--- a/src/main/cpp/fixedwindowrollingpolicy.cpp
+++ b/src/main/cpp/fixedwindowrollingpolicy.cpp
@@ -332,7 +332,7 @@
 				return false;
 			}
 		}
-		catch (std::exception& ex)
+		catch (std::exception&)
 		{
 			LogLog::warn(LOG4CXX_STR("Exception during purge in RollingFileAppender"));
 
diff --git a/src/main/cpp/formattinginfo.cpp b/src/main/cpp/formattinginfo.cpp
index f91eb3f..c20347b 100644
--- a/src/main/cpp/formattinginfo.cpp
+++ b/src/main/cpp/formattinginfo.cpp
@@ -56,7 +56,7 @@
  */
 void FormattingInfo::format(const int fieldStart, LogString& buffer) const
 {
-	int rawLength = buffer.length() - fieldStart;
+	int rawLength = int(buffer.length() - fieldStart);
 
 	if (rawLength > maxLength)
 	{
diff --git a/src/main/cpp/hierarchy.cpp b/src/main/cpp/hierarchy.cpp
index b406e19..ee6d417 100644
--- a/src/main/cpp/hierarchy.cpp
+++ b/src/main/cpp/hierarchy.cpp
@@ -345,7 +345,7 @@
 {
 	synchronized sync(mutex);
 	const LogString name(logger->getName());
-	int length = name.size();
+	size_t length = name.size();
 	bool parentFound = false;
 
 
diff --git a/src/main/cpp/loader.cpp b/src/main/cpp/loader.cpp
index c8081de..cc1bec9 100644
--- a/src/main/cpp/loader.cpp
+++ b/src/main/cpp/loader.cpp
@@ -67,7 +67,7 @@
 	{
 		return new FileInputStream(name);
 	}
-	catch (const IOException& ioex)
+	catch (const IOException&)
 	{
 	}
 
diff --git a/src/main/cpp/loggerpatternconverter.cpp b/src/main/cpp/loggerpatternconverter.cpp
index c5b38de..f9c0246 100644
--- a/src/main/cpp/loggerpatternconverter.cpp
+++ b/src/main/cpp/loggerpatternconverter.cpp
@@ -54,7 +54,7 @@
 	LogString& toAppendTo,
 	Pool& /* p */ ) const
 {
-	int initialLength = toAppendTo.length();
+	int initialLength = (int)toAppendTo.length();
 	toAppendTo.append(event->getLoggerName());
 	abbreviate(initialLength, toAppendTo);
 }
diff --git a/src/main/cpp/logstream.cpp b/src/main/cpp/logstream.cpp
index ca5d045..de9a763 100644
--- a/src/main/cpp/logstream.cpp
+++ b/src/main/cpp/logstream.cpp
@@ -109,7 +109,7 @@
 {
 	get_stream_state(initclear, initset, fillchar, fillset);
 	initset.precision(p);
-	int oldVal = initclear.precision(p);
+	int oldVal = (int)initclear.precision(p);
 	refresh_stream_state();
 	return oldVal;
 }
@@ -117,14 +117,14 @@
 int log4cxx::logstream_base::precision()
 {
 	get_stream_state(initclear, initset, fillchar, fillset);
-	return initclear.precision();
+	return (int)initclear.precision();
 }
 
 int log4cxx::logstream_base::width(int w)
 {
 	get_stream_state(initclear, initset, fillchar, fillset);
 	initset.width(w);
-	int oldVal = initclear.width(w);
+	int oldVal = (int)initclear.width(w);
 	refresh_stream_state();
 	return oldVal;
 }
@@ -132,7 +132,7 @@
 int log4cxx::logstream_base::width()
 {
 	get_stream_state(initclear, initset, fillchar, fillset);
-	return initclear.width();
+	return (int)initclear.width();
 }
 
 int log4cxx::logstream_base::fill(int newfill)
@@ -306,10 +306,10 @@
 		std::ios_base::fmtflags flags = stream->flags();
 		base.flags(flags);
 		mask.flags(flags);
-		int width = stream->width();
+		int width = (int)stream->width();
 		base.width(width);
 		mask.width(width);
-		int precision = stream->precision();
+		int precision = (int)stream->precision();
 		base.precision(precision);
 		mask.precision(precision);
 		fill = stream->fill();
@@ -435,10 +435,10 @@
 		std::ios_base::fmtflags flags = stream->flags();
 		base.flags(flags);
 		mask.flags(flags);
-		int width = stream->width();
+		int width = (int)stream->width();
 		base.width(width);
 		mask.width(width);
-		int precision = stream->precision();
+		int precision = (int)stream->precision();
 		base.precision(precision);
 		mask.precision(precision);
 		fill = stream->fill();
diff --git a/src/main/cpp/ndc.cpp b/src/main/cpp/ndc.cpp
index 87dfece..597f0fc 100644
--- a/src/main/cpp/ndc.cpp
+++ b/src/main/cpp/ndc.cpp
@@ -119,7 +119,7 @@
 
 	if (data != 0)
 	{
-		size = data->getStack().size();
+		size = (int)data->getStack().size();
 
 		if (size == 0)
 		{
diff --git a/src/main/cpp/odbcappender.cpp b/src/main/cpp/odbcappender.cpp
index 7832762..6bfa519 100644
--- a/src/main/cpp/odbcappender.cpp
+++ b/src/main/cpp/odbcappender.cpp
@@ -187,7 +187,7 @@
 			throw SQLException(SQL_HANDLE_STMT, stmt, "Failed to execute sql statement.", p);
 		}
 	}
-	catch (SQLException& e)
+	catch (SQLException&)
 	{
 		if (stmt != SQL_NULL_HSTMT)
 		{
diff --git a/src/main/cpp/optionconverter.cpp b/src/main/cpp/optionconverter.cpp
index 3325cc2..71a1513 100644
--- a/src/main/cpp/optionconverter.cpp
+++ b/src/main/cpp/optionconverter.cpp
@@ -187,14 +187,13 @@
 	const size_t DELIM_START_LEN = 2;
 	const size_t DELIM_STOP_LEN = 1;
 
-	int i = 0;
-	int j, k;
+	size_t i = 0;
 
 	while (true)
 	{
-		j = val.find(delimStart, i);
+		size_t j = val.find(delimStart, i);
 
-		if (j == -1)
+		if (j == val.npos)
 		{
 			// no more variables
 			if (i == 0)
@@ -212,9 +211,9 @@
 		else
 		{
 			sbuf.append(val.substr(i, j - i));
-			k = val.find(delimStop, j);
+			size_t k = val.find(delimStop, j);
 
-			if (k == -1)
+			if (k == val.npos)
 			{
 				LogString msg(1, (logchar) 0x22 /* '\"' */);
 				msg.append(val);
diff --git a/src/main/cpp/patternlayout.cpp b/src/main/cpp/patternlayout.cpp
index 1ba79ec..e3bd201 100644
--- a/src/main/cpp/patternlayout.cpp
+++ b/src/main/cpp/patternlayout.cpp
@@ -89,7 +89,7 @@
 		converterIter != patternConverters.end();
 		converterIter++, formatterIter++)
 	{
-		int startField = output.length();
+		int startField = (int)output.length();
 		(*converterIter)->format(event, output, pool);
 		(*formatterIter)->format(startField, output);
 	}
diff --git a/src/main/cpp/patternparser.cpp b/src/main/cpp/patternparser.cpp
index 121e2b3..6e45fde 100644
--- a/src/main/cpp/patternparser.cpp
+++ b/src/main/cpp/patternparser.cpp
@@ -55,7 +55,7 @@
 		|| (ch == 0x5F /* '_' */);
 }
 
-int PatternParser::extractConverter(
+size_t PatternParser::extractConverter(
 	logchar lastChar, const LogString& pattern,
 	LogString::size_type i, LogString& convBuf,
 	LogString& currentLiteral)
@@ -92,14 +92,14 @@
 }
 
 
-int PatternParser::extractOptions(const LogString& pattern, LogString::size_type i,
+size_t PatternParser::extractOptions(const LogString& pattern, LogString::size_type i,
 	std::vector<LogString>& options)
 {
 	while ((i < pattern.length()) && (pattern[i] == 0x7B /* '{' */))
 	{
-		int end = pattern.find(0x7D /* '}' */, i);
+		size_t end = pattern.find(0x7D /* '}' */, i);
 
-		if (end == -1)
+		if (end == pattern.npos)
 		{
 			break;
 		}
@@ -121,10 +121,10 @@
 
 	LogString currentLiteral;
 
-	int patternLength = pattern.length();
+	size_t patternLength = pattern.length();
 	int state = LITERAL_STATE;
 	logchar c;
-	int i = 0;
+	size_t i = 0;
 	FormattingInfoPtr formattingInfo(FormattingInfo::getDefault());
 
 	while (i < patternLength)
@@ -318,7 +318,7 @@
 
 	LogString converterName(converterId);
 
-	for (int i = converterId.length(); i > 0; i--)
+	for (size_t i = converterId.length(); i > 0; i--)
 	{
 		converterName = converterName.substr(0, i);
 		PatternMap::const_iterator iter = rules.find(converterName);
@@ -337,8 +337,8 @@
 	return converterObj;
 }
 
-int PatternParser::finalizeConverter(
-	logchar c, const LogString& pattern, int i,
+size_t PatternParser::finalizeConverter(
+	logchar c, const LogString& pattern, size_t i,
 	LogString& currentLiteral, const FormattingInfoPtr& formattingInfo,
 	const PatternMap&  rules,
 	std::vector<PatternConverterPtr>& patternConverters,
diff --git a/src/main/cpp/propertyconfigurator.cpp b/src/main/cpp/propertyconfigurator.cpp
index 56eb1d2..905f968 100644
--- a/src/main/cpp/propertyconfigurator.cpp
+++ b/src/main/cpp/propertyconfigurator.cpp
@@ -111,7 +111,7 @@
 		InputStreamPtr inputStream = new FileInputStream(configFileName);
 		props.load(inputStream);
 	}
-	catch (const IOException& ie)
+	catch (const IOException&)
 	{
 		LogLog::error(((LogString) LOG4CXX_STR("Could not read configuration file ["))
 			+ configFileName.getPath() + LOG4CXX_STR("]."));
diff --git a/src/main/cpp/propertysetter.cpp b/src/main/cpp/propertysetter.cpp
index c1ce878..a21a186 100644
--- a/src/main/cpp/propertysetter.cpp
+++ b/src/main/cpp/propertysetter.cpp
@@ -48,7 +48,7 @@
 	const LogString& prefix,
 	Pool& p)
 {
-	int len = prefix.length();
+	size_t len = prefix.length();
 
 	std::vector<LogString> names = properties.propertyNames();
 	std::vector<LogString>::iterator it;
diff --git a/src/main/cpp/rollingfileappender.cpp b/src/main/cpp/rollingfileappender.cpp
index 638dd23..dfabb3b 100644
--- a/src/main/cpp/rollingfileappender.cpp
+++ b/src/main/cpp/rollingfileappender.cpp
@@ -139,7 +139,7 @@
 
 			FileAppender::activateOptions(p);
 		}
-		catch (std::exception& ex)
+		catch (std::exception&)
 		{
 			LogLog::warn(
 				LogString(LOG4CXX_STR("Exception will initializing RollingFileAppender named "))
@@ -301,7 +301,7 @@
 								{
 									success = rollover1->getSynchronous()->execute(p);
 								}
-								catch (std::exception& ex)
+								catch (std::exception&)
 								{
 									LogLog::warn(LOG4CXX_STR("Exception on rollover"));
 								}
@@ -357,7 +357,7 @@
 								{
 									success = rollover1->getSynchronous()->execute(p);
 								}
-								catch (std::exception& ex)
+								catch (std::exception&)
 								{
 									LogLog::warn(LOG4CXX_STR("Exception during rollover"));
 								}
@@ -394,7 +394,7 @@
 						return true;
 					}
 				}
-				catch (std::exception& ex)
+				catch (std::exception&)
 				{
 					LogLog::warn(LOG4CXX_STR("Exception during rollover"));
 				}
@@ -452,7 +452,7 @@
 			_event = &(const_cast<LoggingEventPtr&>(event));
 			rollover(p);
 		}
-		catch (std::exception& ex)
+		catch (std::exception&)
 		{
 			LogLog::warn(LOG4CXX_STR("Exception during rollover attempt."));
 		}
diff --git a/src/main/cpp/socketappender.cpp b/src/main/cpp/socketappender.cpp
index 06d7b39..5b3e158 100644
--- a/src/main/cpp/socketappender.cpp
+++ b/src/main/cpp/socketappender.cpp
@@ -96,7 +96,7 @@
 		oos->close(p);
 		oos = 0;
 	}
-	catch (std::exception& e)
+	catch (std::exception&)
 	{}
 }
 
diff --git a/src/main/cpp/telnetappender.cpp b/src/main/cpp/telnetappender.cpp
index 438616c..79b6edc 100644
--- a/src/main/cpp/telnetappender.cpp
+++ b/src/main/cpp/telnetappender.cpp
@@ -137,7 +137,7 @@
 	{
 		sh.join();
 	}
-	catch (Exception& ex)
+	catch (Exception&)
 	{
 	}
 
@@ -158,7 +158,7 @@
 				ByteBuffer b(buf.current(), buf.remaining());
 				(*iter)->write(b);
 			}
-			catch (Exception& ex)
+			catch (Exception&)
 			{
 				// The client has closed the connection, remove it from our list:
 				*iter = 0;
@@ -279,7 +279,7 @@
 				pThis->writeStatus(newClient, oss, p);
 			}
 		}
-		catch (InterruptedIOException& e)
+		catch (InterruptedIOException&)
 		{
 			if (pThis->closed)
 			{
diff --git a/src/main/cpp/xmlsocketappender.cpp b/src/main/cpp/xmlsocketappender.cpp
index fe83c4d..98356db 100644
--- a/src/main/cpp/xmlsocketappender.cpp
+++ b/src/main/cpp/xmlsocketappender.cpp
@@ -99,7 +99,7 @@
 			writer->close(p);
 			writer = 0;
 		}
-		catch (std::exception& e)
+		catch (std::exception&)
 		{
 		}
 	}
diff --git a/src/main/include/log4cxx/consoleappender.h b/src/main/include/log4cxx/consoleappender.h
index d30fef4..51e0c21 100644
--- a/src/main/include/log4cxx/consoleappender.h
+++ b/src/main/include/log4cxx/consoleappender.h
@@ -20,6 +20,11 @@
 
 #include <log4cxx/writerappender.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 namespace log4cxx
 {
 
@@ -74,5 +79,9 @@
 LOG4CXX_PTR_DEF(ConsoleAppender);
 }  //namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif //_LOG4CXX_CONSOLE_APPENDER_H
 
diff --git a/src/main/include/log4cxx/file.h b/src/main/include/log4cxx/file.h
index 13847d5..661484c 100644
--- a/src/main/include/log4cxx/file.h
+++ b/src/main/include/log4cxx/file.h
@@ -21,6 +21,11 @@
 #include <log4cxx/logger.h>
 #include <log4cxx/logstring.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 extern "C" {
 	struct apr_file_t;
 	struct apr_finfo_t;
@@ -184,6 +189,10 @@
 } // namespace log4cxx
 
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #define LOG4CXX_FILE(name) log4cxx::File(name)
 
 #endif // _LOG4CXX_FILE_H
diff --git a/src/main/include/log4cxx/fileappender.h b/src/main/include/log4cxx/fileappender.h
index 468f135..3cdcaca 100644
--- a/src/main/include/log4cxx/fileappender.h
+++ b/src/main/include/log4cxx/fileappender.h
@@ -24,6 +24,11 @@
 #include <log4cxx/file.h>
 #include <log4cxx/helpers/pool.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 namespace log4cxx
 {
 namespace helpers
@@ -236,4 +241,8 @@
 
 }  // namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif
diff --git a/src/main/include/log4cxx/filter/stringmatchfilter.h b/src/main/include/log4cxx/filter/stringmatchfilter.h
index a244e3c..0e1745c 100644
--- a/src/main/include/log4cxx/filter/stringmatchfilter.h
+++ b/src/main/include/log4cxx/filter/stringmatchfilter.h
@@ -20,6 +20,11 @@
 
 #include <log4cxx/spi/filter.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 namespace log4cxx
 {
 namespace filter
@@ -97,4 +102,8 @@
 }  // namespace filter
 } // namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif // _LOG4CXX_FILTER_STRING_MATCH_FILTER_H
diff --git a/src/main/include/log4cxx/helpers/bufferedwriter.h b/src/main/include/log4cxx/helpers/bufferedwriter.h
index 2ed9f2c..a193221 100644
--- a/src/main/include/log4cxx/helpers/bufferedwriter.h
+++ b/src/main/include/log4cxx/helpers/bufferedwriter.h
@@ -20,6 +20,11 @@
 
 #include <log4cxx/helpers/writer.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 namespace log4cxx
 {
 
@@ -61,4 +66,8 @@
 
 }  //namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif //_LOG4CXX_HELPERS_BUFFEREDWRITER_H
diff --git a/src/main/include/log4cxx/helpers/cacheddateformat.h b/src/main/include/log4cxx/helpers/cacheddateformat.h
index 2f4cb7b..703b8ce 100644
--- a/src/main/include/log4cxx/helpers/cacheddateformat.h
+++ b/src/main/include/log4cxx/helpers/cacheddateformat.h
@@ -20,6 +20,11 @@
 
 #include <log4cxx/helpers/dateformat.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 namespace log4cxx
 {
 namespace pattern
@@ -223,4 +228,8 @@
 }  // namespace helpers
 } // namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif // _LOG4CXX_HELPERS_SIMPLE_DATE_FORMAT_H
diff --git a/src/main/include/log4cxx/helpers/datelayout.h b/src/main/include/log4cxx/helpers/datelayout.h
index 6796d9f..39e5c3f 100644
--- a/src/main/include/log4cxx/helpers/datelayout.h
+++ b/src/main/include/log4cxx/helpers/datelayout.h
@@ -22,6 +22,11 @@
 #include <log4cxx/helpers/dateformat.h>
 #include <log4cxx/helpers/timezone.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 namespace log4cxx
 {
 namespace helpers
@@ -96,4 +101,8 @@
 }  // namespace helpers
 } // namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif // _LOG4CXX_HELPERS_DATE_LAYOUT_H
diff --git a/src/main/include/log4cxx/helpers/exception.h b/src/main/include/log4cxx/helpers/exception.h
index 0a1a8b0..2749544 100644
--- a/src/main/include/log4cxx/helpers/exception.h
+++ b/src/main/include/log4cxx/helpers/exception.h
@@ -22,6 +22,11 @@
 #include <log4cxx/log4cxx.h>
 #include <log4cxx/logstring.h>
 
+#ifdef _MSC_VER
+	#pragma warning ( push )
+	#pragma warning (disable : 4251 4275) // ::std::exception needs to have dll-interface
+#endif
+
 namespace log4cxx
 {
 namespace helpers
@@ -288,4 +293,8 @@
 }  // namespace helpers
 } // namespace log4cxx
 
+#if defined(_MSC_VER)
+	#pragma warning (pop)
+#endif
+
 #endif // _LOG4CXX_HELPERS_EXCEPTION_H
diff --git a/src/main/include/log4cxx/helpers/locale.h b/src/main/include/log4cxx/helpers/locale.h
index 5e86079..0ea8610 100644
--- a/src/main/include/log4cxx/helpers/locale.h
+++ b/src/main/include/log4cxx/helpers/locale.h
@@ -20,6 +20,11 @@
 
 #include <log4cxx/logstring.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 namespace log4cxx
 {
 namespace helpers
@@ -46,4 +51,8 @@
 }  // namespace helpers
 } // namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif // _LOG4CXX_HELPERS_LOCALE_H
diff --git a/src/main/include/log4cxx/helpers/messagebuffer.h b/src/main/include/log4cxx/helpers/messagebuffer.h
index f3ed836..8b226ff 100644
--- a/src/main/include/log4cxx/helpers/messagebuffer.h
+++ b/src/main/include/log4cxx/helpers/messagebuffer.h
@@ -22,6 +22,11 @@
 #include <log4cxx/logstring.h>
 #include <sstream>
 
+#if defined(_MSC_VER)
+	#pragma warning ( push )
+	#pragma warning ( disable: 4251 4275 )
+#endif
+
 namespace log4cxx
 {
 
@@ -837,5 +842,10 @@
 
 }
 }
+
+#if defined(_MSC_VER)
+	#pragma warning (pop)
+#endif
+
 #endif
 
diff --git a/src/main/include/log4cxx/helpers/onlyonceerrorhandler.h b/src/main/include/log4cxx/helpers/onlyonceerrorhandler.h
index e817812..a29ecf2 100644
--- a/src/main/include/log4cxx/helpers/onlyonceerrorhandler.h
+++ b/src/main/include/log4cxx/helpers/onlyonceerrorhandler.h
@@ -21,6 +21,11 @@
 #include <log4cxx/spi/errorhandler.h>
 #include <log4cxx/helpers/objectimpl.h>
 
+#ifdef _MSC_VER
+#pragma warning ( push )
+#pragma warning (disable : 4251) // ::std::exception needs to have dll-interface
+#endif
+
 namespace log4cxx
 {
 namespace helpers
@@ -99,5 +104,9 @@
 }  // namespace helpers
 } // namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif //_LOG4CXX_HELPERS_ONLY_ONCE_ERROR_HANDLER_H
 
diff --git a/src/main/include/log4cxx/helpers/strftimedateformat.h b/src/main/include/log4cxx/helpers/strftimedateformat.h
index a9b3ff7..9f7e20d 100644
--- a/src/main/include/log4cxx/helpers/strftimedateformat.h
+++ b/src/main/include/log4cxx/helpers/strftimedateformat.h
@@ -20,6 +20,11 @@
 
 #include <log4cxx/helpers/dateformat.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 namespace log4cxx
 {
 namespace helpers
@@ -65,4 +70,8 @@
 }  // namespace helpers
 } // namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif // _LOG4CXX_HELPERS_STRFTIME_DATE_FORMAT_H
diff --git a/src/main/include/log4cxx/helpers/stringtokenizer.h b/src/main/include/log4cxx/helpers/stringtokenizer.h
index f227724..608fa4e 100644
--- a/src/main/include/log4cxx/helpers/stringtokenizer.h
+++ b/src/main/include/log4cxx/helpers/stringtokenizer.h
@@ -21,6 +21,11 @@
 #include <log4cxx/logstring.h>
 #include <log4cxx/helpers/exception.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 namespace log4cxx
 {
 namespace helpers
@@ -46,4 +51,8 @@
 }  // namespace helpers;
 } // namespace log4cxx;
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif //_LOG4CXX_HELPERS_STRING_TOKENIZER_H
diff --git a/src/main/include/log4cxx/helpers/syslogwriter.h b/src/main/include/log4cxx/helpers/syslogwriter.h
index faeb565..46a259f 100644
--- a/src/main/include/log4cxx/helpers/syslogwriter.h
+++ b/src/main/include/log4cxx/helpers/syslogwriter.h
@@ -23,6 +23,11 @@
 #include <log4cxx/helpers/inetaddress.h>
 #include <log4cxx/helpers/datagramsocket.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 namespace log4cxx
 {
 namespace helpers
@@ -47,4 +52,8 @@
 }  // namespace helpers
 } // namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif
diff --git a/src/main/include/log4cxx/helpers/threadspecificdata.h b/src/main/include/log4cxx/helpers/threadspecificdata.h
index 66b8307..f6fcae0 100644
--- a/src/main/include/log4cxx/helpers/threadspecificdata.h
+++ b/src/main/include/log4cxx/helpers/threadspecificdata.h
@@ -21,6 +21,10 @@
 #include <log4cxx/ndc.h>
 #include <log4cxx/mdc.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
 
 namespace log4cxx
 {
@@ -64,4 +68,8 @@
 }  // namespace helpers
 } // namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif
diff --git a/src/main/include/log4cxx/helpers/timezone.h b/src/main/include/log4cxx/helpers/timezone.h
index 1a105d0..8a6f4bd 100644
--- a/src/main/include/log4cxx/helpers/timezone.h
+++ b/src/main/include/log4cxx/helpers/timezone.h
@@ -22,6 +22,11 @@
 #include <log4cxx/helpers/objectimpl.h>
 #include <log4cxx/helpers/objectptr.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 struct apr_time_exp_t;
 
 namespace log4cxx
@@ -68,4 +73,8 @@
 }
 }
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif //_LOG4CXX_HELPERS_TIMEZONE_H
diff --git a/src/main/include/log4cxx/jsonlayout.h b/src/main/include/log4cxx/jsonlayout.h
index dd997d1..f49daed 100644
--- a/src/main/include/log4cxx/jsonlayout.h
+++ b/src/main/include/log4cxx/jsonlayout.h
@@ -22,6 +22,10 @@
 #include <log4cxx/helpers/iso8601dateformat.h>
 #include <log4cxx/spi/loggingevent.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
 
 
 namespace log4cxx
@@ -135,5 +139,8 @@
 LOG4CXX_PTR_DEF(JSONLayout);
 }  // namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
 
 #endif // _LOG4CXX_JSON_LAYOUT_H
diff --git a/src/main/include/log4cxx/level.h b/src/main/include/log4cxx/level.h
index 034fb89..18ee6a1 100644
--- a/src/main/include/log4cxx/level.h
+++ b/src/main/include/log4cxx/level.h
@@ -24,6 +24,10 @@
 #include <log4cxx/helpers/objectimpl.h>
 #include <log4cxx/helpers/objectptr.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
 
 namespace log4cxx
 {
@@ -330,5 +334,8 @@
 #define IMPLEMENT_LOG4CXX_LEVEL(level) \
 	IMPLEMENT_LOG4CXX_OBJECT_WITH_CUSTOM_CLASS(level, Class##level)
 
+#if defined(_MSC_VER)
+ #pragma warning (pop)
+#endif
 
 #endif //_LOG4CXX_LEVEL_H
diff --git a/src/main/include/log4cxx/logstring.h b/src/main/include/log4cxx/logstring.h
index 37b201b..f854fc3 100644
--- a/src/main/include/log4cxx/logstring.h
+++ b/src/main/include/log4cxx/logstring.h
@@ -37,8 +37,6 @@
 }
 #endif
 
-
-
 namespace log4cxx
 {
 
diff --git a/src/main/include/log4cxx/mdc.h b/src/main/include/log4cxx/mdc.h
index 6088099..49214cf 100644
--- a/src/main/include/log4cxx/mdc.h
+++ b/src/main/include/log4cxx/mdc.h
@@ -18,17 +18,18 @@
 #ifndef _LOG4CXX_MDC_H
 #define _LOG4CXX_MDC_H
 
+#include <log4cxx/log4cxx.h>
+#include <log4cxx/logstring.h>
+#include <map>
+
 #if defined(_MSC_VER)
 	#pragma warning (push)
 	#pragma warning ( disable: 4231 4251 4275 4786 )
 #endif
 
-#include <log4cxx/log4cxx.h>
-#include <log4cxx/logstring.h>
-#include <map>
-
 namespace log4cxx
 {
+
 /**
 The MDC class is similar to the {@link log4cxx::NDC NDC} class except that it is
 based on a map instead of a stack. It provides <em>mapped
diff --git a/src/main/include/log4cxx/ndc.h b/src/main/include/log4cxx/ndc.h
index ec3c65a..704e0a7 100644
--- a/src/main/include/log4cxx/ndc.h
+++ b/src/main/include/log4cxx/ndc.h
@@ -18,17 +18,18 @@
 #ifndef _LOG4CXX_NDC_H
 #define _LOG4CXX_NDC_H
 
+#include <log4cxx/log4cxx.h>
+#include <log4cxx/logstring.h>
+#include <stack>
+
 #if defined(_MSC_VER)
 	#pragma warning ( push )
 	#pragma warning ( disable: 4231 4251 4275 4786 )
 #endif
 
-#include <log4cxx/log4cxx.h>
-#include <log4cxx/logstring.h>
-#include <stack>
-
 namespace log4cxx
 {
+
 /**
 the ndc class implements <i>nested diagnostic contexts</i> as
 defined by neil harrison in the article "patterns for logging
diff --git a/src/main/include/log4cxx/net/smtpappender.h b/src/main/include/log4cxx/net/smtpappender.h
index 35e1d59..fb1b275 100644
--- a/src/main/include/log4cxx/net/smtpappender.h
+++ b/src/main/include/log4cxx/net/smtpappender.h
@@ -23,6 +23,11 @@
 #include <log4cxx/helpers/cyclicbuffer.h>
 #include <log4cxx/spi/triggeringeventevaluator.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 namespace log4cxx
 {
 namespace net
@@ -282,4 +287,8 @@
 }  // namespace net
 } // namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif // _LOG4CXX_NET_SMTP_H
diff --git a/src/main/include/log4cxx/net/socketappenderskeleton.h b/src/main/include/log4cxx/net/socketappenderskeleton.h
index 5f2b162..5772796 100644
--- a/src/main/include/log4cxx/net/socketappenderskeleton.h
+++ b/src/main/include/log4cxx/net/socketappenderskeleton.h
@@ -23,6 +23,11 @@
 #include <log4cxx/helpers/thread.h>
 #include <log4cxx/helpers/objectoutputstream.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 namespace log4cxx
 {
 
@@ -193,5 +198,9 @@
 } // namespace net
 } // namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif // _LOG4CXX_NET_SOCKET_APPENDER_SKELETON_H
 
diff --git a/src/main/include/log4cxx/net/syslogappender.h b/src/main/include/log4cxx/net/syslogappender.h
index 94df945..d044ec5 100644
--- a/src/main/include/log4cxx/net/syslogappender.h
+++ b/src/main/include/log4cxx/net/syslogappender.h
@@ -21,6 +21,11 @@
 #include <log4cxx/appenderskeleton.h>
 #include <log4cxx/helpers/syslogwriter.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 namespace log4cxx
 {
 namespace net
@@ -148,5 +153,9 @@
 } // namespace net
 } // namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif // _LOG4CXX_NET_SYSLOG_APPENDER_H
 
diff --git a/src/main/include/log4cxx/nt/nteventlogappender.h b/src/main/include/log4cxx/nt/nteventlogappender.h
index a0ca67b..0e55a27 100644
--- a/src/main/include/log4cxx/nt/nteventlogappender.h
+++ b/src/main/include/log4cxx/nt/nteventlogappender.h
@@ -20,6 +20,11 @@
 
 #include <log4cxx/appenderskeleton.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 
 namespace log4cxx
 {
@@ -122,4 +127,7 @@
 }  // namespace nt
 } // namespace log4cxx
 
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
 #endif //_LOG4CXX_NT_EVENT_LOG_APPENDER_HEADER_
diff --git a/src/main/include/log4cxx/pattern/literalpatternconverter.h b/src/main/include/log4cxx/pattern/literalpatternconverter.h
index 283e445..0eb2702 100644
--- a/src/main/include/log4cxx/pattern/literalpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/literalpatternconverter.h
@@ -20,6 +20,11 @@
 
 #include <log4cxx/pattern/loggingeventpatternconverter.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 namespace log4cxx
 {
 namespace pattern
@@ -68,5 +73,10 @@
 
 }
 }
+
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 #endif
 
diff --git a/src/main/include/log4cxx/pattern/patternparser.h b/src/main/include/log4cxx/pattern/patternparser.h
index 7f58470..39f4529 100644
--- a/src/main/include/log4cxx/pattern/patternparser.h
+++ b/src/main/include/log4cxx/pattern/patternparser.h
@@ -90,7 +90,7 @@
 		 * @param currentLiteral literal to be output in case format specifier in unrecognized.
 		 * @return position in pattern after converter.
 		 */
-		static int extractConverter(
+		static size_t extractConverter(
 			logchar lastChar, const LogString& pattern,
 			LogString::size_type i, LogString& convBuf,
 			LogString& currentLiteral);
@@ -102,7 +102,7 @@
 		 * @param options array to receive extracted options
 		 * @return position in pattern after options.
 		 */
-		static int extractOptions(const LogString& pattern, LogString::size_type i,
+		static size_t extractOptions(const LogString& pattern, LogString::size_type i,
 			std::vector<LogString>& options);
 
 	public:
@@ -150,8 +150,8 @@
 		 * @param formattingInfos list to receive corresponding field specifier.
 		 * @return position after format specifier sequence.
 		 */
-		static int finalizeConverter(
-			logchar c, const LogString& pattern, int i,
+		static size_t finalizeConverter(
+			logchar c, const LogString& pattern, size_t i,
 			LogString& currentLiteral, const FormattingInfoPtr& formattingInfo,
 			const PatternMap&  rules,
 			std::vector<PatternConverterPtr>& patternConverters,
diff --git a/src/main/include/log4cxx/rolling/timebasedrollingpolicy.h b/src/main/include/log4cxx/rolling/timebasedrollingpolicy.h
index 92e757c..e51dd56 100755
--- a/src/main/include/log4cxx/rolling/timebasedrollingpolicy.h
+++ b/src/main/include/log4cxx/rolling/timebasedrollingpolicy.h
@@ -26,6 +26,11 @@
 #include <log4cxx/helpers/outputstream.h>
 #include <apr_mmap.h>
 
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4251 )
+#endif
+
 namespace log4cxx
 {
 
@@ -292,5 +297,9 @@
 }
 }
 
+#if defined(_MSC_VER)
+#pragma warning ( pop )
+#endif
+
 #endif
 
diff --git a/src/test/cpp/asyncappendertestcase.cpp b/src/test/cpp/asyncappendertestcase.cpp
index d2b4b41..6661e4f 100644
--- a/src/test/cpp/asyncappendertestcase.cpp
+++ b/src/test/cpp/asyncappendertestcase.cpp
@@ -113,202 +113,187 @@
  */
 class AsyncAppenderTestCase : public AppenderSkeletonTestCase
 {
-		LOGUNIT_TEST_SUITE(AsyncAppenderTestCase);
-		//
-		//    tests inherited from AppenderSkeletonTestCase
-		//
-		LOGUNIT_TEST(testDefaultThreshold);
-		LOGUNIT_TEST(testSetOptionThreshold);
+        LOGUNIT_TEST_SUITE(AsyncAppenderTestCase);
+                //
+                //    tests inherited from AppenderSkeletonTestCase
+                //
+                LOGUNIT_TEST(testDefaultThreshold);
+                LOGUNIT_TEST(testSetOptionThreshold);
 
-		LOGUNIT_TEST(closeTest);
-		LOGUNIT_TEST(test2);
-		LOGUNIT_TEST(test3);
-		//
-		//   TODO: test fails on Linux.
-		//LOGUNIT_TEST(testBadAppender);
-		LOGUNIT_TEST(testLocationInfoTrue);
-		LOGUNIT_TEST(testConfiguration);
-		LOGUNIT_TEST_SUITE_END();
+                LOGUNIT_TEST(closeTest);
+                LOGUNIT_TEST(test2);
+                LOGUNIT_TEST(test3);
+                //
+                //   TODO: test fails on Linux.
+                //LOGUNIT_TEST(testBadAppender);
+                LOGUNIT_TEST(testLocationInfoTrue);
+                LOGUNIT_TEST(testConfiguration);
+        LOGUNIT_TEST_SUITE_END();
 
 
-	public:
-		void setUp()
-		{
-			AppenderSkeletonTestCase::setUp();
-		}
+public:
+        void setUp() {
+           AppenderSkeletonTestCase::setUp();
+        }
 
-		void tearDown()
-		{
-			LogManager::shutdown();
-			AppenderSkeletonTestCase::tearDown();
-		}
+        void tearDown()
+        {
+                LogManager::shutdown();
+                AppenderSkeletonTestCase::tearDown();
+        }
 
-		AppenderSkeleton* createAppenderSkeleton() const
-		{
-			return new AsyncAppender();
-		}
+        AppenderSkeleton* createAppenderSkeleton() const {
+          return new AsyncAppender();
+        }
 
-		// this test checks whether it is possible to write to a closed AsyncAppender
-		void closeTest()
-		{
-			LoggerPtr root = Logger::getRootLogger();
-			LayoutPtr layout = new SimpleLayout();
-			VectorAppenderPtr vectorAppender = new VectorAppender();
-			AsyncAppenderPtr asyncAppender = new AsyncAppender();
-			asyncAppender->setName(LOG4CXX_STR("async-CloseTest"));
-			asyncAppender->addAppender(vectorAppender);
-			root->addAppender(asyncAppender);
+        // this test checks whether it is possible to write to a closed AsyncAppender
+        void closeTest() 
+        {
+                LoggerPtr root = Logger::getRootLogger();
+                LayoutPtr layout = new SimpleLayout();
+                VectorAppenderPtr vectorAppender = new VectorAppender();
+                AsyncAppenderPtr asyncAppender = new AsyncAppender();
+                asyncAppender->setName(LOG4CXX_STR("async-CloseTest"));
+                asyncAppender->addAppender(vectorAppender);
+                root->addAppender(asyncAppender);
 
-			root->debug(LOG4CXX_TEST_STR("m1"));
-			asyncAppender->close();
-			root->debug(LOG4CXX_TEST_STR("m2"));
+                root->debug(LOG4CXX_TEST_STR("m1"));
+                asyncAppender->close();
+                root->debug(LOG4CXX_TEST_STR("m2"));
 
-			const std::vector<spi::LoggingEventPtr>& v = vectorAppender->getVector();
-			LOGUNIT_ASSERT_EQUAL((size_t) 1, v.size());
-		}
+                const std::vector<spi::LoggingEventPtr>& v = vectorAppender->getVector();
+                LOGUNIT_ASSERT_EQUAL((size_t) 1, v.size());
+        }
 
-		// this test checks whether appenders embedded within an AsyncAppender are also
-		// closed
-		void test2()
-		{
-			LoggerPtr root = Logger::getRootLogger();
-			LayoutPtr layout = new SimpleLayout();
-			VectorAppenderPtr vectorAppender = new VectorAppender();
-			AsyncAppenderPtr asyncAppender = new AsyncAppender();
-			asyncAppender->setName(LOG4CXX_STR("async-test2"));
-			asyncAppender->addAppender(vectorAppender);
-			root->addAppender(asyncAppender);
+        // this test checks whether appenders embedded within an AsyncAppender are also
+        // closed
+        void test2()
+        {
+                LoggerPtr root = Logger::getRootLogger();
+                LayoutPtr layout = new SimpleLayout();
+                VectorAppenderPtr vectorAppender = new VectorAppender();
+                AsyncAppenderPtr asyncAppender = new AsyncAppender();
+                asyncAppender->setName(LOG4CXX_STR("async-test2"));
+                asyncAppender->addAppender(vectorAppender);
+                root->addAppender(asyncAppender);
 
-			root->debug(LOG4CXX_TEST_STR("m1"));
-			asyncAppender->close();
-			root->debug(LOG4CXX_TEST_STR("m2"));
+                root->debug(LOG4CXX_TEST_STR("m1"));
+                asyncAppender->close();
+                root->debug(LOG4CXX_TEST_STR("m2"));
 
-			const std::vector<spi::LoggingEventPtr>& v = vectorAppender->getVector();
-			LOGUNIT_ASSERT_EQUAL((size_t) 1, v.size());
-			LOGUNIT_ASSERT(vectorAppender->isClosed());
-		}
+                const std::vector<spi::LoggingEventPtr>& v = vectorAppender->getVector();
+                LOGUNIT_ASSERT_EQUAL((size_t) 1, v.size());
+                LOGUNIT_ASSERT(vectorAppender->isClosed());
+        }
 
-		// this test checks whether appenders embedded within an AsyncAppender are also
-		// closed
-		void test3()
-		{
-			size_t LEN = 200;
-			LoggerPtr root = Logger::getRootLogger();
-			VectorAppenderPtr vectorAppender = new VectorAppender();
-			AsyncAppenderPtr asyncAppender = new AsyncAppender();
-			asyncAppender->setName(LOG4CXX_STR("async-test3"));
-			asyncAppender->addAppender(vectorAppender);
-			root->addAppender(asyncAppender);
+        // this test checks whether appenders embedded within an AsyncAppender are also
+        // closed
+        void test3()
+        {
+                size_t LEN = 200;
+                LoggerPtr root = Logger::getRootLogger();
+                VectorAppenderPtr vectorAppender = new VectorAppender();
+                AsyncAppenderPtr asyncAppender = new AsyncAppender();
+                asyncAppender->setName(LOG4CXX_STR("async-test3"));
+                asyncAppender->addAppender(vectorAppender);
+                root->addAppender(asyncAppender);
 
-			for (size_t i = 0; i < LEN; i++)
-			{
-				LOG4CXX_DEBUG(root, "message" << i);
-			}
+                for (size_t i = 0; i < LEN; i++) {
+                        LOG4CXX_DEBUG(root, "message" << i);
+                }
 
-			asyncAppender->close();
-			root->debug(LOG4CXX_TEST_STR("m2"));
+                asyncAppender->close();
+                root->debug(LOG4CXX_TEST_STR("m2"));
 
-			const std::vector<spi::LoggingEventPtr>& v = vectorAppender->getVector();
-			LOGUNIT_ASSERT_EQUAL(LEN, v.size());
-			LOGUNIT_ASSERT_EQUAL(true, vectorAppender->isClosed());
-		}
-
-		/**
-		 * Tests that a bad appender will switch async back to sync.
-		 */
-		void testBadAppender()
-		{
-			AppenderPtr nullPointerAppender = new NullPointerAppender();
-			AsyncAppenderPtr asyncAppender = new AsyncAppender();
-			asyncAppender->addAppender(nullPointerAppender);
-			asyncAppender->setBufferSize(5);
-			Pool p;
-			asyncAppender->activateOptions(p);
-			LoggerPtr root = Logger::getRootLogger();
-			root->addAppender(asyncAppender);
-			LOG4CXX_INFO(root, "Message");
-			Thread::sleep(10);
-
-			try
-			{
-				LOG4CXX_INFO(root, "Message");
-				LOGUNIT_FAIL("Should have thrown exception");
-			}
-			catch (NullPointerException& ex)
-			{
-			}
-		}
-
-		/**
-		 * Tests non-blocking behavior.
-		 */
-		void testLocationInfoTrue()
-		{
-			BlockableVectorAppenderPtr blockableAppender = new BlockableVectorAppender();
-			AsyncAppenderPtr async = new AsyncAppender();
-			async->addAppender(blockableAppender);
-			async->setBufferSize(5);
-			async->setLocationInfo(true);
-			async->setBlocking(false);
-			Pool p;
-			async->activateOptions(p);
-			LoggerPtr rootLogger = Logger::getRootLogger();
-			rootLogger->addAppender(async);
-			{
-				synchronized sync(blockableAppender->getBlocker());
-
-				for (int i = 0; i < 140; i++)
-				{
-					LOG4CXX_INFO(rootLogger, "Hello, World");
-					Thread::sleep(1);
-				}
-
-				LOG4CXX_ERROR(rootLogger, "That's all folks.");
-			}
-			async->close();
-			const std::vector<spi::LoggingEventPtr>& events = blockableAppender->getVector();
-			LOGUNIT_ASSERT(events.size() > 0);
-			LoggingEventPtr initialEvent = events[0];
-			LoggingEventPtr discardEvent = events[events.size() - 1];
-			LOGUNIT_ASSERT(initialEvent->getMessage() == LOG4CXX_STR("Hello, World"));
-			LOGUNIT_ASSERT(discardEvent->getMessage().substr(0, 10) == LOG4CXX_STR("Discarded "));
-			LOGUNIT_ASSERT_EQUAL(log4cxx::spi::LocationInfo::getLocationUnavailable().getClassName(),
-				discardEvent->getLocationInformation().getClassName());
-		}
-
-		void testConfiguration()
-		{
-			log4cxx::xml::DOMConfigurator::configure("input/xml/asyncAppender1.xml");
-			AsyncAppenderPtr asyncAppender(Logger::getRootLogger()->getAppender(LOG4CXX_STR("ASYNC")));
-			LOGUNIT_ASSERT(!(asyncAppender == 0));
-			LOGUNIT_ASSERT_EQUAL(100, asyncAppender->getBufferSize());
-			LOGUNIT_ASSERT_EQUAL(false, asyncAppender->getBlocking());
-			LOGUNIT_ASSERT_EQUAL(true, asyncAppender->getLocationInfo());
-			AppenderList nestedAppenders(asyncAppender->getAllAppenders());
-			//   TODO:
-			//   test seems to work okay, but have not found a working way to
-			//      get a reference to the nested vector appender
-			//
-			//              LOGUNIT_ASSERT_EQUAL((size_t) 1, nestedAppenders.size());
-			//              VectorAppenderPtr vectorAppender(nestedAppenders[0]);
-			//              LOGUNIT_ASSERT(0 != vectorAppender);
-			LoggerPtr root(Logger::getRootLogger());
-
-			size_t LEN = 20;
-
-			for (size_t i = 0; i < LEN; i++)
-			{
-				LOG4CXX_DEBUG(root, "message" << i);
-			}
-
-			asyncAppender->close();
-			//              const std::vector<spi::LoggingEventPtr>& v = vectorAppender->getVector();
-			//              LOGUNIT_ASSERT_EQUAL(LEN, v.size());
-			//              LOGUNIT_ASSERT_EQUAL(true, vectorAppender->isClosed());
-		}
+                const std::vector<spi::LoggingEventPtr>& v = vectorAppender->getVector();
+                LOGUNIT_ASSERT_EQUAL(LEN, v.size());
+                LOGUNIT_ASSERT_EQUAL(true, vectorAppender->isClosed());
+        }
+        
+    /**
+     * Tests that a bad appender will switch async back to sync.
+     */
+    void testBadAppender() {
+        AppenderPtr nullPointerAppender = new NullPointerAppender();
+        AsyncAppenderPtr asyncAppender = new AsyncAppender();
+        asyncAppender->addAppender(nullPointerAppender);
+        asyncAppender->setBufferSize(5);
+        Pool p;
+        asyncAppender->activateOptions(p);
+        LoggerPtr root = Logger::getRootLogger();
+        root->addAppender(asyncAppender);
+        LOG4CXX_INFO(root, "Message");
+        Thread::sleep(10);
+        try {
+           LOG4CXX_INFO(root, "Message");
+           LOGUNIT_FAIL("Should have thrown exception");
+        } catch(NullPointerException&) {
+        }
+    }
+    
+    /**
+     * Tests non-blocking behavior.
+     */
+    void testLocationInfoTrue() {
+        BlockableVectorAppenderPtr blockableAppender = new BlockableVectorAppender();
+        AsyncAppenderPtr async = new AsyncAppender();
+        async->addAppender(blockableAppender);
+        async->setBufferSize(5);
+        async->setLocationInfo(true);
+        async->setBlocking(false);
+        Pool p;
+        async->activateOptions(p);
+        LoggerPtr rootLogger = Logger::getRootLogger();
+        rootLogger->addAppender(async);
+        {
+            synchronized sync(blockableAppender->getBlocker());
+            for (int i = 0; i < 140; i++) {
+                   LOG4CXX_INFO(rootLogger, "Hello, World");
+                   Thread::sleep(1);
+            }
+            LOG4CXX_ERROR(rootLogger, "That's all folks.");
+        }
+        async->close();
+        const std::vector<spi::LoggingEventPtr>& events = blockableAppender->getVector();
+        LOGUNIT_ASSERT(events.size() > 0);
+        LoggingEventPtr initialEvent = events[0];
+        LoggingEventPtr discardEvent = events[events.size() - 1];
+        LOGUNIT_ASSERT(initialEvent->getMessage() == LOG4CXX_STR("Hello, World"));
+        LOGUNIT_ASSERT(discardEvent->getMessage().substr(0,10) == LOG4CXX_STR("Discarded "));
+        LOGUNIT_ASSERT_EQUAL(log4cxx::spi::LocationInfo::getLocationUnavailable().getClassName(), 
+            discardEvent->getLocationInformation().getClassName()); 
+    }
+    
+        void testConfiguration() {
+              log4cxx::xml::DOMConfigurator::configure("input/xml/asyncAppender1.xml");
+              AsyncAppenderPtr asyncAppender(Logger::getRootLogger()->getAppender(LOG4CXX_STR("ASYNC")));
+              LOGUNIT_ASSERT(!(asyncAppender == 0));
+              LOGUNIT_ASSERT_EQUAL(100, asyncAppender->getBufferSize());
+              LOGUNIT_ASSERT_EQUAL(false, asyncAppender->getBlocking());
+              LOGUNIT_ASSERT_EQUAL(true, asyncAppender->getLocationInfo());
+              AppenderList nestedAppenders(asyncAppender->getAllAppenders());
+              //   TODO:
+              //   test seems to work okay, but have not found a working way to 
+              //      get a reference to the nested vector appender 
+              //
+//              LOGUNIT_ASSERT_EQUAL((size_t) 1, nestedAppenders.size());
+//              VectorAppenderPtr vectorAppender(nestedAppenders[0]);
+//              LOGUNIT_ASSERT(0 != vectorAppender);
+              LoggerPtr root(Logger::getRootLogger()); 
+              
+              size_t LEN = 20;
+              for (size_t i = 0; i < LEN; i++) {
+                        LOG4CXX_DEBUG(root, "message" << i);
+              }
+              
+              asyncAppender->close();
+//              const std::vector<spi::LoggingEventPtr>& v = vectorAppender->getVector();
+//              LOGUNIT_ASSERT_EQUAL(LEN, v.size());
+//              LOGUNIT_ASSERT_EQUAL(true, vectorAppender->isClosed());
+        }
 
 
-};
+};        
 
 LOGUNIT_TEST_SUITE_REGISTRATION(AsyncAppenderTestCase);
 #endif
diff --git a/src/test/cpp/util/serializationtesthelper.cpp b/src/test/cpp/util/serializationtesthelper.cpp
index b495499..6c82e91 100644
--- a/src/test/cpp/util/serializationtesthelper.cpp
+++ b/src/test/cpp/util/serializationtesthelper.cpp
@@ -67,14 +67,14 @@
 		return false;
 	}
 
-	int endScan = actual.size();
+	size_t endScan = actual.size();
 
 	if (endScan > endCompare)
 	{
 		endScan = endCompare;
 	}
 
-	for (int i = 0; i < endScan; i++)
+	for (size_t i = 0; i < endScan; i++)
 	{
 		if (((unsigned char) expected[i]) != actual[i])
 		{
