Index: /source/ariba/communication/BaseCommunication.cpp
===================================================================
--- /source/ariba/communication/BaseCommunication.cpp	(revision 8597)
+++ /source/ariba/communication/BaseCommunication.cpp	(revision 8606)
@@ -294,6 +294,8 @@
 		receiveMessage(msg, dmsg->local, dmsg->remote);
 		msg->dropPayload();
+		delete dmsg->local;
+		delete dmsg->remote;
+		delete msg;
 		delete dmsg;
-		delete msg;
 	}
 }
@@ -399,6 +401,5 @@
 				ld->remoteLocator, endpoint_set::Layer1_3 | endpoint_set::NoLoopback);
 			localDescriptor.getEndpoints().add(
-				local, endpoint_set::Layer1_3 | endpoint_set::NoLoopback
-			);
+				local, endpoint_set::Layer1_3 | endpoint_set::NoLoopback);
 
 			// link is now up-> add it
Index: /source/ariba/communication/networkinfo/AddressDiscovery.cpp
===================================================================
--- /source/ariba/communication/networkinfo/AddressDiscovery.cpp	(revision 8597)
+++ /source/ariba/communication/networkinfo/AddressDiscovery.cpp	(revision 8606)
@@ -133,4 +133,6 @@
 		}
 	}
+
+	freeifaddrs(ifaceBuffer);
 }
 
Index: /source/ariba/overlay/modules/OverlayInterface.h
===================================================================
--- /source/ariba/overlay/modules/OverlayInterface.h	(revision 8597)
+++ /source/ariba/overlay/modules/OverlayInterface.h	(revision 8606)
@@ -79,5 +79,5 @@
 
 	/**
-	 * Destrcuts the overlay.
+	 * Destructs the overlay.
 	 */
 	virtual ~OverlayInterface();
Index: /source/ariba/overlay/modules/chord/detail/chord_routing_table.hpp
===================================================================
--- /source/ariba/overlay/modules/chord/detail/chord_routing_table.hpp	(revision 8597)
+++ /source/ariba/overlay/modules/chord/detail/chord_routing_table.hpp	(revision 8606)
@@ -184,4 +184,10 @@
 	}
 
+	virtual ~chord_routing_table() {
+		BOOST_FOREACH( finger_table* f, this->finger){
+			delete f;
+		}
+	}
+
 	/// check whether a node could fit the routing table
 	bool is_insertable( const nodeid_t& value ) {
Index: /source/ariba/utility/transport/tcpip/protlib/tp_over_tcp.cpp
===================================================================
--- /source/ariba/utility/transport/tcpip/protlib/tp_over_tcp.cpp	(revision 8597)
+++ /source/ariba/utility/transport/tcpip/protlib/tp_over_tcp.cpp	(revision 8606)
@@ -253,5 +253,6 @@
 	if (newmsg)
 	{
-	  newmsg->send_to(tpparam.source);
+	  bool ret = newmsg->send_to(tpparam.source);
+	  if(!ret) delete newmsg;
 	  return assoc;
 	}
@@ -413,9 +414,15 @@
     // both parameters will be freed after message was sent!
     
-    TPoverTCPMsg* internalmsg= new TPoverTCPMsg(netmsg,new appladdress(*addr));
+    appladdress* apl=new appladdress(*addr);
+    TPoverTCPMsg* internalmsg= new TPoverTCPMsg(netmsg,apl);
     if (internalmsg)
     {
       // send the internal message to the sender thread queue
-      internalmsg->send(tpparam.source,destqueue);
+      bool sent = internalmsg->send(tpparam.source,destqueue);
+      if (!sent) {
+    	  delete internalmsg->get_appladdr();
+    	  delete internalmsg;
+    	  internalmsg = NULL;
+      }
     }
   }
@@ -659,5 +666,5 @@
     if (internalmsg == 0)
     {
-      ERRLog(tpparam.name, methodname << "received not an TPoverTCPMsg but a" << internal_thread_msg->get_type_name());      
+      ERRLog(tpparam.name, methodname << "received not an TPoverTCPMsg but a" << internal_thread_msg->get_type_name());
     }
     else
@@ -694,5 +701,7 @@
     {
       terminate= true;
-    }  
+    }
+
+    delete internalmsg;
   } // end while
   
@@ -929,4 +938,5 @@
 	if ( ret < 0 )
 	{
+	  delete netmsg;
 	  if (errno!=EAGAIN && errno!=EWOULDBLOCK)
 	  {
@@ -1106,4 +1116,5 @@
 
   receiver_thread_argp->terminated= true;
+  delete netmsg;
 
   Log(DEBUG_LOG,LOG_NORMAL, tpparam.name, methodname << "Thread <" << pthread_self() << "> terminated");
@@ -1701,4 +1712,5 @@
 {
   init= false;
+  this->connmap.clear();
 
   Log(DEBUG_LOG,LOG_NORMAL, tpparam.name,  "Destructor called");
Index: /source/ariba/utility/transport/tcpip/protlib/tp_over_tcp.h
===================================================================
--- /source/ariba/utility/transport/tcpip/protlib/tp_over_tcp.h	(revision 8597)
+++ /source/ariba/utility/transport/tcpip/protlib/tp_over_tcp.h	(revision 8606)
@@ -247,4 +247,6 @@
     message(type_transport, source), peer_assoc(0), type(send_data), netmsg(netmsg), addr(addr) {}
 
+  virtual ~TPoverTCPMsg() {}
+
   const AssocData* get_peer_assoc() const { return peer_assoc; }
   TPoverTCPMsg::msg_t get_msgtype() const { return type; }
Index: /source/ariba/utility/transport/tcpip/tcpip.cpp
===================================================================
--- /source/ariba/utility/transport/tcpip/tcpip.cpp	(revision 8597)
+++ /source/ariba/utility/transport/tcpip/tcpip.cpp	(revision 8606)
@@ -96,4 +96,5 @@
 
 	// unregister TPoverTCP
+	delete QueueManager::instance()->get_queue( message::qaddr_signaling );
 	QueueManager::instance()->unregister_queue( message::qaddr_signaling );
 
@@ -104,4 +105,7 @@
 	protlib::setuid::end();
 	protlib::tsdb::end();
+
+	// wait for thread to finish and delete
+	pthread_join(tpreceivethread, NULL);
 }
 
@@ -167,4 +171,5 @@
 		TPMsg* tpmsg = dynamic_cast<TPMsg*> (msg);
 		if (!tpmsg) {
+			delete msg;
 			continue;
 		}
@@ -177,4 +182,5 @@
 		// not a data message? -> continue!
 		if (!datamsg) {
+			delete tpmsg;
 			continue;
 		}
@@ -184,5 +190,4 @@
 		uint32_t message_size = datamsg->decode32(true)-2;
 		//uint16_t remote_port = datamsg->decode16(true);
-
 
 		// inform listener
@@ -194,4 +199,5 @@
 
 		}
+		delete datamsg;
 		delete tpmsg;
 	}
