Index: sample/pingpong/PingPong.cpp
===================================================================
--- sample/pingpong/PingPong.cpp	(revision 4948)
+++ sample/pingpong/PingPong.cpp	(revision 5151)
@@ -17,5 +17,5 @@
 // construction
 PingPong::PingPong() : pingId( 0 ) {
-	Timer::setInterval( 5000 );
+	Timer::setInterval( 1000 );
 }
 
@@ -41,4 +41,6 @@
 	// get initiator flag
 	this->isInitiator = Configuration::instance().read<bool>("node.initiator");
+
+	this->name = string("<ping>");
 
 	// get node name
@@ -55,4 +57,6 @@
 	if (config.exists("ariba.bootstrap.hints")) ariba->setProperty("bootstrap.hints",
 			config.read<string>("ariba.bootstrap.hints"));
+	if (config.exists("pingpong.name")) name =
+			config.read<string>("pingpong.name");
 
 	// start ariba module
@@ -71,5 +75,5 @@
 	// when initiating, you can define the overlay type, default is Chord [CHORD_OVERLAY]
 	SpoVNetProperties params;
-	params.setBaseOverlayType( SpoVNetProperties::ONE_HOP_OVERLAY ); // alternative: OneHop
+	//params.setBaseOverlayType( SpoVNetProperties::ONE_HOP_OVERLAY ); // alternative: OneHop
 
 	// initiate or join the spovnet
@@ -122,11 +126,22 @@
 	// function that is implemented further down in PingPong::onLinkUp
 
-	logging_info( "pinging overlay neighbors with ping id " << ++pingId );
-
-	PingPongMessage pingmsg( pingId );
+//	logging_info( "pinging overlay neighbors with ping id " << ++pingId );
+
+	PingPongMessage pingmsg( pingId, name );
 
 	//-----------------------------------------------------------------------
 	// Option 1: get all neighboring nodes and send the message to each
 	//-----------------------------------------------------------------------
+	counter++;
+	if (counter<0 || counter>4) {
+		counter = 0;
+		string s;
+		for (int i=0; i<names.size();i++) {
+			if (i!=0) s+= ", ";
+			s = s+names[i];
+		}
+		logging_info("----> I am " << name << " and I know " << s);
+		names.clear();
+	}
 	vector<NodeID> nodes = node->getNeighborNodes();
 	BOOST_FOREACH( NodeID nid, nodes ){
@@ -162,8 +177,10 @@
 void PingPong::onMessage(const DataMessage& msg, const NodeID& remote, const LinkID& lnk) {
 	PingPongMessage* pingmsg = msg.getMessage()->convert<PingPongMessage> ();
-
-	logging_info( "received ping message on link " << lnk.toString()
-			<< " from node " << remote.toString()
-			<< ": " << pingmsg->info() );
+	bool found=false;
+	for (int i=0;i<names.size(); i++) if (names[i]==pingmsg->getName()) found=true;
+	if (!found) names.push_back(pingmsg->getName());
+//	logging_info( "received ping message on link " << lnk.toString()
+//			<< " from node " << remote.toString()
+//			<< ": " << pingmsg->info() );
 }
 
Index: sample/pingpong/PingPong.h
===================================================================
--- sample/pingpong/PingPong.h	(revision 4948)
+++ sample/pingpong/PingPong.h	(revision 5151)
@@ -6,4 +6,6 @@
 #include "ariba/utility/system/StartupInterface.h"
 #include "ariba/utility/system/Timer.h"
+
+#include <vector>
 
 using namespace ariba;
@@ -15,12 +17,13 @@
 namespace pingpong {
 
+using namespace std;
+
 /**
-/* The PingPong main class
-/* This class implements an example service for demonstration purposes
-/* The pingpong class sends and receives messages between two SpoVNet
-/* instances
-**/
-class PingPong :
-	public NodeListener,
+ /* The PingPong main class
+ /* This class implements an example service for demonstration purposes
+ /* The pingpong class sends and receives messages between two SpoVNet
+ /* instances
+ **/
+class PingPong: public NodeListener,
 	public CommunicationListener,
 	public StartupInterface,
@@ -35,6 +38,8 @@
 protected:
 	// communication listener interface
-	virtual bool onLinkRequest(const NodeID& remote, const DataMessage& msg = DataMessage::UNSPECIFIED);
-	virtual void onMessage(const DataMessage& msg, const NodeID& remote, const LinkID& lnk= LinkID::UNSPECIFIED);
+	virtual bool onLinkRequest(const NodeID& remote, const DataMessage& msg =
+			DataMessage::UNSPECIFIED);
+	virtual void onMessage(const DataMessage& msg, const NodeID& remote,
+		const LinkID& lnk = LinkID::UNSPECIFIED);
 	virtual void onLinkUp(const LinkID& lnk, const NodeID& remote);
 	virtual void onLinkDown(const LinkID& lnk, const NodeID& remote);
@@ -43,8 +48,8 @@
 
 	// node listener interface
-	virtual void onJoinCompleted( const SpoVNetID& vid );
-	virtual void onJoinFailed( const SpoVNetID& vid );
-	virtual void onLeaveCompleted( const SpoVNetID& vid );
-	virtual void onLeaveFailed( const SpoVNetID& vid );
+	virtual void onJoinCompleted(const SpoVNetID& vid);
+	virtual void onJoinFailed(const SpoVNetID& vid);
+	virtual void onLeaveCompleted(const SpoVNetID& vid);
+	virtual void onLeaveFailed(const SpoVNetID& vid);
 
 	// startup wrapper interface
@@ -53,19 +58,22 @@
 
 	// timer events
- 	virtual void eventFunction();
+	virtual void eventFunction();
 
 private:
 	// the ariba module and a node
 	AribaModule* ariba;
-	Node*        node;
+	Node* node;
+	string name;
+	int counter;
+	vector<string> names;
 
 	// flag, whether this node initiates or just joins the spovnet
 	bool isInitiator;
 
- 	// the ping pong service id
- 	static ServiceID PINGPONG_SERVICEID;
+	// the ping pong service id
+	static ServiceID PINGPONG_SERVICEID;
 
- 	// the current ping id
- 	unsigned long pingId;
+	// the current ping id
+	unsigned long pingId;
 
 };
Index: sample/pingpong/PingPongMessage.cpp
===================================================================
--- sample/pingpong/PingPongMessage.cpp	(revision 4948)
+++ sample/pingpong/PingPongMessage.cpp	(revision 5151)
@@ -10,5 +10,5 @@
 }
 
