 	public class ForcibleLoader
 	{
 		private var m_request : URLRequest;
+		private var m_data : ByteArray;
+		private var m_totalSize : int = -1;
 		
 		
 		public function ForcibleLoader(loader:Loader)
 		{
 			this.loader = loader;
+			m_data = new ByteArray();
+			m_data.endian = Endian.LITTLE_ENDIAN;
 			
 			_stream = new URLStream();
 			_stream.addEventListener(Event.COMPLETE, completeHandler);
 			_stream.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
 			_stream.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
+			_stream.addEventListener(ProgressEvent.PROGRESS, progressHandler);
 		}
 		
 		private var _loader:Loader;

	import flash.net.URLStream;
	import flash.events.IOErrorEvent;
	import flash.events.SecurityErrorEvent;
	import flash.events.Event;
	import flash.utils.ByteArray;
	import flash.utils.Endian;

			m_request = request;
		}
		
		public function bytesLoaded() : int
		{
			return m_data.length;
		}
		
		public function bytesTotal() : int
		{
			if (m_totalSize == -1 && m_data.length >= 8)
			{
				m_data.position = 4;
				m_totalSize = m_data.readInt();
			}
			return m_totalSize || 0;
		}
		
		private function completeHandler(event:Event):void
		{
			m_data.position = 0;
			_stream.close();
			
			if (isCompressed(m_data)) {
				uncompress(m_data);
			}
			
			var version:uint = uint(m_data[3]);
			
			if (version < 9) {
				updateVersion(m_data, 9);
			}
			if (version > 7) {
				flagSWF9Bit(m_data);
			}
			else {
				insertFileAttributesTag(m_data);
			}
			
			loader.loadBytes(m_data);
		}
		
		private function isCompressed(bytes:ByteArray):Boolean
