diff --git a/src/main/cpp/aprsocket.cpp b/src/main/cpp/aprsocket.cpp
index 33b0d6f..1cacbb8 100644
--- a/src/main/cpp/aprsocket.cpp
+++ b/src/main/cpp/aprsocket.cpp
@@ -98,7 +98,7 @@
 			Transcoder::decode(buf, remoteip);
 		}
 
-		_priv->address = InetAddressPtr(new InetAddress(remotename, remoteip));
+		_priv->address = std::make_shared<InetAddress>(remotename, remoteip);
 	}
 }
 
diff --git a/src/main/cpp/asyncappender.cpp b/src/main/cpp/asyncappender.cpp
index 412dc66..20ff3cd 100644
--- a/src/main/cpp/asyncappender.cpp
+++ b/src/main/cpp/asyncappender.cpp
@@ -213,11 +213,10 @@
 		priv->dispatcher = ThreadUtility::instance()->createThread( LOG4CXX_STR("AsyncAppender"), &AsyncAppender::dispatch, this );
 	}
 
-	// Set the NDC and thread name for the calling thread as these
+	// Set the NDC and MDC for the calling thread as these
 	// LoggingEvent fields were not set at event creation time.
 	LogString ndcVal;
 	event->getNDC(ndcVal);
-	event->getThreadName();
 	// Get a copy of this thread's MDC.
 	event->getMDCCopy();
 
@@ -418,11 +417,11 @@
 	StringHelper::toString(count, p, msg);
 	msg.append(LOG4CXX_STR(" messages due to a full event buffer including: "));
 	msg.append(maxEvent->getMessage());
-	return LoggingEventPtr( new LoggingEvent(
+	return std::make_shared<LoggingEvent>(
 				maxEvent->getLoggerName(),
 				maxEvent->getLevel(),
 				msg,
-				LocationInfo::getLocationUnavailable()) );
+				LocationInfo::getLocationUnavailable() );
 }
 
 ::log4cxx::spi::LoggingEventPtr
@@ -433,11 +432,11 @@
 	StringHelper::toString(discardedCount, p, msg);
 	msg.append(LOG4CXX_STR(" messages due to a full event buffer"));
 
-	return LoggingEventPtr( new LoggingEvent(
+	return std::make_shared<LoggingEvent>(
 				LOG4CXX_STR(""),
 				log4cxx::Level::getError(),
 				msg,
-				LocationInfo::getLocationUnavailable()) );
+				LocationInfo::getLocationUnavailable() );
 }
 
 void AsyncAppender::dispatch()
diff --git a/src/main/cpp/basicconfigurator.cpp b/src/main/cpp/basicconfigurator.cpp
index 39db14b..3cf590b 100644
--- a/src/main/cpp/basicconfigurator.cpp
+++ b/src/main/cpp/basicconfigurator.cpp
@@ -28,8 +28,8 @@
 	LogManager::getLoggerRepository()->setConfigured(true);
 	LoggerPtr root = Logger::getRootLogger();
 	static const LogString TTCC_CONVERSION_PATTERN(LOG4CXX_STR("%r [%t] %p %c %x - %m%n"));
-	LayoutPtr layout(new PatternLayout(TTCC_CONVERSION_PATTERN));
-	AppenderPtr appender(new ConsoleAppender(layout));
+	LayoutPtr layout = std::make_shared<PatternLayout>(TTCC_CONVERSION_PATTERN);
+	auto appender = std::make_shared<ConsoleAppender>(layout);
 	root->addAppender(appender);
 }
 
diff --git a/src/main/cpp/charsetdecoder.cpp b/src/main/cpp/charsetdecoder.cpp
index 1071322..b400e41 100644
--- a/src/main/cpp/charsetdecoder.cpp
+++ b/src/main/cpp/charsetdecoder.cpp
@@ -547,7 +547,7 @@
 	//
 	if (decoder == 0)
 	{
-		return CharsetDecoderPtr( new UTF8CharsetDecoder() );
+		return std::make_shared<UTF8CharsetDecoder>();
 	}
 
 	return decoder;
@@ -555,7 +555,7 @@
 
 CharsetDecoderPtr CharsetDecoder::getISOLatinDecoder()
 {
-	return CharsetDecoderPtr( new ISOLatinCharsetDecoder() );
+	return std::make_shared<ISOLatinCharsetDecoder>();
 }
 
 
@@ -564,7 +564,7 @@
 	if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("UTF-8"), LOG4CXX_STR("utf-8")) ||
 		StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("UTF8"), LOG4CXX_STR("utf8")))
 	{
-		return CharsetDecoderPtr( new UTF8CharsetDecoder() );
+		return std::make_shared<UTF8CharsetDecoder>();
 	}
 	else if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("C"), LOG4CXX_STR("c")) ||
 		charset == LOG4CXX_STR("646") ||
@@ -572,16 +572,16 @@
 		StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO646-US"), LOG4CXX_STR("iso646-US")) ||
 		StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ANSI_X3.4-1968"), LOG4CXX_STR("ansi_x3.4-1968")))
 	{
-		return CharsetDecoderPtr( new USASCIICharsetDecoder() );
+		return std::make_shared<USASCIICharsetDecoder>();
 	}
 	else if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO-8859-1"), LOG4CXX_STR("iso-8859-1")) ||
 		StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO-LATIN-1"), LOG4CXX_STR("iso-latin-1")))
 	{
-		return CharsetDecoderPtr( new ISOLatinCharsetDecoder() );
+		return std::make_shared<ISOLatinCharsetDecoder>();
 	}
 
 #if APR_HAS_XLATE
-	return CharsetDecoderPtr( new APRCharsetDecoder(charset) );
+	return std::make_shared<APRCharsetDecoder>(charset);
 #else
 	throw IllegalArgumentException(charset);
 #endif
diff --git a/src/main/cpp/charsetencoder.cpp b/src/main/cpp/charsetencoder.cpp
index 5a29135..df61e48 100644
--- a/src/main/cpp/charsetencoder.cpp
+++ b/src/main/cpp/charsetencoder.cpp
@@ -571,7 +571,7 @@
 
 CharsetEncoderPtr CharsetEncoder::getUTF8Encoder()
 {
-	return CharsetEncoderPtr( new UTF8CharsetEncoder() );
+	return std::make_shared<UTF8CharsetEncoder>();
 }
 
 
@@ -580,7 +580,7 @@
 {
 	if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("UTF-8"), LOG4CXX_STR("utf-8")))
 	{
-		return CharsetEncoderPtr( new UTF8CharsetEncoder() );
+		return std::make_shared<UTF8CharsetEncoder>();
 	}
 	else if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("C"), LOG4CXX_STR("c")) ||
 		charset == LOG4CXX_STR("646") ||
@@ -588,25 +588,25 @@
 		StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO646-US"), LOG4CXX_STR("iso646-US")) ||
 		StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ANSI_X3.4-1968"), LOG4CXX_STR("ansi_x3.4-1968")))
 	{
-		return CharsetEncoderPtr( new USASCIICharsetEncoder() );
+		return std::make_shared<USASCIICharsetEncoder>();
 	}
 	else if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO-8859-1"), LOG4CXX_STR("iso-8859-1")) ||
 		StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO-LATIN-1"), LOG4CXX_STR("iso-latin-1")))
 	{
-		return CharsetEncoderPtr( new ISOLatinCharsetEncoder() );
+		return std::make_shared<ISOLatinCharsetEncoder>();
 	}
 	else if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("UTF-16BE"), LOG4CXX_STR("utf-16be"))
 		|| StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("UTF-16"), LOG4CXX_STR("utf-16")))
 	{
-		return CharsetEncoderPtr( new UTF16BECharsetEncoder() );
+		return std::make_shared<UTF16BECharsetEncoder>();
 	}
 	else if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("UTF-16LE"), LOG4CXX_STR("utf-16le")))
 	{
-		return CharsetEncoderPtr( new UTF16LECharsetEncoder() );
+		return std::make_shared<UTF16LECharsetEncoder>();
 	}
 
 #if APR_HAS_XLATE
-	return CharsetEncoderPtr( new APRCharsetEncoder(charset) );
+	return std::make_shared<APRCharsetEncoder>(charset);
 #else
 	throw IllegalArgumentException(charset);
 #endif
diff --git a/src/main/cpp/classnamepatternconverter.cpp b/src/main/cpp/classnamepatternconverter.cpp
index 33af1a9..5e2830a 100644
--- a/src/main/cpp/classnamepatternconverter.cpp
+++ b/src/main/cpp/classnamepatternconverter.cpp
@@ -43,11 +43,11 @@
 {
 	if (options.size() == 0)
 	{
-		static PatternConverterPtr def(new ClassNamePatternConverter(options));
+		static PatternConverterPtr def = std::make_shared<ClassNamePatternConverter>(options);
 		return def;
 	}
 
-	return PatternConverterPtr( new ClassNamePatternConverter(options) );
+	return std::make_shared<ClassNamePatternConverter>(options);
 }
 
 void ClassNamePatternConverter::format(
diff --git a/src/main/cpp/colorendpatternconverter.cpp b/src/main/cpp/colorendpatternconverter.cpp
index 46e1850..267146c 100644
--- a/src/main/cpp/colorendpatternconverter.cpp
+++ b/src/main/cpp/colorendpatternconverter.cpp
@@ -40,7 +40,7 @@
 PatternConverterPtr ColorEndPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr instance(new ColorEndPatternConverter());
+	static PatternConverterPtr instance = std::make_shared<ColorEndPatternConverter>();
 	return instance;
 }
 
