diff --git a/tests/org.eclipse.wst.server.ui.tests/src/org/eclipse/wst/server/ui/tests/RemoveModuleMessageExtensionTestCase.java b/tests/org.eclipse.wst.server.ui.tests/src/org/eclipse/wst/server/ui/tests/RemoveModuleMessageExtensionTestCase.java
new file mode 100644
index 0000000..aec2122
--- /dev/null
+++ b/tests/org.eclipse.wst.server.ui.tests/src/org/eclipse/wst/server/ui/tests/RemoveModuleMessageExtensionTestCase.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2016 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.tests;
+
+import java.util.List;
+
+import org.eclipse.wst.server.ui.RemoveModuleMessageExtension;
+import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
+
+import junit.framework.TestCase;
+
+/**
+ * This tests the extension point for RemoveModuleMessageExtension
+ * 
+ * @author kchong
+ *
+ */
+public class RemoveModuleMessageExtensionTestCase extends TestCase {
+
+	public void testRemoveModuleMessageExtension() {
+	   List<RemoveModuleMessageExtension> extensions = ServerUIPlugin.getRemoveModuleMessageExtensions();
+	   assertTrue("Remove Message Extensions", extensions.size() >= 1);  // Have two from the test plugin
+	   
+	   // Test the filter *
+	   RemoveModuleMessageExtension removeModuleMessageExtensionA = ServerUIPlugin.getRemoveModuleMessageExtension("org.eclipse.wst.server.testA.v1");
+	   assertNotNull(removeModuleMessageExtensionA);
+
+	   String customMessageA = removeModuleMessageExtensionA.getConfirmationMessage(null, null);
+	   assertTrue("Check Custom Message", RemoveModuleMessageTestExtension.customRemoveMessage.equals(customMessageA));
+	   
+	   // Test the filter .*
+	   RemoveModuleMessageExtension removeModuleMessageExtensionB = ServerUIPlugin.getRemoveModuleMessageExtension("org.eclipse.wst.server.testB.v1");
+	   assertNotNull(removeModuleMessageExtensionB);
+
+	   String customMessageB = removeModuleMessageExtensionB.getConfirmationMessage(null, null);
+	   assertTrue("Check Custom Message", RemoveModuleMessageTestExtension.customRemoveMessage.equals(customMessageB));
+
+	   // Test exact match
+	   RemoveModuleMessageExtension removeModuleMessageExtensionC = ServerUIPlugin.getRemoveModuleMessageExtension("org.eclipse.wst.server.testC");
+	   assertNotNull(removeModuleMessageExtensionC);
+
+	   String customMessageC = removeModuleMessageExtensionC.getConfirmationMessage(null, null);
+	   assertTrue("Check Custom Message", RemoveModuleMessageTestExtension.customRemoveMessage.equals(customMessageC));
+
+	}
+}
diff --git a/tests/org.eclipse.wst.server.ui.tests/src/org/eclipse/wst/server/ui/tests/RemoveModuleMessageTestExtension.java b/tests/org.eclipse.wst.server.ui.tests/src/org/eclipse/wst/server/ui/tests/RemoveModuleMessageTestExtension.java
new file mode 100644
index 0000000..dff7101
--- /dev/null
+++ b/tests/org.eclipse.wst.server.ui.tests/src/org/eclipse/wst/server/ui/tests/RemoveModuleMessageTestExtension.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2016 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.tests;
+
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServerAttributes;
+import org.eclipse.wst.server.ui.RemoveModuleMessageExtension;
+
+public class RemoveModuleMessageTestExtension extends RemoveModuleMessageExtension {
+	
+	public static String customRemoveMessage = "Are you sure you want to remove one or more modules from the server?";
+	
+	public RemoveModuleMessageTestExtension() {
+		// Empty
+	}
+
+	@Override
+	public String getConfirmationMessage(IServerAttributes server, IModule[] modules) {
+		return customRemoveMessage;
+	}
+
+}
\ No newline at end of file
