diff --git a/DDEve/include/DDEve/Display.h b/DDEve/include/DDEve/Display.h
index 6442f74cefb9ecf8aedd0881b9c5de24e46adcbd..19d82581ffe7c4d06174abf3383a71f9f8373ffd 100644
--- a/DDEve/include/DDEve/Display.h
+++ b/DDEve/include/DDEve/Display.h
@@ -101,6 +101,8 @@ namespace DD4hep {
     int m_visLevel;
     /// Load level for the eve geometry
     int m_loadLevel;
+    /// Name of the event handler plugin
+    std::string m_eventHandlerName;
   public:
     /// Standard constructor
     Display(TEveManager* eve);
@@ -117,6 +119,10 @@ namespace DD4hep {
     void setVisLevel(int new_level)                      { m_visLevel = new_level;    }
     /// Set Eve Geometry load level in manager (either from XML or BEFORE XML file was loaded)
     void setLoadLevel(int new_level)                     { m_loadLevel = new_level;   }
+    /// Set Event Handler Plugin name
+    void setEventHandlerName(std::string eventHandlerName) {m_eventHandlerName = eventHandlerName;}
+    /// Get Event Handler Plugin name
+    std::string getEventHandlerName() {return m_eventHandlerName;}
 
     /// Access to X-client
     TGClient& client() const;
diff --git a/DDEve/src/Display.cpp b/DDEve/src/Display.cpp
index 71a0256ae8bb3440d8eb802e0b59797fdcebcc05..48fc9550713c9373e83c4b9851f48ae9b830ab79 100644
--- a/DDEve/src/Display.cpp
+++ b/DDEve/src/Display.cpp
@@ -62,7 +62,7 @@ using namespace DD4hep::Geometry;
 ClassImp(Display)
 
 namespace DD4hep {
-  void EveDisplay(const char* xmlConfig = 0)  {
+  void EveDisplay(const char* xmlConfig = 0, const char* eventFileName = 0)  {
     Display* display = new Display(TEveManager::Create(true,"VI"));
     if ( xmlConfig != 0 )   {
       char text[PATH_MAX];
@@ -79,6 +79,9 @@ namespace DD4hep {
       display->ChooseGeometry();
       //display->LoadXML("file:../DD4hep/examples/CLICSiD/compact/DDEve.xml");
     }
+    if (eventFileName != 0) {
+      display->eventHandler().Open(display->getEventHandlerName(),eventFileName);
+    }
   }
 }
 
@@ -157,7 +160,9 @@ void Display::LoadXML(const char* xmlFile)     {
   if ( m_dd4Menu && !m_geoTopics.empty() )   {
     m_dd4Menu->OnGeometryLoaded();
   }
+
   m_eve->FullRedraw3D(kTRUE); // Reset camera 
+  BuildMenus(m_eve->GetBrowser()->GetMenuBar());
 }
 
 /// Load geometry from compact xml file
@@ -168,7 +173,6 @@ void Display::LoadGeometryRoot(const char* /* rootFile */)     {
 /// Load geometry with panel
 void Display::ChooseGeometry()   {
   m_dd4Menu->OnLoadXML(0,0);
-  BuildMenus(m_eve->GetBrowser()->GetMenuBar());
 }
 
 /// Access to geometry hub
diff --git a/DDEve/src/DisplayConfigurationParser.cpp b/DDEve/src/DisplayConfigurationParser.cpp
index 5f4117533346c9ea7922f043f0066dba2af9a521..3dd5a87b9f27e69a2d1d04281d22a15cd2394ad0 100644
--- a/DDEve/src/DisplayConfigurationParser.cpp
+++ b/DDEve/src/DisplayConfigurationParser.cpp
@@ -264,6 +264,7 @@ template <> void Converter<include>::operator()(xml_h e)  const  {
 template <> void Converter<display>::operator()(xml_h e)  const  {
   Display* d = (Display*)param;
   if ( e.hasAttr(_Unicode(visLevel)) ) d->setVisLevel(e.attr<int>(_Unicode(visLevel)));
+  if ( e.hasAttr(_Unicode(eventHandler)) ) d->setEventHandlerName(e.attr<std::string>(_Unicode(eventHandler)));
   if ( e.hasAttr(_Unicode(loadLevel)) ) d->setLoadLevel(e.attr<int>(_Unicode(loadLevel)));
 }
 
diff --git a/DDEve/src/EventControl.cpp b/DDEve/src/EventControl.cpp
index 0cbd788713576238d33681f8f4440b0f87e1b04a..88c1000485c3ba2cae42ec2661b606fdd69f0119 100644
--- a/DDEve/src/EventControl.cpp
+++ b/DDEve/src/EventControl.cpp
@@ -82,7 +82,7 @@ bool EventControl::Open()   {
 
   std::string fname = m_display->OpenEventFileDialog(".");
   if ( !fname.empty() )  {
-    return m_display->eventHandler().Open("",fname);
+    return m_display->eventHandler().Open(m_display->getEventHandlerName(),fname);
   }
   return false;
 }
diff --git a/DDEve/src/GenericEventHandler.cpp b/DDEve/src/GenericEventHandler.cpp
index 1e4b2a59cfbf912fc021197f7dd58f22915a179a..a5e9e3dcdb5b5702fd1babcc800f4050bb2c1089 100644
--- a/DDEve/src/GenericEventHandler.cpp
+++ b/DDEve/src/GenericEventHandler.cpp
@@ -106,7 +106,12 @@ bool GenericEventHandler::Open(const string& file_type, const string& file_name)
   m_hasEvent = false;
   try  {
     deletePtr(m_current);
-    if ( idx != string::npos )   {
+    //  prefer event handler configured in xml
+    if ( file_type.find("FCC") != string::npos ) {
+      m_current = (EventHandler*)PluginService::Create<void*>("DDEve_FCCEventHandler",(const char*)0);
+    }
+    // fall back to defaults according to file ending
+    else if ( idx != string::npos )   {
       m_current = (EventHandler*)PluginService::Create<void*>("DDEve_LCIOEventHandler",(const char*)0);
     }
     else if ( idr != string::npos )   {