diff --git a/src/switch_core_io.c b/src/switch_core_io.c
index 212033ffd5..82ab309bfb 100644
--- a/src/switch_core_io.c
+++ b/src/switch_core_io.c
@@ -103,8 +103,14 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
 	switch_status_t status;
 	int need_codec, perfect, do_bugs = 0, do_resample = 0, is_cng = 0;
 	unsigned int flag = 0;
+
   top:
 
+	if (!(session->read_codec && session->read_codec->implementation)) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s has no read codec.\n", switch_channel_get_name(session->channel));
+		return SWITCH_STATUS_FALSE;
+	}
+
 	if (switch_channel_get_state(session->channel) >= CS_HANGUP) {
 		*frame = NULL;
 		return SWITCH_STATUS_FALSE;
@@ -502,6 +508,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_sess
 	}
 
 	if (!(session->write_codec && session->write_codec->implementation)) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s has no write codec.\n", switch_channel_get_name(session->channel));
 		return SWITCH_STATUS_FALSE;
 	}