diff --git a/org.eclipse.ogee.designer/plugin.xml b/org.eclipse.ogee.designer/plugin.xml
index 1604985..5dba655 100644
--- a/org.eclipse.ogee.designer/plugin.xml
+++ b/org.eclipse.ogee.designer/plugin.xml
@@ -23,6 +23,7 @@
      	schema="schema/org.eclipse.ogee.designer.layout.exsd"/>
    <extension-point id="org.eclipse.ogee.designer.contextmenu" name="Context Menu" schema="schema/org.eclipse.ogee.designer.contextmenu.exsd"/>
    <extension-point id="org.eclipse.ogee.designer.bindingcontextmenu" name="BindingContextMenu" schema="schema/org.eclipse.ogee.designer.bindingcontextmenu.exsd"/>
+   <extension-point id="org.eclipse.ogee.designer.artifactselection" name="ArtifactSelection" schema="schema/org.eclipse.ogee.designer.artifactselection.exsd"/>
      
    <extension
          point="org.eclipse.graphiti.ui.diagramTypes">
diff --git a/org.eclipse.ogee.designer/schema/org.eclipse.ogee.designer.artifactselection.exsd b/org.eclipse.ogee.designer/schema/org.eclipse.ogee.designer.artifactselection.exsd
new file mode 100644
index 0000000..7eeea0d
--- /dev/null
+++ b/org.eclipse.ogee.designer/schema/org.eclipse.ogee.designer.artifactselection.exsd
@@ -0,0 +1,114 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.ogee.designer" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.ogee.designer" id="org.eclipse.ogee.designer.artifactselection" name="ArtifactSelection"/>
+      </appinfo>
+      <documentation>
+         This extention point provides an  handle to the eobject selected in the editor
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <choice minOccurs="1" maxOccurs="unbounded">
+            <element ref="artifactselection"/>
+         </choice>
+         <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>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="artifactselection">
+      <annotation>
+         <documentation>
+            This extention will allow to get handle to the  PictogramElement and EObject resouce which are selected or deleted from the graphical editor
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.ogee.designer.contextmenu.IArtifactSelection"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of the extention point
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/ODataEditor.java b/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/ODataEditor.java
index 3438fcf..b7eacfc 100644
--- a/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/ODataEditor.java
+++ b/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/ODataEditor.java
@@ -55,6 +55,7 @@
 import org.eclipse.ogee.designer.messages.Messages;
 import org.eclipse.ogee.designer.utils.ArtifactUtil;
 import org.eclipse.ogee.designer.utils.IODataEditorConstants;
+import org.eclipse.ogee.designer.utils.ODataArtifactSelectionUtil;
 import org.eclipse.ogee.designer.utils.ODataLayoutUtil;
 import org.eclipse.ogee.designer.utils.PropertyUtil;
 import org.eclipse.ogee.designer.visualizer.ODataModelVisualizer;
@@ -719,6 +720,10 @@
 					// Do the selection in the diagram.
 					selectPictogramElements(pes);
 				}
+				//below code is enable the artifact selection extention
+			    PictogramElement[] selectedPictogramElements = getSelectedPictogramElements();
+			    EObject businessObject = (EObject) getDiagramTypeProvider().getFeatureProvider().getBusinessObjectForPictogramElement(selectedPictogramElements[0]);
+			    ODataArtifactSelectionUtil.notifyRegisteredSubscribers(selectedPictogramElements[0], businessObject , ODataArtifactSelectionUtil.SelectionStatus.SELECTED);
 			}
 		}
 	}
