                 }
             }
         };
+
+        private function filternextFragments(item : FLVData, index : int, vector : Vector.<FLVData>) : Boolean {
+            // keep if return true
+            // we want to keep only if alt audio loader OR
+            // index less than start filtering index (i.e. we want to keep backbuffer) OR
+            // matching with current fragment appended tags
+            return (item.loaderType == HLSLoaderTypes.FRAGMENT_ALTAUDIO ||
+                                   index < _filteringStartIdx ||
+                                   (item.fragLevel == _fragMainLevelNetStream &&  item.fragSN == _fragMainSNNetStream));
+        }
 
         /**  StreamBuffer Timer, responsible of
          * reporting media time event

            }
        };

        // remove tags coming from main fragment loader, only keep tags coming from alt audio frag loader
        private function filterMainFragmentTags(tags : Vector.<FLVData>, startIndex : int) : void {
            for (var i : int = startIndex; i < tags.length; i++) {
                if(tags[i].loaderType == HLSLoaderTypes.FRAGMENT_MAIN) {
                    // splice FLV tag from main fragment loader
                    tags.splice(i,1);
                }
            }
        }

        /*  set quality level for next loaded fragment (-1 for automatic level selection) */
        public function set nextLevel(level : int) : void {
            CONFIG::LOGGING {

                            CONFIG::LOGGING {
                                Log.debug("StreamBuffer:lastFrag defined, flush buffer and seekFromLastFrag");
                            }
                            // flush all video tags not injected into NetStream, from next fragment onwards
                            _videoTags.splice(i, _videoTags.length-i);
                            // flush all audio tags from next main fragment onwards
                            _filteringStartIdx = _audioIdx;
                            _audioTags = _audioTags.filter(filternextFragments);
                            // flush all header tags from next main fragment onwards
                            _filteringStartIdx = _headerIdx;
                            _headerTags = _headerTags.filter(filternextFragments);
                            // flush all metadata tags from next main fragment onwards
                            _filteringStartIdx = _metaIdx;
                            _metaTags = _metaTags.filter(filternextFragments);
                            // stop any load in progress ...
                            _fragmentLoader.stop();
                            // seek position is out of buffer : load after fragment