diff --git a/src/main/cpp/colorstartpatternconverter.cpp b/src/main/cpp/colorstartpatternconverter.cpp
index 2130964..a86d8b4 100644
--- a/src/main/cpp/colorstartpatternconverter.cpp
+++ b/src/main/cpp/colorstartpatternconverter.cpp
@@ -40,7 +40,7 @@
 PatternConverterPtr ColorStartPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr instance(new ColorStartPatternConverter());
+	static PatternConverterPtr instance = std::make_shared<ColorStartPatternConverter>();
 	return instance;
 }
 
diff --git a/src/main/cpp/consoleappender.cpp b/src/main/cpp/consoleappender.cpp
index c324297..7d2287d 100644
--- a/src/main/cpp/consoleappender.cpp
+++ b/src/main/cpp/consoleappender.cpp
@@ -50,8 +50,7 @@
 {
 	setLayout(layout1);
 	Pool p;
-	WriterPtr writer1(new SystemOutWriter());
-	setWriter(writer1);
+	setWriter(std::make_shared<SystemOutWriter>());
 	WriterAppender::activateOptions(p);
 }
 
diff --git a/src/main/cpp/datepatternconverter.cpp b/src/main/cpp/datepatternconverter.cpp
index f10cfec..e05947c 100644
--- a/src/main/cpp/datepatternconverter.cpp
+++ b/src/main/cpp/datepatternconverter.cpp
@@ -69,7 +69,7 @@
 
 	if (options.size() == 0)
 	{
-		df = DateFormatPtr(new ISO8601DateFormat());
+		df = std::make_shared<ISO8601DateFormat>();
 	}
 	else
 	{
@@ -79,17 +79,17 @@
 			StringHelper::equalsIgnoreCase(dateFormatStr,
 				LOG4CXX_STR("ISO8601"), LOG4CXX_STR("iso8601")))
 		{
-			df = DateFormatPtr(new ISO8601DateFormat());
+			df = std::make_shared<ISO8601DateFormat>();
 		}
 		else if (StringHelper::equalsIgnoreCase(dateFormatStr,
 				LOG4CXX_STR("ABSOLUTE"), LOG4CXX_STR("absolute")))
 		{
-			df = DateFormatPtr(new AbsoluteTimeDateFormat());
+			df = std::make_shared<AbsoluteTimeDateFormat>();
 		}
 		else if (StringHelper::equalsIgnoreCase(dateFormatStr,
 				LOG4CXX_STR("DATE"), LOG4CXX_STR("date")))
 		{
-			df = DateFormatPtr(new DateTimeDateFormat());
+			df = std::make_shared<DateTimeDateFormat>();
 		}
 		else
 		{
@@ -97,13 +97,13 @@
 			{
 				try
 				{
-					df = DateFormatPtr(new SimpleDateFormat(dateFormatStr));
+					df = std::make_shared<SimpleDateFormat>(dateFormatStr);
 					maximumCacheValidity =
 						CachedDateFormat::getMaximumCacheValidity(dateFormatStr);
 				}
 				catch (IllegalArgumentException& e)
 				{
-					df = DateFormatPtr(new ISO8601DateFormat());
+					df = std::make_shared<ISO8601DateFormat>();
 					LogLog::warn(((LogString)
 							LOG4CXX_STR("Could not instantiate SimpleDateFormat with pattern "))
 						+ dateFormatStr, e);
@@ -111,7 +111,7 @@
 			}
 			else
 			{
-				df = DateFormatPtr(new StrftimeDateFormat(dateFormatStr));
+				df = std::make_shared<StrftimeDateFormat>(dateFormatStr);
 			}
 		}
 
@@ -128,7 +128,7 @@
 
 	if (maximumCacheValidity > 0)
 	{
-		df = DateFormatPtr(new CachedDateFormat(df, maximumCacheValidity));
+		df = std::make_shared<CachedDateFormat>(df, maximumCacheValidity);
 	}
 
 	return df;
@@ -137,7 +137,7 @@
 PatternConverterPtr DatePatternConverter::newInstance(
 	const std::vector<LogString>& options)
 {
-	return PatternConverterPtr(new DatePatternConverter(options));
+	return std::make_shared<DatePatternConverter>(options);
 }
 
 void DatePatternConverter::format(
diff --git a/src/main/cpp/defaultloggerfactory.cpp b/src/main/cpp/defaultloggerfactory.cpp
index 1efc590..0d55e77 100644
--- a/src/main/cpp/defaultloggerfactory.cpp
+++ b/src/main/cpp/defaultloggerfactory.cpp
@@ -26,5 +26,5 @@
 	log4cxx::helpers::Pool& pool,
 	const LogString& name) const
 {
-	return LoggerPtr(new Logger(pool, name));
+	return std::make_shared<Logger>(pool, name);
 }
diff --git a/src/main/cpp/domconfigurator.cpp b/src/main/cpp/domconfigurator.cpp
index d307805..17178ca 100644
--- a/src/main/cpp/domconfigurator.cpp
+++ b/src/main/cpp/domconfigurator.cpp
@@ -787,7 +787,7 @@
 	msg.append(LOG4CXX_STR("..."));
 	LogLog::debug(msg);
 
-	m_priv->loggerFactory = LoggerFactoryPtr(new DefaultLoggerFactory());
+	m_priv->loggerFactory = std::make_shared<DefaultLoggerFactory>();
 
 	Pool p;
 	apr_file_t* fd;
diff --git a/src/main/cpp/fileappender.cpp b/src/main/cpp/fileappender.cpp
index 991fe32..3881485 100644
--- a/src/main/cpp/fileappender.cpp
+++ b/src/main/cpp/fileappender.cpp
@@ -342,7 +342,7 @@
 
 	if (bufferedIO1)
 	{
-		newWriter = WriterPtr(new BufferedWriter(newWriter, bufferSize1));
+		newWriter = std::make_shared<BufferedWriter>(newWriter, bufferSize1);
 	}
 
 	setWriterInternal(newWriter);
diff --git a/src/main/cpp/filelocationpatternconverter.cpp b/src/main/cpp/filelocationpatternconverter.cpp
index 4889aee..9bb471b 100644
--- a/src/main/cpp/filelocationpatternconverter.cpp
+++ b/src/main/cpp/filelocationpatternconverter.cpp
@@ -40,7 +40,7 @@
 PatternConverterPtr FileLocationPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */ )
 {
-	static PatternConverterPtr instance(new FileLocationPatternConverter());
+	static PatternConverterPtr instance = std::make_shared<FileLocationPatternConverter>();
 	return instance;
 }
 
diff --git a/src/main/cpp/fixedwindowrollingpolicy.cpp b/src/main/cpp/fixedwindowrollingpolicy.cpp
index 7f2f126..9e99283 100644
--- a/src/main/cpp/fixedwindowrollingpolicy.cpp
+++ b/src/main/cpp/fixedwindowrollingpolicy.cpp
@@ -143,15 +143,14 @@
 	if (!priv->explicitActiveFile)
 	{
 		LogString buf;
-		ObjectPtr obj(new Integer(priv->minIndex));
+		ObjectPtr obj = std::make_shared<Integer>(priv->minIndex);
 		formatFileName(obj, buf, pool);
 		newActiveFile = buf;
 	}
 
 	ActionPtr noAction;
 
-	return RolloverDescriptionPtr(
-			new RolloverDescription(newActiveFile, append, noAction, noAction));
+	return std::make_shared<RolloverDescription>(newActiveFile, append, noAction, noAction);
 }
 
 /**
@@ -182,7 +181,7 @@
 	}
 
 	LogString buf;
-	ObjectPtr obj(new Integer(purgeStart));
+	ObjectPtr obj = std::make_shared<Integer>(purgeStart);
 	formatFileName(obj, buf, pool);
 
 	LogString renameTo(buf);
@@ -198,31 +197,28 @@
 	if (StringHelper::endsWith(renameTo, LOG4CXX_STR(".gz")))
 	{
 		renameTo.resize(renameTo.size() - 3);
-		compressAction = ActionPtr(
-				new GZCompressAction(
+		compressAction = std::make_shared<GZCompressAction>(
 					File().setPath(renameTo),
 					File().setPath(compressedName),
-					true));
+					true);
 	}
 	else if (StringHelper::endsWith(renameTo, LOG4CXX_STR(".zip")))
 	{
 		renameTo.resize(renameTo.size() - 4);
-		compressAction = ActionPtr(
-				new ZipCompressAction(
+		compressAction = std::make_shared<ZipCompressAction>(
 					File().setPath(renameTo),
 					File().setPath(compressedName),
-					true));
+					true);
 	}
 
-	FileRenameActionPtr renameAction = FileRenameActionPtr(
-			new FileRenameAction(
+	auto renameAction = std::make_shared<FileRenameAction>(
 				File().setPath(currentActiveFile),
 				File().setPath(renameTo),
-				false));
+				false);
 
-	desc = RolloverDescriptionPtr(new RolloverDescription(
+	desc = std::make_shared<RolloverDescription>(
 				currentActiveFile,  append,
-				renameAction,       compressAction));
+				renameAction,       compressAction);
 
 	return desc;
 }
@@ -259,7 +255,7 @@
 
 	std::vector<FileRenameActionPtr> renames;
 	LogString buf;
-	ObjectPtr obj = ObjectPtr(new Integer(lowIndex));
+	ObjectPtr obj = std::make_shared<Integer>(lowIndex);
 	formatFileName(obj, buf, p);
 
 	LogString lowFilename(buf);
@@ -320,7 +316,7 @@
 			//   if intermediate index
 			//     add a rename action to the list
 			buf.erase(buf.begin(), buf.end());
-			obj = ObjectPtr(new Integer(i + 1));
+			obj = std::make_shared<Integer>(i + 1);
 			formatFileName(obj, buf, p);
 
 			LogString highFilename(buf);
@@ -332,7 +328,7 @@
 					highFilename.substr(0, highFilename.length() - suffixLength);
 			}
 
-			renames.push_back(FileRenameActionPtr(new FileRenameAction(*toRename, File().setPath(renameTo), true)));
+			renames.push_back(std::make_shared<FileRenameAction>(*toRename, File().setPath(renameTo), true));
 			lowFilename = highFilename;
 		}
 		else
diff --git a/src/main/cpp/formattinginfo.cpp b/src/main/cpp/formattinginfo.cpp
index c0f0260..c75a387 100644
--- a/src/main/cpp/formattinginfo.cpp
+++ b/src/main/cpp/formattinginfo.cpp
@@ -67,7 +67,7 @@
  */
 FormattingInfoPtr FormattingInfo::getDefault()
 {
-	static FormattingInfoPtr def(new FormattingInfo(false, 0, INT_MAX));
+	static FormattingInfoPtr def= std::make_shared<FormattingInfo>(false, 0, INT_MAX);
 	return def;
 }
 