diff --git a/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/contextmenu/IArtifactSelection.java b/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/contextmenu/IArtifactSelection.java
new file mode 100644
index 0000000..114d123
--- /dev/null
+++ b/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/contextmenu/IArtifactSelection.java
@@ -0,0 +1,37 @@
+package org.eclipse.ogee.designer.contextmenu;
+
+import java.util.EnumSet;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.graphiti.mm.pictograms.PictogramElement;
+
+public interface IArtifactSelection {
+	
+	/**
+	 * Set the handle to the  PictogramElement selected
+	 * 
+	 */
+	void setSelectedPictogramElement(PictogramElement pe);
+	/**
+	 * Set the handle to the  EObject selected
+	 * 
+	 */
+	void setSelectedEObjectElement(EObject eo);
+	/**
+	 * Set the handle to the  PictogramElement deleted
+	 * 
+	 */
+	void setDeletedPictogramElement(PictogramElement pe);
+	/**
+	 *  Set the handle to the  EObject deleted
+	 * 
+	 */
+	void setDeletedEObjectElement(EObject eo);
+	/**
+	 * Return a list of objects to which the menu item can be added
+	 * 
+	 * @return EnumSet Applicable UIElementType/s
+	 */
+	public EnumSet<UIElementType> getApplicableElements();
+
+}
diff --git a/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/features/ODataDeleteFeature.java b/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/features/ODataDeleteFeature.java
index 0855da4..774e16d 100644
--- a/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/features/ODataDeleteFeature.java
+++ b/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/features/ODataDeleteFeature.java
@@ -39,6 +39,7 @@
 import org.eclipse.ogee.designer.providers.ODataFeatureProvider;
 import org.eclipse.ogee.designer.utils.ArtifactUtil;
 import org.eclipse.ogee.designer.utils.IODataEditorConstants;
+import org.eclipse.ogee.designer.utils.ODataArtifactSelectionUtil;
 import org.eclipse.ogee.designer.utils.ODataLayoutUtil;
 import org.eclipse.ogee.designer.utils.ODataShapeUtil;
 import org.eclipse.ogee.designer.utils.PropertyUtil;
@@ -187,6 +188,10 @@
 			// this is to update referred PictogramElements.
 			ODataShapeUtil.updateReferedShapes((EObject) currentObject,
 					getFeatureProvider(), true);
+			// this is to update referred PictogramElements.
+			EObject businessObject = (EObject) currentObject;
+			ODataArtifactSelectionUtil.notifyRegisteredSubscribers(context
+						.getPictogramElement(), businessObject , ODataArtifactSelectionUtil.SelectionStatus.DELETED);
 		}
 
 	}
diff --git a/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/utils/IODataEditorConstants.java b/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/utils/IODataEditorConstants.java
index 4f43b1d..1d57577 100644
--- a/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/utils/IODataEditorConstants.java
+++ b/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/utils/IODataEditorConstants.java
@@ -404,5 +404,22 @@
 	 * The OData Perspective Id
 	 */
 	public static final String ODATA_PERSPECTIVE_ID = "org.eclipse.ogee.utils.perspective"; //$NON-NLS-1$
+	
+
+	/**
+	 * String Constant for Selection Extension Attribute "name"
+	 */
+	public static final String ODATA_ARTIFACT_SELECTION_ATTRIBUTE_NAME = Activator.PLUGIN_ID
+			+ ".artifactselection"; //$NON-NLS-1$
+	
+	/**
+	 * String Constant for artifact selection Extension Attribute "id"
+	 */
+	public static final String ARTIFACT_SELECTION_ATTRIBUTE_ID = "id"; //$NON-NLS-1$
+	
+	/**
+	 * String Constant for artifact selection Extension Attribute "class"
+	 */
+	public static final String ARTIFACT_SELECTION_ATTRIBUTE_CLASS = "class"; //$NON-NLS-1$
 
 }
