 			if (_activeListenerByView[view])
 				return;
 
-			const viewFQCN:String = getQualifiedClassName(view);
+			const fqcn:String = getQualifiedClassName(view);
+
+			// todo: cache this by fqcn + application domain
+			const type:Class = view['constructor'];
+			const domain:ApplicationDomain = view.loaderInfo.applicationDomain;
+			const info:IViewClassInfo = new ViewClassInfo(type, fqcn, domain);
 
 			// process the view
 			// WARNING: this is totally flawed - we might traverse a different set of nodes
-			var confirmedHandlers:Vector.<IViewHandler> = _confirmedHandlersByFQCN[viewFQCN];
+			var confirmedHandlers:Vector.<IViewHandler> = _confirmedHandlersByFQCN[fqcn];
 			var response:uint;
 			if (confirmedHandlers)
 			{
-				response = processKnownView(view, viewFQCN, confirmedHandlers);
+				response = processKnownView(view, info, confirmedHandlers);
 			}
 			else
 			{
-				_confirmedHandlersByFQCN[viewFQCN] = confirmedHandlers = new Vector.<IViewHandler>;
-				response = processFreshView(view, viewFQCN, confirmedHandlers);
+				_confirmedHandlersByFQCN[fqcn] = confirmedHandlers = new Vector.<IViewHandler>;
+				response = processFreshView(view, info, confirmedHandlers);
 			}
 
 			// report any matches


		private function processFreshView(
			view:DisplayObject,
			viewFQCN:String,
			confirmedHandlers:Vector.<IViewHandler>):uint
		{
			var handlerResponse:uint = 0;


		private function processKnownView(
			view:DisplayObject,
			info:IViewClassInfo,
			confirmedHandlers:Vector.<IViewHandler>):uint
		{
			var handlerResponse:uint = 0;
