diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java
index 4182581..a292fa8 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ResourceTreeNode.java
@@ -49,6 +49,7 @@
 
 	private final Set moduleResources = Collections.synchronizedSet(new HashSet());	
 	private final Map children = Collections.synchronizedMap(new HashMap());
+	private final Map transientChildResources = Collections.synchronizedMap(new HashMap());
 	private static final ComponentResource[] NO_MODULE_RESOURCES = new ComponentResource[]{};
 	private IPathProvider pathProvider;
 //	private ResourceTreeNode parent;
@@ -206,11 +207,16 @@
 						if(newResource == null) {
 							// flesh out the tree
 							IResource eclipseRes = eclipseContainer.findMember(aPath);
-							if ((toCreateResourceAlways) || (eclipseRes != null) && (eclipseRes.getType() == IResource.FOLDER)) {
+							if ((toCreateResourceAlways) || (eclipseRes != null)) {
+								newResource = (ComponentResource)transientChildResources.get(aPath);
+								if (newResource == null) {
 								newResource = ComponentcorePackage.eINSTANCE.getComponentcoreFactory().createComponentResource();
-								newResource.setComponent(moduleResource.getComponent());		
+								// Not setting the parent on this transient child resource
+								// newResource.setComponent(moduleResource.getComponent());
 								newResource.setRuntimePath(runtimeURI);
 								newResource.setSourcePath(srcPath);
+								transientChildResources.put(aPath,newResource);
+								}
 								resultSet.add(newResource);
 							}
 						}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualArchiveComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualArchiveComponent.java
index 258bbca..a2eaa5f 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualArchiveComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualArchiveComponent.java
@@ -14,8 +14,10 @@
 import java.io.File;
 import java.util.Properties;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IPath;
@@ -108,13 +110,17 @@
 	}
 
 	public IPath getWorkspaceRelativePath() {
-		if (getProject() != null)
-			return getProject().getFile(archivePath).getFullPath();
+		IFile aFile = ResourcesPlugin.getWorkspace().getRoot().getFile(archivePath);
+		if (aFile.exists())
+			aFile.getFullPath();
 		return archivePath;
 	}
 
 	public IPath getProjectRelativePath() {
-		return archivePath;
+		IFile aFile = ResourcesPlugin.getWorkspace().getRoot().getFile(getWorkspaceRelativePath());
+		if (aFile.exists())
+			return aFile.getProjectRelativePath();
+		return null;
 	}
 
 	public IProject getProject() {
@@ -193,6 +199,9 @@
 	public void setMetaProperties(Properties properties) {
 
 	}
+	public IFile getUnderlyingWorkbenchFile() {
+		return ResourcesPlugin.getWorkspace().getRoot().getFile(getWorkspaceRelativePath());
+	}
 
 	public File getUnderlyingDiskFile() {
 		String osPath = "";
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualContainer.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualContainer.java
index 09b6f66..3769706 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualContainer.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualContainer.java
@@ -21,6 +21,7 @@
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -83,18 +84,20 @@
 			for (int i=0; i<resources.length; i++) {
 				// return the resources corresponding to the root, not any of the children if its a folder
 				if (resources[i].getRuntimePath().equals(getRuntimePath().append(aPath))) {
-					IResource platformResource = StructureEdit.getEclipseResource(resources[i]);
-				if (platformResource != null) {
-					switch (platformResource.getType()) {
-						case IResource.FOLDER :
-						case IResource.PROJECT :
+					IResource platformResource = getProject().findMember(resources[i].getSourcePath()); 
+					if(platformResource == null)
+						platformResource = ResourcesPlugin.getWorkspace().getRoot().findMember(resources[i].getSourcePath()); 
+					if (platformResource != null) {
+						switch (platformResource.getType()) {
+						case IResource.FOLDER:
+						case IResource.PROJECT:
 							return new VirtualFolder(getProject(), getRuntimePath().append(aPath));
-						case IResource.FILE :
+						case IResource.FILE:
 							return new VirtualFile(getProject(), getRuntimePath().append(aPath));
+						}
 					}
 				}
 			}
-			}
 		} finally {
 			if (structureEdit != null)
 				structureEdit.dispose();
