         };
 
         /** Notify javascript the framework is ready. **/
-        private function _pingJavascript() : void {
+        protected function _pingJavascript() : void {
             ExternalInterface.call("onHLSReady", ExternalInterface.objectID);
         };
 
         /** Forward events from the framework. **/
-        private function _completeHandler(event : HLSEvent) : void {
+        protected function _completeHandler(event : HLSEvent) : void {
             if (ExternalInterface.available) {
                 ExternalInterface.call("onComplete");
             }
         };
 
-        private function _errorHandler(event : HLSEvent) : void {
+        protected function _errorHandler(event : HLSEvent) : void {
             if (ExternalInterface.available) {
                 var hlsError : HLSError = event.error;
                 ExternalInterface.call("onError", hlsError.code, hlsError.url, hlsError.msg);
             }
         };
 
-        private function _fragmentHandler(event : HLSEvent) : void {
+        protected function _fragmentHandler(event : HLSEvent) : void {
             if (ExternalInterface.available) {
                 ExternalInterface.call("onFragment", event.metrics.bandwidth, event.metrics.level, stage.stageWidth);
             }
         };
 
-        private function _manifestHandler(event : HLSEvent) : void {
+        protected function _manifestHandler(event : HLSEvent) : void {
             _duration = event.levels[_hls.startlevel].duration;
 
             if (_autoLoad) {

            }
        };

        private function _stateHandler(event : HLSEvent) : void {
            if (ExternalInterface.available) {
                ExternalInterface.call("onState", event.state);
            }
        };

        private function _levelSwitchHandler(event : HLSEvent) : void {
            if (ExternalInterface.available) {
                ExternalInterface.call("onSwitch", event.level);
            }
        };

        private function _audioTracksListChange(event : HLSEvent) : void {
            if (ExternalInterface.available) {
                ExternalInterface.call("onAudioTracksListChange", _getAudioTrackList());
            }
        }

        private function _audioTrackChange(event : HLSEvent) : void {
            if (ExternalInterface.available) {
                ExternalInterface.call("onAudioTrackChange", event.audioTrack);
            }
        }

        /** Javascript getters. **/
        private function _getLevel() : int {
            return _hls.level;
        };

        private function _getLevels() : Vector.<Level> {
            return _hls.levels;
        };

        private function _getAutoLevel() : Boolean {
            return _hls.autolevel;
        };

        private function _getMetrics() : Object {
            return _hls.metrics;
        };

        private function _getDuration() : Number {
            return _duration;
        };

        private function _getPosition() : Number {
            return _hls.position;
        };

        private function _getPlaybackState() : String {
            return _hls.playbackState;
        };

        private function _getSeekState() : String {
            return _hls.seekState;
        };

        private function _getType() : String {
            return _hls.type;
        };

        private function _getbufferLength() : Number {
            return _hls.bufferLength;
        };

        private function _getmaxBufferLength() : Number {
            return HLSSettings.maxBufferLength;
        };

        private function _getminBufferLength() : Number {
            return HLSSettings.minBufferLength;
        };

        private function _getlowBufferLength() : Number {
            return HLSSettings.lowBufferLength;
        };

        private function _getflushLiveURLCache() : Boolean {
            return HLSSettings.flushLiveURLCache;
        };

        private function _getstartFromLevel() : int {
            return HLSSettings.startFromLevel;
        };

        private function _getseekFromLevel() : int {
            return HLSSettings.seekFromLevel;
        };

        private function _getLogDebug() : Boolean {
            return HLSSettings.logDebug;
        };

        private function _getLogDebug2() : Boolean {
            return HLSSettings.logDebug2;
        };

        private function _getCapLeveltoStage() : Boolean {
            return HLSSettings.capLevelToStage;
        };

        private function _getJSURLStream() : Boolean {
            return (_hls.URLstream is JSURLStream);
        };

        private function _getPlayerVersion() : Number {
            return 2;
        };

        private function _getAudioTrackList() : Array {
            var list : Array = [];
            var vec : Vector.<HLSAudioTrack> = _hls.audioTracks;
            for (var i : Object in vec) {

        };

        /** StageVideo detector. **/
        protected function _onStageVideoState(event : StageVideoAvailabilityEvent) : void {
            var available : Boolean = (event.availability == StageVideoAvailability.AVAILABLE);
            _hls = new HLS();
            _hls.stage = stage;
