Index: source/ariba/overlay/BaseOverlay.cpp
===================================================================
--- source/ariba/overlay/BaseOverlay.cpp	(revision 6833)
+++ source/ariba/overlay/BaseOverlay.cpp	(revision 6835)
@@ -2108,4 +2108,5 @@
 	switch (msg->getType()) {
 	case OverlayMsg::typeDHTPut: {
+		if (dhtMsg->doReplace()) dht->remove(dhtMsg->getKey());
 		BOOST_FOREACH( Data value, dhtMsg->getValues() )
 					dht->put(dhtMsg->getKey(), value, dhtMsg->getTTL() );
@@ -2145,17 +2146,21 @@
 
 /// put a value to the DHT with a ttl given in seconds
-void BaseOverlay::dhtPut( const Data& key, const Data& value, int ttl ) {
+void BaseOverlay::dhtPut( const Data& key, const Data& value, int ttl, bool replace ) {
 
 	logging_info("DHT: putting key=" <<  key
 			<< " value=" << value
 			<< " ttl=" << ttl
+			<< " replace=" << replace
 	);
 
+
 	// put into local data store (for refreshes)
-	localDHT->put(key,value,ttl);
+	if (replace) localDHT->remove(key);
+	localDHT->put(key, value, ttl);
 
 	// calculate hash
 	NodeID dest = NodeID::sha1(key.getBuffer(), key.getLength() / 8);
 	DHTMessage dhtmsg(key,value);
+	dhtmsg.setReplace(replace);
 	dhtmsg.setTTL(ttl);
 
Index: source/ariba/overlay/BaseOverlay.h
===================================================================
--- source/ariba/overlay/BaseOverlay.h	(revision 6833)
+++ source/ariba/overlay/BaseOverlay.h	(revision 6835)
@@ -279,5 +279,5 @@
 
 	/// put a value to the DHT with a ttl given in seconds
-	void dhtPut( const Data& key, const Data& value, int ttl = 0);
+	void dhtPut( const Data& key, const Data& value, int ttl = 0, bool replace = false);
 
 	/// removes a key value pair from the DHT
Index: source/ariba/overlay/messages/DHTMessage.cpp
===================================================================
--- source/ariba/overlay/messages/DHTMessage.cpp	(revision 6833)
+++ source/ariba/overlay/messages/DHTMessage.cpp	(revision 6835)
@@ -11,4 +11,5 @@
 	this->key.setLength(0);
 	this->ttl =0 ;
+	this->replace = false;
 }
 
@@ -18,4 +19,5 @@
 	this->key = key.clone();
 	this->ttl =0 ;
+	this->replace = false;
 }
 
@@ -26,4 +28,5 @@
 	this->values.push_back(  value.clone() );
 	this->ttl =0 ;
+	this->replace = false;
 }
 
@@ -32,4 +35,5 @@
 	BOOST_FOREACH(const Data value, values )
 			this->values.push_back( value.clone() );
+	this->replace = false;
 }
 
Index: source/ariba/overlay/messages/DHTMessage.h
===================================================================
--- source/ariba/overlay/messages/DHTMessage.h	(revision 6833)
+++ source/ariba/overlay/messages/DHTMessage.h	(revision 6835)
@@ -44,4 +44,12 @@
 	}
 
+	void setReplace( bool replace ) {
+		this->replace = replace;
+	}
+
+	bool doReplace() const {
+		return replace;
+	}
+
 	/// return alles values for the key
 	const vector<Data>& getValues() const {
@@ -52,4 +60,5 @@
 	NodeID hash;
 	uint16_t ttl;
+	bool replace;
 	Data key;
 	vector<Data> values;
@@ -60,4 +69,8 @@
 sznBeginDefault( ariba::overlay::DHTMessage, X ) {
 
+	// serialize flags
+	X && replace && cI(0,7);
+
+	// serialize tll
 	X && ttl;
 
