                             // clean-up tags
                             fragData.tags = new Vector.<FLVTag>();
                             // tell that new fragment could be loaded
-                            _need_reload = true;
+                            _frag_loading = false;
                             return;
                         }
                     }
                     // provide tags to HLSNetStream
-                    _callback(_level, _frag_current.continuity, _frag_current.seqnum, _frag_current.tag_list, fragData.tags, fragData.tag_pts_min, fragData.tag_pts_max, _hasDiscontinuity, min_offset, _frag_current.program_date + fragData.tag_pts_start_offset);
+                    _tags_callback(_level, _frag_current.continuity, _frag_current.seqnum, _frag_current.tag_list, fragData.tags, fragData.tag_pts_min, fragData.tag_pts_max, _hasDiscontinuity, min_offset, _frag_current.program_date + fragData.tag_pts_start_offset);
                     var processing_duration : Number = (new Date().valueOf() - _frag_current.metrics.loading_request_time);
                     var bandwidth : Number = Math.round(fragData.bytesLoaded * 8000 / processing_duration);
                     var tagsMetrics : HLSLoadMetrics = new HLSLoadMetrics(_level, bandwidth, fragData.tag_pts_end_offset, processing_duration);

            _retry_count = 0;
            _retry_timeout = 1000;
            _frag_loading = false;
            _callback = callback;
            _seek_pos = position;
            _fragment_first_loaded = false;
            _frag_previous = null;

                return;
            }
            // check fragment loading status, try to load a new fragment if needed
            if (_frag_loading == false) {
                var loadstatus : int;
                // if previous fragment loading failed
                if (_bIOError) {
