diff --git a/utilspp/singleton/LifetimeLibrary.cpp b/utilspp/singleton/LifetimeLibrary.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e58932ebde4692b55b67fdce9b569bea80b5b5bc
--- /dev/null
+++ b/utilspp/singleton/LifetimeLibrary.cpp
@@ -0,0 +1,72 @@
+#include "SingletonHolder.hpp"
+#include "LifetimeLibrary.hpp"
+
+utilspp::LifetimeLibraryImpl::LifetimeLibraryImpl()
+   :
+   mTrackerArray( NULL ),
+   mNbElements( 0 )
+{}
+
+utilspp::LifetimeLibraryImpl::~LifetimeLibraryImpl()
+{
+   terminate();
+}
+
+void
+utilspp::LifetimeLibraryImpl::add( utilspp::PrivateMembers::LifetimeTracker *tracker )
+{
+   utilspp::PrivateMembers::TrackerArray newArray = static_cast<
+      utilspp::PrivateMembers::TrackerArray >(std::realloc(mTrackerArray, 
+							    mNbElements + 1));
+   if( newArray == NULL )
+   {
+      throw std::bad_alloc();
+   }
+
+   mTrackerArray = newArray;
+
+   utilspp::PrivateMembers::TrackerArray pos = 
+     std::upper_bound(mTrackerArray, 
+		      mTrackerArray + mNbElements,
+		      tracker,
+		      &utilspp::PrivateMembers::LifetimeTracker::compare);
+   std::copy_backward(pos, 
+		      mTrackerArray + mNbElements, 
+		      mTrackerArray + mNbElements + 1);
+   
+   *pos = tracker;
+   mNbElements++;
+};
+
+void
+utilspp::LifetimeLibraryImpl::terminate()
+{
+   //The number of elements MUST always be equal or over zero.
+   assert( mNbElements >= 0 );
+
+   while( mNbElements > 0 )
+   {
+      //At this point the mTrackerArray MUST not be NULL.
+      assert( mTrackerArray != NULL );
+      
+      //Pick the element at the top of the stack.
+      utilspp::PrivateMembers::LifetimeTracker* top =  
+	mTrackerArray[mNbElements - 1];
+
+      //Remove that object off the stack.
+      //Don't check errors-realloc with less memory, cause that can't fail.
+      mTrackerArray = 
+	static_cast< utilspp::PrivateMembers::TrackerArray >
+	(std::realloc(mTrackerArray, --mNbElements));
+      
+      //Destroy the element.
+      delete top;
+   }
+}
+
+unsigned int 
+utilspp::getLongevity( utilspp::LifetimeLibraryImpl * )
+{
+   return 0;
+}
+
diff --git a/utilspp/singleton/PrivateMembers.cpp b/utilspp/singleton/PrivateMembers.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..901c9bcc1de5cca25b5d5d2d7b3c2ee93df7c04b
--- /dev/null
+++ b/utilspp/singleton/PrivateMembers.cpp
@@ -0,0 +1,46 @@
+#include <cstdlib>
+
+#include "PrivateMembers.hpp"
+
+utilspp::PrivateMembers::TrackerArray
+   utilspp::PrivateMembers::mTrackerArray = NULL;
+
+int utilspp::PrivateMembers::mNbElements = 0;
+
+utilspp::PrivateMembers::LifetimeTracker::LifetimeTracker( unsigned int
+      longevity ) 
+: 
+mLongevity( longevity )
+{}
+
+utilspp::PrivateMembers::LifetimeTracker::~LifetimeTracker()
+{}
+
+bool
+utilspp::PrivateMembers::LifetimeTracker::compare( 
+      const LifetimeTracker *l, 
+      const LifetimeTracker *r 
+      )
+{
+   return l->mLongevity < r->mLongevity;
+}
+
+void
+utilspp::PrivateMembers::atExitFunc()
+{
+   assert((mTrackerArray != NULL) && 
+	  (mNbElements > 0));
+
+   //Pick the element at the top of the stack.
+   LifetimeTracker* top =  mTrackerArray[mNbElements - 1];
+
+   //Remove that object off the stack.
+   //Don't check errors-realloc with less memory, cause that can't fail.
+   mTrackerArray = static_cast< 
+     utilspp::PrivateMembers::TrackerArray >(std::realloc(mTrackerArray, 
+							    --mNbElements));
+
+   //Destroy the element.
+   delete top;
+}
+