Index: /plugins/qualitymonitor/com/jeroenwijering/plugins/QualityMonitor.as
===================================================================
--- /plugins/qualitymonitor/com/jeroenwijering/plugins/QualityMonitor.as	(revision 374)
+++ /plugins/qualitymonitor/com/jeroenwijering/plugins/QualityMonitor.as	(revision 435)
@@ -49,11 +49,14 @@
 	/** Update quality metrics **/
 	private function check():void {
-		var len:Number = 1;
-		if(view.playlist[view.config['item']]['levels']) { 
-			len = view.playlist[view.config['item']]['levels'].length;
+		var lvl:String = '1 of 1';
+		if(view.playlist[view.config['item']]['levels']) {
+			var arr:Array = view.playlist[view.config['item']]['levels'];
+			var idx:Number = view.config['level'];
+			lvl = (idx+1) + ' of ' + arr.length;
+			lvl += ' (' + arr[idx]['bitrate'] + 'kbps, ' + arr[idx]['width'] + 'px)';
 		}
 		field.htmlText = 
 			'<b>bandwidth:</b> ' + view.config['bandwidth'] + ' kbps<br/>' +
-			'<b>level:</b> ' + (view.config['level']+1) + ' of ' + len + '<br/>' +
+			'<b>level:</b> ' + lvl + '<br/>' +
 			'<b>width:</b> '+ view.config['width'] + ' pixels';
 	};
Index: /trunk/as3/com/jeroenwijering/models/YoutubeModel.as
===================================================================
--- /trunk/as3/com/jeroenwijering/models/YoutubeModel.as	(revision 388)
+++ /trunk/as3/com/jeroenwijering/models/YoutubeModel.as	(revision 435)
@@ -99,9 +99,7 @@
 		loading = true;
 		if(connected) {
-			if(outgoing) {
-				var gid:String = getID(item['file']);
-				outgoing.send('AS3_'+unique,"loadVideoById",gid,item['start']);
-				resize();
-			}
+			var gid:String = getID(item['file']);
+			outgoing.send('AS3_'+unique,"loadVideoById",gid,item['start']);
+			resize();
 		} else {
 			loader.load(new URLRequest(getLocation()));
@@ -166,5 +164,4 @@
 			case 3:
 				model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.BUFFERING});
-				model.sendEvent(ModelEvent.BUFFER,{percentage:0});
 				break;
 		}
@@ -201,5 +198,9 @@
 	/** Destroy the youtube video. **/
 	override public function stop():void {
-		outgoing.send('AS3_'+unique,"stopVideo");
+		if(connected) {
+			outgoing.send('AS3_'+unique,"stopVideo");
+		} else {
+			loading = false;
+		}
 		position = 0;
 		model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.IDLE});
Index: /trunk/as3/com/jeroenwijering/models/HTTPModel.as
===================================================================
--- /trunk/as3/com/jeroenwijering/models/HTTPModel.as	(revision 388)
+++ /trunk/as3/com/jeroenwijering/models/HTTPModel.as	(revision 435)
@@ -266,7 +266,4 @@
 	private function positionInterval():void {
 		var pos:Number = Math.round(stream.time*10)/10;
-		if(pos > position - timeoffset + 5) {
-			pos = position - timeoffset + 0.1;
-		}
 		if (mp4) {
 			pos += timeoffset;
Index: /trunk/as3/com/jeroenwijering/models/ImageModel.as
===================================================================
--- /trunk/as3/com/jeroenwijering/models/ImageModel.as	(revision 388)
+++ /trunk/as3/com/jeroenwijering/models/ImageModel.as	(revision 435)
@@ -30,5 +30,4 @@
 		loader = new Loader();
 		loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaderHandler);
-		loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,progressHandler);
 		loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,errorHandler);
 		addChild(loader);
@@ -42,5 +41,4 @@
 		loader.load(new URLRequest(item['file']),new LoaderContext(true));
 		model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.BUFFERING});
-		model.sendEvent(ModelEvent.BUFFER,{percentage:0});
 	};
 
@@ -84,14 +82,7 @@
 			model.sendEvent(ModelEvent.TIME,{position:position,duration:item['duration']});
 		} else if (item['duration'] > 0) {
-			pause();
+			clearInterval(interval);
 			model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.COMPLETED});
 		}
-	};
-
-
-	/** Send load progress to player. **/
-	private function progressHandler(evt:ProgressEvent):void {
-		var pct:Number = Math.round(evt.bytesLoaded/evt.bytesTotal*100);
-		model.sendEvent(ModelEvent.BUFFER,{percentage:pct});
 	};
 
@@ -107,10 +98,10 @@
 	/** Stop the image interval. **/
 	override public function stop():void {
-		if(loader.contentLoaderInfo.bytesLoaded != loader.contentLoaderInfo.bytesTotal) {
+		clearInterval(interval);
+		try { 
 			loader.close();
-		} else {
+		} catch(err:Error) {
 			loader.unload();
 		}
-		clearInterval(interval);
 		position = 0;
 		model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.IDLE});
Index: /trunk/as3/com/jeroenwijering/models/RTMPModel.as
===================================================================
--- /trunk/as3/com/jeroenwijering/models/RTMPModel.as	(revision 408)
+++ /trunk/as3/com/jeroenwijering/models/RTMPModel.as	(revision 435)
@@ -105,5 +105,5 @@
 			clearInterval(bwinterval);
 		}
-		if(getLevel() != model.config['level']) {
+		if(item['levels'] && getLevel() != model.config['level']) {
 			swap();
 		}
@@ -365,5 +365,5 @@
 				break;
 		}
