diff --git a/src/main/cpp/defaultconfigurator.cpp b/src/main/cpp/defaultconfigurator.cpp
index b304084..4b64298 100644
--- a/src/main/cpp/defaultconfigurator.cpp
+++ b/src/main/cpp/defaultconfigurator.cpp
@@ -27,7 +27,7 @@
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
-void DefaultConfigurator::configure(LoggerRepository* repository)
+void DefaultConfigurator::configure(LoggerRepositoryPtr repository)
 {
 	repository->setConfigured(true);
 	const LogString configuratorClassName(getConfiguratorClass());
diff --git a/src/main/cpp/defaultrepositoryselector.cpp b/src/main/cpp/defaultrepositoryselector.cpp
index 247e0e9..238e0ac 100644
--- a/src/main/cpp/defaultrepositoryselector.cpp
+++ b/src/main/cpp/defaultrepositoryselector.cpp
@@ -22,12 +22,12 @@
 using namespace log4cxx::helpers;
 
 
-DefaultRepositorySelector::DefaultRepositorySelector(const LoggerRepositoryPtr& repository1)
+DefaultRepositorySelector::DefaultRepositorySelector(const LoggerRepositoryPtr repository1)
 	: repository(repository1)
 {
 }
 
-LoggerRepositoryPtr& DefaultRepositorySelector::getLoggerRepository()
+LoggerRepositoryPtr DefaultRepositorySelector::getLoggerRepository()
 {
 	return repository;
 }
diff --git a/src/main/cpp/domconfigurator.cpp b/src/main/cpp/domconfigurator.cpp
index 55f7328..481c152 100644
--- a/src/main/cpp/domconfigurator.cpp
+++ b/src/main/cpp/domconfigurator.cpp
@@ -766,7 +766,7 @@
     propSetter.setProperty(name, value, p);
 }
 
-void DOMConfigurator::doConfigure(const File& filename, spi::LoggerRepositoryPtr& repository1)
+void DOMConfigurator::doConfigure(const File& filename, spi::LoggerRepositoryPtr repository1)
 {
     repository1->setConfigured(true);
     this->repository = repository1;
diff --git a/src/main/cpp/hierarchy.cpp b/src/main/cpp/hierarchy.cpp
index 9a26809..9e4184e 100644
--- a/src/main/cpp/hierarchy.cpp
+++ b/src/main/cpp/hierarchy.cpp
@@ -270,8 +270,9 @@
     }
     if (!currentlyConfigured)
     {
+        std::shared_ptr<Hierarchy> nonconstThis = std::const_pointer_cast<Hierarchy>(shared_from_this());
         DefaultConfigurator::configure(
-            const_cast<Hierarchy*>(this));
+            nonconstThis);
 	}
 
 	return thresholdInt > level;
@@ -319,7 +320,7 @@
 
     for (it = loggers->begin(); it != itEnd; it++)
     {
-        LoggerPtr& logger = it->second;
+        LoggerPtr logger = it->second;
         logger->closeNestedAppenders();
     }
 
@@ -328,7 +329,7 @@
 
     for (it = loggers->begin(); it != itEnd; it++)
     {
-        LoggerPtr& logger = it->second;
+        LoggerPtr logger = it->second;
         logger->removeAllAppenders();
     }
 }
