diff --git a/channel.c b/channel.c
index dd5a800099806c8dccc8f820c3f78072dd5d4ef0..5c5d8e6d28145c8d97bffcc87c9dbcc6d87698b2 100755
--- a/channel.c
+++ b/channel.c
@@ -2506,6 +2506,8 @@ int ast_channel_bridge(struct ast_channel *c0, struct ast_channel *c1, struct as
 	int res=0;
 	int nativefailed=0;
 	int firstpass;
+	int o0nativeformats;
+	int o1nativeformats;
 	struct timeval start_time,precise_now;
 	long elapsed_ms=0, time_left_ms=0;
 	int playit=0, playitagain=1, first_time=1;
@@ -2550,7 +2552,8 @@ int ast_channel_bridge(struct ast_channel *c0, struct ast_channel *c1, struct as
 			"Uniqueid1: %s\r\n"
 			"Uniqueid2: %s\r\n",
 			c0->name, c1->name, c0->uniqueid, c1->uniqueid);
-
+	o1nativeformats = c1->nativeformats;
+	o0nativeformats = c0->nativeformats;
 	for (/* ever */;;) {
 		/* timestamp */
 		if (config->timelimit) {
@@ -2624,7 +2627,7 @@ int ast_channel_bridge(struct ast_channel *c0, struct ast_channel *c1, struct as
 			if (res != -3) nativefailed++;
 		}
 	
-		if (((c0->writeformat != c1->readformat) || (c0->readformat != c1->writeformat)) &&
+		if (((c0->writeformat != c1->readformat) || (c0->readformat != c1->writeformat) || (c0->nativeformats != o0nativeformats) || (c1->nativeformats != o1nativeformats)) &&
 			!(c0->generator || c1->generator))  {
 			if (ast_channel_make_compatible(c0, c1)) {
 				ast_log(LOG_WARNING, "Can't make %s and %s compatible\n", c0->name, c1->name);
@@ -2636,6 +2639,8 @@ int ast_channel_bridge(struct ast_channel *c0, struct ast_channel *c1, struct as
 					c0->name, c1->name, c0->uniqueid, c1->uniqueid);
 				return -1;
 			}
+			o0nativeformats = c0->nativeformats;
+			o1nativeformats = c1->nativeformats;
 		}
 		who = ast_waitfor_n(cs, 2, &to);
 		if (!who) {