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 afb0a59..59ce708 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
@@ -12,7 +12,6 @@
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IConfigurationElement;
@@ -28,7 +27,7 @@
 public class ModuleFactory implements IOrdered {
 	private IConfigurationElement element;
 	public ModuleFactoryDelegate delegate;
-	private Set moduleTypes;
+	private List moduleTypes;
 
 	/**
 	 * ModuleFactory constructor comment.
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleType.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleType.java
index 98c675a..89b14de 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleType.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleType.java
@@ -131,7 +131,12 @@
 	}
 
 	public int hashCode() {
-		return id.hashCode() + version.hashCode();
+		int hash = 17;
+		if (id != null)
+			hash += id.hashCode();
+		if (version != null)
+			hash += version.hashCode();
+		return hash;
 	}
 
 	public boolean equals(Object obj) {
@@ -142,15 +147,23 @@
 			return false;
 		
 		ModuleType mt = (ModuleType) obj;
-		if (id != null && mt.id != null && !id.equals(mt.id))
+		if (!matches(id, mt.id))
 			return false;
 		
-		if (version != null && mt.version != null && !version.equals(mt.version))
+		if (!matches(version, mt.version))
 			return false;
 		
 		return true;
 	}
 
+	private static boolean matches(String a, String b) {
+		if (a == null || b == null || "*".equals(a) || "*".equals(b) || a.startsWith(b) || b.startsWith(a)
+			|| (a.endsWith(".*") && b.startsWith(a.substring(0, a.length() - 1)))
+			|| (b.endsWith(".*") && a.startsWith(b.substring(0, b.length() - 1))))
+			return true;
+		return false;
+	}
+
 	public String toString() {
 		return "ModuleType[" + id + ", " + version + "]";
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeType.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeType.java
index 7afc05d..fa32434 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeType.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeType.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.server.core.internal;
 
-import java.util.Set;
+import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
@@ -22,7 +22,7 @@
  */
 public class RuntimeType implements IRuntimeType {
 	private IConfigurationElement element;
-	private Set moduleTypes;
+	private List moduleTypes;
 
 	public RuntimeType(IConfigurationElement element) {
 		super();
@@ -94,7 +94,7 @@
 			return null;
 		}
 	}
-	
+
 	/**
 	 * Return the supported module types.
 	 * 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java
index 86578e8..74cc9ab 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java
@@ -347,10 +347,10 @@
 		return s;
 	}
 
-	protected static Set getModuleTypes(IConfigurationElement[] elements) {
-		Set set = new HashSet();
+	protected static List getModuleTypes(IConfigurationElement[] elements) {
+		List list = new ArrayList();
 		if (elements == null)
-			return set;
+			return list;
 		
 		int size = elements.length;
 		for (int i = 0; i < size; i++) {
@@ -360,10 +360,10 @@
 			int sizeV = versions.length;
 			for (int j = 0; j < sizeT; j++) {
 				for (int k = 0; k < sizeV; k++)
-					set.add(ModuleType.getModuleType(types[j], versions[k]));
+					list.add(ModuleType.getModuleType(types[j], versions[k]));
 			}
 		}
-		return set;
+		return list;
 	}
 
 	public static String generateId() {