-PingPongMessage::PingPongMessage(uint8_t _id) : id(_id) {
+PingPongMessage::PingPongMessage(uint8_t _id, string name) : id(_id),name(name) {
 }
 
Index: sample/pingpong/PingPongMessage.h
===================================================================
--- sample/pingpong/PingPongMessage.h	(revision 4948)
+++ sample/pingpong/PingPongMessage.h	(revision 5151)
@@ -18,11 +18,16 @@
 public:
 	PingPongMessage();
-	PingPongMessage( uint8_t _id );
+	PingPongMessage( uint8_t _id, string name = string("<ping>") );
 	virtual ~PingPongMessage();
 
 	string info();
 	uint8_t getid();
+
+	inline string getName() const {
+		return name;
+	}
 private:
 	uint8_t id;
+	string name;
 };
 
@@ -30,5 +35,5 @@
 
 sznBeginDefault( ariba::application::pingpong::PingPongMessage, X ) {
-	X && id;
+	X && id && T(name);
 } sznEnd();
 
Index: sample/pingpong/main.cpp
===================================================================
--- sample/pingpong/main.cpp	(revision 4948)
+++ sample/pingpong/main.cpp	(revision 5151)
@@ -7,29 +7,5 @@
 using ariba::application::pingpong::PingPong;
 
-//*************************************************
-/*
-#include "ariba/utility/bootstrap/BootstrapManager.h"
-using ariba::utility::BootstrapManager;
-
-void debug(){
-	StartupWrapper::startSystem();
-
-	BootstrapManager& manager = BootstrapManager::instance();
-	manager.registerModule( BootstrapManager::BootstrapTypePeriodicBroadcast );
-
-	manager.publish("testname", "testinfo1", "testinfo2", "testinfo3");
-	getchar();
-	manager.revoke("testname");
-
-	manager.unregisterModule( BootstrapManager::BootstrapTypePeriodicBroadcast );
-	StartupWrapper::stopSystem();
-}
-*/
-//*************************************************
-
 int main( int argc, char** argv ) {
-
-	//debug();
-	//return 0;
 
 	// get config file
