diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.frameworks.ui/META-INF/MANIFEST.MF
index 4162f10..4a9fe89 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.frameworks.ui/META-INF/MANIFEST.MF
@@ -17,6 +17,7 @@
  org.eclipse.wst.common.frameworks;bundle-version="[1.1.200,2.0.0)";visibility:=reexport,
  org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.wst.common.environment;bundle-version="[1.0.200,2.0.0)",
- org.eclipse.wst.common.core;bundle-version="[1.2.0,2.0.0)"
+ org.eclipse.wst.common.core;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.4.100,4.0.0)"
 Eclipse-LazyStart: true
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/plugin.xml b/plugins/org.eclipse.wst.common.frameworks.ui/plugin.xml
index 6301a00..d40590f 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/plugin.xml
+++ b/plugins/org.eclipse.wst.common.frameworks.ui/plugin.xml
@@ -7,7 +7,21 @@
    <extension-point id="extendableWizard" name="%Extendable_Wizard" schema="schema/extendableWizard.exsd"/>
    <extension-point id="wizardPageGroup" name="%Extendable_Wizard_Page" schema="schema/extendableWizardPage.exsd"/>
    <extension-point id="DataModelWizardExtension" name="%DataModelWizard" schema="schema/DataModelWizardExtension.exsd"/>
-
+	 	 
+	<extension-point id="MenuEnabler" 
+	 name="MenuEnabler"
+	 schema="schema/MenuEnabler.exsd"/>
+	 
+   <extension point="org.eclipse.core.expressions.propertyTesters">
+    <propertyTester
+          class="org.eclipse.wst.common.frameworks.internal.ui.MenuEnablementPropertyTester"
+          id="org.eclipse.wst.common.frameworks.internal.ui.MenuEnablementPropertyTester"
+          namespace="org.eclipse.wst.common.frameworks.actions"
+          properties="show"
+          type="org.eclipse.core.resources.IResource">
+    </propertyTester>
+  </extension>
+  	 
    <extension
          id="UITester"
          point="org.eclipse.wst.common.core.uiTester">
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/schema/menuEnabler.exsd b/plugins/org.eclipse.wst.common.frameworks.ui/schema/menuEnabler.exsd
new file mode 100644
index 0000000..332f105
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks.ui/schema/menuEnabler.exsd
@@ -0,0 +1,106 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.common.frameworks.ui" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.wst.common.frameworks.ui" id="MenuEnabler" name="MenuEnabler"/>
+      </appInfo>
+      <documentation>
+         Defines extension point for setting enablement condition for a menu item. This extension point is used in
+org.eclipse.wst.common.frameworks.internal.ui.MenuEnablementPropertyTester.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="menuenabler"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  Optional name for the extension point
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="menuenabler">
+      <complexType>
+         <attribute name="className" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The className is an implementation of interface IPropertyTester
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         3.2 M6
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         &lt;extension
+    point=&quot;org.eclipse.wst.common.frameworks.ui.MenuEnabler&quot;&gt;
+     &lt;menuenabler
+         className=&quot;org.eclipse.foo.BarPropertyTester&quot;&gt;
+     &lt;/menuenabler&gt;
+&lt;/extension&gt;
+
+The class specified in className should implement IPropertyTester interface
+      </documentation>
+   </annotation>
+
+
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2010 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
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/MenuEnablementPropertyTester.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/MenuEnablementPropertyTester.java
new file mode 100644
index 0000000..dc1afbf
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/MenuEnablementPropertyTester.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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.common.frameworks.internal.ui;
+
+import java.util.List;
+
+import org.eclipse.core.expressions.IPropertyTester;
+import org.eclipse.core.expressions.PropertyTester;
+
+public class MenuEnablementPropertyTester extends PropertyTester{
+
+	static private List<MenuEnablerExtension>  list = MenuEnablerExtensionReader.getInstance().getMenuEnabler();	
+	public boolean test(Object receiver, String property, Object[] args,
+			Object expectedValue) {
+
+		if( list != null && list.size() > 0 ){
+			MenuEnablerExtension menuEnablerExtension = list.get( 0 );
+			IPropertyTester tester =  menuEnablerExtension.getInstance();
+			if( tester != null ){
+				return tester.test( receiver, property, args, expectedValue );
+			}
+			return true;
+		}
+		return true;
+	}
+
+}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/MenuEnablerExtension.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/MenuEnablerExtension.java
new file mode 100644
index 0000000..2c1dbbd
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/MenuEnablerExtension.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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.common.frameworks.internal.ui;
+
+import org.eclipse.core.expressions.IPropertyTester;
+import org.eclipse.core.runtime.IConfigurationElement;
+
+
+public class MenuEnablerExtension {
+
+	public static final String ATT_ID = "id"; //$NON-NLS-1$
+	public static final String MENU_ENABLER_EXTENSION = "menuenabler"; //$NON-NLS-1$
+	
+	private String id = null;
+	private IConfigurationElement element;
+	//private IMenuEnabler instance;
+	private IPropertyTester instance;
+	private boolean errorCondition = false;
+	
+	public MenuEnablerExtension(){
+		super();
+	}
+	
+	private void init() {
+		id = element.getAttribute(ATT_ID);
+	}
+
+	/**
+	 * @return Returns the id.
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/**
+	 * @param id
+	 *            The id to set.
+	 */
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public MenuEnablerExtension(IConfigurationElement element) {
+		this.element = element;
+		init();
+	}
+	
+	public IPropertyTester getInstance() {
+		try {
+			if (instance == null && !errorCondition)
+				instance = (IPropertyTester) element.createExecutableExtension("className"); //$NON-NLS-1$
+		} catch (Throwable e) {
+			errorCondition = true;
+		}
+		return instance;
+	}	
+}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/MenuEnablerExtensionReader.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/MenuEnablerExtensionReader.java
new file mode 100644
index 0000000..684b964
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/internal/ui/MenuEnablerExtensionReader.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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.common.frameworks.internal.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.wst.common.core.util.RegistryReader;
+
+
+
+public class MenuEnablerExtensionReader extends RegistryReader {
+
+	private static MenuEnablerExtensionReader instance = null;
+	private List<MenuEnablerExtension> pageExtenders = null;
+	
+	public MenuEnablerExtensionReader(){
+		super("org.eclipse.wst.common.frameworks.ui", "MenuEnabler"); //$NON-NLS-1$ //$NON-NLS-2$ 
+	}
+	
+
+	public static MenuEnablerExtensionReader getInstance() {
+		if (instance == null) {
+			instance = new MenuEnablerExtensionReader();
+			instance.readRegistry();
+		}
+		return instance;
+	}
+	
+	@Override
+	public boolean readElement(IConfigurationElement element) {
+		if (MenuEnablerExtension.MENU_ENABLER_EXTENSION.equals(element.getName())) {
+			addExtension(element);
+			return true;
+		}
+		return false;
+	}
+	
+	protected void addExtension(IConfigurationElement newExtension) {
+		getMenuEnabler().add(new MenuEnablerExtension(newExtension));
+	}
+	
+	public List<MenuEnablerExtension> getMenuEnabler() {
+		if (pageExtenders == null)
+			pageExtenders = new ArrayList<MenuEnablerExtension>();
+		return pageExtenders;
+	}	
+
+}
