Index: /trunk/ova.flowplayer/src/org/openvideoads/plugin/flowplayer/streamer/OpenAdStreamer.as
===================================================================
--- /trunk/ova.flowplayer/src/org/openvideoads/plugin/flowplayer/streamer/OpenAdStreamer.as	(revision 756)
+++ /trunk/ova.flowplayer/src/org/openvideoads/plugin/flowplayer/streamer/OpenAdStreamer.as	(revision 757)
@@ -58,4 +58,5 @@
 	import org.openvideoads.vast.events.TrackingPointEvent;
 	import org.openvideoads.vast.events.VPAIDAdDisplayEvent;
+	import org.openvideoads.vast.events.AdTagEvent;
 	import org.openvideoads.vast.playlist.Playlist;
 	import org.openvideoads.vast.schedule.Stream;
@@ -102,5 +103,5 @@
 		protected static const CONTROLS_PLUGIN_NAME:String = "controls";
 		
-        public static const OVA_VERSION:String = "v1.0.1 RC2 (build 5)";
+        public static const OVA_VERSION:String = "v1.0.1 RC2 (build 6)";
         
         protected static var STREAMING_PROVIDERS:Object = {
@@ -539,4 +540,8 @@
 			recordDefaultControlbarState();
 
+            // Setup the critical listeners for the ad tag call process
+            _vastController.addEventListener(AdTagEvent.CALL_STARTED, onAdCallStarted);
+            _vastController.addEventListener(AdTagEvent.CALL_COMPLETE, onAdCallComplete);
+
             // Setup the critical listeners for the template loading process - used by the ad slot "preloaded model"
             _vastController.addEventListener(TemplateEvent.LOADED, onTemplateLoaded);
@@ -585,4 +590,5 @@
 
             // Setup VPAID event handlers
+            _vastController.addEventListener(VPAIDAdDisplayEvent.LOADING, onVPAIDLoading);
             _vastController.addEventListener(VPAIDAdDisplayEvent.LINEAR_START, onVPAIDLinearAdStart); 
             _vastController.addEventListener(VPAIDAdDisplayEvent.LINEAR_COMPLETE, onVPAIDLinearAdComplete); 
@@ -597,5 +603,5 @@
             _vastController.addEventListener(VPAIDAdDisplayEvent.NON_LINEAR_EXPANDED_CHANGE, onVPAIDNonLinearAdExpandedChange); 
             _vastController.addEventListener(VPAIDAdDisplayEvent.NON_LINEAR_TIME_CHANGE, onVPAIDNonLinearAdTimeChange); 
-            _vastController.addEventListener(VPAIDAdDisplayEvent.LINEAR_LOADED, onVPAIDUnusedEvent);            
+            _vastController.addEventListener(VPAIDAdDisplayEvent.LINEAR_LOADED, onVPAIDLinearLoaded);            
             _vastController.addEventListener(VPAIDAdDisplayEvent.NON_LINEAR_LOADED, onVPAIDUnusedEvent);
             _vastController.addEventListener(VPAIDAdDisplayEvent.LINEAR_IMPRESSION, onVPAIDUnusedEvent);
@@ -823,4 +829,19 @@
 	    	}
 	    }		
