diff --git a/main/channel.c b/main/channel.c
index 908e8c08c2ac0d66d5786ba511a0b8a80660c4b6..24fe88a25f7d074878674986cbf4f53ceacf8da3 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -2614,7 +2614,7 @@ static int set_format(struct ast_channel *chan, int fmt, int *rawformat, int *fo
 	/* Now we have a good choice for both. */
 	ast_channel_lock(chan);
 
-	if ((*rawformat == native) && (*format == fmt)) {
+	if ((*rawformat == native) && (*format == fmt) && ((*rawformat == *format) || (*trans))) {
 		/* the channel is already in these formats, so nothing to do */
 		ast_channel_unlock(chan);
 		return 0;