diff --git a/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/utils/ODataArtifactSelectionUtil.java b/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/utils/ODataArtifactSelectionUtil.java
new file mode 100644
index 0000000..81d90d7
--- /dev/null
+++ b/org.eclipse.ogee.designer/src/org/eclipse/ogee/designer/utils/ODataArtifactSelectionUtil.java
@@ -0,0 +1,198 @@
+/*******************************************************************************
+ *  Copyright (c) 2012-2014 SAP SE.
+ *  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:
+ *  SAP SE - initial API and implementation and/or initial documentation
+ *
+ *******************************************************************************/
+package org.eclipse.ogee.designer.utils;
+
+import java.util.Collection;
+import java.util.EnumSet;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.graphiti.mm.pictograms.PictogramElement;
+import org.eclipse.ogee.designer.Activator;
+import org.eclipse.ogee.designer.contextmenu.IArtifactSelection;
+import org.eclipse.ogee.designer.contextmenu.UIElementType;
+import org.eclipse.ogee.model.odata.Association;
+import org.eclipse.ogee.model.odata.ComplexType;
+import org.eclipse.ogee.model.odata.EntitySet;
+import org.eclipse.ogee.model.odata.EntityType;
+import org.eclipse.ogee.model.odata.FunctionImport;
+import org.eclipse.ogee.utils.logger.Logger;
+
+/**
+ * This class will be used for to retrieve all
+ * implementations of artifact selection extension point.
+ * 
+ * 
+ */
+public class ODataArtifactSelectionUtil {
+	private static String[][] artifactSelectionOption = null;
+	
+	public enum SelectionStatus {
+		SELECTED , DELETED;
+	 
+	}
+
+	public static IConfigurationElement[] getArtifactSelectionExtensions() {
+
+		IConfigurationElement[] extensionMenuConfigElems = Platform
+				.getExtensionRegistry().getConfigurationElementsFor(
+						IODataEditorConstants.ODATA_ARTIFACT_SELECTION_ATTRIBUTE_NAME );
+		
+		return extensionMenuConfigElems;
+	}
+
+	/**
+	 * Returns Current current selection.
+	 * 
+	 * @param artifactSelectionId
+	 * 
+	 * @return IArtifactSelection Instance.
+	 */
+	public static IArtifactSelection getCurrentSelection(String artifactSelectionId) {
+		IArtifactSelection currentSelection = null;
+		String id = null;
+		String currentSelectionID = artifactSelectionId;
+
+		try {
+			IConfigurationElement[] contextMenuConfigElems = getArtifactSelectionExtensions();
+			for (IConfigurationElement iConfigurationElement : contextMenuConfigElems) {
+				id = iConfigurationElement
+						.getAttribute(IODataEditorConstants.ARTIFACT_SELECTION_ATTRIBUTE_ID );
+				if (id.equals(currentSelectionID)) {
+					currentSelection = (IArtifactSelection) iConfigurationElement
+							.createExecutableExtension(IODataEditorConstants.ARTIFACT_SELECTION_ATTRIBUTE_CLASS);
+					break;
+				}
+
+			}
+		} catch (CoreException e) {
+			Logger.getLogger(Activator.PLUGIN_ID).logError(e);
+		}
+
+		return currentSelection;
+	}
+
+	/**
+	 * This method is used in creating UI in Editor Context Menu. Creates a
+	 * String Array with name,id,parent_name,icon & key_binding with all
+	 * available context menus
+	 * 
+	 * 
+	 * @return String Array.
+	 */
+	public static String[][] getCurrentSelectionOption() {
+		String id = null;
+		String className = null;
+		String plugin_id = null;
+		IArtifactSelection currentSelection = null;
+
+		if (artifactSelectionOption == null) {
+			IConfigurationElement[] contextMenuExtensions = getArtifactSelectionExtensions();
+			Map<String, IConfigurationElement> filteredExtensions = new LinkedHashMap<String, IConfigurationElement>();
+			for (IConfigurationElement iConfigurationElement : contextMenuExtensions) {
+				id = iConfigurationElement
+						.getAttribute(IODataEditorConstants.ARTIFACT_SELECTION_ATTRIBUTE_ID);
+				className = iConfigurationElement
+						.getAttribute(IODataEditorConstants.ARTIFACT_SELECTION_ATTRIBUTE_CLASS);
+				if (id != null && !id.isEmpty() && className != null
+						&& !className.isEmpty()) {
+					try {
+						currentSelection = (IArtifactSelection) iConfigurationElement
+								.createExecutableExtension(IODataEditorConstants.ARTIFACT_SELECTION_ATTRIBUTE_CLASS);
+						if (currentSelection != null) {
+							filteredExtensions.put(id, iConfigurationElement);
+						}
+
+					} catch (CoreException e) {
+						Logger.getLogger(Activator.PLUGIN_ID).logError(e);
+					}
+
+				}
+			}
+			int counter = 0;
+			Collection<String> filteredKeys = filteredExtensions.keySet();
+			artifactSelectionOption = new String[filteredKeys.size()][2];
+			IConfigurationElement iConfigurationElement = null;
+			for (String key : filteredKeys) {
+				iConfigurationElement = filteredExtensions.get(key);
+				id = iConfigurationElement
+						.getAttribute(IODataEditorConstants.ARTIFACT_SELECTION_ATTRIBUTE_ID);
+				artifactSelectionOption[counter][0] = id;
+				plugin_id = iConfigurationElement.getContributor().getName();
+				artifactSelectionOption[counter++][1] = plugin_id;
+			}
+		}
+		return artifactSelectionOption;
+	}
+	
+	public static void notifyRegisteredSubscribers( PictogramElement pe, EObject eo , SelectionStatus status){
+		String[][] selectionOptions = ODataArtifactSelectionUtil.getCurrentSelectionOption();
+		String contextMenuId = null;
+		if (selectionOptions .length > 0){
+			for (int i = 0; i < selectionOptions.length; i++) {
+				contextMenuId = selectionOptions[i][0];
+				IArtifactSelection artifactSelectionFeature = ODataArtifactSelectionUtil.getCurrentSelection(contextMenuId);
+				EnumSet<UIElementType> uiElementTypeSet = artifactSelectionFeature
+						.getApplicableElements();
+				if(uiElementTypeSet != null){
+					for (UIElementType uiElementType : uiElementTypeSet) {
+						if(isArtifactSelectedApplicable(uiElementType,eo) && status == SelectionStatus.SELECTED){
+							artifactSelectionFeature.setSelectedEObjectElement(eo);
+							artifactSelectionFeature.setSelectedPictogramElement(pe);
+						}
+						if(!isArtifactSelectedApplicable(uiElementType,eo) && status == SelectionStatus.SELECTED){
+							artifactSelectionFeature.setSelectedEObjectElement(null);
+							artifactSelectionFeature.setSelectedPictogramElement(null);
+						}
+						if(isArtifactSelectedApplicable(uiElementType,eo) && status == SelectionStatus.DELETED){
+							artifactSelectionFeature.setDeletedEObjectElement(eo);
+							artifactSelectionFeature.setDeletedPictogramElement(pe);
+						}
+					}
+				}
+				
+				
+			}
+		}
+			
+	}
+	
+	public static boolean isArtifactSelectedApplicable(UIElementType elementType , EObject elementEObject){
+		boolean isRequiredElement = false;
+		switch(elementType){
+		case ENTITY_TYPE:
+			isRequiredElement = (elementEObject instanceof EntityType) ? true : false;
+			break;
+		case ASSOCIATION:
+			isRequiredElement = (elementEObject instanceof Association) ? true : false;
+			break;
+		case COMPLEX_TYPE:
+			isRequiredElement = (elementEObject instanceof ComplexType) ? true : false;
+			break;
+		case FUNCTION_IMPORT:
+			isRequiredElement = (elementEObject instanceof FunctionImport) ? true : false;
+			break;
+		case ENTITY_SET:
+			isRequiredElement = (elementEObject instanceof EntitySet) ? true : false;
+			break;
+		default:
+			isRequiredElement = false;
+		}
+		return isRequiredElement ;
+		
+	}
+
+}
