                     audioList.push(new AudioTrack('TS/MP3 ' + audioList.length, AudioTrack.FROM_DEMUX, sid, (audioList.length == 0), false));
                 } else if (typ == 0x15) {
                     // ID3 pid
-                    _id3Id = sid;
-                    CONFIG::LOGGING {
-                        Log.debug("TS: Selected ID3 PID: " + _id3Id);
+                    if(_id3Id != sid) {
+                        _id3Id = sid;
+                        CONFIG::LOGGING {
+                            Log.debug("TS: Selected ID3 PID: " + _id3Id);
+                        }
                     }
                 }
                 // es_info_length

                    pes.data.readBytes(pps, 0, frame.length);
                    ppsvect.push(pps);
                } else if (frame.type == 6) {
					
					//unescape Emulation Prevention bytes
					Nalu.unescapeStream(pes.data,frame.start,frame.start + frame.length);
					
					// We already know it's 6, so skip first byte
					pes.data.position = frame.start + 1;
					
					// we need at least 12 bytes to retrieve Caption length
					if(pes.data.bytesAvailable > 12) {
						
						// get the SEI payload type
						var payload_type : uint = 0;
						var payload_size : uint = 0;

                read += sel + 5;
            }

            // provide audio track List to audio select callback. this callback will return the selected audio track
            var audioPID : int;
            var audioFound : Boolean = (audioList.length > 0);
            if (audioFound != _audioFound) {
                CONFIG::LOGGING {
                    if (audioFound) {
                        Log.debug("TS: Found " + audioList.length + " audio tracks");
                    }
                }
                _audioFound = audioFound;
                var audioTrack : AudioTrack = _callback_audioselect(audioList);
                if (audioTrack) {
                    audioPID = audioTrack.id;
                    _audioIsAAC = audioTrack.isAAC;
                    _audioSelected = true;
                    CONFIG::LOGGING {
                        Log.debug("TS: selected " + (_audioIsAAC ? "AAC" : "MP3") + " PID: " + audioPID);
                    }
                } else {
                    audioPID = -1;
                    _audioSelected = false;
                    CONFIG::LOGGING {
                        Log.debug("TS: no audio selected");
                    }
                }
                // in case audio PID change, flush any partially parsed audio PES packet
                if (audioPID != _audioId) {
                    _curAudioPES = null;
                    _adtsFrameOverflow = null;
                    _audioId = audioPID;
                }
            }
            return len + pointerField;
        };
