Index: /trunk/fl5/src/com/longtailvideo/jwplayer/media/HTTPMediaProvider.as
===================================================================
--- /trunk/fl5/src/com/longtailvideo/jwplayer/media/HTTPMediaProvider.as	(revision 535)
+++ /trunk/fl5/src/com/longtailvideo/jwplayer/media/HTTPMediaProvider.as	(revision 540)
@@ -205,5 +205,5 @@
 				resize(_width, _height);
 			}
-			if (dat.duration && item.duration < 0) {
+			if (dat.duration && item.duration <= 0) {
 				item.duration = dat.duration;
 			}
Index: /trunk/fl5/src/com/longtailvideo/jwplayer/media/MediaProvider.as
===================================================================
--- /trunk/fl5/src/com/longtailvideo/jwplayer/media/MediaProvider.as	(revision 530)
+++ /trunk/fl5/src/com/longtailvideo/jwplayer/media/MediaProvider.as	(revision 540)
@@ -39,16 +39,27 @@
 	[Event(name="jwplayerMediaLoaded", type="com.longtailvideo.jwplayer.events.MediaEvent")]
 	/**
+	 * Sent after a load() command has completed
+	 * 
 	 * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_TIME
 	 */
 	[Event(name="jwplayerMediaTime", type="com.longtailvideo.jwplayer.events.MediaEvent")]
 	/**
+	 * Sends the position and duration of the currently playing media
+	 * 
 	 * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_VOLUME
 	 */
 	[Event(name="jwplayerMediaVolume", type="com.longtailvideo.jwplayer.events.MediaEvent")]
 	/**
+	 * Fired when the currently playing media has completed its playback
+	 * 
+	 * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_COMPLETE
+	 */
+	[Event(name="jwplayerMediaComplete", type="com.longtailvideo.jwplayer.events.MediaEvent")]
+	/**
+	 * Sent when the playback state has changed.
+	 * 
 	 * @eventType com.longtailvideo.jwplayer.events.PlayerStateEvent.JWPLAYER_PLAYER_STATE
 	 */
 	[Event(name="jwplayerPlayerState", type="com.longtailvideo.jwplayer.events.PlayerStateEvent")]
-
 
 	public class MediaProvider extends Sprite implements IGlobalEventDispatcher {
Index: /trunk/fl5/src/com/longtailvideo/jwplayer/parsers/MediaParser.as
===================================================================
--- /trunk/fl5/src/com/longtailvideo/jwplayer/parsers/MediaParser.as	(revision 320)
+++ /trunk/fl5/src/com/longtailvideo/jwplayer/parsers/MediaParser.as	(revision 540)
@@ -29,8 +29,8 @@
 								itm['file'] = i.@url.toString();
 							}
-							if (i.@duration) {
+							if (i.@duration.length() > 0) {
 								itm['duration'] = Strings.seconds(i.@duration.toString());
 							}
-							if (i.@start) {
+							if (i.@start.length() > 0) {
 								itm['start'] = Strings.seconds(i.@start.toString());
 							}
Index: /trunk/fl5/src/com/longtailvideo/jwplayer/model/Model.as
===================================================================
--- /trunk/fl5/src/com/longtailvideo/jwplayer/model/Model.as	(revision 527)
+++ /trunk/fl5/src/com/longtailvideo/jwplayer/model/Model.as	(revision 540)
@@ -16,29 +16,54 @@
 
 	/**
+	 * Fired when a portion of the current media has been loaded into the buffer.
+	 *
 	 * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_BUFFER
 	 */
-	[Event(name="jwplayerMediaBuffer", type = "com.longtailvideo.jwplayer.events.MediaEvent")]
-
-	/**
+	[Event(name="jwplayerMediaBuffer", type="com.longtailvideo.jwplayer.events.MediaEvent")]
+	/**
+	 * Fired when the buffer is full.
+	 *
+	 * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_BUFFER_FULL
+	 */
+	[Event(name="jwplayerMediaBufferFull", type="com.longtailvideo.jwplayer.events.MediaEvent")]
+	/**
+	 * Fired if an error occurs in the course of media playback.
+	 *
+	 * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_ERROR
+	 */
+	[Event(name="jwplayerMediaError", type="com.longtailvideo.jwplayer.events.MediaEvent")]
+	/**
+	 * Fired after the MediaProvider has loaded an item into memory.
+	 *
 	 * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_LOADED
 	 */
-	[Event(name="jwplayerMediaLoaded", type = "com.longtailvideo.jwplayer.events.MediaEvent")]
-
-	/**
+	[Event(name="jwplayerMediaLoaded", type="com.longtailvideo.jwplayer.events.MediaEvent")]
+	/**
+	 * Sent after a load() command has completed
+	 * 
 	 * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_TIME
 	 */
-	[Event(name="jwplayerMediaTime", type = "com.longtailvideo.jwplayer.events.MediaEvent")]
-
-	/**
+	[Event(name="jwplayerMediaTime", type="com.longtailvideo.jwplayer.events.MediaEvent")]
+	/**
+	 * Sends the position and duration of the currently playing media
+	 * 
 	 * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_VOLUME
 	 */
-	[Event(name="jwplayerMediaVolume", type = "com.longtailvideo.jwplayer.events.MediaEvent")]
-
-	/**
+	[Event(name="jwplayerMediaVolume", type="com.longtailvideo.jwplayer.events.MediaEvent")]
+	/**
+	 * Fired when the currently playing media has completed its playback
+	 * 
+	 * @eventType com.longtailvideo.jwplayer.events.MediaEvent.JWPLAYER_MEDIA_COMPLETE
+	 */
+	[Event(name="jwplayerMediaComplete", type="com.longtailvideo.jwplayer.events.MediaEvent")]
+	/**
+	 * Sent when the playback state has changed.
+	 * 
 	 * @eventType com.longtailvideo.jwplayer.events.PlayerStateEvent.JWPLAYER_PLAYER_STATE
 	 */
-	[Event(name="jwplayerPlayerState", type = "com.longtailvideo.jwplayer.events.PlayerStateEvent")]
-
-	/**
+	[Event(name="jwplayerPlayerState", type="com.longtailvideo.jwplayer.events.PlayerStateEvent")]
+	/**
+	 * Fired if an error has occurred in the model.
+	 * 
 	 * @eventType com.longtailvideo.jwplayer.events.PlayerEvent.JWPLAYER_ERROR
 	 */
Index: /trunk/fl5/src/com/longtailvideo/jwplayer/model/PlayerConfig.as
===================================================================
--- /trunk/fl5/src/com/longtailvideo/jwplayer/model/PlayerConfig.as	(revision 524)
+++ /trunk/fl5/src/com/longtailvideo/jwplayer/model/PlayerConfig.as	(revision 540)
@@ -1,3 +1,4 @@
 package com.longtailvideo.jwplayer.model {
+	import com.longtailvideo.jwplayer.controller.RepeatOptions;
 	import com.longtailvideo.jwplayer.plugins.PluginConfig;
 	import com.longtailvideo.jwplayer.utils.Configger;
@@ -5,4 +6,5 @@
 	import com.longtailvideo.jwplayer.utils.Strings;
 	import com.longtailvideo.jwplayer.utils.TypeChecker;
+	import com.longtailvideo.jwplayer.view.PlayerLayoutManager;
 	
 	import flash.events.EventDispatcher;
@@ -22,5 +24,4 @@
 		private var _autostart:Boolean 		= false; 
 		private var _bufferlength:Number 	= 5; 
-		private var _displayclick:String 	= "play"; 
 		private var _displaytitle:Boolean 	= true; 
 		private var _fullscreen:Boolean 	= false;
@@ -28,5 +29,5 @@
 		private var _linktarget:String 		= "_blank";
 		private var _mute:Boolean 			= false;
-		private var _repeat:String 			= "none"; 
+		private var _repeat:String 			= RepeatOptions.NONE; 
 		private var _shuffle:Boolean 		= false; 
 		private var _smoothing:Boolean 		= true; 
@@ -39,6 +40,6 @@
 		private var _screencolor:Color		= null;
 		
-		private var _controlbar:String 		= "bottom";
-		private var _dock:String 			= "right";
+		private var _controlbar:String 		= PlayerLayoutManager.BOTTOM;
+		private var _dock:Boolean 			= true;
 		private var _height:Number 			= 400;
 		private var _icons:Boolean 			= true;
@@ -222,11 +223,7 @@
 
 		/** Set this to true to show the dock with large buttons in the top right of the player. Available since 4.5.  @default true **/
-		public function get dock():String { return _dock; }
-		public function set dock(x:String):void {
-			if (x == 'true') {
-				_dock = 'right';
-			} else {
-				_dock = x;
-			}
+		public function get dock():Boolean { return _dock; }
+		public function set dock(x:Boolean):void {
+			_dock = x;
 		}
 
@@ -286,11 +283,4 @@
 		public function get bufferlength():Number { return _bufferlength; }
 		public function set bufferlength(x:Number):void { _bufferlength = x; }
-
-		/** 
-		 * What to do when one clicks the display. Can be play, link, fullscreen, none, mute, next. When set to none, the handcursor is 
-		 * also not shown. @default play 
-		 **/
-		public function get displayclick():String { return _displayclick; }
-		public function set displayclick(x:String):void { _displayclick = x; }
 
 		/** Set this to true to print the title of a video in the display. @default true **/
Index: /trunk/fl5/src/com/longtailvideo/jwplayer/controller/Controller.as
===================================================================
--- /trunk/fl5/src/com/longtailvideo/jwplayer/controller/Controller.as	(revision 536)
+++ /trunk/fl5/src/com/longtailvideo/jwplayer/controller/Controller.as	(revision 540)
@@ -123,4 +123,6 @@
 			_model.playlist.addEventListener(PlaylistEvent.JWPLAYER_PLAYLIST_ITEM, playlistItemHandler, false, 1000);
 			
+			_model.addEventListener(MediaEvent.JWPLAYER_MEDIA_COMPLETE, completeHandler);
+			
 			// Broadcast playlist loaded (which was swallowed during player setup);
 			if (_model.playlist.length > 0) {
@@ -152,4 +154,8 @@
 		private function errorState(message:String=""):void {
 			dispatchEvent(new PlayerEvent(PlayerEvent.JWPLAYER_ERROR, message));
+		}
+		
+		private function completeHandler(evt:MediaEvent):void {
+			
 		}
 
Index: /trunk/fl5/src/com/longtailvideo/jwplayer/player/Player.as
===================================================================
--- /trunk/fl5/src/com/longtailvideo/jwplayer/player/Player.as	(revision 539)
+++ /trunk/fl5/src/com/longtailvideo/jwplayer/player/Player.as	(revision 540)
@@ -30,5 +30,5 @@
 	 */
 	public class Player extends Sprite {
-		private static var playerVersion:String = "5.0.539 alpha";
+		private static var playerVersion:String = "5.0.540 alpha";
 		private static var _commercial:Boolean = Boolean(CONFIG::commercial);
 		
