218636 Performance problem remains, in Server -> Add/ Remove Projects
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java
index 6d0db2f..737daec 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java
@@ -11,7 +11,9 @@
 package org.eclipse.wst.server.core.internal;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IConfigurationElement;
@@ -31,6 +33,7 @@
 	private List moduleTypes;
 	
 	private List modules;
+	private Map projectToModulesMap = new HashMap();
 
 	/**
 	 * ModuleFactory constructor comment.
@@ -126,13 +129,19 @@
 	public IModule[] getModules(IProject project) {
 		ModuleFactoryDelegate mfd = getDelegate(null);
 		if (mfd instanceof ProjectModuleFactoryDelegate) {
-			return ((ProjectModuleFactoryDelegate) mfd).getModules204165(project);
+			IModule[] result = (IModule[])projectToModulesMap.get(project);
+			if (result == null) {
+				result = ((ProjectModuleFactoryDelegate) mfd).getModules204165(project);
+				projectToModulesMap.put(project, result);
+			}
+			return result;
 		}
 		return mfd.getModules();
 	}
 
 	public void clearModuleCache() {
 		modules = null;
+		projectToModulesMap.clear();
 	}
 
 	/*