diff -urN asterisk/channels.orig/chan_h323.c asterisk/channels/chan_h323.c
--- asterisk/channels.orig/chan_h323.c	2010-07-20 19:56:18.000000000 +0000
+++ asterisk/channels/chan_h323.c	2010-07-30 00:24:04.000000000 +0000
@@ -961,17 +961,7 @@
 	if (pvt->rtp)
 		return 0;
 
-	{
-		struct ast_sockaddr tmp;
-
-		ast_sockaddr_from_sin(&tmp, &bindaddr);
-		if (ast_find_ourip(&our_addr, &tmp)) {
-			ast_mutex_unlock(&pvt->lock);
-			ast_log(LOG_ERROR, "Unable to locate local IP address for RTP stream\n");
-			return -1;
-		}
-	}
-	pvt->rtp = ast_rtp_instance_new("asterisk", sched, &our_addr, NULL);
+	pvt->rtp = ast_rtp_instance_new("asterisk", sched, &bindaddr, NULL);
 	if (!pvt->rtp) {
 		ast_mutex_unlock(&pvt->lock);
 		ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
@@ -1918,7 +1908,7 @@
   *
   * \return Returns the local RTP information
   */
-static struct rtp_info *external_rtp_create(unsigned call_reference, const char * token)
+static struct rtp_info *external_rtp_create(unsigned call_reference, const char * token, struct in_addr exip)
 {
 	struct oh323_pvt *pvt;
 	struct sockaddr_in us;
@@ -1952,8 +1942,13 @@
 	}
 	ast_mutex_unlock(&pvt->lock);
 
+	memcpy(&us.sin_addr, &expip, sizeof(us.sin_addr));
 	ast_copy_string(info->addr, ast_inet_ntoa(us.sin_addr), sizeof(info->addr));
 	info->port = ntohs(us.sin_port);
+
+	ast_sockaddr_from_sin(&tmp, &us);
+	ast_rtp_instance_set_local_address(pvt->rtp, &tmp);
+
 	if (h323debug)
 		ast_debug(1, "Sending RTP 'US' %s:%d\n", info->addr, info->port);
 	return info;
diff -urN asterisk/channels.orig/h323/ast_h323.cxx asterisk/channels/h323/ast_h323.cxx
--- asterisk/channels.orig/h323/ast_h323.cxx	2010-07-30 00:27:54.000000000 +0000
+++ asterisk/channels/h323/ast_h323.cxx	2010-07-30 00:27:22.000000000 +0000
@@ -1861,17 +1861,34 @@
         return TRUE;
 }
 
+#ifdef NEED_RTP_QOS_PARAM
 H323Channel * MyH323Connection::CreateRealTimeLogicalChannel(const H323Capability & capability,
                                                                         H323Channel::Directions dir,
                                                                         unsigned sessionID,
                                                                         const H245_H2250LogicalChannelParameters * /*param*/,
                                                                         RTP_QOS * /*param*/ )
+else
+H323Channel * MyH323Connection::CreateRealTimeLogicalChannel(const H323Capability & capability,
+                                                                        H323Channel::Directions dir,
+                                                                        unsigned sessionID,
+                                                                        const H245_H2250LogicalChannelParameters * /*param*/)
+#endif
 {
+        PIPSocket::Address externIpAddr;
+        WORD externPort;
+
         /* Do not open tx channel when transmitter has been paused by empty TCS */
-        if ((dir == H323Channel::IsTransmitter) && transmitterSidePaused)
-                return NULL;
+//      if ((dir == H323Channel::IsTransmitter) && transmitterSidePaused)
+//              return NULL;
 
-        return new MyH323_ExternalRTPChannel(*this, capability, dir, sessionID);
+        GetControlChannel().GetLocalAddress().GetIpAndPort(externIpAddr, externPort);
+        if (h323debug){
+                cout << "\t-- Create RealTime logical channel: " << endl;
+                cout << "\t\t-- SessionID: " << sessionID << endl;
+                cout << "\t\t-- ExternalIpAddress: " <<  externIpAddr << endl;
+                cout << "\t\t-- ExternalPort: " << externPort << endl;
+        }
+        return new MyH323_ExternalRTPChannel(*this, capability, dir, sessionID, externIpAddr, externPort);
 }
 
 /** This callback function is invoked once upon creation of each
@@ -2132,13 +2149,15 @@
 MyH323_ExternalRTPChannel::MyH323_ExternalRTPChannel(MyH323Connection & connection,
                                                         const H323Capability & capability,
                                                         Directions direction,
-                                                        unsigned id)
-        : H323_ExternalRTPChannel::H323_ExternalRTPChannel(connection, capability, direction, id)
+                                                        unsigned id,
+                                                        const PIPSocket::Address &ip,
+                                                        WORD dataPort)
+        : H323_ExternalRTPChannel::H323_ExternalRTPChannel(connection, capability, direction, id, ip, dataPort)
 {
         struct rtp_info *info;
 
         /* Determine the Local (A side) IP Address and port */