diff --git a/src/main/cpp/logger.cpp b/src/main/cpp/logger.cpp
index 31aa4a3..c134108 100644
--- a/src/main/cpp/logger.cpp
+++ b/src/main/cpp/logger.cpp
@@ -102,9 +102,9 @@
 {
     int writes = 0;
 
-    for (LoggerPtr logger(const_cast<Logger*>(this));
+    for (const Logger* logger = this;
             logger != 0;
-            logger = logger->parent)
+            logger = logger->parent.get())
     {
         // Protected against simultaneous call to addAppender, removeAppender,...
         std::unique_lock lock(logger->mutex);
@@ -196,7 +196,7 @@
     return aai->getAppender(name1);
 }
 
-const LevelPtr& Logger::getEffectiveLevel() const
+const LevelPtr Logger::getEffectiveLevel() const
 {
     for (const Logger* l = this; l != 0; l = l->parent.get())
     {
@@ -219,7 +219,7 @@
 
 ResourceBundlePtr Logger::getResourceBundle() const
 {
-    for (LoggerPtr l(const_cast<Logger*>(this)); l != 0; l = l->parent)
+    for (const Logger* l = this; l != 0; l = l->parent.get())
     {
         if (l->resourceBundle != 0)
         {
@@ -504,7 +504,7 @@
     this->repository = repository1;
 }
 
-void Logger::setLevel(const LevelPtr& level1)
+void Logger::setLevel(const LevelPtr level1)
 {
     this->level = level1;
 }
diff --git a/src/main/cpp/logmanager.cpp b/src/main/cpp/logmanager.cpp
index fc39333..7797900 100644
--- a/src/main/cpp/logmanager.cpp
+++ b/src/main/cpp/logmanager.cpp
@@ -47,17 +47,22 @@
 IMPLEMENT_LOG4CXX_OBJECT(DefaultRepositorySelector)
 
 void* LogManager::guard = 0;
+spi::RepositorySelectorPtr LogManager::repositorySelector;
 
 
-
-RepositorySelectorPtr& LogManager::getRepositorySelector()
+RepositorySelectorPtr LogManager::getRepositorySelector()
 {
 	//
 	//     call to initialize APR and trigger "start" of logging clock
 	//
-	APRInitializer::initialize();
-	static spi::RepositorySelectorPtr selector;
-	return selector;
+    APRInitializer::initialize();
+    if (!repositorySelector)
+    {
+        LoggerRepositoryPtr hierarchy(new Hierarchy());
+        RepositorySelectorPtr selector(new DefaultRepositorySelector(hierarchy));
+        repositorySelector = selector;
+    }
+    return repositorySelector;
 }
 
 void LogManager::setRepositorySelector(spi::RepositorySelectorPtr selector,
@@ -79,15 +84,8 @@
 
 
 
-LoggerRepositoryPtr& LogManager::getLoggerRepository()
+LoggerRepositoryPtr LogManager::getLoggerRepository()
 {
-	if (getRepositorySelector() == 0)
-	{
-		LoggerRepositoryPtr hierarchy(new Hierarchy());
-		RepositorySelectorPtr selector(new DefaultRepositorySelector(hierarchy));
-		getRepositorySelector() = selector;
-	}
-
 	return getRepositorySelector()->getLoggerRepository();
 }
 
@@ -209,6 +207,7 @@
 
 void LogManager::shutdown()
 {
+    LoggerRepositoryPtr repPtr = getLoggerRepository();
 	getLoggerRepository()->shutdown();
 }
 
diff --git a/src/main/cpp/optionconverter.cpp b/src/main/cpp/optionconverter.cpp
index f80231f..5791c0b 100644
--- a/src/main/cpp/optionconverter.cpp
+++ b/src/main/cpp/optionconverter.cpp
@@ -375,7 +375,7 @@
 }
 
 void OptionConverter::selectAndConfigure(const File& configFileName,
-	const LogString& _clazz, spi::LoggerRepositoryPtr& hierarchy)
+    const LogString& _clazz, spi::LoggerRepositoryPtr hierarchy)
 {
 	ConfiguratorPtr configurator;
 	LogString clazz = _clazz;
diff --git a/src/main/cpp/propertyconfigurator.cpp b/src/main/cpp/propertyconfigurator.cpp
index da1a911..615d33a 100644
--- a/src/main/cpp/propertyconfigurator.cpp
+++ b/src/main/cpp/propertyconfigurator.cpp
@@ -87,7 +87,7 @@
 }
 
 void PropertyConfigurator::doConfigure(const File& configFileName,
-                                       spi::LoggerRepositoryPtr& hierarchy)
+                                       spi::LoggerRepositoryPtr hierarchy)
 {
     hierarchy->setConfigured(true);
 
@@ -151,7 +151,7 @@
 #endif
 
 void PropertyConfigurator::doConfigure(helpers::Properties& properties,
-                                       spi::LoggerRepositoryPtr& hierarchy)
+                                       spi::LoggerRepositoryPtr hierarchy)
 {
     hierarchy->setConfigured(true);
 
diff --git a/src/main/cpp/rootlogger.cpp b/src/main/cpp/rootlogger.cpp
index f733806..9f3357a 100644
--- a/src/main/cpp/rootlogger.cpp
+++ b/src/main/cpp/rootlogger.cpp
@@ -24,18 +24,18 @@
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
-RootLogger::RootLogger(Pool& pool, const LevelPtr& level1) :
+RootLogger::RootLogger(Pool& pool, const LevelPtr level1) :
 	Logger(pool, LOG4CXX_STR("root"))
 {
 	setLevel(level1);
 }
 
-const LevelPtr& RootLogger::getEffectiveLevel() const
+const LevelPtr RootLogger::getEffectiveLevel() const
 {
 	return level;
 }
 
-void RootLogger::setLevel(const LevelPtr& level1)
+void RootLogger::setLevel(const LevelPtr level1)
 {
 	if (level1 == 0)
 	{
diff --git a/src/main/include/log4cxx/defaultconfigurator.h b/src/main/include/log4cxx/defaultconfigurator.h
index 362d808..2e563bc 100644
--- a/src/main/include/log4cxx/defaultconfigurator.h
+++ b/src/main/include/log4cxx/defaultconfigurator.h
@@ -42,7 +42,7 @@
 		Add a ConsoleAppender that uses PatternLayout
 		using the PatternLayout#TTCC_CONVERSION_PATTERN and
 		prints to <code>stdout</code> to the root logger.*/
-		static void configure(log4cxx::spi::LoggerRepository*);
+        static void configure(log4cxx::spi::LoggerRepositoryPtr repository);
 
 	private:
 		static const LogString getConfigurationFileName();
diff --git a/src/main/include/log4cxx/helpers/optionconverter.h b/src/main/include/log4cxx/helpers/optionconverter.h
index b19a07e..91e316f 100644
--- a/src/main/include/log4cxx/helpers/optionconverter.h
+++ b/src/main/include/log4cxx/helpers/optionconverter.h
@@ -155,7 +155,7 @@
 		@param hierarchy The Hierarchy to act on.
 		*/
 		static void selectAndConfigure(const File& configFileName,
-			const LogString& clazz, spi::LoggerRepositoryPtr& hierarchy);
+            const LogString& clazz, spi::LoggerRepositoryPtr hierarchy);
 };
 }  // namespace helpers
 } // namespace log4cxx
diff --git a/src/main/include/log4cxx/hierarchy.h b/src/main/include/log4cxx/hierarchy.h
index d23bcf3..a367b77 100644
--- a/src/main/include/log4cxx/hierarchy.h
+++ b/src/main/include/log4cxx/hierarchy.h
@@ -55,7 +55,8 @@
 */
 class LOG4CXX_EXPORT Hierarchy :
 	public virtual spi::LoggerRepository,
-    public virtual helpers::Object
+    public virtual helpers::Object,
+    public std::enable_shared_from_this<Hierarchy>
 {
 	private:
 		log4cxx::helpers::Pool pool;
@@ -66,10 +67,10 @@
 		spi::HierarchyEventListenerList listeners;
 
 		typedef std::map<LogString, LoggerPtr> LoggerMap;
-		LoggerMap* loggers;
+        std::unique_ptr<LoggerMap> loggers;
 
 		typedef std::map<LogString, ProvisionNode> ProvisionNodeMap;
-		ProvisionNodeMap* provisionNodes;
+        std::unique_ptr<ProvisionNodeMap> provisionNodes;
 
 		LoggerPtr root;
 
diff --git a/src/main/include/log4cxx/logger.h b/src/main/include/log4cxx/logger.h
index c46bcea..ec95566 100644
--- a/src/main/include/log4cxx/logger.h
+++ b/src/main/include/log4cxx/logger.h
@@ -618,7 +618,7 @@
 
     @throws RuntimeException if all levels are null in the hierarchy
     */
-    virtual const LevelPtr& getEffectiveLevel() const;
+    virtual const LevelPtr getEffectiveLevel() const;
 
     /**
     Return the the LoggerRepository where this
@@ -1474,7 +1474,7 @@
     <p>As in <pre> &nbsp;&nbsp;&nbsp;logger->setLevel(Level::getDebug()); </pre>
 
     <p>Null values are admitted.  */
-    virtual void setLevel(const LevelPtr& level);
+    virtual void setLevel(const LevelPtr level);
 
     /**
     Set the resource bundle to be used with localized logging methods.
diff --git a/src/main/include/log4cxx/logmanager.h b/src/main/include/log4cxx/logmanager.h
index 3fc3560..40f4614 100644
--- a/src/main/include/log4cxx/logmanager.h
+++ b/src/main/include/log4cxx/logmanager.h
@@ -50,7 +50,8 @@
 {
 	private:
 		static void* guard;
-		static spi::RepositorySelectorPtr& getRepositorySelector();
+        static spi::RepositorySelectorPtr repositorySelector;
+        static spi::RepositorySelectorPtr getRepositorySelector();
 
 	public:
 		/**
@@ -72,7 +73,7 @@
 		static void setRepositorySelector(spi::RepositorySelectorPtr selector,
 			void* guard);
 
-		static spi::LoggerRepositoryPtr& getLoggerRepository();
+        static spi::LoggerRepositoryPtr getLoggerRepository();
 
 		/**
 		Retrieve the appropriate root logger.
diff --git a/src/main/include/log4cxx/propertyconfigurator.h b/src/main/include/log4cxx/propertyconfigurator.h
index cc2c078..c9703bd 100644
--- a/src/main/include/log4cxx/propertyconfigurator.h
+++ b/src/main/include/log4cxx/propertyconfigurator.h
@@ -290,7 +290,7 @@
     @param hierarchy The hierarchy to operation upon.
     */
     void doConfigure(const File& configFileName,
-                     spi::LoggerRepositoryPtr& hierarchy);
+                     spi::LoggerRepositoryPtr hierarchy);
 
     /**
     Read configuration options from file <code>configFilename</code>.
@@ -333,7 +333,7 @@
     for the expected format.
     */
     void doConfigure(helpers::Properties& properties,
-                     spi::LoggerRepositoryPtr& hierarchy);
+                     spi::LoggerRepositoryPtr hierarchy);
 
     // --------------------------------------------------------------------------
     // Internal stuff
diff --git a/src/main/include/log4cxx/spi/configurator.h b/src/main/include/log4cxx/spi/configurator.h
index c7a8706..172999d 100644
--- a/src/main/include/log4cxx/spi/configurator.h
+++ b/src/main/include/log4cxx/spi/configurator.h
@@ -45,7 +45,7 @@
 		@param repository The hierarchy to operation upon.
 		*/
 		virtual void doConfigure(const File& configFileName,
-			spi::LoggerRepositoryPtr& repository) = 0;
+            spi::LoggerRepositoryPtr repository) = 0;
 
 
 	private:
