diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Configuration.java
index 20eb5b2..8d2ae49 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Configuration.java
@@ -56,7 +56,7 @@
 	/**
 	 * Tomcat32Configuration constructor comment.
 	 */
-	public Tomcat32Configuration(IPath path) {
+	public Tomcat32Configuration(IFolder path) {
 		super(path);
 	}
 	
@@ -494,7 +494,7 @@
 			monitor = ProgressUtil.getMonitorFor(monitor);
 			monitor.beginTask(TomcatPlugin.getResource("%updatingConfigurationTask"), 100);
 	
-			Tomcat32Configuration config = new Tomcat32Configuration(path);
+			Tomcat32Configuration config = new Tomcat32Configuration(null);
 			config.load(path, ProgressUtil.getSubMonitorFor(monitor, 30));
 	
 			if (monitor.isCanceled())
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Configuration.java
index 824d2d2..3dc4210 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Configuration.java
@@ -60,7 +60,7 @@
 	/**
 	 * Tomcat40Configuration constructor comment.
 	 */
-	public Tomcat40Configuration(IPath path) {
+	public Tomcat40Configuration(IFolder path) {
 		super(path);
 	}
 		
@@ -489,7 +489,7 @@
 			monitor = ProgressUtil.getMonitorFor(monitor);
 			monitor.beginTask(TomcatPlugin.getResource("%updatingConfigurationTask"), 100);
 			
-			Tomcat40Configuration config = new Tomcat40Configuration(path);
+			Tomcat40Configuration config = new Tomcat40Configuration(null);
 			config.load(path, ProgressUtil.getSubMonitorFor(monitor, 40));
 	
 			if (monitor.isCanceled())
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Configuration.java
index b14caed..1ff47c1 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Configuration.java
@@ -61,7 +61,7 @@
 	/**
 	 * Tomcat41Configuration constructor comment.
 	 */
-	public Tomcat41Configuration(IPath path) {
+	public Tomcat41Configuration(IFolder path) {
 		super(path);
 	}
 	
@@ -506,7 +506,7 @@
 			monitor = ProgressUtil.getMonitorFor(monitor);
 			monitor.beginTask(TomcatPlugin.getResource("%updatingConfigurationTask"), 100);
 			
-			Tomcat41Configuration config = new Tomcat41Configuration(path);
+			Tomcat41Configuration config = new Tomcat41Configuration(null);
 			config.load(path, ProgressUtil.getSubMonitorFor(monitor, 40));
 	
 			if (monitor.isCanceled())
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Configuration.java
index 1fea1d0..bbe71a9 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Configuration.java
@@ -48,7 +48,7 @@
 	/**
 	 * Tomcat50Configuration constructor comment.
 	 */
-	public Tomcat50Configuration(IPath path) {
+	public Tomcat50Configuration(IFolder path) {
 		super(path);
 	}
 	
@@ -486,7 +486,7 @@
 			monitor = ProgressUtil.getMonitorFor(monitor);
 			monitor.beginTask(TomcatPlugin.getResource("%updatingConfigurationTask"), 100);
 			
-			Tomcat50Configuration config = new Tomcat50Configuration(path);
+			Tomcat50Configuration config = new Tomcat50Configuration(null);
 			config.load(path, ProgressUtil.getSubMonitorFor(monitor, 40));
 	
 			if (monitor.isCanceled())
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Configuration.java
index dc367bf..15be680 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Configuration.java
@@ -48,7 +48,7 @@
 	/**
 	 * Tomcat55Configuration constructor comment.
 	 */
-	public Tomcat55Configuration(IPath path) {
+	public Tomcat55Configuration(IFolder path) {
 		super(path);
 	}
 	
@@ -486,7 +486,7 @@
 			monitor = ProgressUtil.getMonitorFor(monitor);
 			monitor.beginTask(TomcatPlugin.getResource("%updatingConfigurationTask"), 100);
 			
-			Tomcat55Configuration config = new Tomcat55Configuration(path);
+			Tomcat55Configuration config = new Tomcat55Configuration(null);
 			config.load(path, ProgressUtil.getSubMonitorFor(monitor, 40));
 	
 			if (monitor.isCanceled())
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatConfiguration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatConfiguration.java
index f34da65..a35f52f 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatConfiguration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatConfiguration.java
@@ -47,7 +47,7 @@
 	public static final String ADD_WEB_MODULE_PROPERTY = "addWebModule";
 	public static final String REMOVE_WEB_MODULE_PROPERTY = "removeWebModule";
 	
-	protected IPath configPath;
+	protected IFolder configPath;
 
 	// property change listeners
 	private transient List propertyListeners;
@@ -55,7 +55,7 @@
 	/**
 	 * TomcatConfiguration constructor comment.
 	 */
-	public TomcatConfiguration(IPath path) {
+	public TomcatConfiguration(IFolder path) {
 		super();
 		this.configPath = path;
 		/*try {
@@ -65,7 +65,7 @@
 		}*/
 	}
 	
-	protected IPath getPath() {
+	protected IFolder getFolder() {
 		return configPath;
 	}
 
@@ -98,10 +98,10 @@
 			if (folder != null)
 				backupFolder(folder, confDir, backup, ms, monitor);
 			else {
-				IPath path = config.getConfigurationDataPath();*/
-				backupPath(configPath, confDir, backup, ms, monitor);
+				IPath path = config.getConfigurationDataPath();
+				backupPath(configPath, confDir, backup, ms, monitor);*/
+				backupFolder(getFolder(), confDir, backup, ms, monitor);
 			//}
-			
 		} catch (Exception e) {
 			Trace.trace("backupAndPublish() error", e);
 			IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, TomcatPlugin.getResource("%errorPublishConfiguration", new String[] {e.getLocalizedMessage()}), e);
@@ -253,7 +253,9 @@
 	 * @param forceSave boolean
 	 * @exception java.io.IOException
 	 */
-	protected abstract void save(IPath path, boolean forceSave, IProgressMonitor monitor) throws CoreException;
+	//protected abstract void save(IPath path, boolean forceSave, IProgressMonitor monitor) throws CoreException;
+	
+	protected abstract void save(IFolder folder, IProgressMonitor monitor) throws CoreException;
 	
 	protected void firePropertyChangeEvent(String propertyName, Object oldValue, Object newValue) {
 		if (propertyListeners == null)
@@ -304,9 +306,9 @@
 		load(runtime.getLocation().append("conf"), monitor);
 	}*/
 	
-	public abstract void load(IPath path, IProgressMonitor monitor) throws CoreException;
+	protected abstract void load(IPath path, IProgressMonitor monitor) throws CoreException;
 	
-	//public abstract void load(IFolder folder, IProgressMonitor monitor) throws CoreException;
+	protected abstract void load(IFolder folder, IProgressMonitor monitor) throws CoreException;
 	
 	public abstract void addWebModule(int index, ITomcatWebModule module);
 	
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 19b2c5a..79514ae 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
@@ -15,6 +15,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.runtime.*;
 import org.eclipse.debug.core.*;
 import org.eclipse.debug.core.model.IProcess;
@@ -72,29 +73,28 @@
 
 	public TomcatConfiguration getTomcatConfiguration() {
 		if (configuration == null) {
-			//IPath path = getServer().getServerConfiguration();
-			//if (path == null)
-			IPath path = null;
+			IFolder folder = getServer().getServerConfiguration();
+			/*IPath path = null;
 			if (getServerWC() != null && getServerWC().getRuntime() != null)
 				path = getServerWC().getRuntime().getLocation().append("conf");
 			else if (getServer() != null && getServer().getRuntime() != null)
 				path = getServer().getRuntime().getLocation().append("conf");
 			else
-				return null;
+				return null;*/
 			
 			String id = getServer().getServerType().getId();
 			if (id.indexOf("32") > 0)
-				configuration = new Tomcat32Configuration(path);
+				configuration = new Tomcat32Configuration(folder);
 			else if (id.indexOf("40") > 0)
-				configuration = new Tomcat40Configuration(path);
+				configuration = new Tomcat40Configuration(folder);
 			else if (id.indexOf("41") > 0)
-				configuration = new Tomcat41Configuration(path);
+				configuration = new Tomcat41Configuration(folder);
 			else if (id.indexOf("50") > 0)
-				configuration = new Tomcat50Configuration(path);
+				configuration = new Tomcat50Configuration(folder);
 			else if (id.indexOf("55") > 0)
-				configuration = new Tomcat55Configuration(path);
+				configuration = new Tomcat55Configuration(folder);
 			try {
-				configuration.load(path, null);
+				configuration.load(folder, null);
 			} catch (CoreException ce) {
 				// ignore
 			}
@@ -107,15 +107,15 @@
 		
 		String id = getServer().getServerType().getId();
 		if (id.indexOf("32") > 0)
-			configuration = new Tomcat32Configuration(path);
+			configuration = new Tomcat32Configuration(null);
 		else if (id.indexOf("40") > 0)
-			configuration = new Tomcat40Configuration(path);
+			configuration = new Tomcat40Configuration(null);
 		else if (id.indexOf("41") > 0)
-			configuration = new Tomcat41Configuration(path);
+			configuration = new Tomcat41Configuration(null);
 		else if (id.indexOf("50") > 0)
-			configuration = new Tomcat50Configuration(path);
+			configuration = new Tomcat50Configuration(null);
 		else if (id.indexOf("55") > 0)
-			configuration = new Tomcat55Configuration(path);
+			configuration = new Tomcat55Configuration(null);
 		try {
 			configuration.load(path, monitor);
 		} catch (CoreException ce) {
@@ -123,6 +123,11 @@
 		}
 	}
 
+	public void saveConfiguration(IProgressMonitor monitor) throws CoreException {
+		TomcatConfiguration config = getTomcatConfiguration();
+		config.save(getServer().getServerConfiguration(), monitor);
+	}
+
 	/**
 	 * Return the root URL of this module.
 	 * @param module org.eclipse.wst.server.core.model.IModule
@@ -133,7 +138,7 @@
 			if (module == null || !(module instanceof IWebModule))
 				return null;
 	
-			IPath serverConfig = getServer().getServerConfiguration();
+			IFolder serverConfig = getServer().getServerConfiguration();
 			if (serverConfig == null)
 				return null;
 	
@@ -495,6 +500,6 @@
 				}
 			}
 		}
-		config.save(config.getPath(), true, monitor);
+		config.save(config.getFolder(), monitor);
 	}
 }
\ No newline at end of file
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 5ac0aba..88aaec5 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
@@ -195,6 +195,8 @@
 		IPath from = webModule.getLocation();
 		IPath to = getServer().getRuntime().getLocation().append("webapps").append(webModule.getContextRoot());
 		FileUtil.smartCopyDirectory(from.toOSString(), to.toOSString(), monitor);
+		
+		setModulePublishState(module, IServer.PUBLISH_STATE_NONE);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerAttributes.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerAttributes.java
index 158017d..05301b7 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerAttributes.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerAttributes.java
@@ -11,6 +11,7 @@
 package org.eclipse.wst.server.core;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.runtime.*;
 /**
  * Represents a server instance. Every server is an instance of a
@@ -175,7 +176,7 @@
 	 * 
 	 * @return the server configuration, or <code>null</code> if none
 	 */
-	public IPath getServerConfiguration();
+	public IFolder getServerConfiguration();
 
 	/**
 	 * Returns the server extension for this server.
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java
index 5208d92..0bc45e1 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java
@@ -11,8 +11,8 @@
 package org.eclipse.wst.server.core;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 /**
  * A working copy server object used for formulating changes
@@ -78,7 +78,7 @@
 	 * 
 	 * @param configuration the server configuration, or <code>null</code> if none
 	 */
-	public void setServerConfiguration(IPath configuration);
+	public void setServerConfiguration(IFolder configuration);
 	
 	/**
 	 * Returns the server instance that this working copy is
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java
index 2312f2c..f068760 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java
@@ -66,8 +66,6 @@
 	// module events listeners
 	protected transient List moduleEventListeners;
 
-	protected static List serverProjects = new ArrayList();
-
 	/**
 	 * Resource listener - tracks changes on server resources so that
 	 * we can reload/drop server instances and configurations that
@@ -119,7 +117,7 @@
 		 * @param delta org.eclipse.core.resources.IResourceDelta
 		 */
 		protected void projectChanged(IProject project, IResourceDelta delta) {
-			if (serverProjects.contains(project)) {
+			if (!ServerCore.getProjectProperties(project).isServerProject()) {
 				Trace.trace(Trace.RESOURCES, "Not a server project: " + project.getName());
 				return;
 			}
@@ -277,10 +275,8 @@
 		if (projects != null) {
 			int size = projects.length;
 			for (int i = 0; i < size; i++) {
-				if (ServerCore.getProjectProperties(projects[i]).isServerProject()) {
-					serverProjects.add(projects[i]);
+				if (ServerCore.getProjectProperties(projects[i]).isServerProject())
 					loadFromProject(projects[i]);
-				}
 			}
 		}
 		
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
index d4fc79f..3f492a7 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
@@ -13,7 +13,9 @@
 import java.util.*;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.*;
 import org.eclipse.debug.core.*;
 import org.osgi.framework.Bundle;
@@ -37,7 +39,7 @@
 	protected ServerBehaviourDelegate behaviourDelegate;
 
 	protected IRuntime runtime;
-	protected IPath configuration;
+	protected IFolder configuration;
 	protected String mode;
 
 	protected int serverState = STATE_UNKNOWN;
@@ -114,7 +116,7 @@
 	/* (non-Javadoc)
 	 * @see com.ibm.wtp.server.core.IServer2#getServerConfiguration()
 	 */
-	public IPath getServerConfiguration() {
+	public IFolder getServerConfiguration() {
 		return configuration;
 	}
 
@@ -619,8 +621,7 @@
 	public boolean canPublish() {
 		// can't publish if the server is starting or stopping
 		int state = getServerState();
-		if (state == STATE_STARTING ||
-			state == STATE_STOPPING)
+		if (state == STATE_STARTING || state == STATE_STOPPING)
 			return false;
 	
 		// can't publish if there is no configuration
@@ -1546,7 +1547,7 @@
 		String configPath = getAttribute(CONFIGURATION_ID, (String)null);
 		configuration = null;
 		if (configPath != null)
-			configuration = new Path(configPath);
+			configuration = ResourcesPlugin.getWorkspace().getRoot().getFolder(new Path(configPath));
 	}
 
 	protected void setInternal(ServerWorkingCopy wc) {
@@ -1567,7 +1568,7 @@
 			memento.putString("server-type", serverType.getId());
 
 		if (configuration != null)
-			memento.putString(CONFIGURATION_ID, configuration.toPortableString());
+			memento.putString(CONFIGURATION_ID, configuration.getFullPath().toString());
 		else
 			memento.putString(CONFIGURATION_ID, null);
 		
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java
index a982cc8..c7c4d7d 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java
@@ -11,6 +11,10 @@
 package org.eclipse.wst.server.core.internal;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -177,6 +181,13 @@
 		if (runtime != null)
 			swc.setRuntime(runtime);
 		
+		if (swc.getServerType().hasServerConfiguration()) {
+			// TODO: config
+			((Server)swc).importConfiguration(runtime, null);
+			IFolder folder = getServerProject().getFolder("cfg");
+			swc.setServerConfiguration(folder);
+		}
+		
 		//TODO: import server config
 		/* IServerConfigurationWorkingCopy config = null;
 		if (hasServerConfiguration()) {
@@ -194,6 +205,35 @@
 		return swc;
 	}
 	
+	public static IProject getServerProject() {
+		IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+		if (projects != null) {
+			int size = projects.length;
+			for (int i = 0; i < size; i++) {
+				if (ServerCore.getProjectProperties(projects[i]).isServerProject())
+					return projects[i];
+			}
+		}
+		
+		String s = findUnusedServerProjectName();
+		return ResourcesPlugin.getWorkspace().getRoot().getProject(s);
+	}
+	
+	/**
+	 * Finds an unused project name to use as a server project.
+	 * 
+	 * @return java.lang.String
+	 */
+	protected static String findUnusedServerProjectName() {
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		String name = ServerPlugin.getResource("%defaultServerProjectName", "");
+		int count = 1;
+		while (root.getProject(name).exists()) {
+			name = ServerPlugin.getResource("%defaultServerProjectName", ++count + "");
+		}
+		return name;
+	}
+	
 	/**
 	 * Return the timeout (in ms) that should be used to wait for the server to start.
 	 * Returns -1 if there is no timeout.
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java
index 1ea3aa6..8c1e116 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java
@@ -16,6 +16,8 @@
 import java.util.Map;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.*;
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.model.ServerDelegate;
@@ -111,12 +113,12 @@
 		setAttribute(PROP_HOSTNAME, host);
 	}
 	
-	public void setServerConfiguration(IPath config) {
+	public void setServerConfiguration(IFolder config) {
 		this.configuration = config;
 		if (configuration == null)
 			setAttribute(CONFIGURATION_ID, (String)null);
 		else
-			setAttribute(CONFIGURATION_ID, configuration.toPortableString());
+			setAttribute(CONFIGURATION_ID, configuration.getFullPath().toString());
 	}
 
 	public void setFile(IFile file) {
@@ -177,6 +179,12 @@
 		
 		server.setInternal(this);
 		server.doSave(monitor);
+		IFolder folder = getServerConfiguration();
+		if (folder != null && !folder.exists()) {
+			folder.create(IResource.FORCE, true, null);
+		}
+		//ResourcesPlugin.getWorkspace().getRoot().g
+		getDelegate().saveConfiguration(monitor);
 		wch.setDirty(false);
 		
 		return server;
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java
index 0f591df..eeee2ba 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java
@@ -326,4 +326,8 @@
 	public void importConfiguration(IRuntime runtime, IProgressMonitor monitor) {
 		// do nothing
 	}
+
+	public void saveConfiguration(IProgressMonitor monitor) throws CoreException {
+		// do nothing
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/AddRemoveModulesAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/AddRemoveModulesAction.java
index e6d643d..cfa48e3 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/AddRemoveModulesAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/AddRemoveModulesAction.java
@@ -13,7 +13,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.dialogs.MessageDialog;
 
@@ -32,7 +32,7 @@
 	public boolean supports(IServer server) {
 		if (server == null)
 			return false;
-		IPath configuration = server.getServerConfiguration();
+		IFolder configuration = server.getServerConfiguration();
 		return (!server.getServerType().hasServerConfiguration() || configuration != null);
 	}
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/TempSaveServerTask.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/TempSaveServerTask.java
index dc481cb..2b72957 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/TempSaveServerTask.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/TempSaveServerTask.java
@@ -15,6 +15,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.wst.server.core.*;
+import org.eclipse.wst.server.core.internal.Server;
 import org.eclipse.wst.server.core.util.Task;
 import org.eclipse.wst.server.ui.internal.EclipseUtil;
 /**
@@ -46,6 +47,9 @@
 			workingCopy = server.createWorkingCopy();
 			
 			workingCopy.setRuntime(runtime);
+			if (workingCopy.getServerType().hasServerConfiguration()) {
+				((Server)workingCopy).importConfiguration(runtime, null);
+			}
 			getTaskModel().putObject(ITaskModel.TASK_SERVER, workingCopy);
 		}
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/SwitchConfigurationAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/SwitchConfigurationAction.java
index d4ffcb5..ecc6873 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/SwitchConfigurationAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/SwitchConfigurationAction.java
@@ -10,7 +10,7 @@
  **********************************************************************/
 package org.eclipse.wst.server.ui.internal.view.tree;
 
-import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.action.Action;
@@ -20,31 +20,27 @@
 import org.eclipse.wst.server.core.IServerType;
 import org.eclipse.wst.server.core.IServerWorkingCopy;
 import org.eclipse.wst.server.ui.ServerUICore;
-import org.eclipse.wst.server.ui.internal.EclipseUtil;
-import org.eclipse.wst.server.ui.internal.ImageResource;
-import org.eclipse.wst.server.ui.internal.ProgressUtil;
-import org.eclipse.wst.server.ui.internal.ServerLabelProvider;
-import org.eclipse.wst.server.ui.internal.Trace;
+import org.eclipse.wst.server.ui.internal.*;
 import org.eclipse.swt.widgets.Shell;
 /**
  * Action to add or remove configuration to/from a server.
  */
 public class SwitchConfigurationAction extends Action {
 	protected IServer server;
-	protected IPath config;
+	protected IFolder config;
 	protected Shell shell;
 	protected IStatus status;
 
 	/**
 	 * SwitchConfigurationAction constructor comment.
 	 */
-	public SwitchConfigurationAction(Shell shell, String label, IServer server, IPath config) {
+	public SwitchConfigurationAction(Shell shell, String label, IServer server, IFolder config) {
 		super(label);
 		this.shell = shell;
 		this.server = server;
 		this.config = config;
 
-		IPath tempConfig = server.getServerConfiguration();
+		IFolder tempConfig = server.getServerConfiguration();
 		if ((tempConfig == null && config == null) || (tempConfig != null && tempConfig.equals(config)))
 			setChecked(true);
 
@@ -60,7 +56,7 @@
 	}
 	
 	public void run() {
-		IPath tempConfig = server.getServerConfiguration();
+		IFolder tempConfig = server.getServerConfiguration();
 		if ((tempConfig == null && config == null) || (tempConfig != null && tempConfig.equals(config)))
 			return;
 			
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java
index 7176927..9daaabd 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003 IBM Corporation and others.
+ * Copyright (c) 2003, 2004 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Common Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.dialogs.Dialog;
@@ -30,12 +31,9 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.ui.help.WorkbenchHelp;
 import org.eclipse.wst.server.core.*;
+import org.eclipse.wst.server.core.internal.Server;
 import org.eclipse.wst.server.core.util.SocketUtil;
-import org.eclipse.wst.server.ui.internal.ContextIds;
-import org.eclipse.wst.server.ui.internal.ProgressUtil;
-import org.eclipse.wst.server.ui.internal.SWTUtil;
-import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
-import org.eclipse.wst.server.ui.internal.Trace;
+import org.eclipse.wst.server.ui.internal.*;
 import org.eclipse.wst.server.ui.internal.viewers.ServerTypeComposite;
 /**
  * Wizard page used to create a server and configuration at the same time.
@@ -131,8 +129,15 @@
 			public void widgetSelected(SelectionEvent e) {
 				try {
 					runtime = runtimes[runtimeCombo.getSelectionIndex()];
-					if (server != null)
+					if (server != null) {
 						server.setRuntime(runtime);
+						if (server.getServerType().hasServerConfiguration()) {
+							// TODO: config
+							((Server)server).importConfiguration(runtime, null);
+							IFolder folder = WizardUtil.getServerProject().getFolder("cfg");
+							server.setServerConfiguration(folder);
+						}
+					}
 				} catch (Exception ex) {
 					// ignore
 				}
@@ -194,8 +199,16 @@
 						server.setHost(host);
 						ServerUtil.setServerDefaultName(server);
 					
-						if (serverType.hasRuntime() && server.getRuntime() == null)
+						if (serverType.hasRuntime() && server.getRuntime() == null) {
 							server.setRuntime(runtime);
+							
+							if (server.getServerType().hasServerConfiguration()) {
+								// TODO: config
+								((Server)server).importConfiguration(runtime, null);
+								IFolder folder = WizardUtil.getServerProject().getFolder("cfg");
+								server.setServerConfiguration(folder);
+							}
+						}
 					}
 				} catch (CoreException cex) {
 					ce[0] = cex;
