Index: /source/ariba/overlay/BaseOverlay.cpp
===================================================================
--- /source/ariba/overlay/BaseOverlay.cpp	(revision 6851)
+++ /source/ariba/overlay/BaseOverlay.cpp	(revision 6854)
@@ -567,4 +567,5 @@
 	if (!ldr->up && !ignore_down) {
 		logging_error("Can not send message. Link not up:" << ldr );
+		logging_error("DEBUG_INFO: " << debugInformation() );
 		return -1;
 	}
@@ -578,4 +579,5 @@
 		if (ld==NULL) {
 			logging_error("No relay path found to link " << ldr );
+			logging_error("DEBUG_INFO: " << debugInformation() );
 			return -1;
 		}
@@ -2239,4 +2241,23 @@
 }
 
+std::string BaseOverlay::debugInformation() {
+	std::stringstream s;
+	int i=0;
+
+	// dump overlay information
+	s << "--- overlay information ----------------------" << endl;
+	s << overlayInterface->debugInformation() << endl;
+	s << "----------------------------------------------" << endl;
+
+	// dump link state
+	s << "--- link state -------------------------------" << endl;
+	BOOST_FOREACH( LinkDescriptor* ld, links ) {
+		s << "link " << i << ": " << ld << endl;
+		i++;
+	}
+	s << endl;
+
+	return s.str();
+}
 
 }} // namespace ariba, overlay
Index: /source/ariba/overlay/BaseOverlay.h
===================================================================
--- /source/ariba/overlay/BaseOverlay.h	(revision 6851)
+++ /source/ariba/overlay/BaseOverlay.h	(revision 6854)
@@ -506,4 +506,6 @@
 	// misc --------------------------------------------------------------------
 
+	std::string debugInformation();
+
 	/**
 	 * nodes with pending joines. TODO: should be cleaned every
Index: /source/ariba/overlay/modules/OverlayInterface.cpp
===================================================================
--- /source/ariba/overlay/modules/OverlayInterface.cpp	(revision 6851)
+++ /source/ariba/overlay/modules/OverlayInterface.cpp	(revision 6854)
@@ -83,4 +83,8 @@
 }
 
+std::string OverlayInterface::debugInformation() const {
+	return "No Information Available.";
+}
+
 const OverlayParameterSet& OverlayInterface::getParameters() const {
 	return parameters;
Index: /source/ariba/overlay/modules/OverlayInterface.h
===================================================================
--- /source/ariba/overlay/modules/OverlayInterface.h	(revision 6851)
+++ /source/ariba/overlay/modules/OverlayInterface.h	(revision 6854)
@@ -173,4 +173,6 @@
 	const OverlayParameterSet& getParameters() const;
 
+	virtual std::string debugInformation() const;
+
 protected:
 	/// Reference to an active base overlay
Index: /source/ariba/overlay/modules/chord/Chord.cpp
===================================================================
--- /source/ariba/overlay/modules/chord/Chord.cpp	(revision 6851)
+++ /source/ariba/overlay/modules/chord/Chord.cpp	(revision 6854)
@@ -473,3 +473,25 @@
 }
 
+/// @see OverlayInterface.h
+std::string Chord::debugInformation() const {
+	std::ostringstream s;
+	s << "protocol   : Chord" << endl;
+	s << "node_id    : " << nodeid.toString() << endl;
+	s << "predecessor: " << (table->get_predesessor()==NULL? "<none>" :
+		table->get_predesessor()->toString()) << endl;
+	s << "successor  : " << (table->get_successor()==NULL? "<none>" :
+		table->get_successor()->toString()) << endl;
+	s << "nodes: " << endl;
+	for (size_t i = 0; i < table->size(); i++) {
+		route_item* it = (*table)[i];
+		if (it->ref_count != 0 && !it->info.isUnspecified()) {
+			s << it->id.toString().substr(0,6)
+			  << " using " << it->info.toString().substr(0,6) << endl;
+		}
+	}
+	return s.str();
+}
+
+
+
 }} // namespace ariba, overlay
Index: /source/ariba/overlay/modules/chord/Chord.h
===================================================================
--- /source/ariba/overlay/modules/chord/Chord.h	(revision 6851)
+++ /source/ariba/overlay/modules/chord/Chord.h	(revision 6854)
@@ -138,4 +138,7 @@
 			const LinkID& lnk = LinkID::UNSPECIFIED);
 
+	/// @see OverlayInterface.h
+	virtual std::string debugInformation() const;
+
 	/// @see Timer.h
 	virtual void eventFunction();