diff --git a/src/main/include/log4cxx/spi/defaultrepositoryselector.h b/src/main/include/log4cxx/spi/defaultrepositoryselector.h
index bf5a6c9..325a359 100644
--- a/src/main/include/log4cxx/spi/defaultrepositoryselector.h
+++ b/src/main/include/log4cxx/spi/defaultrepositoryselector.h
@@ -36,8 +36,9 @@
 		LOG4CXX_CAST_ENTRY(RepositorySelector)
 		END_LOG4CXX_CAST_MAP()
 
-		DefaultRepositorySelector(const LoggerRepositoryPtr& repository1);
-		virtual LoggerRepositoryPtr& getLoggerRepository();
+        DefaultRepositorySelector(const LoggerRepositoryPtr repository1);
+        ~DefaultRepositorySelector(){}
+        virtual LoggerRepositoryPtr getLoggerRepository();
 
 	private:
 		LoggerRepositoryPtr repository;
diff --git a/src/main/include/log4cxx/spi/repositoryselector.h b/src/main/include/log4cxx/spi/repositoryselector.h
index cf36f58..af141b7 100644
--- a/src/main/include/log4cxx/spi/repositoryselector.h
+++ b/src/main/include/log4cxx/spi/repositoryselector.h
@@ -44,7 +44,7 @@
 	public:
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(RepositorySelector)
 		virtual ~RepositorySelector() {}