-        info = on_external_rtp_create(connection.GetCallReference(), (const char *)connection.GetCallToken());
+        info = on_external_rtp_create(connection.GetCallReference(), (const char *)connection.GetCallToken(), ip.in_addr());
         if (!info) {
                 cout << "\tERROR: on_external_rtp_create failure" << endl;
                 return;
@@ -2358,7 +2377,7 @@
         H323ListenerTCP *tcpListener;
         tcpListener = new H323ListenerTCP(*endPoint, interfaceAddress, (WORD)listenPort);
         if (!endPoint->StartListener(tcpListener)) {
-                cout << "ERROR: Could not open H.323 listener port on " << ((H323ListenerTCP *) tcpListener)->GetListenerPort() << endl;
+                cout << "ERROR: Could not open H.323 listener on " << ((H323ListenerTCP *) tcpListener)->GetTransportAddress() << endl;
                 delete tcpListener;
                 return 1;
         }
diff -urN asterisk/channels.orig/h323/ast_h323.h asterisk/channels/h323/ast_h323.h
--- asterisk/channels.orig/h323/ast_h323.h	2009-08-03 17:39:26.000000000 +0000
+++ asterisk/channels/h323/ast_h323.h	2010-07-29 23:44:36.000000000 +0000
@@ -33,6 +33,10 @@
 
 #define VERSION(a,b,c) ((a)*10000+(b)*100+(c))
 
+#if (VERSION(OPENH323_MAJOR, OPENH323_MINOR, OPENH323_BUILD)>= VERSION(1,13,4))
+#define NEED_RTP_QOS_PARAM 1
+#endif
+
 class MyH323EndPoint : public H323EndPoint
 {
 	PCLASSINFO(MyH323EndPoint, H323EndPoint);
@@ -62,11 +66,18 @@
 public:
 	MyH323Connection(MyH323EndPoint &, unsigned, unsigned);
 	~MyH323Connection();
+#ifdef NEED_RTP_QOS_PARAM
 	H323Channel * CreateRealTimeLogicalChannel(const H323Capability &,
 			H323Channel::Directions,
 			unsigned,
 			const H245_H2250LogicalChannelParameters *,
 			RTP_QOS *);
+#else
+	H323Channel * CreateRealTimeLogicalChannel(const H323Capability &,
+			H323Channel::Directions,
+			unsigned,
+			const H245_H2250LogicalChannelParameters *);
+#endif
 	H323Connection::AnswerCallResponse OnAnswerCall(const PString &,
 			const H323SignalPDU &,
 			H323SignalPDU &);
@@ -138,7 +149,9 @@
 			MyH323Connection & connection,
 			const H323Capability & capability,
 			Directions direction,
-			unsigned sessionID);
+			unsigned sessionID,
+			const PIPSocket::Address & ip,
+			WORD dataPort);
 
 	~MyH323_ExternalRTPChannel();
 
diff -urN asterisk/channels.orig/h323/chan_h323.h asterisk/channels/h323/chan_h323.h
--- asterisk/channels.orig/h323/chan_h323.h	2009-11-04 19:37:04.000000000 +0000
+++ asterisk/channels/h323/chan_h323.h	2010-07-29 23:46:25.000000000 +0000
@@ -140,7 +140,7 @@
 
 /* This is a callback prototype function, called to collect
    the external RTP port from Asterisk. */
-typedef rtp_info_t *(*on_rtp_cb)(unsigned, const char *);
+typedef rtp_info_t *(*on_rtp_cb)(unsigned, const char *, struct in_addr);
 extern on_rtp_cb on_external_rtp_create;
 
 /* This is a callback prototype function, called to send
