diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/PublishUtil.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/PublishUtil.java
index fd2cc45..90543e4 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/PublishUtil.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/PublishUtil.java
@@ -11,6 +11,8 @@
 package org.eclipse.jst.server.core;
 
 import java.io.*;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.*;
@@ -47,7 +49,7 @@
 	private PublishUtil() {
 		super();
 	}
-	
+
 	/**
 	 * Copy a file from a to b. Closes the input stream after use.
 	 *
@@ -276,15 +278,48 @@
 		}
 	}
 
-	/*public static void createJar(IModuleResource[] resource, IPath jarPath) throws Exception {
-		ZipFile zip = new ZipFile(jarPath.toFile());
-		BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(jarPath.toFile()));
-		ZipOutputStream zout = new ZipOutputStream(bout);
-		
-		//ZipEntry ze = new ZipEntry();
-		//zout.putNextEntry(e);
-	}*/
+	public static void createZipFile(IModuleResource[] resources, IPath zipPath) throws CoreException {
+		try {
+			BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(zipPath.toFile()));
+			ZipOutputStream zout = new ZipOutputStream(bout);
+			
+			addZipEntries(zout, resources);
+			
+			zout.close();
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error zipping", e);
+			throw new CoreException(new Status(IStatus.ERROR, JavaServerPlugin.PLUGIN_ID, 0, Messages.errorCopyingFile, e));
+		}
+	}
 