-		virtual LoggerRepositoryPtr& getLoggerRepository() = 0;
+        virtual LoggerRepositoryPtr getLoggerRepository() = 0;
 };
 LOG4CXX_PTR_DEF(RepositorySelector);
 }  //namespace spi
diff --git a/src/main/include/log4cxx/spi/rootlogger.h b/src/main/include/log4cxx/spi/rootlogger.h
index f2f3e8c..671dfa9 100644
--- a/src/main/include/log4cxx/spi/rootlogger.h
+++ b/src/main/include/log4cxx/spi/rootlogger.h
@@ -40,19 +40,21 @@
 		The root logger names itself as "root". However, the root
 		logger cannot be retrieved by name.
 		*/
-		RootLogger(log4cxx::helpers::Pool& pool, const LevelPtr& level);
+        RootLogger(log4cxx::helpers::Pool& pool, const LevelPtr level);
+
+        ~RootLogger(){}
 
 		/**
 		Return the assigned level value without walking the logger
 		hierarchy.
 		*/
-		virtual const LevelPtr& getEffectiveLevel() const;
+        virtual const LevelPtr getEffectiveLevel() const;
 
 		/**
 		            Setting a null value to the level of the root logger may have catastrophic
 		            results. We prevent this here.
 		            */
-		void setLevel(const LevelPtr& level);
+        void setLevel(const LevelPtr level);
 };
 }  // namespace spi
 } // namespace log4cxx
diff --git a/src/main/include/log4cxx/xml/domconfigurator.h b/src/main/include/log4cxx/xml/domconfigurator.h
index fa737ce..fde17fd 100644
--- a/src/main/include/log4cxx/xml/domconfigurator.h
+++ b/src/main/include/log4cxx/xml/domconfigurator.h
@@ -286,7 +286,7 @@
     @param repository The hierarchy to operation upon.
     */
     void doConfigure(const File& filename,
-                     spi::LoggerRepositoryPtr& repository);
+                     spi::LoggerRepositoryPtr repository);
 
 protected:
     static LogString getAttribute(
