[145834] Since deploy directory is configurable, add a system property that identifies the location.  It will be useful in catalina.policy file.
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatVersionHandler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatVersionHandler.java
index 13a2e5c..fc3b107 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatVersionHandler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatVersionHandler.java
@@ -71,10 +71,11 @@
 	 * 
 	 * @param installPath installation path for the server
 	 * @param configPath configuration path for the server
+	 * @param deployPath deploy path for the server
 	 * @param isTestEnv test environment flag
 	 * @return array of VM arguments for starting the server
 	 */
-	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv);
+	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, IPath deployPath, boolean isTestEnv);
 
 	/**
 	 * Gets the contents of the Java policy file for the Tomcat server.
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Handler.java
index 3497eff..e74c049 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Handler.java
@@ -82,11 +82,13 @@
 	}
 	
 	/**
-	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, boolean)
+	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, IPath, boolean)
 	 */
-	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv) {
+	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, IPath deployPath, boolean isTestEnv) {
 		List list = new ArrayList();
 		list.add("-Dtomcat.home=\"" + installPath.toOSString() + "\"");
+		// Include a system property for the configurable deploy location
+		list.add("-Dtomcat.deploy=\"" + deployPath.toOSString() + "\"");
 		
 		String[] s = new String[list.size()];
 		list.toArray(s);
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Handler.java
index 6de5b3a..17ac0cb 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Handler.java
@@ -82,15 +82,17 @@
 	}
 	
 	/**
-	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, boolean)
+	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, IPath, boolean)
 	 */
-	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv) {
+	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, IPath deployPath, boolean isTestEnv) {
 		List list = new ArrayList();
 		if (isTestEnv)
 			list.add("-Dcatalina.base=\"" + configPath.toOSString() + "\"");
 		else 
 			list.add("-Dcatalina.base=\"" + installPath.toOSString() + "\"");
 		list.add("-Dcatalina.home=\"" + installPath.toOSString() + "\"");
+		// Include a system property for the configurable deploy location
+		list.add("-Dcatalina.deploy=\"" + deployPath.toOSString() + "\"");
 		String endorsed = installPath.append("bin").toOSString() +
 			installPath.append("common").append("lib").toOSString();
 		list.add("-Djava.endorsed.dirs=\"" + endorsed + "\"");
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Handler.java
index 248643b..cf5f4d6 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Handler.java
@@ -82,20 +82,10 @@
 	}
 	
 	/**
-	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, boolean)
+	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, IPath, boolean)
 	 */
-	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv) {
-		List list = new ArrayList();
-		if (isTestEnv)
-			list.add("-Dcatalina.base=\"" + configPath.toOSString() + "\"");
-		else 
-			list.add("-Dcatalina.base=\"" + installPath.toOSString() + "\"");
-		list.add("-Dcatalina.home=\"" + installPath.toOSString() + "\"");
-		list.add("-Djava.endorsed.dirs=\"" + installPath.append("common").append("endorsed").toOSString() + "\"");
-		
-		String[] s = new String[list.size()];
-		list.toArray(s);
-		return s;
+	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, IPath deployPath, boolean isTestEnv) {
+		return TomcatVersionHelper.getCatalinaVMArguments(installPath, configPath, deployPath, isTestEnv);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Handler.java
index ed069fd..d577ea5 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Handler.java
@@ -82,20 +82,10 @@
 	}
 	
 	/**
-	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, boolean)
+	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, IPath, boolean)
 	 */
-	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv) {
-		List list = new ArrayList();
-		if (isTestEnv)
-			list.add("-Dcatalina.base=\"" + configPath.toOSString() + "\"");
-		else 
-			list.add("-Dcatalina.base=\"" + installPath.toOSString() + "\"");
-		list.add("-Dcatalina.home=\"" + installPath.toOSString() + "\"");
-		list.add("-Djava.endorsed.dirs=\"" + installPath.append("common").append("endorsed").toOSString() + "\"");
-		
-		String[] s = new String[list.size()];
-		list.toArray(s);
-		return s;
+	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, IPath deployPath, boolean isTestEnv) {
+		return TomcatVersionHelper.getCatalinaVMArguments(installPath, configPath, deployPath, isTestEnv);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Handler.java
index 3aa61cd..c6eefbf 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Handler.java
@@ -76,20 +76,10 @@
 	}
 	
 	/**
-	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, boolean)
+	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, IPath, boolean)
 	 */