+	private static void addZipEntries(ZipOutputStream zout, IModuleResource[] resources) throws Exception {
+		int size = resources.length;
+		for (int i = 0; i < size; i++) {
+			if (resources[i] instanceof IModuleFolder) {
+				IModuleFolder mf = (IModuleFolder) resources[i];
+				IModuleResource[] res = mf.members();
+				addZipEntries(zout, res);
+				return;
+			}
+			
+			IModuleFile mf = (IModuleFile) resources[i];
+			IPath path = mf.getModuleRelativePath().append(mf.getName());
+			
+			ZipEntry ze = new ZipEntry(path.toPortableString());
+			zout.putNextEntry(ze);
+			
+			IFile file = (IFile) mf.getAdapter(IFile.class);
+			InputStream in = file.getContents();
+			int n = 0;
+			while (n > -1) {
+				n = in.read(buf);
+				if (n > 0)
+					zout.write(buf, 0, n);
+			}
+			
+			zout.closeEntry();
+		}
+	}
 	/**
 	 * Expand a zip file to a given directory.
 	 *
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/J2EEUtil.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/J2EEUtil.java
index 9cc9b80..25d7de0 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/J2EEUtil.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/J2EEUtil.java
@@ -16,6 +16,7 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jst.server.core.IEnterpriseApplication;
 import org.eclipse.jst.server.core.IJ2EEModule;
+import org.eclipse.jst.server.core.IWebModule;
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.ServerUtil;
 /**
@@ -23,10 +24,12 @@
  */
 public class J2EEUtil {
 	private static final String EAR_MODULE = "jst.ear";
+	private static final String WEB_MODULE = "jst.web";
+
 	/**
 	 * Returns the enterprise applications that the module is contained within.
 	 * 
-	 * @param module
+	 * @param module a J2EE module
 	 * @param monitor a progress monitor, or <code>null</code> if progress
 	 *    reporting and cancellation are not desired
 	 * @return a possibly empty array of enterprise applications
@@ -51,8 +54,77 @@
 				}
 			}
 		}
+		
 		IModule[] ears = new IModule[list.size()];
 		list.toArray(ears);
 		return ears;
 	}
+
+	/**
+	 * Returns the enterprise applications that the module is contained within.
+	 * 
+	 * @param module a J2EE module or utility module
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
+	 * @return a possibly empty array of enterprise applications
+	 */
+	public static IModule[] getEnterpriseApplications(IModule module, IProgressMonitor monitor) {
+		List list = new ArrayList();
+		IModule[] modules = ServerUtil.getModules(EAR_MODULE);
+		if (modules != null) {
+			int size = modules.length;
+			for (int i = 0; i < size; i++) {
+				IModule module2 = modules[i];
+				IEnterpriseApplication ear = (IEnterpriseApplication) module2.loadAdapter(IEnterpriseApplication.class, monitor);
+				if (ear != null) {
+					IModule[] modules2 = ear.getModules();
+					if (modules2 != null) {
+						int size2 = modules2.length;
+						for (int j = 0; j < size2; j++) {
+							if (module.equals(modules2[j]))
+								list.add(module2);
+						}
+					}
+				}
+			}
+		}
+		
+		IModule[] ears = new IModule[list.size()];
+		list.toArray(ears);
+		return ears;
+	}
+
+	/**
+	 * Returns the web modules that the utility module is contained within.
+	 * 
+	 * @param module a utility module
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
+	 * @return a possibly empty array of web modules
+	 */
+	public static IModule[] getWebModules(IModule module, IProgressMonitor monitor) {
+		List list = new ArrayList();
+		IModule[] modules = ServerUtil.getModules(WEB_MODULE);
+		if (modules != null) {
+			int size = modules.length;
+			for (int i = 0; i < size; i++) {
+				IModule module2 = modules[i];
+				IWebModule web = (IWebModule) module2.loadAdapter(IWebModule.class, monitor);
+				if (web != null) {
+					IModule[] modules2 = web.getModules();
+					if (modules2 != null) {
+						int size2 = modules2.length;
+						for (int j = 0; j < size2; j++) {
+							if (module.equals(modules2[j]))
+								list.add(module2);
+						}
+					}
+				}
+			}
+		}
+		
+		IModule[] webs = new IModule[list.size()];
+		list.toArray(webs);
+		return webs;
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.java
index c1bbba3..d6c3088 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.java
@@ -24,11 +24,11 @@
 
 public class PublishOperation2 extends PublishOperation {
 	protected TomcatServerBehaviour server;
-	protected IModule module;
+	protected IModule[] module;
 	protected int kind;
 	protected int deltaKind;
 
-	public PublishOperation2(TomcatServerBehaviour server, int kind, IModule module, int deltaKind) {
+	public PublishOperation2(TomcatServerBehaviour server, int kind, IModule[] module, int deltaKind) {
 		super("Publish to server", "Publish Web module to Tomcat server");
 		this.server = server;
 		this.module = module;
@@ -45,25 +45,62 @@
 	}
 
 	public void execute(IProgressMonitor monitor, IAdaptable info) throws CoreException {
+		if (module.length == 1) { // web module
+			publishDir(module[0], monitor);
+		} else { // utility module
+			publishJar(monitor);
+		}
+	}
+
+	private void publishDir(IModule module2, IProgressMonitor monitor) throws CoreException {
 		IPath path = server.getTempDirectory().append("webapps");
-		path = path.append(module.getName());
+		path = path.append(module2.getName());
 		
 		if (kind == IServer.PUBLISH_CLEAN) { // clean and republish from scratch
 			PublishUtil.deleteDirectory(path.toFile(), monitor);
 		}
 		
 		if (kind == IServer.PUBLISH_CLEAN || kind == IServer.PUBLISH_FULL) {
-			ProjectModule pm = (ProjectModule) module.loadAdapter(ProjectModule.class, monitor);
+			ProjectModule pm = (ProjectModule) module2.loadAdapter(ProjectModule.class, monitor);
 			IModuleResource[] mr = pm.members();
 			PublishUtil.copy(mr, path);
 			return;
 		}
 		
-		IModuleResourceDelta[] delta = server.getPublishedResourceDelta(new IModule[] { module });
+		IModuleResourceDelta[] delta = server.getPublishedResourceDelta(module);
 		
 		int size = delta.length;
 		for (int i = 0; i < size; i++) {
 			PublishUtil.handleDelta(kind, path, delta[i]);
 		}
 	}
+
+	private void publishJar(IProgressMonitor monitor) throws CoreException {
+		IModule module2 = null;
+		IPath path = server.getTempDirectory().append("webapps");
+		path = path.append(module[0].getName()).append("WEB-INF").append("lib").append(module[1].getName() + ".jar");
+		module2 = module[1];
+		
+		if (kind == IServer.PUBLISH_CLEAN) { // clean and republish from scratch
+			path.toFile().delete();
+		}
+		
+		ProjectModule pm = (ProjectModule) module2.loadAdapter(ProjectModule.class, monitor);
+		IModuleResource[] mr = pm.members();
+		PublishUtil.createZipFile(mr, path);
+		
+		/*if (kind == IServer.PUBLISH_CLEAN || kind == IServer.PUBLISH_FULL) {
+			ProjectModule pm = (ProjectModule) module2.loadAdapter(ProjectModule.class, monitor);
+			IModuleResource[] mr = pm.members();
+			PublishUtil.copy(mr, path);
+			return;
+		}*/
+		
+		/*IModuleResourceDelta[] delta = server.getPublishedResourceDelta(module);
+		
+		int size = delta.length;
+		for (int i = 0; i < size; i++) {
+			PublishUtil.handleDelta(kind, path, delta[i]);
+		}*/
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishTask.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishTask.java
index e08477f..4b3d556 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishTask.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishTask.java
@@ -30,9 +30,8 @@
 		int size = modules.size();
 		for (int i = 0; i < size; i++) {
 			IModule[] module = (IModule[]) modules.get(i);
-			IModule m = module[module.length - 1];
 			Integer in = (Integer) kindList.get(i);
-			tasks.add(new PublishOperation2(tomcatServer, kind, m, in.intValue()));
+			tasks.add(new PublishOperation2(tomcatServer, kind, module, in.intValue()));
 		}
 		
 		return (PublishOperation[]) tasks.toArray(new PublishOperation[tasks.size()]);
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServer.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServer.java
index 352bad0..0cee0da 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServer.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServer.java
@@ -16,6 +16,7 @@
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.runtime.*;
 import org.eclipse.jst.server.core.IWebModule;
+import org.eclipse.jst.server.core.internal.J2EEUtil;
 import org.eclipse.osgi.util.NLS;
 
 import org.eclipse.wst.server.core.*;
@@ -210,12 +211,13 @@
 		if (module == null)
 			return null;
 		
-		if (module.length == 1) {
+		if (module.length == 1 && "jst.web".equals(module[0].getModuleType().getId())) {
 			IWebModule webModule = (IWebModule) module[0].loadAdapter(IWebModule.class, null);
 			if (webModule != null) {
-				/*IModule[] modules = webModule.getModules();
-				if (modules != null)
-					System.out.println(modules.length);*/
+				IModule[] modules = webModule.getModules();
+				//if (modules != null)
+				//	System.out.println(modules.length);
+				return modules;
 			}
 		}
 		return new IModule[0];
@@ -225,13 +227,14 @@
 	 * Returns the root module(s) of this module.
 	 */
 	public IModule[] getRootModules(IModule module) throws CoreException {
-		if (module.loadAdapter(IWebModule.class, null) != null) {
+		if ("jst.web".equals(module.getModuleType().getId())) {
 			IStatus status = canModifyModules(new IModule[] { module }, null);
 			if (status == null || !status.isOK())
 				throw new CoreException(status);
 			return new IModule[] { module };
 		}
-		return null;
+		
+		return J2EEUtil.getWebModules(module, null);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerBehaviour.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerBehaviour.java
index e2f2a39..16e96a6 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerBehaviour.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerBehaviour.java
@@ -25,7 +25,6 @@
 import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
 import org.eclipse.jdt.launching.IVMInstall;
 import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jst.server.core.IWebModule;
 import org.eclipse.jst.server.core.PublishUtil;
 import org.eclipse.osgi.util.NLS;
 
@@ -243,8 +242,30 @@
 			// ignore
 		}
 		
-		IModule module = moduleTree[0];
+		if (moduleTree.length == 1) // web module
+			publishDir(deltaKind, p, moduleTree[0], monitor);
+		else // utility jar
+			publishJar(deltaKind, p, moduleTree, monitor);
 		
+		setModulePublishState(moduleTree, IServer.PUBLISH_STATE_NONE);
+		
+		try {
+			p.store(new FileOutputStream(path.toFile()), "Tomcat publish data");
+		} catch (Exception e) {
+			// ignore
+		}
+	}
+
+	/**
+	 * Publish a web module.
+	 * 
+	 * @param deltaKind
+	 * @param p
+	 * @param module
+	 * @param monitor
+	 * @throws CoreException
+	 */
+	private void publishDir(int deltaKind, Properties p, IModule module, IProgressMonitor monitor) throws CoreException {
 		if (deltaKind == REMOVED) {
 			try {
 				String publishPath = (String) p.get(module.getId());
@@ -253,21 +274,41 @@
 				throw new CoreException(new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, "Could not remove module", e));
 			}
 		} else {
-			IWebModule webModule = (IWebModule) module.loadAdapter(IWebModule.class, null);
-			IPath to = getServer().getRuntime().getLocation().append("webapps").append(webModule.getContextRoot());
+			IPath to = getServer().getRuntime().getLocation().append("webapps").append(module.getName());
 			
 			ProjectModule pm = (ProjectModule) module.loadAdapter(ProjectModule.class, monitor);
 			IModuleResource[] mr = pm.members();
 			PublishUtil.smartCopy(mr, to, monitor);
 			p.put(module.getId(), to.toOSString());
-			
-			setModulePublishState(moduleTree, IServer.PUBLISH_STATE_NONE);
 		}
+	}
+
+	/**
+	 * Publish a jar file.
+	 * 
+	 * @param deltaKind
+	 * @param p
+	 * @param module
+	 * @param monitor
+	 * @throws CoreException
+	 */
+	private void publishJar(int deltaKind, Properties p, IModule[] module, IProgressMonitor monitor) throws CoreException {
 		
-		try {
-			p.store(new FileOutputStream(path.toFile()), "Tomcat publish data");
-		} catch (Exception e) {
-			// ignore
+		if (deltaKind == REMOVED) {
+			try {
+				String publishPath = (String) p.get(module[1].getId());
+				new File(publishPath).delete();
+			} catch (Exception e) {
+				throw new CoreException(new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, "Could not remove module", e));
+			}
+		} else {
+			IPath path = getServer().getRuntime().getLocation().append("webapps").append(module[0].getName());
+			path = path.append("WEB-INF").append("lib").append(module[1].getName() + ".jar");
+			
+			ProjectModule pm = (ProjectModule) module[1].loadAdapter(ProjectModule.class, monitor);
+			IModuleResource[] mr = pm.members();
+			PublishUtil.createZipFile(mr, path);
+			p.put(module[1].getId(), path.toOSString());
 		}
 	}
 
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.tomcat.ui/META-INF/MANIFEST.MF
index 75c8d8b..6b27daa 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/META-INF/MANIFEST.MF
@@ -9,6 +9,7 @@
 Export-Package: org.eclipse.jst.server.tomcat.ui.internal;x-internal:=true,
  org.eclipse.jst.server.tomcat.ui.internal.editor;x-internal:=true
 Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources,
  org.eclipse.core.expressions,
  org.eclipse.ui,
  org.eclipse.ui.ide,
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationWebModuleEditorPart.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationWebModuleEditorPart.java
index 74970ea..1b6f550 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationWebModuleEditorPart.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationWebModuleEditorPart.java
@@ -16,6 +16,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.viewers.ColumnWeightData;
@@ -371,10 +372,20 @@
 		if (s == null || s.length() < 2)
 			return true;
 		
+		// check absolute path
 		File f = new File(s);
 		if (f.exists())
 			return true;
 		
+		// check workspace
+		try {
+			if (ResourcesPlugin.getWorkspace().getRoot().getProject(s).exists())
+				return true;
+		} catch (Exception e) {
+			// bad path
+		}
+		
+		// check server relative path
 		try {
 			f = server.getRuntime().getLocation().append(s).toFile();
 			if (f.exists())
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java
index f2be864..ad9e256 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java
@@ -372,6 +372,12 @@
 					if (".wtpmodules".equals(delta2.getResource().getName())) {
 						t.b = true;
 						return false;
+					} else if (".facets".equals(delta2.getResource().getName())) {
+						t.b = true;
+						return false;
+					} else if (".component".equals(delta2.getResource().getName())) {
+						t.b = true;
+						return false;
 					}
 					return true;
 				}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
index 8434b7f..30e0139 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
@@ -242,7 +242,7 @@
 runtimeTargetNone=<None>
 runtimeTargetNewRuntime=&New...
 runtimeTargetRuntimePreferences=Configure &Installed Runtimes...
-runtimeTargetChildren=Include child projects
+runtimeTargetChildren=Target contained projects
 
 # General dialogs
 defaultDialogTitle=Server
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimeTargetComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimeTargetComposite.java
index 953dad7..52714b8 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimeTargetComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimeTargetComposite.java
@@ -163,6 +163,7 @@
 			includeChildren.setText(Messages.runtimeTargetChildren);
 			data = new GridData();
 			data.horizontalSpan = 2;
+			data.horizontalIndent = 15;
 			includeChildren.setLayoutData(data);
 			includeChildren.setSelection(true);
 			
