Index: /source/ariba/overlay/BaseOverlay.cpp
===================================================================
--- /source/ariba/overlay/BaseOverlay.cpp	(revision 9946)
+++ /source/ariba/overlay/BaseOverlay.cpp	(revision 9964)
@@ -110,5 +110,5 @@
 
 		// return true, if ttl is elapsed
-		return ( difftime( time(NULL), this->last_update ) >= ttl );
+		return ( difftime( time(NULL), this->last_update ) > ttl );
 	}
 
@@ -128,5 +128,5 @@
 		vector<Data> vect;
 		BOOST_FOREACH( ValueEntry& e, values )
-		vect.push_back( e.get_value() );
+			vect.push_back( e.get_value() );
 		return vect;
 	}
@@ -154,4 +154,5 @@
 
 	void put( const Data& key, const Data& value, uint16_t ttl = 0 ) {
+		cleanup();
 
 		// find entry
@@ -209,4 +210,6 @@
 
 	bool remove( const Data& key ) {
+		cleanup();
+
 		// find entry
 		for (Entries::iterator i = entries.begin(); i != entries.end(); i++) {
@@ -215,5 +218,5 @@
 			// found? yes-> delete entry
 			if ( equals(entry.key, key) ) {
-				i = entries.erase(i)-1;
+				entries.erase(i);
 				return true;
 			}
@@ -223,4 +226,5 @@
 
 	bool remove( const Data& key, const Data& value ) {
+		cleanup();
 		// find entry
 		for (Entries::iterator i = entries.begin(); i != entries.end(); i++) {
@@ -244,17 +248,9 @@
 
 	void cleanup() {
-		// find entry
 		for (Entries::iterator i = entries.begin(); i != entries.end(); i++) {
 			DHTEntry& entry = *i;
-
-			for (Values::iterator j = entry.values.begin();
-					j != entry.values.end(); j++) {
-
-				// value found? yes-> delete
-				if (j->is_ttl_elapsed())
-					j = entry.values.erase(j)-1;
-			}
-
-			if (entry.values.size()==0) i = entries.erase(i)-1;
+			entry.erase_expired_entries();
+			if (entry.values.size()==0)
+				i = entries.erase(i)-1;
 		}
 	}
