diff --git a/src/switch_core_io.c b/src/switch_core_io.c
index f936985737..178ae02ce3 100644
--- a/src/switch_core_io.c
+++ b/src/switch_core_io.c
@@ -271,6 +271,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
 			
 			if (bp->ready) {
 				if (!switch_test_flag(bp, SMBF_TAP_NATIVE_READ) && !switch_test_flag(bp, SMBF_TAP_NATIVE_WRITE)) {
+					printf("FUCKER\n\n\n");
 					tap_only = 0;
 				}
 
@@ -341,6 +342,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
 		need_codec = 0;
 		do_resample = 0;
 		do_bugs = 0;
+		goto done;
 	}
 
 
@@ -657,7 +659,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
 			}
 		}
 
-		if (do_bugs) {
+		if (do_bugs || tap_only) {
 			goto done;
 		}
 
@@ -985,8 +987,24 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_sess
 	}
 
 	if (session->bugs && !need_codec) {
-		do_bugs = TRUE;
-		need_codec = TRUE;
+		switch_media_bug_t *bp;
+		int tap_only = 1;
+
+		switch_thread_rwlock_rdlock(session->bug_rwlock);
+		for (bp = session->bugs; bp; bp = bp->next) {
+			if (bp->ready) {
+				if (!switch_test_flag(bp, SMBF_TAP_NATIVE_READ) && !switch_test_flag(bp, SMBF_TAP_NATIVE_WRITE)) {
+					tap_only = 0;
+					break;
+				}
+			}
+		}
+		switch_thread_rwlock_unlock(session->bug_rwlock);
+
+		if (!tap_only) {
+			do_bugs = TRUE;
+			need_codec = TRUE;
+		}
 	}
 
 	if (frame->codec->implementation->actual_samples_per_second != session->write_impl.actual_samples_per_second) {