diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/ModuleCoreSupportDelegate.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/ModuleCoreSupportDelegate.java
index 1339508..02ec475 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/ModuleCoreSupportDelegate.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/ModuleCoreSupportDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2012 IBM Corporation and others.
+ * Copyright (c) 2007, 2013 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
 import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
 
 /**
@@ -149,6 +150,10 @@
 								}
 							}
 						}
+						else {
+							// check assembled projects
+							return resolveInReferenced(project, referenceRuntimePath);
+						}
 					}
 				}
 			}
@@ -162,4 +167,26 @@
 		}
 		return null;
 	}
+	private static IPath resolveInReferenced(IProject project, IPath runtimeReference) {
+		IVirtualReference[] references = ComponentCore.createComponent(project).getReferences();
+		if (references != null) {
+			for (int i = 0; i < references.length; i++) {
+				IVirtualComponent referencedComponent = references[i].getReferencedComponent();
+				if (referencedComponent == null)
+					continue;
+				IVirtualComponent component = referencedComponent.getComponent();
+				if (component == null)
+					continue;
+				IVirtualFolder rootFolder = component.getRootFolder();
+				if (rootFolder == null)
+					continue;
+				// overlay?
+				IVirtualResource member = rootFolder.findMember(runtimeReference);
+				if (member != null) {
+					return member.getWorkspaceRelativePath();
+				}
+			}
+		}
+		return null;
+	}
 }
diff --git a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/project/ModuleCoreSupportDelegate.java b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/project/ModuleCoreSupportDelegate.java
index a11f012..e96469a 100644
--- a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/project/ModuleCoreSupportDelegate.java
+++ b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/project/ModuleCoreSupportDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2012 IBM Corporation and others.
+ * Copyright (c) 2007, 2013 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
 import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
 
 /**
@@ -149,6 +150,10 @@
 								}
 							}
 						}
+						else {
+							// check assembled projects
+							return resolveInReferenced(project, referenceRuntimePath);
+						}
 					}
 				}
 			}
@@ -162,4 +167,27 @@
 		}
 		return null;
 	}
+
+	private static IPath resolveInReferenced(IProject project, IPath runtimeReference) {
+		IVirtualReference[] references = ComponentCore.createComponent(project).getReferences();
+		if (references != null) {
+			for (int i = 0; i < references.length; i++) {
+				IVirtualComponent referencedComponent = references[i].getReferencedComponent();
+				if (referencedComponent == null)
+					continue;
+				IVirtualComponent component = referencedComponent.getComponent();
+				if (component == null)
+					continue;
+				IVirtualFolder rootFolder = component.getRootFolder();
+				if (rootFolder == null)
+					continue;
+				// overlay?
+				IVirtualResource member = rootFolder.findMember(runtimeReference);
+				if (member != null) {
+					return member.getWorkspaceRelativePath();
+				}
+			}
+		}
+		return null;
+	}
 }
