diff --git a/plugins/org.eclipse.jst.j2ee/j2eeplugin/org/eclipse/jst/j2ee/internal/deployables/J2EEFlexProjDeployable.java b/plugins/org.eclipse.jst.j2ee/j2eeplugin/org/eclipse/jst/j2ee/internal/deployables/J2EEFlexProjDeployable.java
index 1e8ce00..36b1a1b 100644
--- a/plugins/org.eclipse.jst.j2ee/j2eeplugin/org/eclipse/jst/j2ee/internal/deployables/J2EEFlexProjDeployable.java
+++ b/plugins/org.eclipse.jst.j2ee/j2eeplugin/org/eclipse/jst/j2ee/internal/deployables/J2EEFlexProjDeployable.java
@@ -237,38 +237,59 @@
 		return modHelper == null ? null : modHelper.getJNDIName(jar, jar.getEnterpriseBeanNamed(ejbName));
 	}
 
+    /**
+     * This method will handle a number of J2EE related scenarios.  If this is an ear and a child module is passed in,
+     * the URI for that child module will be returned.  If no child module was passed, the URI of the EAR is returned.
+     * If this is a child component and the module passed in is the EAR, we grab the module uri for this compared to that
+     * EAR.  If no ear module is passed in we look for one and use it and return URI relative to found EAR.  If no EAR's 
+     * are found the URI is returned in a default manner.
+     * 
+     * @return URI string
+     */
     public String getURI(IModule module) {
-    	IProject[] earProjects = J2EEProjectUtilities.getReferencingEARProjects(component.getProject());
-    	List uriList = new ArrayList();
-    	String aURI = null;
+    	// If the component is an ear and the module passed in is a child module
+    	if (component!=null && module!=null && J2EEProjectUtilities.isEARProject(component.getProject()))
+ 			return getContainedURI(module);
+
     	IVirtualComponent ear = null;
-    	if (earProjects.length>0) {
-	    	for (int i=0; i<earProjects.length; i++) {
-	    		ear = ComponentCore.createComponent(earProjects[i]);
-	    		if (ear != null && component != null) {
-		    		EARArtifactEdit earEdit = null;
-					try {
-						earEdit = EARArtifactEdit.getEARArtifactEditForRead(ear);
-						if (earEdit != null) {
-							aURI = earEdit.getModuleURI(component);
-							if (aURI != null)
-								uriList.add(aURI);
-						}
-					} catch (Exception e) {
-						e.printStackTrace();
-					} finally {
-						if (earEdit != null)
-							earEdit.dispose();
-					}
-	    		}
-	    	}
-    	} else if (component!=null && J2EEProjectUtilities.isEARProject(component.getProject())) {
+    	String aURI = null;
+    	// If the component is a child module and the module passed in is the ear
+    	if (module != null && J2EEProjectUtilities.isEARProject(module.getProject()))
+    		ear = ComponentCore.createComponent(module.getProject());
+    	// else if the component is a child module and the module passed in is null or bogus, search for first ear
+    	else {
+    		if (component != null) {
+	    		IProject[] earProjects = J2EEProjectUtilities.getReferencingEARProjects(component.getProject());
+	        	if (earProjects.length>0)
+	        		ear = ComponentCore.createComponent(earProjects[0]);
+    		}
+    	}
+    	// We have a valid ear and the component is a valid child
+    	if (ear != null && component != null) {
+    		EARArtifactEdit earEdit = null;
+			try {
+				earEdit = EARArtifactEdit.getEARArtifactEditForRead(ear);
+				if (earEdit != null)
+					aURI = earEdit.getModuleURI(component);
+			} catch (Exception e) {
+				e.printStackTrace();
+			} finally {
+				if (earEdit != null)
+					earEdit.dispose();
+			}
+    	} 
+    	// We have an ear component and no child module
+    	else if (component!=null && J2EEProjectUtilities.isEARProject(component.getProject())) {
 			aURI = component.getDeployedName()+IJ2EEModuleConstants.EAR_EXT;
-    	} else if (component!=null && J2EEProjectUtilities.isDynamicWebProject(component.getProject())) {
+    	} 
+    	// We have child components but could not find valid ears
+    	else if (component!=null && J2EEProjectUtilities.isDynamicWebProject(component.getProject())) {
     		aURI = component.getDeployedName()+IJ2EEModuleConstants.WAR_EXT;
-    	} else if (component!=null && (J2EEProjectUtilities.isEJBProject(component.getProject()) || J2EEProjectUtilities.isApplicationClientProject(component.getProject()))) {
+    	} 
+    	else if (component!=null && (J2EEProjectUtilities.isEJBProject(component.getProject()) || J2EEProjectUtilities.isApplicationClientProject(component.getProject()))) {
     		aURI = component.getDeployedName()+IJ2EEModuleConstants.JAR_EXT;
-    	} else if (component!=null && J2EEProjectUtilities.isJCAProject(component.getProject())) {
+    	} 
+    	else if (component!=null && J2EEProjectUtilities.isJCAProject(component.getProject())) {
     		aURI = component.getDeployedName()+IJ2EEModuleConstants.RAR_EXT;
     	}
     	
@@ -277,6 +298,27 @@
     	return aURI;
 	}
     
+    private String getContainedURI(IModule module) {
+    	IVirtualComponent comp = ComponentCore.createComponent(module.getProject());
+    	String aURI = null;
+    	if (comp!=null && component!=null && J2EEProjectUtilities.isEARProject(component.getProject())) {
+			EARArtifactEdit earEdit = null;
+			try {
+				earEdit = EARArtifactEdit.getEARArtifactEditForRead(component);
+				if (earEdit != null)
+					aURI = earEdit.getModuleURI(comp);
+			} catch (Exception e) {
+				e.printStackTrace();
+			} finally {
+				if (earEdit != null)
+					earEdit.dispose();
+			}
+    	}
+    	if (aURI !=null && aURI.length()>1 && aURI.startsWith("/")) //$NON-NLS-1$
+    		aURI = aURI.substring(1);
+    	return aURI;
+	}
+    
     public String getContextRoot() {
 		Properties props = component.getMetaProperties();
 		if(props.containsKey(J2EEConstants.CONTEXTROOT))
