Index: ccrtp/src/ccrtp/oqueue.h
===================================================================
--- ccrtp.orig/src/ccrtp/oqueue.h	2005-02-06 18:12:52.000000000 -0500
+++ ccrtp/src/ccrtp/oqueue.h	2005-03-03 18:17:16.395525536 -0500
@@ -45,6 +45,7 @@
 #define CCXX_RTP_OQUEUE_H_
 
 #include <ccrtp/queuebase.h>
+#include <list>
 
 #ifdef	CCXX_NAMESPACES
 namespace ost {
@@ -80,7 +81,12 @@
 	{ return (destinationCounter == 1); }
 
 	inline TransportAddress* getFirstDestination() const
-	{ return firstDestination; }
+	{ 
+		if (destinationCounter > 0)
+			return destList.front();
+		else
+			return NULL;
+	}
 
 	inline void lockDestinationList() const
 	{ destinationLock.readLock(); }
@@ -110,15 +116,9 @@
 	{ 
 		TransportAddress(InetAddress na, tpport_t dtp, tpport_t ctp) :
 			networkAddress(na), dataTransportPort(dtp), 
-			controlTransportPort(ctp), next(NULL)
+			controlTransportPort(ctp)
 		{  }
 
-		inline TransportAddress* getNext()
-		{ return next; }
-
-		inline void setNext(TransportAddress* nc)
-		{ next = nc; }
-
 		inline const InetAddress& getNetworkAddress() const
 		{ return networkAddress; }
 
@@ -130,12 +130,12 @@
 
 		InetAddress networkAddress;
 		tpport_t dataTransportPort, controlTransportPort;
-		TransportAddress* next;
 	};
 
+        std::list<TransportAddress*> destList;
+
 private:
 	uint8 destinationCounter;
-	TransportAddress* firstDestination, * lastDestination;
 	mutable ThreadLock destinationLock;
 };
 
Index: ccrtp/src/outqueue.cpp
===================================================================
--- ccrtp.orig/src/outqueue.cpp	2005-03-03 17:11:44.522261128 -0500
+++ ccrtp/src/outqueue.cpp	2005-03-03 18:15:21.461998088 -0500
@@ -52,7 +52,6 @@
 
 DestinationListHandler::DestinationListHandler() :
 	destinationCounter(0), 
-	firstDestination(NULL), lastDestination(NULL),
 	destinationLock()
 {
 }
@@ -61,9 +60,8 @@
 {
 	TransportAddress* tmp;
 	writeLockDestinationList();
-	while ( firstDestination ) {
-		tmp = getFirstDestination();
-		firstDestination = firstDestination->getNext();
+	for (std::list<TransportAddress*>::iterator i = destList.begin(); i != destList.end(); i++) {
+		tmp = *i;
 #ifdef	CCXX_EXCEPTIONS
 		try {
 #endif
@@ -81,12 +79,7 @@
 {	
 	TransportAddress* addr = new TransportAddress(ia,data,control);
 	writeLockDestinationList();
-	if ( firstDestination == NULL )
-		firstDestination = lastDestination = addr;
-	else {
-		lastDestination->setNext(addr);
-		lastDestination = addr;
-	}
+	destList.push_back(addr);
 	destinationCounter++;
 	unlockDestinationList();
 	return true;
@@ -98,27 +91,18 @@
 						  tpport_t controlPort)
 {
 	bool result = false;
-	TransportAddress* prev = NULL;
 	writeLockDestinationList();
-	TransportAddress* ta = getFirstDestination();
-	while ( NULL != ta ) {
-		if ( ia == ta->getNetworkAddress() &&
-		     dataPort == ta->getDataTransportPort() &&
-		     controlPort == ta->getControlTransportPort() ) {
+	TransportAddress* tmp;
+	for (std::list<TransportAddress*>::iterator i = destList.begin(); i != destList.end() && !result; i++) {
+		tmp = *i;
+		if ( ia == tmp->getNetworkAddress() &&
+		     dataPort == tmp->getDataTransportPort() &&
+		     controlPort == tmp->getControlTransportPort() ) {
 			// matches. -> remove it.
 			result = true;
-			if ( prev )
-				prev->setNext(ta->getNext());
-			else // ( getFirstDestination() == ta ) 
-				firstDestination = firstDestination->getNext();
-			if ( lastDestination == ta )
-				lastDestination = prev;
+			destList.erase(i);
 			destinationCounter--;
-			delete ta;
-			ta = NULL;
-		} else {
-			prev = ta;
-			ta = ta->getNext();
+			delete tmp;
 		}
 	}
 	unlockDestinationList();
@@ -398,13 +382,14 @@
 			 packet->getRawPacketSize());
 	} else {
 		// when no destination has been added, NULL == dest.
-		TransportAddress* dest = getFirstDestination();
-		while ( dest ) {
+		for (std::list<TransportAddress*>::iterator i = destList.begin();
+		     i != destList.end(); i++)
+		{
+			TransportAddress* dest = *i; 
 			setDataPeer(dest->getNetworkAddress(),
 				    dest->getDataTransportPort());
 			sendData(packet->getRawPacket(),
 				 packet->getRawPacketSize());
-			dest = dest->getNext();
 		}
 	}
 	unlockDestinationList();
Index: ccrtp/src/control.cpp
===================================================================
--- ccrtp.orig/src/control.cpp	2005-02-10 04:06:00.000000000 -0500
+++ ccrtp/src/control.cpp	2005-03-03 18:22:12.374529888 -0500
@@ -1083,12 +1083,12 @@
 		count = sendControl(buffer,len);
 	} else {
 		// when no destination has been added, NULL == dest.
-		TransportAddress* dest = getFirstDestination();
-		while ( dest ) {
+		for(std::list<TransportAddress*>::iterator i = destList.begin();
+		    i != destList.end(); i++) {
+			TransportAddress* dest = *i;
 			setControlPeer(dest->getNetworkAddress(),
 				       dest->getControlTransportPort());
 			count += sendControl(buffer,len);
-			dest = dest->getNext();
 		}
 	}
 	unlockDestinationList();