diff --git a/src/main/cpp/fulllocationpatternconverter.cpp b/src/main/cpp/fulllocationpatternconverter.cpp
index 466c2f5..eb70a3a 100644
--- a/src/main/cpp/fulllocationpatternconverter.cpp
+++ b/src/main/cpp/fulllocationpatternconverter.cpp
@@ -41,7 +41,7 @@
 PatternConverterPtr FullLocationPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr instance(new FullLocationPatternConverter());
+	static PatternConverterPtr instance = std::make_shared<FullLocationPatternConverter>();
 	return instance;
 }
 
diff --git a/src/main/cpp/hierarchy.cpp b/src/main/cpp/hierarchy.cpp
index 639c681..957ba0e 100644
--- a/src/main/cpp/hierarchy.cpp
+++ b/src/main/cpp/hierarchy.cpp
@@ -258,7 +258,7 @@
 	if (!result)
 	{
 		LoggerPtr logger(factory->makeNewLoggerInstance(m_priv->pool, name));
-		logger->setHierarchy(shared_from_this());
+		logger->setHierarchy(this);
 		m_priv->loggers.insert(LoggerMap::value_type(name, logger));
 
 		ProvisionNodeMap::iterator it2 = m_priv->provisionNodes.find(name);
@@ -448,7 +448,7 @@
 
 HierarchyPtr Hierarchy::create()
 {
-	HierarchyPtr ret( new Hierarchy() );
-	ret->m_priv->root->setHierarchy(ret);
+	HierarchyPtr ret(new Hierarchy);
+	ret->m_priv->root->setHierarchy(ret.get());
 	return ret;
 }
diff --git a/src/main/cpp/inetaddress.cpp b/src/main/cpp/inetaddress.cpp
index 2c7f972..a4647e4 100644
--- a/src/main/cpp/inetaddress.cpp
+++ b/src/main/cpp/inetaddress.cpp
@@ -103,7 +103,7 @@
 			Transcoder::decode(host, hostNameString);
 		}
 
-		result.push_back(InetAddressPtr(new InetAddress(hostNameString, ipAddrString)));
+		result.push_back(std::make_shared<InetAddress>(hostNameString, ipAddrString));
 		currentAddr = currentAddr->next;
 	}
 
diff --git a/src/main/cpp/integerpatternconverter.cpp b/src/main/cpp/integerpatternconverter.cpp
index 8761ced..6815ded 100644
--- a/src/main/cpp/integerpatternconverter.cpp
+++ b/src/main/cpp/integerpatternconverter.cpp
@@ -39,7 +39,7 @@
 PatternConverterPtr IntegerPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr instance(new IntegerPatternConverter());
+	static PatternConverterPtr instance = std::make_shared<IntegerPatternConverter>();
 	return instance;
 }
 
diff --git a/src/main/cpp/level.cpp b/src/main/cpp/level.cpp
index f2fb91d..7d794c5 100644
--- a/src/main/cpp/level.cpp
+++ b/src/main/cpp/level.cpp
@@ -32,50 +32,50 @@
 
 LevelPtr Level::getOff()
 {
-	static LevelPtr offLevel(new Level(Level::OFF_INT, LOG4CXX_STR("OFF"), 0));
+	static LevelPtr offLevel = std::make_shared<Level>(Level::OFF_INT, LOG4CXX_STR("OFF"), 0);
 	return offLevel;
 }
 
 LevelPtr Level::getFatal()
 {
-	static LevelPtr fatalLevel(new Level(Level::FATAL_INT, LOG4CXX_STR("FATAL"), 0));
+	static LevelPtr fatalLevel = std::make_shared<Level>(Level::FATAL_INT, LOG4CXX_STR("FATAL"), 0);
 	return fatalLevel;
 }
 
 LevelPtr Level::getError()
 {
-	static LevelPtr errorLevel(new Level(Level::ERROR_INT, LOG4CXX_STR("ERROR"), 3));
+	static LevelPtr errorLevel = std::make_shared<Level>(Level::ERROR_INT, LOG4CXX_STR("ERROR"), 3);
 	return errorLevel;
 }
 
 LevelPtr Level::getWarn()
 {
-	static LevelPtr warnLevel(new Level(Level::WARN_INT, LOG4CXX_STR("WARN"), 4));
+	static LevelPtr warnLevel = std::make_shared<Level>(Level::WARN_INT, LOG4CXX_STR("WARN"), 4);
 	return warnLevel;
 }
 
 LevelPtr Level::getInfo()
 {
-	static LevelPtr infoLevel(new Level(Level::INFO_INT, LOG4CXX_STR("INFO"), 6));
+	static LevelPtr infoLevel = std::make_shared<Level>(Level::INFO_INT, LOG4CXX_STR("INFO"), 6);
 	return infoLevel;
 }
 
 LevelPtr Level::getDebug()
 {
-	static LevelPtr debugLevel(new Level(Level::DEBUG_INT, LOG4CXX_STR("DEBUG"), 7));
+	static LevelPtr debugLevel = std::make_shared<Level>(Level::DEBUG_INT, LOG4CXX_STR("DEBUG"), 7);
 	return debugLevel;
 }
 
 LevelPtr Level::getTrace()
 {
-	static LevelPtr traceLevel(new Level(Level::TRACE_INT, LOG4CXX_STR("TRACE"), 7));
+	static LevelPtr traceLevel = std::make_shared<Level>(Level::TRACE_INT, LOG4CXX_STR("TRACE"), 7);
 	return traceLevel;
 }
 
 
 LevelPtr Level::getAll()
 {
-	static LevelPtr allLevel(new Level(Level::ALL_INT, LOG4CXX_STR("ALL"), 7));
+	static LevelPtr allLevel = std::make_shared<Level>(Level::ALL_INT, LOG4CXX_STR("ALL"), 7);
 	return allLevel;
 }
 
diff --git a/src/main/cpp/levelpatternconverter.cpp b/src/main/cpp/levelpatternconverter.cpp
index 70539c8..7d4f7f0 100644
--- a/src/main/cpp/levelpatternconverter.cpp
+++ b/src/main/cpp/levelpatternconverter.cpp
@@ -41,7 +41,7 @@
 PatternConverterPtr LevelPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr def(new LevelPatternConverter());
+	static PatternConverterPtr def = std::make_shared<LevelPatternConverter>();
 	return def;
 }
 
diff --git a/src/main/cpp/linelocationpatternconverter.cpp b/src/main/cpp/linelocationpatternconverter.cpp
index bb606ab..b93ce2f 100644
--- a/src/main/cpp/linelocationpatternconverter.cpp
+++ b/src/main/cpp/linelocationpatternconverter.cpp
@@ -40,7 +40,7 @@
 PatternConverterPtr LineLocationPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr instance(new LineLocationPatternConverter());
+	static PatternConverterPtr instance = std::make_shared<LineLocationPatternConverter>();
 	return instance;
 }
 
diff --git a/src/main/cpp/lineseparatorpatternconverter.cpp b/src/main/cpp/lineseparatorpatternconverter.cpp
index 6aa0c82..a40cae9 100644
--- a/src/main/cpp/lineseparatorpatternconverter.cpp
+++ b/src/main/cpp/lineseparatorpatternconverter.cpp
@@ -40,7 +40,7 @@
 PatternConverterPtr LineSeparatorPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr instance(new LineSeparatorPatternConverter());
+	static PatternConverterPtr instance = std::make_shared<LineSeparatorPatternConverter>();
 	return instance;
 }
 
