Index: tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/swt/ChartComposite.java
===================================================================
--- tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/swt/ChartComposite.java	(revision 1990)
+++ tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/swt/ChartComposite.java	(revision 1991)
@@ -5,9 +5,13 @@
 import java.util.ArrayList;
 import java.util.EventListener;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Menu;
 import org.txm.chartsengine.core.ChartsEngine;
+import org.txm.chartsengine.core.preferences.ChartsEnginePreferences;
 import org.txm.chartsengine.core.results.ChartResult;
 import org.txm.chartsengine.rcp.IChartComponent;
 import org.txm.chartsengine.rcp.editors.ChartEditor;
@@ -128,25 +132,36 @@
 	 * @param chartEditorInput
 	 * @return
 	 */
-	public boolean createChartComponent()	{
+	public void createChartComponent()	{
 		
-		if (!this.chartEditor.getResult().isChartDirty()) {
+	//	if (!this.chartEditor.getResult().isChartDirty()) {
 			
 			Log.finest(this.getClass().getSimpleName() + ": creating a chart component...");
 			
 			this.chartComponent = this._createChartComponent();
 			this.chartComponent.setChartEditor(this.chartEditor);
 			
-			return true;
-		}
-		else	{
-			return false;
-		}
+			// initialize the default shared context menus as Export, etc.
+			this.initDefaultContextMenus();
+			// initialize Listeners.
+			this.initEventsListeners();
+			// register user entries event call back extensions
+			this.registerEventCallBackExtensions();
+
+			
+		//	return true;
+//		}
+//		else	{
+//			return false;
+//		}
 	}
 	
+	/**
+	 * Initializes event listeners.
+	 */
+	public abstract void initEventsListeners();
 	
 	
-	
 	/**
 	 * Creates the pop up menu dedicated to empty area location click event that is populated from plugin.xml.
 	 */
@@ -395,6 +410,70 @@
 
 	
 	/**
+	 * Registers user entries event call back extensions.
+	 */
+	public void registerEventCallBackExtensions()	{
+		
+		ChartResult result = this.chartEditor.getResult();
+		
+		String extensionPointId = "org.txm.chartsengine.eventcallback"; //$NON-NLS-1$
+		IConfigurationElement[] contributions = Platform.getExtensionRegistry().getConfigurationElementsFor(extensionPointId);
+		
+		for(int i = 0; i < contributions.length; i++) {
+			if(
+				(
+						contributions[i].getAttribute("chartsEngineName") == null || //$NON-NLS-1$ // for callback that can be used for all charts engine implementations 
+						contributions[i].getAttribute("chartsEngineName").equals(result.getChartsEngine().getName()) //$NON-NLS-1$
+				)
+				&&
+				contributions[i].getAttribute("resultDataClass") != null //$NON-NLS-1$
+				&& contributions[i].getAttribute("resultDataClass").equals(result.getClass().getName()) //$NON-NLS-1$
+				
+				&& ((contributions[i].getAttribute("chartType") == null && result.getChartType().equals(ChartsEnginePreferences.DEFAULT_CHART_TYPE) //$NON-NLS-1$
+					||
+					contributions[i].getAttribute("chartType") != null && !result.getChartType().equals(ChartsEnginePreferences.DEFAULT_CHART_TYPE) && contributions[i].getAttribute("chartType").equals(result.getChartType()) //$NON-NLS-1$ //$NON-NLS-2$
+					)  //$NON-NLS-1$
+				)
+				
+			)	{
+				try {
+					EventCallBack eventCallBack = (EventCallBack)contributions[i].createExecutableExtension("class");  //$NON-NLS-1$
+					
+					eventCallBack.setChartEditor(this.chartEditor);
+					
+					EventCallBackHandler mouseHandler = this.getMouseCallBackHandler();
+					if(mouseHandler != null && mouseHandler.getEventCallBack(eventCallBack.getClass()) == null)	 {
+
+						Log.fine("ChartEditor.registerEventCallBackExtensions(): call back of type " + eventCallBack.getClass()  //$NON-NLS-1$
+								+ " registered in mouse handler (chart editor = " + this.chartEditor.getClass()  //$NON-NLS-1$
+								+ ", result data class = " + result.getClass()  //$NON-NLS-1$
+								+ ", chart type = " + result.getChartType()  //$NON-NLS-1$
+								+ ").");  //$NON-NLS-1$
+						
+						mouseHandler.registerEventCallBack(eventCallBack);
+					}
+					EventCallBackHandler keyboardHandler = this.getKeyCallBackHandler();
+					if(keyboardHandler != null && keyboardHandler.getEventCallBack(eventCallBack.getClass()) == null)	 {
+						
+						Log.fine("ChartEditor.registerEventCallBackExtensions(): call back of type " + eventCallBack.getClass()  //$NON-NLS-1$
+								+ " registered in key handler (chart editor = " + this.chartEditor.getClass()  //$NON-NLS-1$
+								+ ", result data class = " + result.getClass()  //$NON-NLS-1$
+								+ ", chart type = " + result.getChartType()  //$NON-NLS-1$
+								+ ").");  //$NON-NLS-1$
+						
+						keyboardHandler.registerEventCallBack(eventCallBack);
+					}
+				}
+				catch(CoreException e) {
+					e.printStackTrace();
+				}
+				break;
+			}
+		}
+		
+	}
+	
+	/**
 	 * Gets the chart component dedicated to rendering the chart.
 	 * @return the chartComponent
 	 */
