diff --git a/BonCtrl/CATUtil.cpp b/BonCtrl/CATUtil.cpp
index e20e4d3..03cfc65 100644
--- a/BonCtrl/CATUtil.cpp
+++ b/BonCtrl/CATUtil.cpp
@@ -89,8 +89,10 @@ BOOL CCATUtil::DecodeCAT(BYTE* data, DWORD dataSize)
 				if( descriptor_tag == 0x09 && descriptor_length >= 4 && infoRead+5 < descriptorSize ){
 					//CA
 					WORD CA_PID = ((WORD)data[readSize+2]&0x1F)<<8 | (WORD)data[readSize+3];
-					PIDList.insert(pair<WORD,WORD>(CA_PID, 0));
-					//_OutputDebugString(L"CA_PID:0x%04x\r\n",CA_PID);
+					if (CA_PID != 0x1fff) {
+						PIDList.insert(pair<WORD,WORD>(CA_PID, 0));
+						//_OutputDebugString(L"CA_PID:0x%04x\r\n",CA_PID);
+					}
 				}
 				readSize += descriptor_length;
 
diff --git a/BonCtrl/CreatePMTPacket.cpp b/BonCtrl/CreatePMTPacket.cpp
index da1475d..dc6c531 100644
--- a/BonCtrl/CreatePMTPacket.cpp
+++ b/BonCtrl/CreatePMTPacket.cpp
@@ -181,7 +181,9 @@ DWORD CCreatePMTPacket::DecodePMT(BYTE* data, DWORD dataSize)
 		if( descriptor_tag == 0x09 && descriptor_length >= 4){
 			//CA
 			WORD CA_PID = ((WORD)data[readSize+2]&0x1F)<<8 | (WORD)data[readSize+3];
-			this->emmPIDMap.insert(pair<WORD,WORD>(CA_PID, 0));
+			if (CA_PID != 0x1fff) {
+				this->emmPIDMap.insert(pair<WORD,WORD>(CA_PID, 0));
+			}
 		}
 		readSize += descriptor_length;
 
@@ -210,7 +212,9 @@ DWORD CCreatePMTPacket::DecodePMT(BYTE* data, DWORD dataSize)
 			if( descriptor_tag == 0x09 && descriptor_length >= 4){
 				//CA
 				WORD CA_PID = ((WORD)data[2+readSize+2]&0x1F)<<8 | (WORD)data[2+readSize+3];
-				this->emmPIDMap.insert(pair<WORD,WORD>(CA_PID, 0));
+				if (CA_PID != 0x1fff) {
+					this->emmPIDMap.insert(pair<WORD,WORD>(CA_PID, 0));
+				}
 
 				memcpy(item->descBuff+5+infoRead, data+readSize, 2+descriptor_length);
 			}else if( descriptor_tag == 0xC0 ){
diff --git a/BonCtrl/PMTUtil.cpp b/BonCtrl/PMTUtil.cpp
index c5f803e..a1f1ab8 100644
--- a/BonCtrl/PMTUtil.cpp
+++ b/BonCtrl/PMTUtil.cpp
@@ -110,7 +110,9 @@ BOOL CPMTUtil::DecodePMT(BYTE* data, DWORD dataSize)
 			if( descriptor_tag == 0x09 && descriptor_length >= 4 && readSize+3 < (DWORD)section_length+3-4 ){
 				//CA
 				WORD CA_PID = ((WORD)data[readSize+2]&0x1F)<<8 | (WORD)data[readSize+3];
-				PIDList.insert(pair<WORD,WORD>(CA_PID, 0));
+				if (CA_PID != 0x1fff) {
+					PIDList.insert(pair<WORD,WORD>(CA_PID, 0));
+				}
 			}
 			readSize += descriptor_length;
 
@@ -136,7 +138,9 @@ BOOL CPMTUtil::DecodePMT(BYTE* data, DWORD dataSize)
 				if( descriptor_tag == 0x09 && descriptor_length >= 4 && readSize+3 < (DWORD)section_length+3-4 ){
 					//CA
 					WORD CA_PID = ((WORD)data[readSize+2]&0x1F)<<8 | (WORD)data[readSize+3];
-					PIDList.insert(pair<WORD,WORD>(CA_PID, 0));
+					if (CA_PID != 0x1fff) {
+						PIDList.insert(pair<WORD,WORD>(CA_PID, 0));
+					}
 				}
 				readSize += descriptor_length;
 
