Index: /source/ariba/overlay/BaseOverlay.cpp
===================================================================
--- /source/ariba/overlay/BaseOverlay.cpp	(revision 6796)
+++ /source/ariba/overlay/BaseOverlay.cpp	(revision 6797)
@@ -125,4 +125,10 @@
 		return vect;
 	}
+
+	void erase_expired_entries() {
+		for (vector<ValueEntry>::iterator i = values.begin();
+				i != values.end(); i++ )
+			if (i->is_ttl_elapsed()) i = values.erase(i);
+	}
 };
 
@@ -132,4 +138,5 @@
 	typedef vector<ValueEntry> Values;
 	Entries entries;
+	static const bool verbose = true;
 
 	static bool equals( const Data& lhs, const Data& rhs ) {
@@ -154,5 +161,6 @@
 					if ( equals(entry.values[j].get_value(), value) ) {
 						entry.values[j].refresh();
-						std::cout << "DHT: Republished value. Refreshing TTL."
+						if (verbose)
+							std::cout << "DHT: Republished value. Refreshing value timestamp."
 							<< std::endl;
 						return;
@@ -161,5 +169,6 @@
 
 				// new value-> add to entry
-				std::cout << "DHT: Added value to "
+				if (verbose)
+					std::cout << "DHT: Added value to "
 					<< " key=" << key << " with value=" << value << std::endl;
 				entry.values.push_back( ValueEntry( value ) );
@@ -170,5 +179,6 @@
 
 		// key is unknown-> add key value pair
-		std::cout << "DHT: New key value pair "
+		if (verbose)
+			std::cout << "DHT: New key value pair "
 			<< " key=" << key << " with value=" << value << std::endl;
 
@@ -1907,5 +1917,19 @@
 /// stabilize DHT state
 void BaseOverlay::stabilizeDHT() {
-
+	// remove old values from DHT
+	BOOST_FOREACH( DHTEntry& entry, dht->entries ) {
+		// erase old entries
+		entry.erase_expired_entries();
+	}
+
+	// re-publish values
+	BOOST_FOREACH( DHTEntry& entry, localDHT->entries ) {
+		// erase old entries
+		entry.erase_expired_entries();
+
+		// re-publish values
+		BOOST_FOREACH( ValueEntry& value, entry.values )
+			dhtPut(entry.key, value.get_value(), 0 );
+	}
 }
 