diff --git a/src/main/cpp/literalpatternconverter.cpp b/src/main/cpp/literalpatternconverter.cpp
index b9851fc..901ca18 100644
--- a/src/main/cpp/literalpatternconverter.cpp
+++ b/src/main/cpp/literalpatternconverter.cpp
@@ -56,12 +56,11 @@
 {
 	if (literal.length() == 1 && literal[0] == 0x20 /* ' ' */)
 	{
-		static PatternConverterPtr blank(new LiteralPatternConverter(literal));
+		static PatternConverterPtr blank = std::make_shared<LiteralPatternConverter>(literal);
 		return blank;
 	}
 
-	PatternConverterPtr pattern(new LiteralPatternConverter(literal));
-	return pattern;
+	return std::make_shared<LiteralPatternConverter>(literal);
 }
 
 void LiteralPatternConverter::format(
diff --git a/src/main/cpp/loader.cpp b/src/main/cpp/loader.cpp
index f2c056b..196797a 100644
--- a/src/main/cpp/loader.cpp
+++ b/src/main/cpp/loader.cpp
@@ -65,7 +65,7 @@
 
 	try
 	{
-		return InputStreamPtr( new FileInputStream(name) );
+		return std::make_shared<FileInputStream>(name);
 	}
 	catch (const IOException&)
 	{
diff --git a/src/main/cpp/logger.cpp b/src/main/cpp/logger.cpp
index 361f51b..e7460fb 100644
--- a/src/main/cpp/logger.cpp
+++ b/src/main/cpp/logger.cpp
@@ -70,7 +70,6 @@
 
 
 	// Loggers need to know what Hierarchy they are in
-	log4cxx::spi::LoggerRepositoryWeakPtr repository;
 	log4cxx::spi::LoggerRepository* repositoryRaw;
 
 	helpers::AppenderAttachableImpl aai;
@@ -166,7 +165,7 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_CHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg, location));
+	auto event = std::make_shared<LoggingEvent>(m_priv->name, level1, msg, location);
 	callAppenders(event, p);
 }
 
@@ -177,8 +176,8 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_CHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg,
-			LocationInfo::getLocationUnavailable()));
+	auto event = std::make_shared<LoggingEvent>(m_priv->name, level1, msg,
+			LocationInfo::getLocationUnavailable());
 	callAppenders(event, p);
 }
 
@@ -188,7 +187,7 @@
 	if (!getHierarchy()) // Has removeHierarchy() been called?
 		return;
 	Pool p;
-	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, message, location));
+	auto event = std::make_shared<LoggingEvent>(m_priv->name, level1, message, location);
 	callAppenders(event, p);
 }
 
@@ -224,9 +223,9 @@
 #endif
 }
 
-LoggerRepositoryPtr Logger::getLoggerRepository() const
+LoggerRepository* Logger::getLoggerRepository() const
 {
-	return m_priv->repository.lock();
+	return m_priv->repositoryRaw;
 }
 
 LoggerRepository* Logger::getHierarchy() const
@@ -500,7 +499,6 @@
 
 void Logger::removeHierarchy()
 {
-	m_priv->repository.reset();
 	m_priv->repositoryRaw = 0;
 }
 
@@ -509,10 +507,9 @@
 	m_priv->additive = additive1;
 }
 
-void Logger::setHierarchy(const spi::LoggerRepositoryPtr& repository1)
+void Logger::setHierarchy(spi::LoggerRepository* repository1)
 {
-	m_priv->repository = repository1;
-	m_priv->repositoryRaw = repository1.get();
+	m_priv->repositoryRaw = repository1;
 }
 
 void Logger::setParent(LoggerPtr parentLogger)
@@ -704,7 +701,7 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_WCHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg, location));
+	auto event = std::make_shared<LoggingEvent>(m_priv->name, level1, msg, location);
 	callAppenders(event, p);
 }
 
@@ -714,8 +711,8 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_WCHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg,
-			LocationInfo::getLocationUnavailable()));
+	auto event = std::make_shared<LoggingEvent>(m_priv->name, level1, msg,
+			LocationInfo::getLocationUnavailable());
 	callAppenders(event, p);
 }
 
@@ -859,7 +856,7 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_UNICHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg, location));
+	auto event = std::make_shared<LoggingEvent>(m_priv->name, level1, msg, location);
 	callAppenders(event, p);
 }
 
@@ -869,8 +866,8 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_UNICHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg,
-			LocationInfo::getLocationUnavailable()));
+	auto event = std::make_shared<LoggingEvent>(m_priv->name, level1, msg,
+			LocationInfo::getLocationUnavailable());
 	callAppenders(event, p);
 }
 #endif
@@ -1011,7 +1008,7 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_CFSTRING(msg, message);
-	LoggingEventPtr event(new LoggingEvent(name, level1, msg, location));
+	auto event = std::make_shared<LoggingEvent>(name, level1, msg, location);
 	callAppenders(event, p);
 }
 
@@ -1021,8 +1018,8 @@
 		return;
 	Pool p;
 	LOG4CXX_DECODE_CFSTRING(msg, message);
-	LoggingEventPtr event(new LoggingEvent(name, level1, msg,
-			LocationInfo::getLocationUnavailable()));
+	auto event = std::make_shared<LoggingEvent>(name, level1, msg,
+			LocationInfo::getLocationUnavailable());
 	callAppenders(event, p);
 }
 
diff --git a/src/main/cpp/loggerpatternconverter.cpp b/src/main/cpp/loggerpatternconverter.cpp
index eaf7657..2fa6d57 100644
--- a/src/main/cpp/loggerpatternconverter.cpp
+++ b/src/main/cpp/loggerpatternconverter.cpp
@@ -42,11 +42,11 @@
 {
 	if (options.size() == 0)
 	{
-		static PatternConverterPtr def(new LoggerPatternConverter(options));
+		static PatternConverterPtr def = std::make_shared<LoggerPatternConverter>(options);
 		return def;
 	}
 
-	return PatternConverterPtr(new LoggerPatternConverter(options));
+	return std::make_shared<LoggerPatternConverter>(options);
 }
 
 void LoggerPatternConverter::format(
diff --git a/src/main/cpp/logmanager.cpp b/src/main/cpp/logmanager.cpp
index bbd0387..07fb4af 100644
--- a/src/main/cpp/logmanager.cpp
+++ b/src/main/cpp/logmanager.cpp
@@ -53,7 +53,7 @@
 	auto result = APRInitializer::getOrAddUnique<spi::RepositorySelector>( []() -> ObjectPtr
 		{
 			LoggerRepositoryPtr hierarchy = Hierarchy::create();
-			return ObjectPtr(new DefaultRepositorySelector(hierarchy));
+			return std::make_shared<DefaultRepositorySelector>(hierarchy);
 		}
 	);
 	return result;
diff --git a/src/main/cpp/messagepatternconverter.cpp b/src/main/cpp/messagepatternconverter.cpp
index fa0ecda..b30d50d 100644
--- a/src/main/cpp/messagepatternconverter.cpp
+++ b/src/main/cpp/messagepatternconverter.cpp
@@ -41,7 +41,7 @@
 PatternConverterPtr MessagePatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr def(new MessagePatternConverter());
+	static PatternConverterPtr def = std::make_shared<MessagePatternConverter>();
 	return def;
 }
 
diff --git a/src/main/cpp/methodlocationpatternconverter.cpp b/src/main/cpp/methodlocationpatternconverter.cpp
index 280e4b8..ecbb536 100644
--- a/src/main/cpp/methodlocationpatternconverter.cpp
+++ b/src/main/cpp/methodlocationpatternconverter.cpp
@@ -41,7 +41,7 @@
 PatternConverterPtr MethodLocationPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */ )
 {
-	static PatternConverterPtr def(new MethodLocationPatternConverter());
+	static PatternConverterPtr def = std::make_shared<MethodLocationPatternConverter>();
 	return def;
 }
 
diff --git a/src/main/cpp/nameabbreviator.cpp b/src/main/cpp/nameabbreviator.cpp
index c8aa754..e212976 100644
--- a/src/main/cpp/nameabbreviator.cpp
+++ b/src/main/cpp/nameabbreviator.cpp
@@ -291,7 +291,7 @@
 		//
 		if (i == trimmed.length())
 		{
-			return NameAbbreviatorPtr(new MaxElementAbbreviator(StringHelper::toInt(trimmed)));
+			return std::make_shared<MaxElementAbbreviator>(StringHelper::toInt(trimmed));
 		}
 
 		std::vector<PatternAbbreviatorFragment> fragments;
@@ -345,8 +345,7 @@
 			pos++;
 		}
 
-		NameAbbreviatorPtr abbrev(new PatternAbbreviator(fragments));
-		return abbrev;
+		return std::make_shared<PatternAbbreviator>(fragments);
 	}
 
 	//
@@ -362,7 +361,7 @@
  */
 NameAbbreviatorPtr NameAbbreviator::getDefaultAbbreviator()
 {
-	static NameAbbreviatorPtr def(new NOPAbbreviator());
+	static NameAbbreviatorPtr def = std::make_shared<NOPAbbreviator>();
 	return def;
 }
 
diff --git a/src/main/cpp/ndcpatternconverter.cpp b/src/main/cpp/ndcpatternconverter.cpp
index e6acb15..59e7f4b 100644
--- a/src/main/cpp/ndcpatternconverter.cpp
+++ b/src/main/cpp/ndcpatternconverter.cpp
@@ -42,7 +42,7 @@
 PatternConverterPtr NDCPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr def(new NDCPatternConverter());
+	static PatternConverterPtr def = std::make_shared<NDCPatternConverter>();
 	return def;
 }
 