+
+        /**
+         * AD CALL HANDLERS
+         * 
+         **/ 
+         
+        protected function onAdCallStarted(event:AdTagEvent):void {
+        	doLog("PLUGIN NOTIFICATION: Ad Tag call started", Debuggable.DEBUG_VAST_TEMPLATE);
+//	       	showOVABusy();
+        }
+        
+        protected function onAdCallComplete(event:AdTagEvent):void {
+        	doLog("PLUGIN NOTIFICATION: Ad Tag call complete", Debuggable.DEBUG_VAST_TEMPLATE);
+//        	showOVAReady();
+        }
 	    
         /**
@@ -1489,4 +1510,14 @@
 		}
 		
+		protected function onVPAIDLoading(event:VPAIDAdDisplayEvent):void {
+        	doLog("PLUGIN NOTIFICATION: VPAID ad loading", Debuggable.DEBUG_VPAID);
+			//showOVABusy();
+		}
+
+		protected function onVPAIDLinearLoaded(event:VPAIDAdDisplayEvent):void {
+        	doLog("PLUGIN NOTIFICATION: VPAID ad loaded", Debuggable.DEBUG_VPAID);
+			//showOVAReady();
+		}
+		
         protected function onVPAIDLinearAdStart(event:VPAIDAdDisplayEvent):void {
         	doLog("PLUGIN NOTIFICATION: VPAID Linear Ad started", Debuggable.DEBUG_VPAID);
Index: /trunk/ova.as3/src/org/openvideoads/vast/model/WrappedVideoAdServingTemplateV2.as
===================================================================
--- /trunk/ova.as3/src/org/openvideoads/vast/model/WrappedVideoAdServingTemplateV2.as	(revision 753)
+++ /trunk/ova.as3/src/org/openvideoads/vast/model/WrappedVideoAdServingTemplateV2.as	(revision 757)
@@ -106,4 +106,12 @@
 		}
 		
+		public override function onAdCallStarted():void {
+			_parentTemplate.onAdCallStarted();
+		}
+		
+		public override function onAdCallComplete():void {
+			_parentTemplate.onAdCallComplete();
+		}
+		
 		private function getIndexOfNextLinearAd(ads:Array):int {
 			if(ads != null) {
Index: /trunk/ova.as3/src/org/openvideoads/vast/model/WrappedVideoAdV1.as
===================================================================
--- /trunk/ova.as3/src/org/openvideoads/vast/model/WrappedVideoAdV1.as	(revision 753)
+++ /trunk/ova.as3/src/org/openvideoads/vast/model/WrappedVideoAdV1.as	(revision 757)
@@ -222,4 +222,12 @@
 		}
 
+		public function onAdCallStarted():void {
+			_vastContainer.onAdCallStarted();
+		}
+		
+		public function onAdCallComplete():void {
+			_vastContainer.onAdCallComplete();
+		}
+
 		public function hasReplacementVideoAd():Boolean {
 			return (_wrappedVideoAd != null);
Index: /trunk/ova.as3/src/org/openvideoads/vast/model/VideoAdServingTemplate.as
===================================================================
--- /trunk/ova.as3/src/org/openvideoads/vast/model/VideoAdServingTemplate.as	(revision 753)
+++ /trunk/ova.as3/src/org/openvideoads/vast/model/VideoAdServingTemplate.as	(revision 757)
@@ -369,4 +369,12 @@
 		public function onTemplateLoadDeferred(event:Event):void {
 			signalTemplateLoadDeferred(uid, event);
+		}
+
+		public function onAdCallStarted():void { 
+			if(_listener != null) _listener.onAdCallStarted(); 
+		}
+		
+		public function onAdCallComplete():void { 
+			if(_listener != null) _listener.onAdCallComplete(); 
 		}
 
Index: /trunk/ova.as3/src/org/openvideoads/vast/overlay/OverlayController.as
===================================================================
--- /trunk/ova.as3/src/org/openvideoads/vast/overlay/OverlayController.as	(revision 619)
+++ /trunk/ova.as3/src/org/openvideoads/vast/overlay/OverlayController.as	(revision 757)
@@ -921,4 +921,5 @@
 				);
 				if(_activeVPAIDMedia.getOverlay() != null) {
+					if(eventCallbackFunctions.onLoading != undefined) eventCallbackFunctions.onLoading();
 					this.setChildIndex(_activeVPAIDMedia.getOverlay(), this.numChildren-1);
 					_activeVPAIDMedia.getOverlay().loadFlashMedia(vpaidMedia as FlashMedia, _vastController.config.adsConfig.vpaidConfig, _vastController.config.adsConfig.allowDomains, false, muteOnStartup, reduceVPAIDAdHeightByBottomMargin, adIsLinear, playerVolume);
Index: /trunk/ova.as3/src/org/openvideoads/vast/VASTController.as
===================================================================
--- /trunk/ova.as3/src/org/openvideoads/vast/VASTController.as	(revision 756)
+++ /trunk/ova.as3/src/org/openvideoads/vast/VASTController.as	(revision 757)
@@ -18,11 +18,7 @@
  */
 package org.openvideoads.vast {
-	import flash.display.DisplayObjectContainer;
-	import flash.events.ContextMenuEvent;
 	import flash.events.Event;
 	import flash.events.TimerEvent;
 	import flash.external.ExternalInterface;
-	import flash.net.URLRequest;
-	import flash.net.navigateToURL;
 	import flash.system.Capabilities;
 	import flash.utils.Timer;
@@ -30,7 +26,4 @@
 	import org.openvideoads.base.Debuggable;
 	import org.openvideoads.base.EventController;
-	import org.openvideoads.vast.server.events.TemplateEvent;
-	import org.openvideoads.vast.server.response.AdServerTemplate;
-	import org.openvideoads.vast.server.response.TemplateLoadListener;
 	import org.openvideoads.util.BrowserUtils;
 	import org.openvideoads.util.DisplayProperties;
@@ -46,4 +39,5 @@
 	import org.openvideoads.vast.events.AdNoticeDisplayEvent;
 	import org.openvideoads.vast.events.AdSlotLoadEvent;
+	import org.openvideoads.vast.events.AdTagEvent;
 	import org.openvideoads.vast.events.CompanionAdDisplayEvent;
 	import org.openvideoads.vast.events.LinearAdDisplayEvent;
@@ -62,6 +56,4 @@
 	import org.openvideoads.vast.overlay.OverlayView;
 	import org.openvideoads.vast.overlay.button.skip.SkipAdButtonDisplayEvent;
-	import org.openvideoads.vast.playlist.Playlist;
-	import org.openvideoads.vast.playlist.PlaylistController;
 	import org.openvideoads.vast.schedule.DurationlessStreamSequence;
 	import org.openvideoads.vast.schedule.Stream;
@@ -70,4 +62,7 @@
 	import org.openvideoads.vast.schedule.ads.AdSlot;
 	import org.openvideoads.vast.schedule.ads.AdSlotOnDemandLoadListener;
+	import org.openvideoads.vast.server.events.TemplateEvent;
+	import org.openvideoads.vast.server.response.AdServerTemplate;
+	import org.openvideoads.vast.server.response.TemplateLoadListener;
 	import org.openvideoads.vast.tracking.TimeEvent;
 	import org.openvideoads.vast.tracking.TrackingPoint;
@@ -82,5 +77,5 @@
 		public static const RELATIVE_TO_CLIP:String = "relative-to-clip";
 		public static const CONTINUOUS:String = "continuous";
-		public static const VERSION:String = "v1.0.1 RC2 (build 5)";
+		public static const VERSION:String = "v1.0.1 RC2 (build 6)";
 		
 		protected var _streamSequence:StreamSequence = null;
@@ -768,4 +763,7 @@
 					    adSlot,
 					    {
+					    	onLoading: function(event:VPAIDEvent=null):void {
+				    			dispatchEvent(new VPAIDAdDisplayEvent(VPAIDAdDisplayEvent.LOADING, adSlot, event.data, event.bubbles, event.cancelable));
+					    	},
 							onLoaded: function(event:VPAIDEvent=null):void { 
 								if(_analyticsProcessor != null && ad != null) {
@@ -926,4 +924,14 @@
 		public function disableVisualLinearAdClickThroughCue(adSlot:AdSlot=null):void {
 			if(_config.visuallyCueLinearAdClickThrough && overlayController != null) overlayController.disableLinearAdMouseOverRegion();			
+		}
+		
+		// Ad Tag callbacks
+
+		public function onAdCallStarted():void {
+			dispatchEvent(new AdTagEvent(AdTagEvent.CALL_STARTED));
+		}
+		
+		public function onAdCallComplete():void {
+			dispatchEvent(new AdTagEvent(AdTagEvent.CALL_COMPLETE));
 		}
 		
@@ -1263,4 +1271,7 @@
 					_overlayController.playVPAIDAd(adSlot,
 					    {
+					    	onLoading: function(event:VPAIDEvent=null):void {
+				    			dispatchEvent(new VPAIDAdDisplayEvent(VPAIDAdDisplayEvent.LOADING, adSlot, event.data, event.bubbles, event.cancelable));
+					    	},
 							onLoaded: function(event:VPAIDEvent=null):void { 
 								if(_analyticsProcessor != null) {
Index: /trunk/ova.as3/src/org/openvideoads/vast/events/VPAIDAdDisplayEvent.as
===================================================================
--- /trunk/ova.as3/src/org/openvideoads/vast/events/VPAIDAdDisplayEvent.as	(revision 753)
+++ /trunk/ova.as3/src/org/openvideoads/vast/events/VPAIDAdDisplayEvent.as	(revision 757)
@@ -26,4 +26,5 @@
 	 */
 	public class VPAIDAdDisplayEvent extends Event {
+		public static const LOADING:String = "ova-vpaid-loading";
 		public static const LINEAR_START:String = "ova-vpaid-linear-start";
 		public static const LINEAR_COMPLETE:String = "ova-vpaid-linear-complete";
Index: /trunk/ova.as3/src/org/openvideoads/vast/events/AdTagEvent.as
===================================================================
--- /trunk/ova.as3/src/org/openvideoads/vast/events/AdTagEvent.as	(revision 757)
+++ /trunk/ova.as3/src/org/openvideoads/vast/events/AdTagEvent.as	(revision 757)
@@ -0,0 +1,33 @@
+/*    
+ *    Copyright (c) 2010 LongTail AdSolutions, Inc
+ *
+ *    This file is part of the Open Video Ads VAST framework.
+ *
+ *    The VAST framework is free software: you can redistribute it 
+ *    and/or modify it under the terms of the GNU General Public License 
+ *    as published by the Free Software Foundation, either version 3 of 
+ *    the License, or (at your option) any later version.
+ *
+ *    The VAST framework is distributed in the hope that it will be 
+ *    useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with the framework.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.openvideoads.vast.events {
+	import flash.events.Event;
+	
+	/**
+	 * @author Paul Schulz
+	 */
+	public class AdTagEvent extends Event {
+		public static const CALL_STARTED:String = "adcall-started";
+		public static const CALL_COMPLETE:String = "adcall-complete";
+		
+		public function AdTagEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false) {
+			super(type, bubbles, cancelable);
+		}
+	}
+}
Index: /trunk/ova.as3/src/org/openvideoads/vast/server/request/AdServerRequestProcessor.as
===================================================================
--- /trunk/ova.as3/src/org/openvideoads/vast/server/request/AdServerRequestProcessor.as	(revision 752)
+++ /trunk/ova.as3/src/org/openvideoads/vast/server/request/AdServerRequestProcessor.as	(revision 757)
@@ -212,4 +212,12 @@
 			takeNextStep();
 		}
+
+		public function onAdCallStarted():void { 
+			if(_templateLoadListener != null) _templateLoadListener.onAdCallStarted(); 
+		}
+		
+		public function onAdCallComplete():void { 
+			if(_templateLoadListener != null) _templateLoadListener.onAdCallComplete(); 
+		}		
 	}
 }
Index: /trunk/ova.as3/src/org/openvideoads/vast/server/response/TemplateLoadListener.as
===================================================================
--- /trunk/ova.as3/src/org/openvideoads/vast/server/response/TemplateLoadListener.as	(revision 752)
+++ /trunk/ova.as3/src/org/openvideoads/vast/server/response/TemplateLoadListener.as	(revision 757)
@@ -26,4 +26,6 @@
 	 */
 	public interface TemplateLoadListener {
+		function onAdCallStarted():void;
+		function onAdCallComplete():void;
 		function onTemplateLoaded(template:AdServerTemplate):void;
 		function onTemplateLoadError(event:Event):void;
Index: /trunk/ova.as3/src/org/openvideoads/vast/server/response/AdServerTemplate.as
===================================================================
--- /trunk/ova.as3/src/org/openvideoads/vast/server/response/AdServerTemplate.as	(revision 752)
+++ /trunk/ova.as3/src/org/openvideoads/vast/server/response/AdServerTemplate.as	(revision 757)
@@ -24,10 +24,10 @@
 	import org.openvideoads.base.Debuggable;
 	import org.openvideoads.events.TimedLoaderEvent;
+	import org.openvideoads.util.StringUtils;
 	import org.openvideoads.util.TimedURLLoader;
-	import org.openvideoads.util.StringUtils;
+	import org.openvideoads.vast.analytics.AnalyticsProcessor;
 	import org.openvideoads.vast.model.VideoAd;
 	import org.openvideoads.vast.server.config.AdServerConfig;
 	import org.openvideoads.vast.server.request.AdServerRequest;
-	import org.openvideoads.vast.analytics.AnalyticsProcessor;
 	
 	/**
@@ -186,4 +186,7 @@
 				var requestString:String = _activeRequest.formRequest();
 				if(StringUtils.isEmpty(requestString) == false) {
+					if(_listener != null) {
+						_listener.onAdCallStarted();
+					}
 					_xmlLoader = new TimedURLLoader(request.timeoutInSeconds * 1000);
 		   		    _xmlLoader.addEventListener(Event.COMPLETE, templateLoaded);
@@ -263,4 +266,5 @@
 		public function signalTemplateLoadError(uid:String, e:Event):void {
 			if(_listener != null) {
+				 _listener.onAdCallComplete();
 				 if(_listener.analyticsProcessor != null && _activeRequest != null) {
 				 	_listener.analyticsProcessor.fireAdCallTracking(AnalyticsProcessor.ERROR, _activeRequest, _activeRequest.isWrapped(), e.toString());
@@ -283,4 +287,5 @@
 		public function signalTemplateLoadTimeout(uid:String, e:Event):void {
 			if(_listener != null) {
+				 _listener.onAdCallComplete();
 				 if(_listener.analyticsProcessor != null && _activeRequest != null) {
 				 	_listener.analyticsProcessor.fireAdCallTracking(AnalyticsProcessor.TIMED_OUT, _activeRequest, _activeRequest.isWrapped());
Index: /trunk/ova.as3/src/org/openvideoads/vast/schedule/ads/AdSchedule.as
===================================================================
--- /trunk/ova.as3/src/org/openvideoads/vast/schedule/ads/AdSchedule.as	(revision 753)
+++ /trunk/ova.as3/src/org/openvideoads/vast/schedule/ads/AdSchedule.as	(revision 757)
@@ -296,4 +296,12 @@
 		}
 		
+		public function onAdCallStarted():void {
+			if(_templateLoadListener) _templateLoadListener.onAdCallStarted();
+		}
+		
+		public function onAdCallComplete():void {
+			if(_templateLoadListener) _templateLoadListener.onAdCallComplete();
+		}
+		
 		//-----------------------------------------------------------------------------------------------------------------
 				
Index: /trunk/ova.as3/src/org/openvideoads/vast/schedule/ads/AdSlotOnDemandLoadListener.as
===================================================================
--- /trunk/ova.as3/src/org/openvideoads/vast/schedule/ads/AdSlotOnDemandLoadListener.as	(revision 509)
+++ /trunk/ova.as3/src/org/openvideoads/vast/schedule/ads/AdSlotOnDemandLoadListener.as	(revision 757)
@@ -28,4 +28,6 @@
 		function onAdSlotLoadTimeout(event:AdSlotLoadEvent):void;
 		function onAdSlotLoadDeferred(event:AdSlotLoadEvent):void;
+		function onAdCallStarted():void;
+		function onAdCallComplete():void;
 	}
 }
Index: /trunk/ova.as3/src/org/openvideoads/vast/schedule/ads/AdSlot.as
===================================================================
--- /trunk/ova.as3/src/org/openvideoads/vast/schedule/ads/AdSlot.as	(revision 753)
+++ /trunk/ova.as3/src/org/openvideoads/vast/schedule/ads/AdSlot.as	(revision 757)
@@ -1260,15 +1260,24 @@
 			}
 			else doLog("On demand ad request complete - a NULL template has been returned for ad slot " + this.id + " at index " + this.index, Debuggable.DEBUG_VAST_TEMPLATE);
-			if(_onDemandLoadListener != null) _onDemandLoadListener.onAdSlotLoaded(new AdSlotLoadEvent(AdSlotLoadEvent.LOADED, this));
+			if(_onDemandLoadListener != null) {
+				_onDemandLoadListener.onAdCallComplete();
+				_onDemandLoadListener.onAdSlotLoaded(new AdSlotLoadEvent(AdSlotLoadEvent.LOADED, this));
+			}
 		}
 		
 		public function onTemplateLoadError(event:Event):void {
 			doLog("On demand ad request failed on ad slot " + this.id + " at index " + this.index + " - " + event.toString(), Debuggable.DEBUG_VAST_TEMPLATE);
-			if(_onDemandLoadListener != null) _onDemandLoadListener.onAdSlotLoadError(new AdSlotLoadEvent(AdSlotLoadEvent.LOAD_ERROR, this, event));
+			if(_onDemandLoadListener != null) {
+				_onDemandLoadListener.onAdCallComplete();
+				_onDemandLoadListener.onAdSlotLoadError(new AdSlotLoadEvent(AdSlotLoadEvent.LOAD_ERROR, this, event));
+			}
 		}
 
 		public function onTemplateLoadTimeout(event:Event):void {
 			doLog("On demand ad request timed out on ad slot " + this.id + " at index " + this.index, Debuggable.DEBUG_ALWAYS);
-			if(_onDemandLoadListener != null) _onDemandLoadListener.onAdSlotLoadError(new AdSlotLoadEvent(AdSlotLoadEvent.LOAD_TIMEOUT, this, event));
+			if(_onDemandLoadListener != null) {
+				_onDemandLoadListener.onAdCallComplete();
+				_onDemandLoadListener.onAdSlotLoadError(new AdSlotLoadEvent(AdSlotLoadEvent.LOAD_TIMEOUT, this, event));
+			}
 		}
 
@@ -1276,4 +1285,12 @@
 			doLog("On demand ad request deferred on ad slot " + this.id + " at index " + this.index, Debuggable.DEBUG_ALWAYS);
 			if(_onDemandLoadListener != null) _onDemandLoadListener.onAdSlotLoadDeferred(new AdSlotLoadEvent(AdSlotLoadEvent.LOAD_DEFERRED, this, event));
+		}
+		
+		public function onAdCallStarted():void {
+			if(_onDemandLoadListener != null) _onDemandLoadListener.onAdCallStarted();
+		}
+		
+		public function onAdCallComplete():void {
+			if(_onDemandLoadListener != null) _onDemandLoadListener.onAdCallComplete();
 		}
 
Index: /trunk/ova.jwplayer.5x/src/as3/org/openvideoads/plugin/jwplayer/streamer/playlist/JWPlaylistItem.as
===================================================================
--- /trunk/ova.jwplayer.5x/src/as3/org/openvideoads/plugin/jwplayer/streamer/playlist/JWPlaylistItem.as	(revision 672)
+++ /trunk/ova.jwplayer.5x/src/as3/org/openvideoads/plugin/jwplayer/streamer/playlist/JWPlaylistItem.as	(revision 757)
@@ -12,4 +12,5 @@
 package org.openvideoads.plugin.jwplayer.streamer.playlist {
 	import flash.external.ExternalInterface;
+import flash.utils.describeType;
 	
 	import com.longtailvideo.jwplayer.model.PlaylistItem;
@@ -135,4 +136,11 @@
 			copy.streamer = original.streamer;
 			copy.type = original.type;
+			
+			// Now add in the custom fields created through the Dynamic underlying Clip class
+			for(var id:String in original) {
+				doLog("Adding custom clip property " + id, Debuggable.DEBUG_PLAYLIST);
+				copy[id] = original[id];
+			}
+
 			return copy;
 		}
Index: /trunk/ova.jwplayer.5x/src/as3/org/openvideoads/plugin/jwplayer/streamer/OpenAdStreamer.as
===================================================================
--- /trunk/ova.jwplayer.5x/src/as3/org/openvideoads/plugin/jwplayer/streamer/OpenAdStreamer.as	(revision 756)
+++ /trunk/ova.jwplayer.5x/src/as3/org/openvideoads/plugin/jwplayer/streamer/OpenAdStreamer.as	(revision 757)
@@ -34,5 +34,4 @@
 	import org.openvideoads.util.StringUtils;
 	import org.openvideoads.util.Timestamp;
-	import org.openvideoads.util.BrowserUtils;
 	import org.openvideoads.vast.VASTController;
 	import org.openvideoads.vast.config.Config;
@@ -43,4 +42,5 @@
 	import org.openvideoads.vast.events.AdNoticeDisplayEvent;
 	import org.openvideoads.vast.events.AdSlotLoadEvent;
+	import org.openvideoads.vast.events.AdTagEvent;
 	import org.openvideoads.vast.events.CompanionAdDisplayEvent;
 	import org.openvideoads.vast.events.LinearAdDisplayEvent;
@@ -52,6 +52,6 @@
 	import org.openvideoads.vast.schedule.StreamSequence;
 	import org.openvideoads.vast.schedule.ads.AdSlot;
+	import org.openvideoads.vast.server.events.TemplateEvent;
 	import org.openvideoads.vast.tracking.TimeEvent;
-	import org.openvideoads.vast.server.events.TemplateEvent;
 	import org.openvideoads.vpaid.IVPAID;
 	    
@@ -97,5 +97,5 @@
 		protected static const OVA_INDEX_AT_STARTUP:int = -2;
 	    
-	    public static const OVA_VERSION:String = "v1.0.1 RC2 (build 5)"; 
+	    public static const OVA_VERSION:String = "v1.0.1 RC2 (build 6)"; 
 
 	    public static const _buildVersion:String = "OVA for JW 5.x - " + OVA_VERSION;
@@ -1016,4 +1016,8 @@
 			_player.addEventListener(ViewEvent.JWPLAYER_VIEW_FULLSCREEN, onFullscreenEvent);
             
+            // Setup the critical listeners for the ad tag call process
+            _vastController.addEventListener(AdTagEvent.CALL_STARTED, onAdCallStarted);
+            _vastController.addEventListener(AdTagEvent.CALL_COMPLETE, onAdCallComplete);
+            
             // Setup the critical listeners for the template loading process - used by the ad slot "preloaded model"
             _vastController.addEventListener(TemplateEvent.LOADED, onTemplateLoaded);
@@ -1061,4 +1065,5 @@
             
             // Setup VPAID event handlers
+            _vastController.addEventListener(VPAIDAdDisplayEvent.LOADING, onVPAIDLoading);
             _vastController.addEventListener(VPAIDAdDisplayEvent.LINEAR_START, onVPAIDLinearAdStart); 
             _vastController.addEventListener(VPAIDAdDisplayEvent.LINEAR_COMPLETE, onVPAIDLinearAdComplete); 
@@ -1073,5 +1078,5 @@
             _vastController.addEventListener(VPAIDAdDisplayEvent.NON_LINEAR_EXPANDED_CHANGE, onVPAIDNonLinearAdExpandedChange); 
             _vastController.addEventListener(VPAIDAdDisplayEvent.NON_LINEAR_TIME_CHANGE, onVPAIDNonLinearAdTimeChange); 
-            _vastController.addEventListener(VPAIDAdDisplayEvent.LINEAR_LOADED, onVPAIDUnusedEvent);            
+            _vastController.addEventListener(VPAIDAdDisplayEvent.LINEAR_LOADED, onVPAIDLinearLoaded);            
             _vastController.addEventListener(VPAIDAdDisplayEvent.NON_LINEAR_LOADED, onVPAIDUnusedEvent);
             _vastController.addEventListener(VPAIDAdDisplayEvent.LINEAR_IMPRESSION, onVPAIDUnusedEvent);
@@ -1318,8 +1323,9 @@
 
         protected function showOVABusy():void {
-			_player.controls.display.forceState(PlayerState.BUFFERING);
+//			_player.controls.display.forceState(PlayerState.BUFFERING);
         }  
         
         protected function showOVAReady():void {
+//			_player.controls.display.forceState(PlayerState.PLAYING);
         }
 
@@ -1334,5 +1340,4 @@
 		
 		protected function lockPlayer(message:String, process:Function):void {
-			showOVABusy();
 			if(ovaHasLock() && _player.locked) {
 				doLog(message + " - player already locked on clip @ index " + _player.playlist.currentIndex + ". Lock counter is " + _lockCounter, Debuggable.DEBUG_CONFIG);
@@ -1352,5 +1357,4 @@
 		
 		protected function unlockPlayer():void {
-//			_player.controls.display.forceState(PlayerState.BUFFERING);
 			if(ovaHasLock() && _player.locked) {
 				if(_player.unlock(this)) {
@@ -1580,4 +1584,14 @@
          **/ 
 		
+		protected function onVPAIDLoading(event:VPAIDAdDisplayEvent):void {
+        	doLog("PLUGIN NOTIFICATION: VPAID ad loading", Debuggable.DEBUG_VPAID);
+			showOVABusy();
+		}
+
+		protected function onVPAIDLinearLoaded(event:VPAIDAdDisplayEvent):void {
+        	doLog("PLUGIN NOTIFICATION: VPAID ad loaded", Debuggable.DEBUG_VPAID);
+			showOVAReady();
+		}
+		
         protected function onVPAIDLinearAdStart(event:VPAIDAdDisplayEvent):void {
         	doLog("PLUGIN NOTIFICATION: VPAID Linear Ad started", Debuggable.DEBUG_VPAID);
@@ -1607,4 +1621,5 @@
 
 		protected function onVPAIDLinearAdError(error:VPAIDAdDisplayEvent):void {
+			showOVAReady();
         	if(activeStreamIsLinearAd()) {
 	        	doLog((error != null) 
@@ -1675,4 +1690,5 @@
 		
 		protected function onVPAIDNonLinearAdError(event:VPAIDAdDisplayEvent):void {
+			showOVAReady();
 			unlockControlBar();
 			if(playerPaused()) {
@@ -1723,4 +1739,19 @@
 		}          
 
+        /**
+         * AD CALL HANDLERS
+         * 
+         **/ 
+         
+        protected function onAdCallStarted(event:AdTagEvent):void {
+        	doLog("PLUGIN NOTIFICATION: Ad Tag call started", Debuggable.DEBUG_VAST_TEMPLATE);
+	       	showOVABusy();
+        }
+        
+        protected function onAdCallComplete(event:AdTagEvent):void {
+        	doLog("PLUGIN NOTIFICATION: Ad Tag call complete", Debuggable.DEBUG_VAST_TEMPLATE);
+        	showOVAReady();
+        }
+        
         /**
          * STREAM META DATA HANDLER
Index: /trunk/ova.jwplayer.5x/README.txt
===================================================================
--- /trunk/ova.jwplayer.5x/README.txt	(revision 754)
+++ /trunk/ova.jwplayer.5x/README.txt	(revision 757)
@@ -225,2 +225,3 @@
 * #374 - added Security.allowDomain("*") to OVA for JW SWF to stop issues with API calls
 * Initial framework restructure to start removing redundant server classes
+* #376 - Fixed issue where Custom Properties on a clip were being dropped by OVA in JWPlaylistItem
