diff --git a/channels/h323/ast_h323.cpp b/channels/h323/ast_h323.cpp
index 84ea8f8bee9246848d752665403fdebbf4564db0..f59d086846f67cf56db34c9d517fcc981c681558 100755
--- a/channels/h323/ast_h323.cpp
+++ b/channels/h323/ast_h323.cpp
@@ -23,6 +23,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
  *
+ * Version Info: $Id$
  */
 #include "ast_h323.h"
 #include "h323t38.h"
@@ -601,21 +602,29 @@ H323Channel * MyH323Connection::CreateRealTimeLogicalChannel(const H323Capabilit
 														     unsigned sessionID,
 														     const H245_H2250LogicalChannelParameters * /*param*/)
 {
-	WORD port; 
-	
-	/* Establish the Local (A side) IP Address */
-	GetControlChannel().GetLocalAddress().GetIpAndPort(externalIpAddress, port);
+	struct rtp_info *info;
+	WORD port;
+
+	/* Determine the Local (A side) IP Address and port */
+	info = on_create_connection(GetCallReference()); 
 	
-	/* Notify Asterisk of the request and get the port */
-	externalPort = on_create_connection(GetCallReference()); 
+//	if (bridging) {
+//		externalIpAddress = PIPSocket::Address(info->addr);
+//	} else {
+        GetControlChannel().GetLocalAddress().GetIpAndPort(externalIpAddress, port);
+//	}
+
+//	externalIpAddress = PIPSocket::Address("192.168.1.50");
 
+	externalPort = info->port;
+	
 	if (h323debug) {
 		cout << "	=*= In CreateRealTimeLogicalChannel for call " << GetCallReference() << endl;
 		cout << "		-- externalIpAddress: " << externalIpAddress << endl;
 		cout << "		-- externalPort: " << externalPort << endl;
+		cout << "		-- SessionID: " << sessionID << endl;
 		cout << "		-- Direction: " << dir << endl;
 	}
-	
 	return new H323_ExternalRTPChannel(*this, capability, dir, sessionID, externalIpAddress, externalPort);
 }
 
@@ -1028,23 +1037,28 @@ int h323_show_codec(int fd, int argc, char *argv[])
 
 
 /* alas, this doesn't work :(   */
-void h323_native_bridge(const char *token, char *them, char *us)
+void h323_native_bridge(const char *token, char *them, char *capability)
 {
 	H323Channel *channel;
-	H323Connection *connection = endPoint->FindConnectionWithLock(token);
-    
-	
-	cout << "Native Bridge:  them [" << them << "] us [" << us << "]" << endl; 
+	MyH323Connection *connection = (MyH323Connection *)endPoint->FindConnectionWithLock(token);
+	PString mode(capability);
 	
+	if (!mode) {
+		return;
+	}
+
 	if (!connection){
-		cout << "ERROR: No connection active.\n";
+		cout << "ERROR: No connection found, this is bad\n";
 		return;
 	}
 
-    connection->Unlock();
-	channel = connection->FindChannel(RTP_Session::DefaultAudioSessionID, TRUE);
-	H323_ExternalRTPChannel *external = (H323_ExternalRTPChannel *)channel;
-	external->SetExternalAddress(them, us);  // data (RTP), control (Asterisk)
+	cout << "Native Bridge:  them [" << them << "]" << endl; 
+
+	channel = connection->FindChannel(connection->sessionId, TRUE);
+	connection->bridging = TRUE;
+	connection->CloseLogicalChannelNumber(channel->GetNumber());
+	connection->RequestModeChange(mode);	
+	connection->Unlock();
 	return;
 
 }
diff --git a/channels/h323/ast_h323.h b/channels/h323/ast_h323.h
index 050bf61c6d5ca6e2be7e445cada5882ef28e7281..c713a842e609233d1ad0d32a94715eea6737ee3d 100755
--- a/channels/h323/ast_h323.h
+++ b/channels/h323/ast_h323.h
@@ -23,6 +23,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
  *
+ * Version Info: $Id$ 
  */
 
 
@@ -153,8 +154,8 @@ class MyH323Connection : public H323Connection {
     PIPSocket::Address remoteIpAddress;		// IP Address of remote endpoint
 	WORD			   externalPort;		// local media server Data port (control is dataPort+1)
 	WORD			   remotePort;			// remote endpoint Data port (control is dataPort+1)
-
-	PSyncPoint bridgeFlag;
+	WORD			   sessionId;
+	BOOL			   bridging;			// Used to help determine which IP to use
 };
 
 
diff --git a/channels/h323/chan_h323.h b/channels/h323/chan_h323.h
index 926a2ea4abd4f5b7bdcee41f4fd4a374a3012848..190a8244fbd3585360dcd290e34cc98abfb921b6 100755
--- a/channels/h323/chan_h323.h
+++ b/channels/h323/chan_h323.h
@@ -23,6 +23,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
  *
+ * Version Info: $Id$
  */
 
 #include <arpa/inet.h>
@@ -105,6 +106,11 @@ typedef struct call_details {
 	const char *sourceIp;
 } call_details_t;
 
+typedef struct rtp_info {
+	char *addr;
+	unsigned int port;
+} rtp_info_t;
+
 /* This is a callback prototype function, called pass
    DTMF down the RTP. */
 typedef int (*send_digit_cb)(unsigned, char);
@@ -112,7 +118,7 @@ send_digit_cb	on_send_digit;
 
 /* This is a callback prototype function, called to collect
    the external RTP port from Asterisk. */
-typedef int (*on_connection_cb)(unsigned);
+typedef rtp_info_t *(*on_connection_cb)(unsigned);
 on_connection_cb	on_create_connection; 
 
 /* This is a callback prototype function, called upon