-	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv) {
-		List list = new ArrayList();
-		if (isTestEnv)
-			list.add("-Dcatalina.base=\"" + configPath.toOSString() + "\"");
-		else 
-			list.add("-Dcatalina.base=\"" + installPath.toOSString() + "\"");
-		list.add("-Dcatalina.home=\"" + installPath.toOSString() + "\"");
-		list.add("-Djava.endorsed.dirs=\"" + installPath.append("endorsed").toOSString() + "\"");
-		
-		String[] s = new String[list.size()];
-		list.toArray(s);
-		return s;
+	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, IPath deployPath, boolean isTestEnv) {
+		return TomcatVersionHelper.getCatalinaVMArguments(installPath, configPath, deployPath, isTestEnv);
 	}
 
 	/**
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 8bb1354..3476538 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
@@ -235,6 +235,22 @@
 		return null;
 	}
 
+	/**
+	 * Gets the directory to which modules should be deployed for
+	 * this server.
+	 * 
+	 * @return full path to deployment directory for the server
+	 */
+	public IPath getServerDeployDirectory() {
+		String deployDir = getDeployDirectory();
+		IPath deployPath = new Path(deployDir);
+		if (!deployPath.isAbsolute()) {
+			IPath base = getRuntimeBaseDirectory();
+			deployPath = base.append(deployPath);
+		}
+		return deployPath;
+	}
+	
 	protected static String renderCommandLine(String[] commandLine, String separator) {
 		if (commandLine == null || commandLine.length < 1)
 			return "";
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 68f148e..b9607e1 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
@@ -126,7 +126,7 @@
 		IPath installPath = getServer().getRuntime().getLocation();
 		IPath configPath = getRuntimeBaseDirectory();
 		return getTomcatVersionHandler().getRuntimeVMArguments(installPath, configPath,
-				getTomcatServer().isTestEnvironment());
+				getServerDeployDirectory(), getTomcatServer().isTestEnvironment());
 	}
 	
 	protected String getRuntimePolicyFile() {
@@ -970,13 +970,7 @@
 	 * @return full path to deployment directory for the server
 	 */
 	public IPath getServerDeployDirectory() {
-		String deployDir = getTomcatServer().getDeployDirectory();
-		IPath deployPath = new Path(deployDir);
-		if (!deployPath.isAbsolute()) {
-			IPath base = getRuntimeBaseDirectory();
-			deployPath = base.append(deployPath);
-		}
-		return deployPath;
+		return getTomcatServer().getServerDeployDirectory();
 	}
 	
 	/**
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatVersionHelper.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatVersionHelper.java
index 7c4f305..7bff3f2 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatVersionHelper.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatVersionHelper.java
@@ -18,6 +18,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -136,6 +137,32 @@
 		// Return runtime path
 		return ts.getServer().getRuntime().getLocation();
 	}
+
+	/**
+	 * Gets the startup VM arguments for the Catalina server.
+	 * 
+	 * @param installPath installation path for the server
+	 * @param instancePath instance path for the server
+	 * @param deployPath deploy path for the server
+	 * @param isTestEnv test environment flag
+	 * @return array of strings containing VM arguments
+	 */
+	public static String[] getCatalinaVMArguments(IPath installPath, IPath instancePath, IPath deployPath, boolean isTestEnv) {
+		List list = new ArrayList();
+		if (isTestEnv)
+			list.add("-Dcatalina.base=\"" + instancePath.toOSString() + "\"");
+		else 
+			list.add("-Dcatalina.base=\"" + installPath.toOSString() + "\"");
+		list.add("-Dcatalina.home=\"" + installPath.toOSString() + "\"");
+		// Include a system property for the configurable deploy location
+		list.add("-Dcatalina.deploy=\"" + deployPath.toOSString() + "\"");
+		list.add("-Djava.endorsed.dirs=\"" + installPath.append("common").append("endorsed").toOSString() + "\"");
+		
+		String[] s = new String[list.size()];
+		list.toArray(s);
+		return s;
+	}
+
 	
 	/**
 	 * Gets a ServerInstance for the specified server.xml, Service name,