-		model.sendEvent('META',evt.info);
+		//model.sendEvent('META',evt.info);
 	};
 
Index: /trunk/as3/com/jeroenwijering/models/VideoModel.as
===================================================================
--- /trunk/as3/com/jeroenwijering/models/VideoModel.as	(revision 387)
+++ /trunk/as3/com/jeroenwijering/models/VideoModel.as	(revision 435)
@@ -186,8 +186,10 @@
 	/** Seek to a new position. **/
 	override public function seek(pos:Number):void {
-		position = pos;
-		clearInterval(interval);
-		stream.seek(position);
-		play();
+		if(stream && pos < stream.bytesLoaded/stream.bytesTotal*item['duration']) {
+			position = pos;
+			clearInterval(interval);
+			stream.seek(position);
+			play();
+		}
 	};
 
Index: /trunk/as3/com/jeroenwijering/models/SoundModel.as
===================================================================
--- /trunk/as3/com/jeroenwijering/models/SoundModel.as	(revision 388)
+++ /trunk/as3/com/jeroenwijering/models/SoundModel.as	(revision 435)
@@ -88,5 +88,4 @@
 		model.config['mute'] == true ? volume(0): volume(model.config['volume']);
 		model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.BUFFERING});
-		model.sendEvent(ModelEvent.BUFFER,{percentage:0});
 	};
 
@@ -119,5 +118,4 @@
 		channel.addEventListener(Event.SOUND_COMPLETE,completeHandler);
 		interval = setInterval(positionInterval,100);
-		model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.PLAYING});
 	};
 
@@ -126,12 +124,5 @@
 	protected function positionInterval():void {
 		position = Math.round(channel.position/100)/10;
-		if(sound.isBuffering == true && sound.bytesTotal > sound.bytesLoaded) {
-			if(model.config['state'] != ModelStates.BUFFERING) {
-				model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.BUFFERING});
-			} else {
-				var pct:Number = Math.floor(sound.length/(channel.position+model.config['bufferlength']*1000)*100);
-				model.sendEvent(ModelEvent.BUFFER,{percentage:pct});
-			}
-		} else if (model.config['state'] == ModelStates.BUFFERING && sound.isBuffering == false) {
+		if (model.config['state'] != ModelStates.PLAYING && channel.position > 0) {
 			model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.PLAYING});
 		}
@@ -156,8 +147,8 @@
 	/** Destroy the sound. **/
 	override public function stop():void {
+		clearInterval(loadinterval);
+		clearInterval(interval);
 		if(channel) { channel.stop(); }
 		try { sound.close(); } catch (err:Error) {}
-		clearInterval(loadinterval);
-		clearInterval(interval);
 		position = 0;
 		model.sendEvent(ModelEvent.STATE,{newstate:ModelStates.IDLE});
Index: /trunk/as3/com/jeroenwijering/models/LivestreamModel.as
===================================================================
--- /trunk/as3/com/jeroenwijering/models/LivestreamModel.as	(revision 385)
+++ /trunk/as3/com/jeroenwijering/models/LivestreamModel.as	(revision 435)
@@ -132,4 +132,31 @@
 
 
+	/** Getters/setters for resizing. These make sure the aspectratios of the wrapper are kept. **/
+	override public function get width():Number {
+		if(wrapper) { return wrapper.width; } else { return width; }
+	};
+	override public function set width(val:Number):void {
+		if(wrapper) { wrapper.width = val; } else { super.width = val; }
+	};
+	override public function get height():Number {
+		if(wrapper) { return wrapper.height; } else { return height; }
+	};
+	override public function set height(val:Number):void {
+		if(wrapper) { wrapper.height = val; } else { wrapper.height = val; }
+	};
+	override public function get x():Number {
+		if(wrapper) { return wrapper.x; } else { return x; }
+	};
+	override public function set x(val:Number):void {
+		if(wrapper) { wrapper.x = val; } else { super.x = val; }
+	}
+	override public function get y():Number {
+		if(wrapper) { return wrapper.y; } else { return y; }
+	}
+	override public function set y(val:Number):void {
+		if(wrapper) { wrapper.y = val; } else { super.y = val; }
+	}
+
+
 }
 
Index: /trunk/as3/com/jeroenwijering/player/Player.as
===================================================================
--- /trunk/as3/com/jeroenwijering/player/Player.as	(revision 410)
+++ /trunk/as3/com/jeroenwijering/player/Player.as	(revision 435)
@@ -69,5 +69,5 @@
 		id:undefined,
 		plugins:undefined,
-		version:'4.6.410'
+		version:'4.6.435'
 	};
 	/** Reference to all stage graphics. **/
Index: /testing/settings.js
===================================================================
--- /testing/settings.js	(revision 434)
+++ /testing/settings.js	(revision 435)
@@ -420,9 +420,10 @@
 		61: {
 			title:'Snapshot plugin',
-			file:'../../testing/files/bunny.mp4',
+			file:'http://content.bitsontherun.com/videos/6RCvPeUn-329.mp4',
 			height:260,
 			width:600,
 			plugins:'snapshot',
-			'snapshot.script':'http://www.jeroenwijering.com/test/snapshot/create.php'
+			'snapshot.script':'http://demo.bitsontherun.com/snapshot/update.php',
+			'snapshot.bitmap':false
 		},
 		62: {
@@ -432,12 +433,4 @@
 			width:600,
 			plugins:'flow'
-		},
-		90:{},
-		91: {
-			title:'Smooth streamed MP4',
-			file:'http://h264.code-shop.com:8080/bbb.mp4/bbb.ismc',
-			type:'smooth',
-			height:240,
-			width:500
 		}
 	}