diff --git a/src/main/cpp/odbcappender.cpp b/src/main/cpp/odbcappender.cpp
index 1a105ea..b6e37eb 100644
--- a/src/main/cpp/odbcappender.cpp
+++ b/src/main/cpp/odbcappender.cpp
@@ -345,7 +345,7 @@
 
 	if (getLayout() == 0)
 	{
-		this->setLayout(PatternLayoutPtr(new PatternLayout(s)));
+		this->setLayout(std::make_shared<PatternLayout>(s));
 	}
 	else
 	{
diff --git a/src/main/cpp/optionconverter.cpp b/src/main/cpp/optionconverter.cpp
index 9a4b4bc..89bcc9b 100644
--- a/src/main/cpp/optionconverter.cpp
+++ b/src/main/cpp/optionconverter.cpp
@@ -442,7 +442,7 @@
 	}
 	else
 	{
-		configurator = ConfiguratorPtr(new PropertyConfigurator());
+		configurator = std::make_shared<PropertyConfigurator>();
 	}
 
 #if APR_HAS_THREADS
diff --git a/src/main/cpp/patternparser.cpp b/src/main/cpp/patternparser.cpp
index 360f170..05a3328 100644
--- a/src/main/cpp/patternparser.cpp
+++ b/src/main/cpp/patternparser.cpp
@@ -179,10 +179,9 @@
 				switch (c)
 				{
 					case 0x2D: // '-'
-						formattingInfo = FormattingInfoPtr(
-								new FormattingInfo(
+						formattingInfo = std::make_shared<FormattingInfo>(
 									true, formattingInfo->getMinLength(),
-									formattingInfo->getMaxLength()));
+									formattingInfo->getMaxLength());
 
 						break;
 
@@ -195,10 +194,9 @@
 
 						if ((c >= 0x30 /* '0' */) && (c <= 0x39 /* '9' */))
 						{
-							formattingInfo = FormattingInfoPtr(
-									new FormattingInfo(
+							formattingInfo = std::make_shared<FormattingInfo>(
 										formattingInfo->isLeftAligned(), c - 0x30 /* '0' */,
-										formattingInfo->getMaxLength()));
+										formattingInfo->getMaxLength());
 							state = MIN_STATE;
 						}
 						else
@@ -225,11 +223,10 @@
 
 				if ((c >= 0x30 /* '0' */) && (c <= 0x39 /* '9' */))
 				{
-					formattingInfo = FormattingInfoPtr(
-							new FormattingInfo(
+					formattingInfo = std::make_shared<FormattingInfo>(
 								formattingInfo->isLeftAligned(),
 								(formattingInfo->getMinLength() * 10) + (c - 0x30 /* '0' */),
-								formattingInfo->getMaxLength()));
+								formattingInfo->getMaxLength());
 				}
 				else if (c == 0x2E /* '.' */)
 				{
@@ -256,10 +253,9 @@
 
 				if ((c >= 0x30 /* '0' */) && (c <= 0x39 /* '9' */))
 				{
-					formattingInfo = FormattingInfoPtr(
-							new FormattingInfo(
+					formattingInfo = std::make_shared<FormattingInfo>(
 								formattingInfo->isLeftAligned(), formattingInfo->getMinLength(),
-								c - 0x30 /* '0' */));
+								c - 0x30 /* '0' */);
 					state = MAX_STATE;
 				}
 				else
@@ -276,10 +272,9 @@
 
 				if ((c >= 0x30 /* '0' */) && (c <= 0x39 /* '9' */))
 				{
-					formattingInfo = FormattingInfoPtr(
-							new FormattingInfo(
+					formattingInfo = std::make_shared<FormattingInfo>(
 								formattingInfo->isLeftAligned(), formattingInfo->getMinLength(),
-								(formattingInfo->getMaxLength() * 10) + (c - 0x30 /* '0' */)));
+								(formattingInfo->getMaxLength() * 10) + (c - 0x30 /* '0' */));
 				}
 				else
 				{
diff --git a/src/main/cpp/properties.cpp b/src/main/cpp/properties.cpp
index 0ba9e16..3798245 100644
--- a/src/main/cpp/properties.cpp
+++ b/src/main/cpp/properties.cpp
@@ -430,8 +430,7 @@
 void Properties::load(InputStreamPtr inStream)
 {
 	Pool pool;
-	InputStreamReaderPtr lineReader(
-		new InputStreamReader(inStream, CharsetDecoder::getISOLatinDecoder()));
+	auto lineReader = std::make_shared<InputStreamReader>(inStream, CharsetDecoder::getISOLatinDecoder());
 	LogString contents = lineReader->read(pool);
 	properties->clear();
 	PropertyParser parser;
diff --git a/src/main/cpp/propertiespatternconverter.cpp b/src/main/cpp/propertiespatternconverter.cpp
index 4ddf718..c90fde2 100644
--- a/src/main/cpp/propertiespatternconverter.cpp
+++ b/src/main/cpp/propertiespatternconverter.cpp
@@ -60,17 +60,15 @@
 {
 	if (options.size() == 0)
 	{
-		static PatternConverterPtr def(new PropertiesPatternConverter(
-				LOG4CXX_STR("Properties"), LOG4CXX_STR("")));
+		static PatternConverterPtr def = std::make_shared<PropertiesPatternConverter>(
+				LOG4CXX_STR("Properties"), LOG4CXX_STR(""));
 		return def;
 	}
 
 	LogString converterName(LOG4CXX_STR("Property{"));
 	converterName.append(options[0]);
 	converterName.append(LOG4CXX_STR("}"));
-	PatternConverterPtr converter(new PropertiesPatternConverter(
-			converterName, options[0]));
-	return converter;
+	return std::make_shared<PropertiesPatternConverter>(converterName, options[0]);
 }
 
 void PropertiesPatternConverter::format(
diff --git a/src/main/cpp/relativetimepatternconverter.cpp b/src/main/cpp/relativetimepatternconverter.cpp
index a290de3..2742008 100644
--- a/src/main/cpp/relativetimepatternconverter.cpp
+++ b/src/main/cpp/relativetimepatternconverter.cpp
@@ -41,7 +41,7 @@
 PatternConverterPtr RelativeTimePatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr def(new RelativeTimePatternConverter());
+	static PatternConverterPtr def = std::make_shared<RelativeTimePatternConverter>();
 	return def;
 }
 
diff --git a/src/main/cpp/resourcebundle.cpp b/src/main/cpp/resourcebundle.cpp
index ea5ea11..a446d5a 100644
--- a/src/main/cpp/resourcebundle.cpp
+++ b/src/main/cpp/resourcebundle.cpp
@@ -92,7 +92,7 @@
 
 			try
 			{
-				current = PropertyResourceBundlePtr(new PropertyResourceBundle(bundleStream));
+				current = std::make_shared<PropertyResourceBundle>(bundleStream);
 			}
 			catch (Exception&)
 			{
diff --git a/src/main/cpp/rollingfileappender.cpp b/src/main/cpp/rollingfileappender.cpp
index 838938d..0320507 100644
--- a/src/main/cpp/rollingfileappender.cpp
+++ b/src/main/cpp/rollingfileappender.cpp
@@ -95,7 +95,7 @@
 {
 	if (_priv->rollingPolicy == NULL)
 	{
-		FixedWindowRollingPolicyPtr fwrp = FixedWindowRollingPolicyPtr(new FixedWindowRollingPolicy());
+		auto fwrp = std::make_shared<FixedWindowRollingPolicy>();
 		fwrp->setFileNamePattern(getFile() + LOG4CXX_STR(".%i"));
 		_priv->rollingPolicy = fwrp;
 	}
@@ -115,7 +115,7 @@
 
 	if (_priv->triggeringPolicy == NULL)
 	{
-		_priv->triggeringPolicy = TriggeringPolicyPtr(new ManualTriggeringPolicy());
+		_priv->triggeringPolicy = std::make_shared<ManualTriggeringPolicy>();
 	}
 
 	{
@@ -226,7 +226,7 @@
 			std::string fileName(getFile());
 			RollingPolicyBase* basePolicy = dynamic_cast<RollingPolicyBase* >(&(*rollingPolicy));
 			apr_time_t n = apr_time_now();
-			ObjectPtr obj(new Date(n));
+			ObjectPtr obj = std::make_shared<Date>(n);
 			LogString fileNamePattern;
 
 			if (basePolicy)
@@ -463,7 +463,7 @@
 void RollingFileAppenderSkeleton::reopenLatestFile(Pool& p)
 {
 	closeWriter();
-	OutputStreamPtr os(new FileOutputStream(getFile(), true));
+	OutputStreamPtr os = std::make_shared<FileOutputStream(getFile>(), true);
 	WriterPtr newWriter(createWriter(os));
 	setFile(getFile());
 	setWriter(newWriter);
@@ -669,7 +669,7 @@
  */
 WriterPtr RollingFileAppender::createWriter(OutputStreamPtr& os)
 {
-	OutputStreamPtr cos(new CountingOutputStream(os, this));
+	OutputStreamPtr cos = std::make_shared<CountingOutputStream>(os, this);
 	return FileAppender::createWriter(cos);
 }
 
diff --git a/src/main/cpp/rollingpolicybase.cpp b/src/main/cpp/rollingpolicybase.cpp
index 3cfd6a0..3e409df 100644
--- a/src/main/cpp/rollingpolicybase.cpp
+++ b/src/main/cpp/rollingpolicybase.cpp
@@ -114,7 +114,7 @@
  * @param buf string buffer to which formatted file name is appended, may not be null.
  */
 void RollingPolicyBase::formatFileName(
-	ObjectPtr& obj,
+	const ObjectPtr& obj,
 	LogString& toAppendTo,
 	Pool& pool) const
 {
diff --git a/src/main/cpp/syslogwriter.cpp b/src/main/cpp/syslogwriter.cpp
index dde4ffa..5ab1ba5 100644
--- a/src/main/cpp/syslogwriter.cpp
+++ b/src/main/cpp/syslogwriter.cpp
@@ -71,9 +71,9 @@
 	{
 		LOG4CXX_ENCODE_CHAR(data, source);
 
-		DatagramPacketPtr packet(
-			new DatagramPacket((void*) data.data(), data.length(),
-				m_priv->address, m_priv->syslogHostPort));
+		auto packet = std::make_shared<DatagramPacket>(
+				(void*) data.data(), data.length(),
+				m_priv->address, m_priv->syslogHostPort);
 
 		m_priv->ds->send(packet);
 	}
diff --git a/src/main/cpp/threadpatternconverter.cpp b/src/main/cpp/threadpatternconverter.cpp
index 47323dd..5453215 100644
--- a/src/main/cpp/threadpatternconverter.cpp
+++ b/src/main/cpp/threadpatternconverter.cpp
@@ -39,7 +39,7 @@
 PatternConverterPtr ThreadPatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr def(new ThreadPatternConverter());
+	static PatternConverterPtr def = std::make_shared<ThreadPatternConverter>();
 	return def;
 }
 
diff --git a/src/main/cpp/threadusernamepatternconverter.cpp b/src/main/cpp/threadusernamepatternconverter.cpp
index 81e042a..cadba74 100644
--- a/src/main/cpp/threadusernamepatternconverter.cpp
+++ b/src/main/cpp/threadusernamepatternconverter.cpp
@@ -39,7 +39,7 @@
 PatternConverterPtr ThreadUsernamePatternConverter::newInstance(
 	const std::vector<LogString>& /* options */)
 {
-	static PatternConverterPtr def(new ThreadUsernamePatternConverter());
+	static PatternConverterPtr def = std::make_shared<ThreadUsernamePatternConverter>();
 	return def;
 }
 
diff --git a/src/main/cpp/threadutility.cpp b/src/main/cpp/threadutility.cpp
index fcc3c6b..543281d 100644
--- a/src/main/cpp/threadutility.cpp
+++ b/src/main/cpp/threadutility.cpp
@@ -62,15 +62,15 @@
 
 ThreadUtility::~ThreadUtility() {}
 
-std::shared_ptr<ThreadUtility> ThreadUtility::instance()
+ThreadUtility* ThreadUtility::instance()
 {
-	static std::shared_ptr<ThreadUtility> instance( new ThreadUtility() );
-	return instance;
+	static ThreadUtility instance;
+	return &instance;
 }
 
 void ThreadUtility::configure( ThreadConfigurationType type )
 {
-	std::shared_ptr<ThreadUtility> utility = instance();
+	auto utility = instance();
 
 	if ( type == ThreadConfigurationType::NoConfiguration )
 	{
diff --git a/src/main/cpp/throwableinformationpatternconverter.cpp b/src/main/cpp/throwableinformationpatternconverter.cpp
index 202db92..8a06c3a 100644
--- a/src/main/cpp/throwableinformationpatternconverter.cpp
+++ b/src/main/cpp/throwableinformationpatternconverter.cpp
@@ -61,11 +61,11 @@
 {
 	if (options.size() > 0 && options[0].compare(LOG4CXX_STR("short")) == 0)
 	{
-		static PatternConverterPtr shortConverter(new ThrowableInformationPatternConverter(true));
+		static PatternConverterPtr shortConverter = std::make_shared<ThrowableInformationPatternConverter>(true);
 		return shortConverter;
 	}
 
-	static PatternConverterPtr converter(new ThrowableInformationPatternConverter(false));
+	static PatternConverterPtr converter = std::make_shared<ThrowableInformationPatternConverter>(false);
 	return converter;
 }
 
diff --git a/src/main/cpp/timebasedrollingpolicy.cpp b/src/main/cpp/timebasedrollingpolicy.cpp
index 3659a51..34fa098 100644
--- a/src/main/cpp/timebasedrollingpolicy.cpp
+++ b/src/main/cpp/timebasedrollingpolicy.cpp
@@ -196,7 +196,7 @@
 	}
 
 	LogString buf;
-	ObjectPtr obj(new Date());
+	ObjectPtr obj = std::make_shared<Date>();
 	formatFileName(obj, buf, pool);
 	lastFileName = buf;
 
@@ -267,7 +267,7 @@
 	File currentFile(currentActiveFile);
 
 	LogString buf;
-	ObjectPtr obj(new Date(currentFile.exists(pool) ? currentFile.lastModified(pool) : n));
+	ObjectPtr obj = std::make_shared<Date>(currentFile.exists(pool) ? currentFile.lastModified(pool) : n);
 	formatFileName(obj, buf, pool);
 	lastFileName = buf;
 
@@ -275,15 +275,15 @@
 
 	if (currentActiveFile.length() > 0)
 	{
-		return RolloverDescriptionPtr(new RolloverDescription(
-					currentActiveFile, append, noAction, noAction));
+		return std::make_shared<RolloverDescription>(
+					currentActiveFile, append, noAction, noAction);
 	}
 	else
 	{
 		bRefreshCurFile = true;
-		return RolloverDescriptionPtr(new RolloverDescription(
+		return std::make_shared<RolloverDescription>(
 					lastFileName.substr(0, lastFileName.length() - suffixLength), append,
-					noAction, noAction));
+					noAction, noAction);
 	}
 }
 
@@ -297,7 +297,7 @@
 	nextCheck = now.getNextSecond();
 
 	LogString buf;
-	ObjectPtr obj(new Date(n));
+	ObjectPtr obj = std::make_shared<Date>(n);
 	formatFileName(obj, buf, pool);
 
 	LogString newFileName(buf);
@@ -348,24 +348,21 @@
 	//        and requires a rename plus maintaining the same name
 	if (currentActiveFile != lastBaseName)
 	{
-		renameAction = FileRenameActionPtr(
-				new FileRenameAction(
-					File().setPath(currentActiveFile), File().setPath(lastBaseName), true));
+		renameAction = std::make_shared<FileRenameAction>(
+					File().setPath(currentActiveFile), File().setPath(lastBaseName), true);
 		nextActiveFile = currentActiveFile;
 	}
 
 	if (suffixLength == 3)
 	{
-		compressAction = GZCompressActionPtr(
-				new GZCompressAction(
-					File().setPath(lastBaseName), File().setPath(lastFileName), true));
+		compressAction = std::make_shared<GZCompressAction>(
+					File().setPath(lastBaseName), File().setPath(lastFileName), true);
 	}
 
 	if (suffixLength == 4)
 	{
-		compressAction = ZipCompressActionPtr(
-				new ZipCompressAction(
-					File().setPath(lastBaseName), File().setPath(lastFileName), true));
+		compressAction = std::make_shared<ZipCompressAction>(
+					File().setPath(lastBaseName), File().setPath(lastFileName), true);
 	}
 
 #ifdef LOG4CXX_MULTI_PROCESS
@@ -387,7 +384,7 @@
 	lastFileName = newFileName;
 #endif
 
-	return RolloverDescriptionPtr(new RolloverDescription(nextActiveFile, append, renameAction, compressAction));
+	return std::make_shared<RolloverDescription>(nextActiveFile, append, renameAction, compressAction);
 }
 
 bool TimeBasedRollingPolicy::isTriggeringEvent(
diff --git a/src/main/cpp/timezone.cpp b/src/main/cpp/timezone.cpp
index 2beae5d..b7c7fa8 100644
--- a/src/main/cpp/timezone.cpp
+++ b/src/main/cpp/timezone.cpp
@@ -50,7 +50,7 @@
 		/** Class factory. */
 		static const TimeZonePtr& getInstance()
 		{
-			static TimeZonePtr tz( new GMTTimeZone() );
+			static TimeZonePtr tz = std::make_shared<GMTTimeZone>();
 			return tz;
 		}
 
@@ -75,7 +75,6 @@
 			return stat;
 		}
 
-	private:
 		GMTTimeZone() : TimeZone( LOG4CXX_STR("GMT") )
 		{
 		}
@@ -90,7 +89,7 @@
 		/** Class factory. */
 		static const TimeZonePtr& getInstance()
 		{
-			static TimeZonePtr tz( new LocalTimeZone() );
+			static TimeZonePtr tz = std::make_shared<LocalTimeZone>();
 			return tz;
 		}
 
@@ -116,11 +115,11 @@
 		}
 
 
-	private:
 		LocalTimeZone() : TimeZone( getTimeZoneName() )
 		{
 		}
 
+	private:
 		static const LogString getTimeZoneName()
 		{
 			const int MAX_TZ_LENGTH = 255;
@@ -276,7 +275,7 @@
 
 		s.append(mm);
 		apr_int32_t offset = sign * (hours * 3600 + minutes * 60);
-		return TimeZonePtr(new log4cxx::helpers::TimeZoneImpl::FixedTimeZone( s, offset ));
+		return std::make_shared<helpers::TimeZoneImpl::FixedTimeZone>( s, offset );
 	}
 
 	const TimeZonePtr& ltz = getDefault();
diff --git a/src/main/cpp/xmlsocketappender.cpp b/src/main/cpp/xmlsocketappender.cpp
index 39134ad..594b590 100644
--- a/src/main/cpp/xmlsocketappender.cpp
+++ b/src/main/cpp/xmlsocketappender.cpp
@@ -100,10 +100,10 @@
 
 void XMLSocketAppender::setSocket(log4cxx::helpers::SocketPtr& socket, Pool& p)
 {
-	OutputStreamPtr os(new SocketOutputStream(socket));
+	OutputStreamPtr os = std::make_shared<SocketOutputStream>(socket);
 	CharsetEncoderPtr charset(CharsetEncoder::getUTF8Encoder());
 	std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
-	_priv->writer = OutputStreamWriterPtr(new OutputStreamWriter(os, charset));
+	_priv->writer = std::make_shared<OutputStreamWriter>(os, charset);
 }
 
 void XMLSocketAppender::cleanUp(Pool& p)
diff --git a/src/main/include/log4cxx/helpers/threadutility.h b/src/main/include/log4cxx/helpers/threadutility.h
index 498bcba..901379d 100644
--- a/src/main/include/log4cxx/helpers/threadutility.h
+++ b/src/main/include/log4cxx/helpers/threadutility.h
@@ -76,11 +76,10 @@
 		log4cxx::helpers::ThreadStartPost postStartFunction();
 
 		LOG4CXX_DECLARE_PRIVATE_MEMBER_PTR(priv_data, m_priv)
-
 	public:
 		~ThreadUtility();
 
-		static std::shared_ptr<ThreadUtility> instance();
+		static ThreadUtility* instance();
 
 		/**
 		 * Utility method for configuring the ThreadUtility in a standard
diff --git a/src/main/include/log4cxx/logger.h b/src/main/include/log4cxx/logger.h
index e4a3540..f27f78e 100644
--- a/src/main/include/log4cxx/logger.h
+++ b/src/main/include/log4cxx/logger.h
@@ -60,22 +60,18 @@
 	private:
 		LOG4CXX_DECLARE_PRIVATE_MEMBER_PTR(LoggerPrivate, m_priv)
 
-	protected:
-		friend class DefaultLoggerFactory;
-
+	public:
 		/**
-		This constructor created a new <code>logger</code> instance and
+		This constructor initializes a new <code>logger</code> instance and
 		sets its name.
 
-		<p>It is intended to be used by sub-classes only. You should not
-		create categories directly.
+		<p>It is intended to be only used by factory-classes.
 
 		@param pool lifetime of pool must be longer than logger.
 		@param name The name of the logger.
 		*/
-		Logger(log4cxx::helpers::Pool& pool, const LogString& name);
+		Logger(helpers::Pool& pool, const LogString& name);
 
-	public:
 		~Logger();
 
 
@@ -568,7 +564,7 @@
 		Return the the LoggerRepository where this
 		<code>Logger</code> is attached.
 		*/
-		log4cxx::spi::LoggerRepositoryPtr getLoggerRepository() const;
+		log4cxx::spi::LoggerRepository* getLoggerRepository() const;
 
 
 		/**
@@ -1408,7 +1404,7 @@
 		/**
 		Only the Hierarchy class can set the hierarchy of a logger.*/
 		void removeHierarchy();
-		void setHierarchy(const spi::LoggerRepositoryPtr& repository);
+		void setHierarchy(spi::LoggerRepository* repository);
 		void setParent(LoggerPtr parentLogger);
 		spi::LoggerRepository* getHierarchy() const;
 
diff --git a/src/main/include/log4cxx/pattern/classnamepatternconverter.h b/src/main/include/log4cxx/pattern/classnamepatternconverter.h
index 8cf7c94..66ce9f9 100644
--- a/src/main/include/log4cxx/pattern/classnamepatternconverter.h
+++ b/src/main/include/log4cxx/pattern/classnamepatternconverter.h
@@ -35,15 +35,13 @@
  */
 class LOG4CXX_EXPORT ClassNamePatternConverter : public NamePatternConverter
 {
+	public:
 		/**
-		 * Private constructor.
 		 * @param options options, may be null.
 		 * @param logger logger for diagnostic messages, may be null.
 		 */
-		ClassNamePatternConverter(
-			const std::vector<LogString>& options);
+		ClassNamePatternConverter(const std::vector<LogString>& options);
 
-	public:
 		DECLARE_LOG4CXX_PATTERN(ClassNamePatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
 		LOG4CXX_CAST_ENTRY(ClassNamePatternConverter)
diff --git a/src/main/include/log4cxx/pattern/colorendpatternconverter.h b/src/main/include/log4cxx/pattern/colorendpatternconverter.h
index 3ad9bd3..fbdae3c 100644
--- a/src/main/include/log4cxx/pattern/colorendpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/colorendpatternconverter.h
@@ -35,11 +35,6 @@
 class LOG4CXX_EXPORT ColorEndPatternConverter
 	: public LoggingEventPatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		ColorEndPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(ColorEndPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -47,6 +42,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		ColorEndPatternConverter();
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/colorstartpatternconverter.h b/src/main/include/log4cxx/pattern/colorstartpatternconverter.h
index 62cd858..fc45bef 100644
--- a/src/main/include/log4cxx/pattern/colorstartpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/colorstartpatternconverter.h
@@ -35,11 +35,6 @@
 class LOG4CXX_EXPORT ColorStartPatternConverter
 	: public LoggingEventPatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		ColorStartPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(ColorStartPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -47,6 +42,9 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		ColorStartPatternConverter();
+
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/datepatternconverter.h b/src/main/include/log4cxx/pattern/datepatternconverter.h
index 3e123ce..229c8db 100644
--- a/src/main/include/log4cxx/pattern/datepatternconverter.h
+++ b/src/main/include/log4cxx/pattern/datepatternconverter.h
@@ -40,13 +40,6 @@
 		struct DatePatternConverterPrivate;
 
 		/**
-		 * Private constructor.
-		 * @param options options, may be null.
-		 * @param logger logger for diagnostic messages, may be null.
-		 */
-		DatePatternConverter(const OptionsList& options);
-
-		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
 		 * @return instance of pattern converter.
@@ -59,6 +52,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		DatePatternConverter(const OptionsList& options);
+
 		~DatePatternConverter();
 
 		static PatternConverterPtr newInstance(
diff --git a/src/main/include/log4cxx/pattern/filelocationpatternconverter.h b/src/main/include/log4cxx/pattern/filelocationpatternconverter.h
index fd59639..d94d61e 100644
--- a/src/main/include/log4cxx/pattern/filelocationpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/filelocationpatternconverter.h
@@ -35,11 +35,6 @@
 class LOG4CXX_EXPORT FileLocationPatternConverter
 	: public LoggingEventPatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		FileLocationPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(FileLocationPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -47,6 +42,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		FileLocationPatternConverter();
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/fulllocationpatternconverter.h b/src/main/include/log4cxx/pattern/fulllocationpatternconverter.h
index 122ee4e..d5b6cae 100644
--- a/src/main/include/log4cxx/pattern/fulllocationpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/fulllocationpatternconverter.h
@@ -35,11 +35,6 @@
 class LOG4CXX_EXPORT FullLocationPatternConverter
 	: public LoggingEventPatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		FullLocationPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(FullLocationPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -47,6 +42,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		FullLocationPatternConverter();
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/integerpatternconverter.h b/src/main/include/log4cxx/pattern/integerpatternconverter.h
index 8149bcf..961148d 100644
--- a/src/main/include/log4cxx/pattern/integerpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/integerpatternconverter.h
@@ -34,11 +34,6 @@
  */
 class LOG4CXX_EXPORT IntegerPatternConverter : public PatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		IntegerPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(IntegerPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -46,6 +41,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(PatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		IntegerPatternConverter();
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/levelpatternconverter.h b/src/main/include/log4cxx/pattern/levelpatternconverter.h
index a6da4da..3ae0c7b 100644
--- a/src/main/include/log4cxx/pattern/levelpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/levelpatternconverter.h
@@ -34,11 +34,6 @@
  */
 class LOG4CXX_EXPORT LevelPatternConverter : public LoggingEventPatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		LevelPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(LevelPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -46,6 +41,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		LevelPatternConverter();
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/linelocationpatternconverter.h b/src/main/include/log4cxx/pattern/linelocationpatternconverter.h
index 4fce9cd..5656c48 100644
--- a/src/main/include/log4cxx/pattern/linelocationpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/linelocationpatternconverter.h
@@ -35,11 +35,6 @@
 class LOG4CXX_EXPORT LineLocationPatternConverter
 	: public LoggingEventPatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		LineLocationPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(LineLocationPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -47,6 +42,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		LineLocationPatternConverter();
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/lineseparatorpatternconverter.h b/src/main/include/log4cxx/pattern/lineseparatorpatternconverter.h
index 4a51368..592f708 100644
--- a/src/main/include/log4cxx/pattern/lineseparatorpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/lineseparatorpatternconverter.h
@@ -35,12 +35,6 @@
 class LOG4CXX_EXPORT LineSeparatorPatternConverter
 	: public LoggingEventPatternConverter
 {
-
-		/**
-		 * Private constructor.
-		 */
-		LineSeparatorPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(LineSeparatorPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -48,6 +42,7 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		LineSeparatorPatternConverter();
 
 		/**
 		 * Obtains an instance of pattern converter.
diff --git a/src/main/include/log4cxx/pattern/literalpatternconverter.h b/src/main/include/log4cxx/pattern/literalpatternconverter.h
index ce66edd..d07a8c6 100644
--- a/src/main/include/log4cxx/pattern/literalpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/literalpatternconverter.h
@@ -41,13 +41,6 @@
 {
 		struct LiteralPatternConverterPrivate;
 
-		/**
-		 * Create a new instance.
-		 * @param literal string literal.
-		 */
-		LiteralPatternConverter(const LogString& literal);
-
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(LiteralPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -55,6 +48,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		LiteralPatternConverter(const LogString& literal);
+
 		static PatternConverterPtr newInstance(const LogString& literal);
 
 		using LoggingEventPatternConverter::format;
diff --git a/src/main/include/log4cxx/pattern/loggerpatternconverter.h b/src/main/include/log4cxx/pattern/loggerpatternconverter.h
index 985f07a..4ff2f1a 100644
--- a/src/main/include/log4cxx/pattern/loggerpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/loggerpatternconverter.h
@@ -35,14 +35,6 @@
  */
 class LOG4CXX_EXPORT LoggerPatternConverter : public NamePatternConverter
 {
-
-		/**
-		 * Private constructor.
-		 * @param options options, may be null.
-		 * @param logger logger for diagnostic messages, may be null.
-		 */
-		LoggerPatternConverter(const std::vector<LogString>& options);
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(LoggerPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -50,6 +42,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(NamePatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		LoggerPatternConverter(const std::vector<LogString>& options);
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/messagepatternconverter.h b/src/main/include/log4cxx/pattern/messagepatternconverter.h
index 8964a5d..5522cc9 100644
--- a/src/main/include/log4cxx/pattern/messagepatternconverter.h
+++ b/src/main/include/log4cxx/pattern/messagepatternconverter.h
@@ -34,12 +34,6 @@
  */
 class LOG4CXX_EXPORT MessagePatternConverter : public LoggingEventPatternConverter
 {
-
-		/**
-		 * Private constructor.
-		 */
-		MessagePatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(MessagePatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -47,6 +41,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		MessagePatternConverter();
+
 		/**
 		 * Obtains an instance of pattern converter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/methodlocationpatternconverter.h b/src/main/include/log4cxx/pattern/methodlocationpatternconverter.h
index e356d90..f0442b3 100644
--- a/src/main/include/log4cxx/pattern/methodlocationpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/methodlocationpatternconverter.h
@@ -35,12 +35,6 @@
 class LOG4CXX_EXPORT MethodLocationPatternConverter
 	: public LoggingEventPatternConverter
 {
-
-		/**
-		 * Private constructor.
-		 */
-		MethodLocationPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(MethodLocationPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -48,6 +42,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		MethodLocationPatternConverter();
+
 		/**
 		 * Obtains an instance of MethodLocationPatternConverter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/ndcpatternconverter.h b/src/main/include/log4cxx/pattern/ndcpatternconverter.h
index c23eea4..6713d5c 100644
--- a/src/main/include/log4cxx/pattern/ndcpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/ndcpatternconverter.h
@@ -34,12 +34,6 @@
  */
 class LOG4CXX_EXPORT NDCPatternConverter : public LoggingEventPatternConverter
 {
-
-		/**
-		 * Private constructor.
-		 */
-		NDCPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(NDCPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -47,6 +41,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		NDCPatternConverter();
+
 		/**
 		 * Obtains an instance of NDCPatternConverter.
 		 * @param options options, may be null.
diff --git a/src/main/include/log4cxx/pattern/propertiespatternconverter.h b/src/main/include/log4cxx/pattern/propertiespatternconverter.h
index f54e349..cc15689 100644
--- a/src/main/include/log4cxx/pattern/propertiespatternconverter.h
+++ b/src/main/include/log4cxx/pattern/propertiespatternconverter.h
@@ -41,13 +41,6 @@
 {
 		struct PropertiesPatternConverterPrivate;
 
-		/**
-		 * Private constructor.
-		 * @param options options, may be null.
-		 * @param logger logger for diagnostic messages, may be null.
-		 */
-		PropertiesPatternConverter(const LogString& name, const LogString& option);
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(PropertiesPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -56,6 +49,12 @@
 		END_LOG4CXX_CAST_MAP()
 
 		/**
+		 * @param options options, may be null.
+		 * @param logger logger for diagnostic messages, may be null.
+		 */
+		PropertiesPatternConverter(const LogString& name, const LogString& option);
+
+		/**
 		 * Obtains an instance of PropertiesPatternConverter.
 		 * @param options options, may be null or first element contains name of property to format.
 		 * @return instance of PropertiesPatternConverter.
diff --git a/src/main/include/log4cxx/pattern/threadpatternconverter.h b/src/main/include/log4cxx/pattern/threadpatternconverter.h
index a9ebf8b..fe362f0 100644
--- a/src/main/include/log4cxx/pattern/threadpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/threadpatternconverter.h
@@ -34,11 +34,6 @@
  */
 class LOG4CXX_EXPORT ThreadPatternConverter : public LoggingEventPatternConverter
 {
-		/**
-		 * Private constructor.
-		 */
-		ThreadPatternConverter();
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(ThreadPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -46,6 +41,8 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		ThreadPatternConverter();
+
 		/**
 		 * Obtains an instance of ThreadPatternConverter.
 		 * @param options options, currently ignored, may be null.
diff --git a/src/main/include/log4cxx/pattern/threadusernamepatternconverter.h b/src/main/include/log4cxx/pattern/threadusernamepatternconverter.h
index 60bb9ca..b8e2c13 100644
--- a/src/main/include/log4cxx/pattern/threadusernamepatternconverter.h
+++ b/src/main/include/log4cxx/pattern/threadusernamepatternconverter.h
@@ -29,7 +29,6 @@
 
 class LOG4CXX_EXPORT ThreadUsernamePatternConverter : public LoggingEventPatternConverter
 {
-        ThreadUsernamePatternConverter();
 
     public:
 	    DECLARE_LOG4CXX_PATTERN(ThreadUsernamePatternConverter)
@@ -38,6 +37,8 @@
 	    LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 	    END_LOG4CXX_CAST_MAP()
 
+		ThreadUsernamePatternConverter();
+
 	    static PatternConverterPtr newInstance(
 	            const std::vector<LogString>& options);
 
diff --git a/src/main/include/log4cxx/pattern/throwableinformationpatternconverter.h b/src/main/include/log4cxx/pattern/throwableinformationpatternconverter.h
index 2ffe457..83c1940 100644
--- a/src/main/include/log4cxx/pattern/throwableinformationpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/throwableinformationpatternconverter.h
@@ -39,11 +39,6 @@
 {
 		struct ThrowableInformationPatternConverterPrivate;
 
-		/**
-		 * Private constructor.
-		 */
-		ThrowableInformationPatternConverter(bool shortReport);
-
 	public:
 		DECLARE_LOG4CXX_PATTERN(ThrowableInformationPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -51,6 +46,7 @@
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		ThrowableInformationPatternConverter(bool shortReport);
 
 		/**
 		 * Gets an instance of the class.
diff --git a/src/main/include/log4cxx/rolling/rollingpolicybase.h b/src/main/include/log4cxx/rolling/rollingpolicybase.h
index d6d7318..c9fdae2 100644
--- a/src/main/include/log4cxx/rolling/rollingpolicybase.h
+++ b/src/main/include/log4cxx/rolling/rollingpolicybase.h
@@ -98,8 +98,8 @@
 		 * @param buf string buffer to which formatted file name is appended, may not be null.
 		 * @param p memory pool.
 		 */
-		void formatFileName(log4cxx::helpers::ObjectPtr& obj,
-			LogString& buf, log4cxx::helpers::Pool& p) const;
+		void formatFileName(const helpers::ObjectPtr& obj,
+			LogString& buf, helpers::Pool& p) const;
 
 		log4cxx::pattern::PatternConverterPtr getIntegerPatternConverter() const;
 		log4cxx::pattern::PatternConverterPtr getDatePatternConverter() const;
diff --git a/src/test/cpp/helpers/threadutilitytestcase.cpp b/src/test/cpp/helpers/threadutilitytestcase.cpp
index dcd718c..0460b08 100644
--- a/src/test/cpp/helpers/threadutilitytestcase.cpp
+++ b/src/test/cpp/helpers/threadutilitytestcase.cpp
@@ -33,7 +33,7 @@
 public:
 	void testNullFunctions()
 	{
-		ThreadUtilityPtr thrUtil = ThreadUtility::instance();
+		auto thrUtil = ThreadUtility::instance();
 
 		thrUtil->configureFuncs( nullptr, nullptr, nullptr );
 
@@ -44,7 +44,7 @@
 
 	void testCustomFunctions()
 	{
-		ThreadUtilityPtr thrUtil = ThreadUtility::instance();
+		auto thrUtil = ThreadUtility::instance();
 		int num_pre = 0;
 		int num_started = 0;
 		int num_post = 0;
@@ -79,7 +79,7 @@
 	{
 		ThreadUtility::configure( ThreadConfigurationType::BlockSignalsAndNameThread );
 
-		ThreadUtilityPtr thrUtil = ThreadUtility::instance();
+		auto thrUtil = ThreadUtility::instance();
 
 		std::thread t = thrUtil->createThread( LOG4CXX_STR("FooName"), []() {} );
 
diff --git a/src/test/cpp/loggertestcase.cpp b/src/test/cpp/loggertestcase.cpp
index afc520d..1ab5cd7 100644
--- a/src/test/cpp/loggertestcase.cpp
+++ b/src/test/cpp/loggertestcase.cpp
@@ -228,7 +228,7 @@
 		LoggerPtr root = Logger::getRootLogger();
 		root->addAppender(caRoot);
 
-		LoggerRepositoryPtr h = LogManager::getLoggerRepository();
+		auto h = LogManager::getLoggerRepository();
 
 		//h.disableDebug();
 		h->setThreshold(Level::getInfo());
