You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2018/10/12 11:26:39 UTC

[camel] 35/44: Introduce CamelEvent spi interface

This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 21378f2a7d4a2f9e75beeeb697ccb8751458986f
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Mon Oct 8 14:24:58 2018 +0200

    Introduce CamelEvent spi interface
---
 .../java/org/apache/camel/StartupListener.java     |   2 +-
 .../main/java/org/apache/camel/spi/Breakpoint.java |   7 +-
 .../main/java/org/apache/camel/spi/CamelEvent.java | 282 +++++++++++++++++++++
 .../main/java/org/apache/camel/spi/Condition.java  |   9 +-
 .../main/java/org/apache/camel/spi/Debugger.java   |   6 +-
 .../java/org/apache/camel/spi/EventFactory.java    | 104 ++++----
 .../java/org/apache/camel/spi/EventNotifier.java   |   6 +-
 .../org/apache/camel/spi/ManagementStrategy.java   |   3 +-
 .../org/apache/camel/builder/NotifyBuilder.java    |  14 +-
 .../org/apache/camel/impl/BreakpointSupport.java   |   3 +-
 .../org/apache/camel/impl/ConditionSupport.java    |   5 +-
 .../org/apache/camel/impl/DefaultDebugger.java     |  26 +-
 .../camel/impl/DefaultRuntimeEndpointRegistry.java |  14 +-
 .../camel/impl/SupervisingRouteController.java     |   8 +-
 .../camel/impl/cluster/ClusteredRoutePolicy.java   |   8 +-
 .../camel/main/MainDurationEventNotifier.java      |  12 +-
 .../management/DefaultManagementStrategy.java      |   4 +-
 .../management/JmxNotificationEventNotifier.java   |   6 +-
 .../camel/management/LoggingEventNotifier.java     |   7 +-
 .../camel/management/PublishEventNotifier.java     |   5 +-
 .../management/event/AbstractContextEvent.java     |   3 +-
 .../management/event/AbstractExchangeEvent.java    |   3 +-
 .../camel/management/event/AbstractRouteEvent.java |   3 +-
 .../event/CamelContextResumeFailureEvent.java      |   3 +-
 .../management/event/CamelContextResumedEvent.java |   3 +-
 .../event/CamelContextResumingEvent.java           |   3 +-
 .../management/event/CamelContextStartedEvent.java |   3 +-
 .../event/CamelContextStartingEvent.java           |   3 +-
 .../event/CamelContextStartupFailureEvent.java     |   3 +-
 .../event/CamelContextStopFailureEvent.java        |   3 +-
 .../management/event/CamelContextStoppedEvent.java |   3 +-
 .../event/CamelContextStoppingEvent.java           |   3 +-
 .../event/CamelContextSuspendedEvent.java          |   3 +-
 .../event/CamelContextSuspendingEvent.java         |   3 +-
 .../management/event/DefaultEventFactory.java      |  53 ++--
 .../management/event/ExchangeCompletedEvent.java   |   3 +-
 .../management/event/ExchangeCreatedEvent.java     |   3 +-
 .../management/event/ExchangeFailedEvent.java      |   3 +-
 .../event/ExchangeFailureHandledEvent.java         |   3 +-
 .../event/ExchangeFailureHandlingEvent.java        |   3 +-
 .../management/event/ExchangeRedeliveryEvent.java  |   3 +-
 .../management/event/ExchangeSendingEvent.java     |   5 +-
 .../camel/management/event/ExchangeSentEvent.java  |   7 +-
 .../camel/management/event/FailureEvent.java       |  26 --
 .../camel/management/event/RouteAddedEvent.java    |   3 +-
 .../camel/management/event/RouteRemovedEvent.java  |   3 +-
 .../camel/management/event/RouteStartedEvent.java  |   3 +-
 .../camel/management/event/RouteStoppedEvent.java  |   3 +-
 .../event/ServiceStartupFailureEvent.java          |   3 +-
 .../management/event/ServiceStopFailureEvent.java  |   3 +-
 .../processor/interceptor/BacklogDebugger.java     |  12 +-
 .../java/org/apache/camel/support/EventHelper.java |  54 ++--
 .../throttling/ThrottlingInflightRoutePolicy.java  |   8 +-
 .../camel/impl/FileWatcherReloadStrategyTest.java  |  12 +-
 .../issues/SentExchangeEventNotifierIssueTest.java |   9 +-
 .../SentExchangeEventNotifierTwoIssueTest.java     |   7 +-
 .../camel/management/AddEventNotifierTest.java     |   7 +-
 .../camel/management/EventNotifierEventsTest.java  |   7 +-
 .../EventNotifierExchangeCompletedTest.java        |   9 +-
 .../EventNotifierExchangeSentParallelTest.java     |   5 +-
 .../management/EventNotifierExchangeSentTest.java  |  11 +-
 .../EventNotifierFailureHandledEventsTest.java     |   7 +-
 .../EventNotifierRedeliveryEventsTest.java         |   9 +-
 ...ventNotifierServiceStoppingFailedEventTest.java |   7 +-
 .../management/ManagedCamelContextRestartTest.java |   6 +-
 .../MultipleEventNotifierEventsTest.java           |  13 +-
 .../camel/management/RemoveEventNotifierTest.java  |   9 +-
 .../processor/EventNotifierExchangeSentTest.java   |   2 +-
 .../camel/processor/MyLoggingSentEventNotifer.java |   9 +-
 .../camel/processor/MySentEventNotifier.java       |  12 +-
 .../camel/processor/PipelineStepWithEventTest.java |  10 +
 ...litterUseOriginalNotPropagateExceptionTest.java |   9 +-
 .../camel/processor/UnitOfWorkProducerTest.java    |  11 +-
 .../AsyncEndpointEventNotifierSendingTest.java     |  12 +-
 .../async/AsyncEndpointEventNotifierTest.java      |   8 +-
 .../processor/enricher/EnricherSendEventTest.java  |   9 +-
 .../DebugExceptionEventBreakpointTest.java         |  14 +-
 .../camel/processor/interceptor/DebugTest.java     |   9 +-
 .../DynamicRouterEventNotifierTest.java            |  11 +-
 .../RecipientListEventNotifierTest.java            |  11 +-
 .../routingslip/RoutingSlipEventNotifierTest.java  |  11 +-
 .../org/apache/camel/util/EventHelperTest.java     |  16 +-
 .../camel/component/aws/xray/XRayTracer.java       |  13 +-
 .../org/apache/camel/cdi/CdiCamelExtension.java    |   6 +-
 .../org/apache/camel/cdi/CdiEventConsumer.java     |   6 +-
 .../org/apache/camel/cdi/CdiEventNotifier.java     |  22 +-
 .../camel/cdi/test/CamelEventEndpointTest.java     |  13 +-
 .../camel/cdi/test/CamelEventNotifierTest.java     |  22 +-
 .../cdi/test/CamelRouteEventNotifierTest.java      |  52 ++--
 .../cdi/test/MultiContextEventNotifierTest.java    |  30 +--
 .../camel/core/osgi/OsgiCamelContextPublisher.java |  22 +-
 .../camel/core/osgi/OsgiEventAdminNotifier.java    |  15 +-
 .../AbstractMicrometerEventNotifier.java           |   8 +-
 .../MicrometerExchangeEventNotifier.java           |  25 +-
 ...rometerExchangeEventNotifierNamingStrategy.java |   6 +-
 .../MicrometerRouteEventNotifier.java              |  19 +-
 ...MicrometerRouteEventNotifierNamingStrategy.java |   6 +-
 .../component/nagios/NagiosEventNotifier.java      |  23 +-
 .../camel/opentracing/OpenTracingTracer.java       |   9 +-
 .../apache/camel/spring/boot/RoutesCollector.java  |  12 +-
 .../boot/actuate/endpoint/CamelRoutesEndpoint.java |   2 +-
 .../camel/spring/boot/model/RouteDetails.java      |   2 +-
 .../camel/spring/boot/CamelEventNotifierTest.java  |   6 +-
 .../camel/spring/StartAndStopEventNotifier.java    |  14 +-
 .../camel/spring/management/MyEventNotifier.java   |  10 +-
 .../test/spring/RouteCoverageEventNotifier.java    |   9 +-
 .../java/org/apache/camel/zipkin/ZipkinTracer.java |  27 +-
 .../en/release-notes/camel-2170-release.adoc       |   2 +-
 .../camel/example/cdi/metrics/Application.java     |   3 +-
 .../camel/example/cdi/properties/Application.java  |   2 +-
 .../example/cdi/properties/CdiPropertiesTest.java  |   2 +-
 .../apache/camel/example/cdi/test/Application.java |   4 +-
 .../apache/camel/example/cdi/test/AdviceTest.java  |   2 +-
 .../apache/camel/example/cdi/xml/Application.java  |   2 +-
 .../apache/camel/example/cdi/xml/CdiXmlTest.java   |   3 +-
 .../main/java/sample/camel/ClientApplication.java  |   2 +-
 .../main/java/sample/camel/ClientApplication.java  |   2 +-
 117 files changed, 870 insertions(+), 579 deletions(-)

diff --git a/camel-api/src/main/java/org/apache/camel/StartupListener.java b/camel-api/src/main/java/org/apache/camel/StartupListener.java
index 187828a..4184dcb 100644
--- a/camel-api/src/main/java/org/apache/camel/StartupListener.java
+++ b/camel-api/src/main/java/org/apache/camel/StartupListener.java
@@ -31,7 +31,7 @@ package org.apache.camel;
  * <p/>
  * <b>Important:</b> You cannot use this listener to add and start new routes to the {@link CamelContext} as this is not
  * supported by design, as this listener plays a role during starting up routes. Instead you can use an {@link org.apache.camel.spi.EventNotifier}
- * and listen on the {@link org.apache.camel.management.event.CamelContextStartedEvent} event and then add and start new routes from there.
+ * and listen on the {@link org.apache.camel.spi.CamelEvent.CamelContextStartedEvent} event and then add and start new routes from there.
  * Instead use the {@link ExtendedStartupListener} if you wish to add new routes.
  *
  * @see ExtendedStartupListener
diff --git a/camel-api/src/main/java/org/apache/camel/spi/Breakpoint.java b/camel-api/src/main/java/org/apache/camel/spi/Breakpoint.java
index 04b3798..bbe9873 100644
--- a/camel-api/src/main/java/org/apache/camel/spi/Breakpoint.java
+++ b/camel-api/src/main/java/org/apache/camel/spi/Breakpoint.java
@@ -21,6 +21,7 @@ import java.util.EventObject;
 import org.apache.camel.Exchange;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
 
 /**
  * {@link org.apache.camel.spi.Breakpoint} are used by the {@link org.apache.camel.spi.Debugger} API.
@@ -81,11 +82,11 @@ public interface Breakpoint {
      * Callback invoked when the breakpoint was hit and any of the {@link Exchange} {@link EventObject event}s occurred.
      *
      * @param exchange   the {@link Exchange}
-     * @param event      the event (instance of {@link org.apache.camel.management.event.AbstractExchangeEvent}
+     * @param event      the event (instance of {@link ExchangeEvent}
      * @param definition the {@link NamedNode} definition of the last processor executed,
      *                   may be <tt>null</tt> if not possible to resolve from tracing
-     * @see org.apache.camel.management.event.AbstractExchangeEvent
+     * @see ExchangeEvent
      */
-    void onEvent(Exchange exchange, EventObject event, NamedNode definition);
+    void onEvent(Exchange exchange, ExchangeEvent event, NamedNode definition);
 
 }
diff --git a/camel-api/src/main/java/org/apache/camel/spi/CamelEvent.java b/camel-api/src/main/java/org/apache/camel/spi/CamelEvent.java
new file mode 100644
index 0000000..c8a2ac2
--- /dev/null
+++ b/camel-api/src/main/java/org/apache/camel/spi/CamelEvent.java
@@ -0,0 +1,282 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spi;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.Route;
+
+/**
+ * This interface is implemented by all events.
+ */
+public interface CamelEvent {
+
+    enum Type {
+        CamelContextResumed,
+        CamelContextResumeFailure,
+        CamelContextResuming,
+        CamelContextStarted,
+        CamelContextStarting,
+        CamelContextStartupFailure,
+        CamelContextStopFailure,
+        CamelContextStopped,
+        CamelContextStopping,
+        CamelContextSuspended,
+        CamelContextSuspending,
+        ExchangeCompleted,
+        ExchangeCreated,
+        ExchangeFailed,
+        ExchangeFailureHandled,
+        ExchangeFailureHandling,
+        ExchangeRedelivery,
+        ExchangeSending,
+        ExchangeSent,
+        RouteAdded,
+        RouteRemoved,
+        RouteStarted,
+        RouteStopped,
+        ServiceStartupFailure,
+        ServiceStopFailure,
+        Custom
+    }
+
+    Type getType();
+
+    Object getSource();
+
+    /**
+     * This interface is implemented by all events that contain an exception and is used to
+     * retrieve the exception in a universal way.
+     */
+    interface FailureEvent extends CamelEvent {
+
+        Throwable getCause();
+
+    }
+
+    interface CamelContextEvent extends CamelEvent {
+
+        CamelContext getContext();
+
+        default Object getSource() {
+            return getContext();
+        }
+
+    }
+
+    interface CamelContextResumedEvent extends CamelContextEvent {
+        default Type getType() {
+            return Type.CamelContextResumed;
+        }
+    }
+
+    interface CamelContextResumeFailureEvent extends CamelContextEvent, FailureEvent {
+        default Type getType() {
+            return Type.CamelContextResumeFailure;
+        }
+    }
+
+    interface CamelContextResumingEvent extends CamelContextEvent {
+        default Type getType() {
+            return Type.CamelContextResuming;
+        }
+    }
+
+    interface CamelContextStartedEvent extends CamelContextEvent {
+        default Type getType() {
+            return Type.CamelContextStarted;
+        }
+    }
+
+    interface CamelContextStartingEvent extends CamelContextEvent {
+        default Type getType() {
+            return Type.CamelContextStarting;
+        }
+    }
+
+    interface CamelContextStartupFailureEvent extends CamelContextEvent, FailureEvent {
+        default Type getType() {
+            return Type.CamelContextStartupFailure;
+        }
+    }
+
+    interface CamelContextStopFailureEvent extends CamelContextEvent, FailureEvent {
+        default Type getType() {
+            return Type.CamelContextStopFailure;
+        }
+    }
+
+    interface CamelContextStoppedEvent extends CamelContextEvent {
+        default Type getType() {
+            return Type.CamelContextStopped;
+        }
+    }
+
+    interface CamelContextStoppingEvent extends CamelContextEvent {
+        default Type getType() {
+            return Type.CamelContextStopping;
+        }
+    }
+
+    interface CamelContextSuspendedEvent extends CamelContextEvent {
+        default Type getType() {
+            return Type.CamelContextSuspended;
+        }
+    }
+
+    interface CamelContextSuspendingEvent extends CamelContextEvent {
+        default Type getType() {
+            return Type.CamelContextSuspending;
+        }
+    }
+
+    interface ExchangeEvent extends CamelEvent {
+
+        Exchange getExchange();
+
+        default Object getSource() {
+            return getExchange();
+        }
+    }
+
+    interface ExchangeCompletedEvent extends ExchangeEvent {
+        default Type getType() {
+            return Type.ExchangeCompleted;
+        }
+    }
+
+    interface ExchangeCreatedEvent extends ExchangeEvent {
+        default Type getType() {
+            return Type.ExchangeCreated;
+        }
+    }
+
+    interface ExchangeFailedEvent extends ExchangeEvent, FailureEvent {
+        default Type getType() {
+            return Type.ExchangeFailed;
+        }
+
+    }
+
+    interface ExchangeFailureEvent extends ExchangeEvent {
+
+        Processor getFailureHandler();
+
+        boolean isDeadLetterChannel();
+
+        String getDeadLetterUri();
+
+    }
+
+    interface ExchangeFailureHandledEvent extends ExchangeFailureEvent {
+        default Type getType() {
+            return Type.ExchangeFailureHandled;
+        }
+    }
+
+    interface ExchangeFailureHandlingEvent extends ExchangeFailureEvent {
+        default Type getType() {
+            return Type.ExchangeFailureHandling;
+        }
+    }
+
+    interface ExchangeRedeliveryEvent extends ExchangeEvent {
+
+        int getAttempt();
+
+        default Type getType() {
+            return Type.ExchangeRedelivery;
+        }
+    }
+
+    interface ExchangeSendingEvent extends ExchangeEvent {
+
+        Endpoint getEndpoint();
+
+        default Type getType() {
+            return Type.ExchangeSending;
+        }
+    }
+
+    interface ExchangeSentEvent extends ExchangeEvent {
+
+        Endpoint getEndpoint();
+
+        long getTimeTaken();
+
+        default Type getType() {
+            return Type.ExchangeSent;
+        }
+    }
+
+    interface RouteEvent extends CamelEvent {
+
+        Route getRoute();
+
+        default Object getSource() {
+            return getRoute();
+        }
+    }
+
+    interface RouteAddedEvent extends RouteEvent {
+        default Type getType() {
+            return Type.RouteAdded;
+        }
+    }
+
+    interface RouteRemovedEvent extends RouteEvent {
+        default Type getType() {
+            return Type.RouteRemoved;
+        }
+    }
+
+    interface RouteStartedEvent extends RouteEvent {
+        default Type getType() {
+            return Type.RouteStarted;
+        }
+    }
+
+    interface RouteStoppedEvent extends RouteEvent {
+        default Type getType() {
+            return Type.RouteStopped;
+        }
+    }
+
+    interface ServiceEvent extends CamelEvent {
+
+        Object getService();
+
+        default Object getSource() {
+            return getService();
+        }
+    }
+
+    interface ServiceStartupFailureEvent extends ServiceEvent, FailureEvent {
+        default Type getType() {
+            return Type.ServiceStartupFailure;
+        }
+    }
+
+    interface ServiceStopFailureEvent extends ServiceEvent, FailureEvent {
+        default Type getType() {
+            return Type.ServiceStopFailure;
+        }
+    }
+
+}
diff --git a/camel-api/src/main/java/org/apache/camel/spi/Condition.java b/camel-api/src/main/java/org/apache/camel/spi/Condition.java
index afb81ad..c39891e 100644
--- a/camel-api/src/main/java/org/apache/camel/spi/Condition.java
+++ b/camel-api/src/main/java/org/apache/camel/spi/Condition.java
@@ -16,11 +16,10 @@
  */
 package org.apache.camel.spi;
 
-import java.util.EventObject;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
 
 /**
  * A condition to define when a given {@link Exchange} matches when is being routed.
@@ -44,10 +43,10 @@ public interface Condition {
      * Does the condition match
      *
      * @param exchange the exchange
-     * @param event    the event (instance of {@link org.apache.camel.management.event.AbstractExchangeEvent}
+     * @param event    the event (instance of {@link ExchangeEvent}
      * @return <tt>true</tt> to match, <tt>false</tt> otherwise
-     * @see org.apache.camel.management.event.AbstractExchangeEvent
+     * @see ExchangeEvent
      */
-    boolean matchEvent(Exchange exchange, EventObject event);
+    boolean matchEvent(Exchange exchange, ExchangeEvent event);
 
 }
diff --git a/camel-api/src/main/java/org/apache/camel/spi/Debugger.java b/camel-api/src/main/java/org/apache/camel/spi/Debugger.java
index 6930d59..1a28f84 100644
--- a/camel-api/src/main/java/org/apache/camel/spi/Debugger.java
+++ b/camel-api/src/main/java/org/apache/camel/spi/Debugger.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.spi;
 
-import java.util.EventObject;
 import java.util.List;
 
 import org.apache.camel.CamelContextAware;
@@ -24,6 +23,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.Service;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
 
 /**
  * A debugger which allows tooling to attach breakpoints which is is being invoked
@@ -136,9 +136,9 @@ public interface Debugger extends Service, CamelContextAware {
      * to notify breakpoints.
      *
      * @param exchange the exchange
-     * @param event    the event (instance of {@link org.apache.camel.management.event.AbstractExchangeEvent}
+     * @param event    the event (instance of {@link ExchangeEvent}
      * @return <tt>true</tt> if any breakpoint was hit, <tt>false</tt> if not breakpoint was hit
      */
-    boolean onEvent(Exchange exchange, EventObject event);
+    boolean onEvent(Exchange exchange, ExchangeEvent event);
 
 }
diff --git a/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java b/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java
index 84e443b..f699a48 100644
--- a/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java
+++ b/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.spi;
 
-import java.util.EventObject;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
@@ -25,140 +23,140 @@ import org.apache.camel.Processor;
 import org.apache.camel.Route;
 
 /**
- * Factory to create {@link java.util.EventObject events} that are emitted when such an event occur.
+ * Factory to create {@link CamelEvent events} that are emitted when such an event occur.
  * <p/>
  * For example when an {@link Exchange} is being created and then later when its done.
  */
 public interface EventFactory {
 
     /**
-     * Creates an {@link EventObject} for Camel is starting.
+     * Creates an {@link CamelEvent} for Camel is starting.
      *
      * @param context camel context
      * @return the created event
      */
-    EventObject createCamelContextStartingEvent(CamelContext context);
+    CamelEvent createCamelContextStartingEvent(CamelContext context);
 
     /**
-     * Creates an {@link EventObject} for Camel has been started successfully.
+     * Creates an {@link CamelEvent} for Camel has been started successfully.
      *
      * @param context camel context
      * @return the created event
      */
-    EventObject createCamelContextStartedEvent(CamelContext context);
+    CamelEvent createCamelContextStartedEvent(CamelContext context);
 
     /**
-     * Creates an {@link EventObject} for Camel failing to start
+     * Creates an {@link CamelEvent} for Camel failing to start
      *
      * @param context camel context
      * @param cause   the cause exception
      * @return the created event
      */
-    EventObject createCamelContextStartupFailureEvent(CamelContext context, Throwable cause);
+    CamelEvent createCamelContextStartupFailureEvent(CamelContext context, Throwable cause);
 
     /**
-     * Creates an {@link EventObject} for Camel failing to stop cleanly
+     * Creates an {@link CamelEvent} for Camel failing to stop cleanly
      *
      * @param context camel context
      * @param cause   the cause exception
      * @return the created event
      */
-    EventObject createCamelContextStopFailureEvent(CamelContext context, Throwable cause);
+    CamelEvent createCamelContextStopFailureEvent(CamelContext context, Throwable cause);
 
     /**
-     * Creates an {@link EventObject} for Camel is stopping.
+     * Creates an {@link CamelEvent} for Camel is stopping.
      *
      * @param context camel context
      * @return the created event
      */
-    EventObject createCamelContextStoppingEvent(CamelContext context);
+    CamelEvent createCamelContextStoppingEvent(CamelContext context);
 
     /**
-     * Creates an {@link EventObject} for Camel has been stopped successfully.
+     * Creates an {@link CamelEvent} for Camel has been stopped successfully.
      *
      * @param context camel context
      * @return the created event
      */
-    EventObject createCamelContextStoppedEvent(CamelContext context);
+    CamelEvent createCamelContextStoppedEvent(CamelContext context);
 
     /**
-     * Creates an {@link EventObject} for a Service failed to start cleanly
+     * Creates an {@link CamelEvent} for a Service failed to start cleanly
      *
      * @param context camel context
      * @param service the service
      * @param cause   the cause exception
      * @return the created event
      */
-    EventObject createServiceStartupFailureEvent(CamelContext context, Object service, Throwable cause);
+    CamelEvent createServiceStartupFailureEvent(CamelContext context, Object service, Throwable cause);
 
     /**
-     * Creates an {@link EventObject} for a Service failed to stop cleanly
+     * Creates an {@link CamelEvent} for a Service failed to stop cleanly
      *
      * @param context camel context
      * @param service the service
      * @param cause   the cause exception
      * @return the created event
      */
-    EventObject createServiceStopFailureEvent(CamelContext context, Object service, Throwable cause);
+    CamelEvent createServiceStopFailureEvent(CamelContext context, Object service, Throwable cause);
 
     /**
-     * Creates an {@link EventObject} for {@link Route} has been started successfully.
+     * Creates an {@link CamelEvent} for {@link Route} has been started successfully.
      *
      * @param route the route
      * @return the created event
      */
-    EventObject createRouteStartedEvent(Route route);
+    CamelEvent createRouteStartedEvent(Route route);
 
     /**
-     * Creates an {@link EventObject} for {@link Route} has been stopped successfully.
+     * Creates an {@link CamelEvent} for {@link Route} has been stopped successfully.
      *
      * @param route the route
      * @return the created event
      */
-    EventObject createRouteStoppedEvent(Route route);
+    CamelEvent createRouteStoppedEvent(Route route);
 
     /**
-     * Creates an {@link EventObject} for {@link Route} has been added successfully.
+     * Creates an {@link CamelEvent} for {@link Route} has been added successfully.
      *
      * @param route the route
      * @return the created event
      */
-    EventObject createRouteAddedEvent(Route route);
+    CamelEvent createRouteAddedEvent(Route route);
 
     /**
-     * Creates an {@link EventObject} for {@link Route} has been removed successfully.
+     * Creates an {@link CamelEvent} for {@link Route} has been removed successfully.
      *
      * @param route the route
      * @return the created event
      */
-    EventObject createRouteRemovedEvent(Route route);
+    CamelEvent createRouteRemovedEvent(Route route);
 
     /**
-     * Creates an {@link EventObject} when an {@link org.apache.camel.Exchange} has been created
+     * Creates an {@link CamelEvent} when an {@link org.apache.camel.Exchange} has been created
      *
      * @param exchange the exchange
      * @return the created event
      */
-    EventObject createExchangeCreatedEvent(Exchange exchange);
+    CamelEvent createExchangeCreatedEvent(Exchange exchange);
 
     /**
-     * Creates an {@link EventObject} when an {@link org.apache.camel.Exchange} has been completed successfully
+     * Creates an {@link CamelEvent} when an {@link org.apache.camel.Exchange} has been completed successfully
      *
      * @param exchange the exchange
      * @return the created event
      */
-    EventObject createExchangeCompletedEvent(Exchange exchange);
+    CamelEvent createExchangeCompletedEvent(Exchange exchange);
 
     /**
-     * Creates an {@link EventObject} when an {@link org.apache.camel.Exchange} has failed
+     * Creates an {@link CamelEvent} when an {@link org.apache.camel.Exchange} has failed
      *
      * @param exchange the exchange
      * @return the created event
      */
-    EventObject createExchangeFailedEvent(Exchange exchange);
+    CamelEvent createExchangeFailedEvent(Exchange exchange);
 
     /**
-     * Creates an {@link EventObject} when an {@link org.apache.camel.Exchange} has failed
+     * Creates an {@link CamelEvent} when an {@link org.apache.camel.Exchange} has failed
      * but is being handled by the Camel error handlers such as an dead letter channel, or a doTry .. doCatch block.
      * <p/>
      * This event is triggered <b>before</b> sending the failure handler, where as
@@ -170,11 +168,11 @@ public interface EventFactory {
      * @param deadLetterUri     the dead letter uri, if its a dead letter channel
      * @return the created event
      */
-    EventObject createExchangeFailureHandlingEvent(Exchange exchange, Processor failureHandler,
+    CamelEvent createExchangeFailureHandlingEvent(Exchange exchange, Processor failureHandler,
                                                    boolean deadLetterChannel, String deadLetterUri);
 
     /**
-     * Creates an {@link EventObject} when an {@link org.apache.camel.Exchange} has failed
+     * Creates an {@link CamelEvent} when an {@link org.apache.camel.Exchange} has failed
      * but was handled by the Camel error handlers such as an dead letter channel, or a doTry .. doCatch block.
      * <p/>
      * This event is triggered <b>after</b> the exchange was sent to failure handler, where as
@@ -186,76 +184,76 @@ public interface EventFactory {
      * @param deadLetterUri     the dead letter uri, if its a dead letter channel
      * @return the created event
      */
-    EventObject createExchangeFailureHandledEvent(Exchange exchange, Processor failureHandler,
+    CamelEvent createExchangeFailureHandledEvent(Exchange exchange, Processor failureHandler,
                                                   boolean deadLetterChannel, String deadLetterUri);
 
     /**
-     * Creates an {@link EventObject} when an {@link org.apache.camel.Exchange} is about to be redelivered
+     * Creates an {@link CamelEvent} when an {@link org.apache.camel.Exchange} is about to be redelivered
      *
      * @param exchange the exchange
      * @param attempt  the current redelivery attempt (starts from 1)
      * @return the created event
      */
-    EventObject createExchangeRedeliveryEvent(Exchange exchange, int attempt);
+    CamelEvent createExchangeRedeliveryEvent(Exchange exchange, int attempt);
 
     /**
-     * Creates an {@link EventObject} when an {@link org.apache.camel.Exchange} is about to be sent to the endpoint (eg before).
+     * Creates an {@link CamelEvent} when an {@link org.apache.camel.Exchange} is about to be sent to the endpoint (eg before).
      *
      * @param exchange  the exchange
      * @param endpoint  the destination
      * @return the created event
      */
-    EventObject createExchangeSendingEvent(Exchange exchange, Endpoint endpoint);
+    CamelEvent createExchangeSendingEvent(Exchange exchange, Endpoint endpoint);
 
     /**
-     * Creates an {@link EventObject} when an {@link org.apache.camel.Exchange} has completely been sent to the endpoint (eg after).
+     * Creates an {@link CamelEvent} when an {@link org.apache.camel.Exchange} has completely been sent to the endpoint (eg after).
      *
      * @param exchange  the exchange
      * @param endpoint  the destination
      * @param timeTaken time in millis taken
      * @return the created event
      */
-    EventObject createExchangeSentEvent(Exchange exchange, Endpoint endpoint, long timeTaken);
+    CamelEvent createExchangeSentEvent(Exchange exchange, Endpoint endpoint, long timeTaken);
 
     /**
-     * Creates an {@link EventObject} for Camel is suspending.
+     * Creates an {@link CamelEvent} for Camel is suspending.
      *
      * @param context camel context
      * @return the created event
      */
-    EventObject createCamelContextSuspendingEvent(CamelContext context);
+    CamelEvent createCamelContextSuspendingEvent(CamelContext context);
 
     /**
-     * Creates an {@link EventObject} for Camel has been suspended successfully.
+     * Creates an {@link CamelEvent} for Camel has been suspended successfully.
      *
      * @param context camel context
      * @return the created event
      */
-    EventObject createCamelContextSuspendedEvent(CamelContext context);
+    CamelEvent createCamelContextSuspendedEvent(CamelContext context);
 
     /**
-     * Creates an {@link EventObject} for Camel is resuming.
+     * Creates an {@link CamelEvent} for Camel is resuming.
      *
      * @param context camel context
      * @return the created event
      */
-    EventObject createCamelContextResumingEvent(CamelContext context);
+    CamelEvent createCamelContextResumingEvent(CamelContext context);
 
     /**
-     * Creates an {@link EventObject} for Camel has been resumed successfully.
+     * Creates an {@link CamelEvent} for Camel has been resumed successfully.
      *
      * @param context camel context
      * @return the created event
      */
-    EventObject createCamelContextResumedEvent(CamelContext context);
+    CamelEvent createCamelContextResumedEvent(CamelContext context);
 
     /**
-     * Creates an {@link EventObject} for Camel failing to resume
+     * Creates an {@link CamelEvent} for Camel failing to resume
      *
      * @param context camel context
      * @param cause   the cause exception
      * @return the created event
      */
-    EventObject createCamelContextResumeFailureEvent(CamelContext context, Throwable cause);
+    CamelEvent createCamelContextResumeFailureEvent(CamelContext context, Throwable cause);
 
 }
diff --git a/camel-api/src/main/java/org/apache/camel/spi/EventNotifier.java b/camel-api/src/main/java/org/apache/camel/spi/EventNotifier.java
index b372dbf..863ec02 100644
--- a/camel-api/src/main/java/org/apache/camel/spi/EventNotifier.java
+++ b/camel-api/src/main/java/org/apache/camel/spi/EventNotifier.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.spi;
 
-import java.util.EventObject;
-
 /**
  * Notifier to send {@link java.util.EventObject events}.
  *
@@ -31,7 +29,7 @@ public interface EventNotifier {
      * @param event the event
      * @throws Exception can be thrown if notification failed
      */
-    void notify(EventObject event) throws Exception;
+    void notify(CamelEvent event) throws Exception;
 
     /**
      * Checks whether notification for the given event is enabled.
@@ -41,7 +39,7 @@ public interface EventNotifier {
      * @param event the event
      * @return <tt>true</tt> if the event should be sent, <tt>false</tt> to silently ignore it
      */
-    boolean isEnabled(EventObject event);
+    boolean isEnabled(CamelEvent event);
 
     /**
      * Checks whether notification is disabled for all events
diff --git a/camel-api/src/main/java/org/apache/camel/spi/ManagementStrategy.java b/camel-api/src/main/java/org/apache/camel/spi/ManagementStrategy.java
index 3f70951..7fb8d47 100644
--- a/camel-api/src/main/java/org/apache/camel/spi/ManagementStrategy.java
+++ b/camel-api/src/main/java/org/apache/camel/spi/ManagementStrategy.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.spi;
 
-import java.util.EventObject;
 import java.util.List;
 
 import org.apache.camel.NamedNode;
@@ -99,7 +98,7 @@ public interface ManagementStrategy extends Service {
      * @param event the event
      * @throws Exception can be thrown if the notification failed
      */
-    void notify(EventObject event) throws Exception;
+    void notify(CamelEvent event) throws Exception;
 
     /**
      * Gets the event notifiers.
diff --git a/camel-core/src/main/java/org/apache/camel/builder/NotifyBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/NotifyBuilder.java
index 05fc8fd..cbf4f2c 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/NotifyBuilder.java
+++ b/camel-core/src/main/java/org/apache/camel/builder/NotifyBuilder.java
@@ -18,7 +18,6 @@ package org.apache.camel.builder;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.EventObject;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
@@ -36,10 +35,11 @@ import org.apache.camel.Producer;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.direct.DirectEndpoint;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.management.event.ExchangeCompletedEvent;
-import org.apache.camel.management.event.ExchangeCreatedEvent;
-import org.apache.camel.management.event.ExchangeFailedEvent;
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCompletedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCreatedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeFailedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.apache.camel.support.EndpointHelper;
 import org.apache.camel.support.EventNotifierSupport;
 import org.apache.camel.support.ServiceHelper;
@@ -1322,7 +1322,7 @@ public class NotifyBuilder {
      */
     private final class ExchangeNotifier extends EventNotifierSupport {
 
-        public void notify(EventObject event) throws Exception {
+        public void notify(CamelEvent event) throws Exception {
             if (event instanceof ExchangeCreatedEvent) {
                 onExchangeCreated((ExchangeCreatedEvent) event);
             } else if (event instanceof ExchangeCompletedEvent) {
@@ -1337,7 +1337,7 @@ public class NotifyBuilder {
             computeMatches();
         }
 
-        public boolean isEnabled(EventObject event) {
+        public boolean isEnabled(CamelEvent event) {
             return true;
         }
 
diff --git a/camel-core/src/main/java/org/apache/camel/impl/BreakpointSupport.java b/camel-core/src/main/java/org/apache/camel/impl/BreakpointSupport.java
index ca874d1..dfb6179 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/BreakpointSupport.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/BreakpointSupport.java
@@ -22,6 +22,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.spi.Breakpoint;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
 
 /**
  * A support class for {@link Breakpoint} implementations to use as base class.
@@ -52,7 +53,7 @@ public abstract class BreakpointSupport implements Breakpoint {
         // noop
     }
 
-    public void onEvent(Exchange exchange, EventObject event, NamedNode definition) {
+    public void onEvent(Exchange exchange, ExchangeEvent event, NamedNode definition) {
         // noop
     }
 }
diff --git a/camel-core/src/main/java/org/apache/camel/impl/ConditionSupport.java b/camel-core/src/main/java/org/apache/camel/impl/ConditionSupport.java
index 54d0d3a..cbdef83 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/ConditionSupport.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/ConditionSupport.java
@@ -16,11 +16,10 @@
  */
 package org.apache.camel.impl;
 
-import java.util.EventObject;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
 import org.apache.camel.spi.Condition;
 
 /**
@@ -32,7 +31,7 @@ public class ConditionSupport implements Condition {
         return false;
     }
 
-    public boolean matchEvent(Exchange exchange, EventObject event) {
+    public boolean matchEvent(Exchange exchange, ExchangeEvent event) {
         return false;
     }
 }
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultDebugger.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultDebugger.java
index 9306b43..1a8ea52 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultDebugger.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultDebugger.java
@@ -19,7 +19,6 @@ package org.apache.camel.impl;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.EventObject;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -32,11 +31,12 @@ import org.apache.camel.Exchange;
 import org.apache.camel.MessageHistory;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
-import org.apache.camel.management.event.AbstractExchangeEvent;
-import org.apache.camel.management.event.ExchangeCompletedEvent;
-import org.apache.camel.management.event.ExchangeCreatedEvent;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.spi.Breakpoint;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCompletedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCreatedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
 import org.apache.camel.spi.Condition;
 import org.apache.camel.spi.Debugger;
 import org.apache.camel.spi.EventNotifier;
@@ -144,7 +144,7 @@ public class DefaultDebugger implements Debugger, CamelContextAware {
             }
 
             @Override
-            public void onEvent(Exchange exchange, EventObject event, NamedNode definition) {
+            public void onEvent(Exchange exchange, ExchangeEvent event, NamedNode definition) {
                 if (event instanceof ExchangeCreatedEvent) {
                     exchange.getContext().getDebugger().startSingleStepExchange(exchange.getExchangeId(), this);
                 } else if (event instanceof ExchangeCompletedEvent) {
@@ -259,7 +259,7 @@ public class DefaultDebugger implements Debugger, CamelContextAware {
     }
 
     @Override
-    public boolean onEvent(Exchange exchange, EventObject event) {
+    public boolean onEvent(Exchange exchange, ExchangeEvent event) {
         // is the exchange in single step mode?
         Breakpoint singleStep = singleSteps.get(exchange.getExchangeId());
         if (singleStep != null) {
@@ -299,7 +299,7 @@ public class DefaultDebugger implements Debugger, CamelContextAware {
     }
 
     @SuppressWarnings("unchecked")
-    protected void onEvent(Exchange exchange, EventObject event, Breakpoint breakpoint) {
+    protected void onEvent(Exchange exchange, ExchangeEvent event, Breakpoint breakpoint) {
         ProcessorDefinition<?> definition = null;
 
         // try to get the last known definition
@@ -328,7 +328,7 @@ public class DefaultDebugger implements Debugger, CamelContextAware {
         return true;
     }
 
-    private boolean matchConditions(Exchange exchange, EventObject event, BreakpointConditions breakpoint) {
+    private boolean matchConditions(Exchange exchange, ExchangeEvent event, BreakpointConditions breakpoint) {
         for (Condition condition : breakpoint.getConditions()) {
             if (!condition.matchEvent(exchange, event)) {
                 return false;
@@ -367,10 +367,10 @@ public class DefaultDebugger implements Debugger, CamelContextAware {
         }
 
         @Override
-        public void notify(EventObject event) throws Exception {
-            AbstractExchangeEvent aee = (AbstractExchangeEvent) event;
+        public void notify(CamelEvent event) throws Exception {
+            ExchangeEvent aee = (ExchangeEvent) event;
             Exchange exchange = aee.getExchange();
-            onEvent(exchange, event);
+            onEvent(exchange, aee);
 
             if (event instanceof ExchangeCompletedEvent) {
                 // fail safe to ensure we remove single steps when the Exchange is complete
@@ -379,8 +379,8 @@ public class DefaultDebugger implements Debugger, CamelContextAware {
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
-            return event instanceof AbstractExchangeEvent;
+        public boolean isEnabled(CamelEvent event) {
+            return event instanceof ExchangeEvent;
         }
 
         @Override
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultRuntimeEndpointRegistry.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultRuntimeEndpointRegistry.java
index d2689ca..3257a2b 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultRuntimeEndpointRegistry.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultRuntimeEndpointRegistry.java
@@ -18,7 +18,6 @@ package org.apache.camel.impl;
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.EventObject;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -29,10 +28,11 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.camel.management.event.ExchangeCreatedEvent;
-import org.apache.camel.management.event.ExchangeSendingEvent;
-import org.apache.camel.management.event.RouteAddedEvent;
-import org.apache.camel.management.event.RouteRemovedEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCreatedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
+import org.apache.camel.spi.CamelEvent.RouteAddedEvent;
+import org.apache.camel.spi.CamelEvent.RouteRemovedEvent;
 import org.apache.camel.spi.EndpointUtilizationStatistics;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.RuntimeEndpointRegistry;
@@ -212,7 +212,7 @@ public class DefaultRuntimeEndpointRegistry extends EventNotifierSupport impleme
 
     @Override
     @SuppressWarnings("unchecked")
-    public void notify(EventObject event) throws Exception {
+    public void notify(CamelEvent event) throws Exception {
         if (event instanceof RouteAddedEvent) {
             RouteAddedEvent rse = (RouteAddedEvent) event;
             Endpoint endpoint = rse.getRoute().getEndpoint();
@@ -288,7 +288,7 @@ public class DefaultRuntimeEndpointRegistry extends EventNotifierSupport impleme
     }
 
     @Override
-    public boolean isEnabled(EventObject event) {
+    public boolean isEnabled(CamelEvent event) {
         return enabled && event instanceof ExchangeCreatedEvent
                 || event instanceof ExchangeSendingEvent
                 || event instanceof RouteAddedEvent
diff --git a/camel-core/src/main/java/org/apache/camel/impl/SupervisingRouteController.java b/camel-core/src/main/java/org/apache/camel/impl/SupervisingRouteController.java
index a607c0a..c9658a4 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/SupervisingRouteController.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/SupervisingRouteController.java
@@ -20,7 +20,6 @@ import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.EventObject;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -43,9 +42,10 @@ import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.StartupListener;
-import org.apache.camel.management.event.CamelContextStartedEvent;
 import org.apache.camel.meta.Experimental;
 import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
 import org.apache.camel.spi.HasId;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.RouteController;
@@ -693,12 +693,12 @@ public class SupervisingRouteController extends DefaultRouteController {
 
     private class CamelContextStartupListener extends EventNotifierSupport implements StartupListener {
         @Override
-        public void notify(EventObject event) throws Exception {
+        public void notify(CamelEvent event) throws Exception {
             onCamelContextStarted();
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
+        public boolean isEnabled(CamelEvent event) {
             return event instanceof CamelContextStartedEvent;
         }
 
diff --git a/camel-core/src/main/java/org/apache/camel/impl/cluster/ClusteredRoutePolicy.java b/camel-core/src/main/java/org/apache/camel/impl/cluster/ClusteredRoutePolicy.java
index 29a7d67..57330bb 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/cluster/ClusteredRoutePolicy.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/cluster/ClusteredRoutePolicy.java
@@ -17,7 +17,6 @@
 package org.apache.camel.impl.cluster;
 
 import java.time.Duration;
-import java.util.EventObject;
 import java.util.HashSet;
 import java.util.Optional;
 import java.util.Set;
@@ -38,9 +37,10 @@ import org.apache.camel.cluster.CamelClusterMember;
 import org.apache.camel.cluster.CamelClusterService;
 import org.apache.camel.cluster.CamelClusterView;
 import org.apache.camel.cluster.ClusterServiceSelectors;
-import org.apache.camel.management.event.CamelContextStartedEvent;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.cluster.ClusterServiceHelper;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.apache.camel.support.RoutePolicySupport;
 import org.apache.camel.util.ObjectHelper;
@@ -301,12 +301,12 @@ public final class ClusteredRoutePolicy extends RoutePolicySupport implements Ca
 
     private class CamelContextStartupListener extends EventNotifierSupport implements StartupListener {
         @Override
-        public void notify(EventObject event) throws Exception {
+        public void notify(CamelEvent event) throws Exception {
             onCamelContextStarted();
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
+        public boolean isEnabled(CamelEvent event) {
             return event instanceof CamelContextStartedEvent;
         }
 
diff --git a/camel-core/src/main/java/org/apache/camel/main/MainDurationEventNotifier.java b/camel-core/src/main/java/org/apache/camel/main/MainDurationEventNotifier.java
index b50d3de..6fe6eb9 100644
--- a/camel-core/src/main/java/org/apache/camel/main/MainDurationEventNotifier.java
+++ b/camel-core/src/main/java/org/apache/camel/main/MainDurationEventNotifier.java
@@ -16,16 +16,16 @@
  */
 package org.apache.camel.main;
 
-import java.util.EventObject;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.management.event.ExchangeCompletedEvent;
-import org.apache.camel.management.event.ExchangeCreatedEvent;
-import org.apache.camel.management.event.ExchangeFailedEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCompletedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCreatedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeFailedEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.apache.camel.util.StopWatch;
 import org.slf4j.Logger;
@@ -60,7 +60,7 @@ public class MainDurationEventNotifier extends EventNotifierSupport {
     }
 
     @Override
-    public void notify(EventObject event) throws Exception {
+    public void notify(CamelEvent event) throws Exception {
         boolean begin = event instanceof ExchangeCreatedEvent;
         boolean complete = event instanceof ExchangeCompletedEvent || event instanceof ExchangeFailedEvent;
 
@@ -96,7 +96,7 @@ public class MainDurationEventNotifier extends EventNotifierSupport {
     }
 
     @Override
-    public boolean isEnabled(EventObject event) {
+    public boolean isEnabled(CamelEvent event) {
         return event instanceof ExchangeCompletedEvent || event instanceof ExchangeFailedEvent;
     }
 
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
index d259d55..262822e 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.management;
 
-import java.util.EventObject;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
@@ -24,6 +23,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.NamedNode;
 import org.apache.camel.management.event.DefaultEventFactory;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.spi.EventFactory;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.ManagementAgent;
@@ -157,7 +157,7 @@ public class DefaultManagementStrategy extends ServiceSupport implements Managem
         this.camelContext = camelContext;
     }
 
-    public void notify(EventObject event) throws Exception {
+    public void notify(CamelEvent event) throws Exception {
         if (eventNotifiers != null && !eventNotifiers.isEmpty()) {
             for (EventNotifier notifier : eventNotifiers) {
                 if (notifier.isEnabled(event)) {
diff --git a/camel-core/src/main/java/org/apache/camel/management/JmxNotificationEventNotifier.java b/camel-core/src/main/java/org/apache/camel/management/JmxNotificationEventNotifier.java
index 850be7d..db4c1b4 100644
--- a/camel-core/src/main/java/org/apache/camel/management/JmxNotificationEventNotifier.java
+++ b/camel-core/src/main/java/org/apache/camel/management/JmxNotificationEventNotifier.java
@@ -16,13 +16,13 @@
  */
 package org.apache.camel.management;
 
-import java.util.EventObject;
 import java.util.concurrent.atomic.AtomicLong;
 
 import javax.management.Notification;
 import javax.management.NotificationBroadcasterSupport;
 
 import org.apache.camel.api.management.JmxNotificationBroadcasterAware;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.support.EventNotifierSupport;
 import org.slf4j.Logger;
@@ -41,7 +41,7 @@ public class JmxNotificationEventNotifier extends EventNotifierSupport implement
         notificationBroadcaster = broadcaster;
     }
 
-    public void notify(EventObject event) throws Exception {
+    public void notify(CamelEvent event) throws Exception {
         if (notificationBroadcaster != null) {
             // its recommended to send light weight events and we don't want to have the entire Exchange/CamelContext etc
             // serialized as these are the typical source of the EventObject. So we use our own source which is just
@@ -55,7 +55,7 @@ public class JmxNotificationEventNotifier extends EventNotifierSupport implement
         }
     }
 
-    public boolean isEnabled(EventObject event) {
+    public boolean isEnabled(CamelEvent event) {
         return true;
     }
 
diff --git a/camel-core/src/main/java/org/apache/camel/management/LoggingEventNotifier.java b/camel-core/src/main/java/org/apache/camel/management/LoggingEventNotifier.java
index 8b82ec2..8eb9832 100644
--- a/camel-core/src/main/java/org/apache/camel/management/LoggingEventNotifier.java
+++ b/camel-core/src/main/java/org/apache/camel/management/LoggingEventNotifier.java
@@ -16,8 +16,7 @@
  */
 package org.apache.camel.management;
 
-import java.util.EventObject;
-
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,7 +30,7 @@ public class LoggingEventNotifier extends EventNotifierSupport {
     private Logger log = LoggerFactory.getLogger(LoggingEventNotifier.class);
     private String logName;
 
-    public void notify(EventObject event) throws Exception {
+    public void notify(CamelEvent event) throws Exception {
         log.info("Event: {}", event);
     }
 
@@ -40,7 +39,7 @@ public class LoggingEventNotifier extends EventNotifierSupport {
         return !log.isInfoEnabled();
     }
 
-    public boolean isEnabled(EventObject event) {
+    public boolean isEnabled(CamelEvent event) {
         return log.isInfoEnabled();
     }
 
diff --git a/camel-core/src/main/java/org/apache/camel/management/PublishEventNotifier.java b/camel-core/src/main/java/org/apache/camel/management/PublishEventNotifier.java
index 6fec3ab..ace59cb 100644
--- a/camel-core/src/main/java/org/apache/camel/management/PublishEventNotifier.java
+++ b/camel-core/src/main/java/org/apache/camel/management/PublishEventNotifier.java
@@ -23,6 +23,7 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Producer;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.apache.camel.support.ServiceHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -43,7 +44,7 @@ public class PublishEventNotifier extends EventNotifierSupport implements CamelC
     private String endpointUri;
     private Producer producer;
 
-    public void notify(EventObject event) throws Exception {
+    public void notify(CamelEvent event) throws Exception {
         // only notify when we are started
         if (!isStarted()) {
             log.debug("Cannot publish event as notifier is not started: {}", event);
@@ -71,7 +72,7 @@ public class PublishEventNotifier extends EventNotifierSupport implements CamelC
         }
     }
 
-    public boolean isEnabled(EventObject event) {
+    public boolean isEnabled(CamelEvent event) {
         return true;
     }
 
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/AbstractContextEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/AbstractContextEvent.java
index 6daa2ef..bda88b2 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/AbstractContextEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/AbstractContextEvent.java
@@ -19,11 +19,12 @@ package org.apache.camel.management.event;
 import java.util.EventObject;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent.CamelContextEvent;
 
 /**
  * Base class for {@link CamelContext} events.
  */
-public abstract class AbstractContextEvent extends EventObject {
+public abstract class AbstractContextEvent extends EventObject implements CamelContextEvent {
     private static final long serialVersionUID = 1L;
     private CamelContext context;
 
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/AbstractExchangeEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/AbstractExchangeEvent.java
index 5573ce7..cba4d30 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/AbstractExchangeEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/AbstractExchangeEvent.java
@@ -19,11 +19,12 @@ package org.apache.camel.management.event;
 import java.util.EventObject;
 
 import org.apache.camel.Exchange;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
 
 /**
  * Base class for {@link Exchange} events.
  */
-public abstract class AbstractExchangeEvent extends EventObject {
+public abstract class AbstractExchangeEvent extends EventObject implements ExchangeEvent {
     private static final long serialVersionUID = 1L;
     private final Exchange exchange;
 
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/AbstractRouteEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/AbstractRouteEvent.java
index be0ce89..b003264 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/AbstractRouteEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/AbstractRouteEvent.java
@@ -20,11 +20,12 @@ import java.util.EventObject;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Route;
+import org.apache.camel.spi.CamelEvent.RouteEvent;
 
 /**
  * Base class for {@link CamelContext} events.
  */
-public abstract class AbstractRouteEvent extends EventObject {
+public abstract class AbstractRouteEvent extends EventObject implements RouteEvent {
     private static final long serialVersionUID = 1L;
     private Route route;
 
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumeFailureEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumeFailureEvent.java
index a13718f..f5c8e1b 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumeFailureEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumeFailureEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
 
-public class CamelContextResumeFailureEvent extends AbstractContextEvent implements FailureEvent {
+public class CamelContextResumeFailureEvent extends AbstractContextEvent implements CamelEvent.CamelContextResumeFailureEvent {
     private static final long serialVersionUID = -4271899927507894566L;
 
     private Throwable cause;
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumedEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumedEvent.java
index 1c0fee6..ad736a7 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumedEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumedEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
 
-public class CamelContextResumedEvent extends AbstractContextEvent {
+public class CamelContextResumedEvent extends AbstractContextEvent implements CamelEvent.CamelContextResumedEvent {
     private static final long serialVersionUID = 6761726800283234512L;
 
     public CamelContextResumedEvent(CamelContext source) {
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumingEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumingEvent.java
index e7d4375..05c2793 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumingEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumingEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
 
-public class CamelContextResumingEvent extends AbstractContextEvent {
+public class CamelContextResumingEvent extends AbstractContextEvent implements CamelEvent.CamelContextResumingEvent {
     private static final long serialVersionUID = 6761726800283234511L;
 
     public CamelContextResumingEvent(CamelContext source) {
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartedEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartedEvent.java
index 5ee2aeb..865a61d 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartedEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartedEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
 
-public class CamelContextStartedEvent extends AbstractContextEvent {
+public class CamelContextStartedEvent extends AbstractContextEvent implements CamelEvent.CamelContextStartedEvent {
     private static final long serialVersionUID = 6761726800283073490L;
 
     public CamelContextStartedEvent(CamelContext source) {
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartingEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartingEvent.java
index 769d5e8..6422da7 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartingEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartingEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
 
-public class CamelContextStartingEvent extends AbstractContextEvent {
+public class CamelContextStartingEvent extends AbstractContextEvent implements CamelEvent.CamelContextStartingEvent {
     private static final long serialVersionUID = -1120225323715688981L;
 
     public CamelContextStartingEvent(CamelContext source) {
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartupFailureEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartupFailureEvent.java
index 243913f..4392fa1 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartupFailureEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartupFailureEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
 
-public class CamelContextStartupFailureEvent extends AbstractContextEvent implements FailureEvent {
+public class CamelContextStartupFailureEvent extends AbstractContextEvent implements CamelEvent.CamelContextStartupFailureEvent {
     private static final long serialVersionUID = -4271899927507894567L;
 
     private Throwable cause;
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStopFailureEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStopFailureEvent.java
index cee25d0..ed53ada 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStopFailureEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStopFailureEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
 
-public class CamelContextStopFailureEvent extends AbstractContextEvent implements FailureEvent {
+public class CamelContextStopFailureEvent extends AbstractContextEvent implements CamelEvent.CamelContextStopFailureEvent {
     private static final long serialVersionUID = -802046840118188292L;
 
     private Throwable cause;
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStoppedEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStoppedEvent.java
index d2862b6..9ff2c2f 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStoppedEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStoppedEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
 
-public class CamelContextStoppedEvent extends AbstractContextEvent {
+public class CamelContextStoppedEvent extends AbstractContextEvent implements CamelEvent.CamelContextStoppedEvent {
     private static final long serialVersionUID = -8406258841784891998L;
 
     public CamelContextStoppedEvent(CamelContext source) {
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStoppingEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStoppingEvent.java
index 10723ff..9a38c35 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStoppingEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStoppingEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
 
-public class CamelContextStoppingEvent extends AbstractContextEvent {
+public class CamelContextStoppingEvent extends AbstractContextEvent implements CamelEvent.CamelContextStoppingEvent {
     private static final long serialVersionUID = -1074581102102126334L;
 
     public CamelContextStoppingEvent(CamelContext source) {
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendedEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendedEvent.java
index 98219d5..697df31 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendedEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendedEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
 
-public class CamelContextSuspendedEvent extends AbstractContextEvent {
+public class CamelContextSuspendedEvent extends AbstractContextEvent implements CamelEvent.CamelContextSuspendedEvent {
     private static final long serialVersionUID = 6761726800283072242L;
 
     public CamelContextSuspendedEvent(CamelContext source) {
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendingEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendingEvent.java
index c10c42b..26ecafb 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendingEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendingEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
 
-public class CamelContextSuspendingEvent extends AbstractContextEvent {
+public class CamelContextSuspendingEvent extends AbstractContextEvent implements CamelEvent.CamelContextSuspendingEvent{
     private static final long serialVersionUID = 6761726800283072241L;
 
     public CamelContextSuspendingEvent(CamelContext source) {
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/DefaultEventFactory.java b/camel-core/src/main/java/org/apache/camel/management/event/DefaultEventFactory.java
index 696437b..53aa7ac 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/DefaultEventFactory.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/DefaultEventFactory.java
@@ -16,14 +16,13 @@
  */
 package org.apache.camel.management.event;
 
-import java.util.EventObject;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.DelegateProcessor;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.spi.EventFactory;
 
 /**
@@ -31,67 +30,67 @@ import org.apache.camel.spi.EventFactory;
  */
 public class DefaultEventFactory implements EventFactory {
 
-    public EventObject createCamelContextStartingEvent(CamelContext context) {
+    public CamelEvent createCamelContextStartingEvent(CamelContext context) {
         return new CamelContextStartingEvent(context);
     }
 
-    public EventObject createCamelContextStartedEvent(CamelContext context) {
+    public CamelEvent createCamelContextStartedEvent(CamelContext context) {
         return new CamelContextStartedEvent(context);
     }
 
-    public EventObject createCamelContextStoppingEvent(CamelContext context) {
+    public CamelEvent createCamelContextStoppingEvent(CamelContext context) {
         return new CamelContextStoppingEvent(context);
     }
 
-    public EventObject createCamelContextStoppedEvent(CamelContext context) {
+    public CamelEvent createCamelContextStoppedEvent(CamelContext context) {
         return new CamelContextStoppedEvent(context);
     }
 
-    public EventObject createCamelContextStartupFailureEvent(CamelContext context, Throwable cause) {
+    public CamelEvent createCamelContextStartupFailureEvent(CamelContext context, Throwable cause) {
         return new CamelContextStartupFailureEvent(context, cause);
     }
 
-    public EventObject createCamelContextStopFailureEvent(CamelContext context, Throwable cause) {
+    public CamelEvent createCamelContextStopFailureEvent(CamelContext context, Throwable cause) {
         return new CamelContextStopFailureEvent(context, cause);
     }
 
-    public EventObject createServiceStartupFailureEvent(CamelContext context, Object service, Throwable cause) {
+    public CamelEvent createServiceStartupFailureEvent(CamelContext context, Object service, Throwable cause) {
         return new ServiceStartupFailureEvent(context, service, cause);
     }
 
-    public EventObject createServiceStopFailureEvent(CamelContext context, Object service, Throwable cause) {
+    public CamelEvent createServiceStopFailureEvent(CamelContext context, Object service, Throwable cause) {
         return new ServiceStopFailureEvent(context, service, cause);
     }
 
-    public EventObject createRouteStartedEvent(Route route) {
+    public CamelEvent createRouteStartedEvent(Route route) {
         return new RouteStartedEvent(route);
     }
 
-    public EventObject createRouteStoppedEvent(Route route) {
+    public CamelEvent createRouteStoppedEvent(Route route) {
         return new RouteStoppedEvent(route);
     }
 
-    public EventObject createRouteAddedEvent(Route route) {
+    public CamelEvent createRouteAddedEvent(Route route) {
         return new RouteAddedEvent(route);
     }
 
-    public EventObject createRouteRemovedEvent(Route route) {
+    public CamelEvent createRouteRemovedEvent(Route route) {
         return new RouteRemovedEvent(route);
     }
 
-    public EventObject createExchangeCreatedEvent(Exchange exchange) {
+    public CamelEvent createExchangeCreatedEvent(Exchange exchange) {
         return new ExchangeCreatedEvent(exchange);
     }
 
-    public EventObject createExchangeCompletedEvent(Exchange exchange) {
+    public CamelEvent createExchangeCompletedEvent(Exchange exchange) {
         return new ExchangeCompletedEvent(exchange);
     }
 
-    public EventObject createExchangeFailedEvent(Exchange exchange) {
+    public CamelEvent createExchangeFailedEvent(Exchange exchange) {
         return new ExchangeFailedEvent(exchange);
     }
 
-    public EventObject createExchangeFailureHandlingEvent(Exchange exchange, Processor failureHandler, boolean deadLetterChannel, String deadLetterUri) {
+    public CamelEvent createExchangeFailureHandlingEvent(Exchange exchange, Processor failureHandler, boolean deadLetterChannel, String deadLetterUri) {
         // unwrap delegate processor
         Processor handler = failureHandler;
         if (handler instanceof DelegateProcessor) {
@@ -100,7 +99,7 @@ public class DefaultEventFactory implements EventFactory {
         return new ExchangeFailureHandlingEvent(exchange, handler, deadLetterChannel, deadLetterUri);
     }
 
-    public EventObject createExchangeFailureHandledEvent(Exchange exchange, Processor failureHandler,
+    public CamelEvent createExchangeFailureHandledEvent(Exchange exchange, Processor failureHandler,
                                                          boolean deadLetterChannel, String deadLetterUri) {
         // unwrap delegate processor
         Processor handler = failureHandler;
@@ -110,35 +109,35 @@ public class DefaultEventFactory implements EventFactory {
         return new ExchangeFailureHandledEvent(exchange, handler, deadLetterChannel, deadLetterUri);
     }
 
-    public EventObject createExchangeRedeliveryEvent(Exchange exchange, int attempt) {
+    public CamelEvent createExchangeRedeliveryEvent(Exchange exchange, int attempt) {
         return new ExchangeRedeliveryEvent(exchange, attempt);
     }
 
-    public EventObject createExchangeSendingEvent(Exchange exchange, Endpoint endpoint) {
+    public CamelEvent createExchangeSendingEvent(Exchange exchange, Endpoint endpoint) {
         return new ExchangeSendingEvent(exchange, endpoint);
     }
 
-    public EventObject createExchangeSentEvent(Exchange exchange, Endpoint endpoint, long timeTaken) {
+    public CamelEvent createExchangeSentEvent(Exchange exchange, Endpoint endpoint, long timeTaken) {
         return new ExchangeSentEvent(exchange, endpoint, timeTaken);
     }
 
-    public EventObject createCamelContextSuspendingEvent(CamelContext context) {
+    public CamelEvent createCamelContextSuspendingEvent(CamelContext context) {
         return new CamelContextSuspendingEvent(context);
     }
 
-    public EventObject createCamelContextSuspendedEvent(CamelContext context) {
+    public CamelEvent createCamelContextSuspendedEvent(CamelContext context) {
         return new CamelContextSuspendedEvent(context);
     }
 
-    public EventObject createCamelContextResumingEvent(CamelContext context) {
+    public CamelEvent createCamelContextResumingEvent(CamelContext context) {
         return new CamelContextResumingEvent(context);
     }
 
-    public EventObject createCamelContextResumedEvent(CamelContext context) {
+    public CamelEvent createCamelContextResumedEvent(CamelContext context) {
         return new CamelContextResumedEvent(context);
     }
 
-    public EventObject createCamelContextResumeFailureEvent(CamelContext context, Throwable cause) {
+    public CamelEvent createCamelContextResumeFailureEvent(CamelContext context, Throwable cause) {
         return new CamelContextResumeFailureEvent(context, cause);
     }
 }
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeCompletedEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeCompletedEvent.java
index f73aab1..1b1ad57 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeCompletedEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeCompletedEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.Exchange;
+import org.apache.camel.spi.CamelEvent;
 
-public class ExchangeCompletedEvent extends AbstractExchangeEvent {
+public class ExchangeCompletedEvent extends AbstractExchangeEvent implements CamelEvent.ExchangeCompletedEvent {
     private static final long serialVersionUID = -3231801412021356098L;
 
     public ExchangeCompletedEvent(Exchange source) {
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeCreatedEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeCreatedEvent.java
index 761354f..1b7f1d5 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeCreatedEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeCreatedEvent.java
@@ -17,6 +17,7 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.Exchange;
+import org.apache.camel.spi.CamelEvent;
 
 /**
  * Event after an {@link Exchange} has been created.
@@ -25,7 +26,7 @@ import org.apache.camel.Exchange;
  * therefore its not guaranteed this event is the first event being send for a given {@link Exchange}
  * lifecycle.
  */
-public class ExchangeCreatedEvent extends AbstractExchangeEvent {
+public class ExchangeCreatedEvent extends AbstractExchangeEvent implements CamelEvent.ExchangeCreatedEvent {
     private static final long serialVersionUID = -19248832613958243L;
 
     public ExchangeCreatedEvent(Exchange source) {
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailedEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailedEvent.java
index 1a4bd3a..0dcf2cb 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailedEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailedEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.Exchange;
+import org.apache.camel.spi.CamelEvent;
 
-public class ExchangeFailedEvent extends AbstractExchangeEvent implements FailureEvent {
+public class ExchangeFailedEvent extends AbstractExchangeEvent implements CamelEvent.ExchangeFailedEvent  {
     private static final long serialVersionUID = -8484326904627268101L;
 
     public ExchangeFailedEvent(Exchange source) {
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailureHandledEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailureHandledEvent.java
index b4ad79e..7e683f0 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailureHandledEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailureHandledEvent.java
@@ -18,9 +18,10 @@ package org.apache.camel.management.event;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.util.URISupport;
 
-public class ExchangeFailureHandledEvent extends AbstractExchangeEvent {
+public class ExchangeFailureHandledEvent extends AbstractExchangeEvent implements CamelEvent.ExchangeFailureHandledEvent {
     private static final long serialVersionUID = -7554809462006009548L;
 
     private final transient Processor failureHandler;
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailureHandlingEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailureHandlingEvent.java
index 99e5093..1c2228e 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailureHandlingEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailureHandlingEvent.java
@@ -18,9 +18,10 @@ package org.apache.camel.management.event;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.util.URISupport;
 
-public class ExchangeFailureHandlingEvent extends AbstractExchangeEvent {
+public class ExchangeFailureHandlingEvent extends AbstractExchangeEvent implements CamelEvent.ExchangeFailureHandlingEvent  {
     private static final long serialVersionUID = -7554809462006009549L;
 
     private final transient Processor failureHandler;
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeRedeliveryEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeRedeliveryEvent.java
index c5af078..53910e9 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeRedeliveryEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeRedeliveryEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.Exchange;
+import org.apache.camel.spi.CamelEvent;
 
-public class ExchangeRedeliveryEvent extends AbstractExchangeEvent {
+public class ExchangeRedeliveryEvent extends AbstractExchangeEvent implements CamelEvent.ExchangeRedeliveryEvent {
     private static final long serialVersionUID = -19248832613958122L;
 
     private final int attempt;
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeSendingEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeSendingEvent.java
index 9a502b5..23d9702 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeSendingEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeSendingEvent.java
@@ -20,6 +20,7 @@ import java.util.EventObject;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
+import org.apache.camel.spi.CamelEvent;
 
 /**
  * Event for <b>before</b> sending an {@link Exchange} to an {@link Endpoint}.
@@ -32,12 +33,12 @@ import org.apache.camel.Exchange;
  * The {@link ExchangeSentEvent} is an event which is emitted <b>after</b> the sending is done.
  * <p/>
  * These two events (sending and sent) come in a pair, and therefore you need to make sure to return
- * <tt>true</tt> for both events in the {@link org.apache.camel.spi.EventNotifier#isEnabled(EventObject)}
+ * <tt>true</tt> for both events in the {@link org.apache.camel.spi.EventNotifier#isEnabled(CamelEvent)}
  * method to receive events for either of them.
  *
  * @see ExchangeSentEvent
  */
-public class ExchangeSendingEvent extends AbstractExchangeEvent {
+public class ExchangeSendingEvent extends AbstractExchangeEvent implements CamelEvent.ExchangeSendingEvent {
     private static final long serialVersionUID = -19248832613958122L;
 
     private final Endpoint endpoint;
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeSentEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeSentEvent.java
index aba3f7a..3805eb6 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/ExchangeSentEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/ExchangeSentEvent.java
@@ -16,22 +16,21 @@
  */
 package org.apache.camel.management.event;
 
-import java.util.EventObject;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
+import org.apache.camel.spi.CamelEvent;
 
 /**
  * Event for <b>after</b> an {@link Exchange} has been sent to an {@link Endpoint}.
  * The {@link ExchangeSentEvent} is an event which is emitted <b>after</b> the sending is done.
  * <p/>
  * These two events (sending and sent) come in a pair, and therefore you need to make sure to return
- * <tt>true</tt> for both events in the {@link org.apache.camel.spi.EventNotifier#isEnabled(EventObject)}
+ * <tt>true</tt> for both events in the {@link org.apache.camel.spi.EventNotifier#isEnabled(CamelEvent)}
  * method to receive events for either of them.
  *
  * @see ExchangeSendingEvent
  */
-public class ExchangeSentEvent extends AbstractExchangeEvent {
+public class ExchangeSentEvent extends AbstractExchangeEvent implements CamelEvent.ExchangeSentEvent {
     private static final long serialVersionUID = -19248832613958123L;
 
     private final Endpoint endpoint;
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/FailureEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/FailureEvent.java
deleted file mode 100644
index 6c9a6f7..0000000
--- a/camel-core/src/main/java/org/apache/camel/management/event/FailureEvent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.management.event;
-
-/**
- * This interface is implemented by all events that contain an exception and is used to
- * retrieve the exception in a universal way.
- *  
- */
-public interface FailureEvent {
-    Throwable getCause();
-}
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/RouteAddedEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/RouteAddedEvent.java
index 095eb30..df5adf8 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/RouteAddedEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/RouteAddedEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.Route;
+import org.apache.camel.spi.CamelEvent;
 
-public class RouteAddedEvent extends AbstractRouteEvent {
+public class RouteAddedEvent extends AbstractRouteEvent implements CamelEvent.RouteAddedEvent {
 
     private static final long serialVersionUID = 9155960708789798708L;
 
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/RouteRemovedEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/RouteRemovedEvent.java
index f579be4..d8ca90c 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/RouteRemovedEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/RouteRemovedEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.Route;
+import org.apache.camel.spi.CamelEvent;
 
-public class RouteRemovedEvent extends AbstractRouteEvent {
+public class RouteRemovedEvent extends AbstractRouteEvent implements CamelEvent.RouteRemovedEvent {
 
     private static final long serialVersionUID = 7966471393751298719L;
 
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/RouteStartedEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/RouteStartedEvent.java
index b26a9d3..758d884 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/RouteStartedEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/RouteStartedEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.Route;
+import org.apache.camel.spi.CamelEvent;
 
-public class RouteStartedEvent extends AbstractRouteEvent {
+public class RouteStartedEvent extends AbstractRouteEvent implements CamelEvent.RouteStartedEvent {
     private static final long serialVersionUID = 1330257282431407329L;
 
     public RouteStartedEvent(Route source) {
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/RouteStoppedEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/RouteStoppedEvent.java
index ba0d0a6..ddb60fd 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/RouteStoppedEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/RouteStoppedEvent.java
@@ -17,8 +17,9 @@
 package org.apache.camel.management.event;
 
 import org.apache.camel.Route;
+import org.apache.camel.spi.CamelEvent;
 
-public class RouteStoppedEvent extends AbstractRouteEvent {
+public class RouteStoppedEvent extends AbstractRouteEvent implements CamelEvent.RouteStoppedEvent {
     private static final long serialVersionUID = -4466503512787398888L;
 
     public RouteStoppedEvent(Route source) {
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/ServiceStartupFailureEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/ServiceStartupFailureEvent.java
index 94c2a88..c3b3256 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/ServiceStartupFailureEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/ServiceStartupFailureEvent.java
@@ -19,8 +19,9 @@ package org.apache.camel.management.event;
 import java.util.EventObject;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
 
-public class ServiceStartupFailureEvent extends EventObject implements FailureEvent {
+public class ServiceStartupFailureEvent extends EventObject implements CamelEvent.ServiceStartupFailureEvent {
     private static final long serialVersionUID = -9171964933795931862L;
 
     private CamelContext context;
diff --git a/camel-core/src/main/java/org/apache/camel/management/event/ServiceStopFailureEvent.java b/camel-core/src/main/java/org/apache/camel/management/event/ServiceStopFailureEvent.java
index 98bf097..1486a54 100644
--- a/camel-core/src/main/java/org/apache/camel/management/event/ServiceStopFailureEvent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/event/ServiceStopFailureEvent.java
@@ -19,8 +19,9 @@ package org.apache.camel.management.event;
 import java.util.EventObject;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
 
-public class ServiceStopFailureEvent extends EventObject implements FailureEvent {
+public class ServiceStopFailureEvent extends EventObject implements CamelEvent.ServiceStopFailureEvent {
     private static final long serialVersionUID = 4139591666998762617L;
 
     private CamelContext context;
diff --git a/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java b/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java
index 0e72013..ff58f45 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java
@@ -17,7 +17,6 @@
 package org.apache.camel.processor.interceptor;
 
 import java.util.Date;
-import java.util.EventObject;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
@@ -39,9 +38,10 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.api.management.mbean.BacklogTracerEventMessage;
 import org.apache.camel.impl.BreakpointSupport;
 import org.apache.camel.impl.DefaultDebugger;
-import org.apache.camel.management.event.ExchangeCompletedEvent;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ProcessorDefinitionHelper;
+import org.apache.camel.spi.CamelEvent.ExchangeCompletedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
 import org.apache.camel.spi.Condition;
 import org.apache.camel.spi.Debugger;
 import org.apache.camel.spi.InterceptStrategy;
@@ -590,7 +590,7 @@ public class BacklogDebugger extends ServiceSupport implements InterceptStrategy
         }
 
         @Override
-        public boolean matchEvent(Exchange exchange, EventObject event) {
+        public boolean matchEvent(Exchange exchange, ExchangeEvent event) {
             return false;
         }
     }
@@ -637,15 +637,15 @@ public class BacklogDebugger extends ServiceSupport implements InterceptStrategy
         }
 
         @Override
-        public boolean matchEvent(Exchange exchange, EventObject event) {
+        public boolean matchEvent(Exchange exchange, ExchangeEvent event) {
             return event instanceof ExchangeCompletedEvent;
         }
 
         @Override
-        public void onEvent(Exchange exchange, EventObject event, NamedNode definition) {
+        public void onEvent(Exchange exchange, ExchangeEvent event, NamedNode definition) {
             // when the exchange is complete, we need to turn off single step mode if we were debug stepping the exchange
             if (event instanceof ExchangeCompletedEvent) {
-                String completedId = ((ExchangeCompletedEvent) event).getExchange().getExchangeId();
+                String completedId = event.getExchange().getExchangeId();
 
                 if (singleStepExchangeId != null && singleStepExchangeId.equals(completedId)) {
                     logger.log("ExchangeId: " + completedId + " is completed, so exiting single step mode.");
diff --git a/camel-core/src/main/java/org/apache/camel/support/EventHelper.java b/camel-core/src/main/java/org/apache/camel/support/EventHelper.java
index 79e651c..fb29075 100644
--- a/camel-core/src/main/java/org/apache/camel/support/EventHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/support/EventHelper.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.support;
 
-import java.util.EventObject;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
@@ -25,6 +24,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.StatefulService;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.spi.EventFactory;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.ManagementStrategy;
@@ -58,7 +58,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -97,7 +97,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -136,7 +136,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -175,7 +175,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -214,7 +214,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -253,7 +253,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -292,7 +292,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -331,7 +331,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -370,7 +370,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -409,7 +409,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -448,7 +448,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -487,7 +487,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -531,7 +531,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         // optimise for loop using index access to avoid creating iterator object
         for (int i = 0; i < notifiers.size(); i++) {
             EventNotifier notifier = notifiers.get(i);
@@ -577,7 +577,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         // optimise for loop using index access to avoid creating iterator object
         for (int i = 0; i < notifiers.size(); i++) {
             EventNotifier notifier = notifiers.get(i);
@@ -623,7 +623,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         // optimise for loop using index access to avoid creating iterator object
         for (int i = 0; i < notifiers.size(); i++) {
             EventNotifier notifier = notifiers.get(i);
@@ -670,7 +670,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         // optimise for loop using index access to avoid creating iterator object
         for (int i = 0; i < notifiers.size(); i++) {
             EventNotifier notifier = notifiers.get(i);
@@ -717,7 +717,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         // optimise for loop using index access to avoid creating iterator object
         for (int i = 0; i < notifiers.size(); i++) {
             EventNotifier notifier = notifiers.get(i);
@@ -763,7 +763,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         // optimise for loop using index access to avoid creating iterator object
         for (int i = 0; i < notifiers.size(); i++) {
             EventNotifier notifier = notifiers.get(i);
@@ -809,7 +809,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         // optimise for loop using index access to avoid creating iterator object
         for (int i = 0; i < notifiers.size(); i++) {
             EventNotifier notifier = notifiers.get(i);
@@ -855,7 +855,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         // optimise for loop using index access to avoid creating iterator object
         for (int i = 0; i < notifiers.size(); i++) {
             EventNotifier notifier = notifiers.get(i);
@@ -896,7 +896,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -935,7 +935,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -974,7 +974,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -1013,7 +1013,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -1052,7 +1052,7 @@ public final class EventHelper {
         }
 
         boolean answer = false;
-        EventObject event = null;
+        CamelEvent event = null;
         for (EventNotifier notifier : notifiers) {
             if (notifier.isDisabled()) {
                 continue;
@@ -1074,7 +1074,7 @@ public final class EventHelper {
         return answer;
     }
 
-    private static boolean doNotifyEvent(EventNotifier notifier, EventObject event) {
+    private static boolean doNotifyEvent(EventNotifier notifier, CamelEvent event) {
         // only notify if notifier is started
         boolean started = true;
         if (notifier instanceof StatefulService) {
diff --git a/camel-core/src/main/java/org/apache/camel/throttling/ThrottlingInflightRoutePolicy.java b/camel-core/src/main/java/org/apache/camel/throttling/ThrottlingInflightRoutePolicy.java
index d662c50..5ecfa27 100644
--- a/camel-core/src/main/java/org/apache/camel/throttling/ThrottlingInflightRoutePolicy.java
+++ b/camel-core/src/main/java/org/apache/camel/throttling/ThrottlingInflightRoutePolicy.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.throttling;
 
-import java.util.EventObject;
 import java.util.LinkedHashSet;
 import java.util.Set;
 import java.util.concurrent.locks.Lock;
@@ -28,7 +27,8 @@ import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.Route;
-import org.apache.camel.management.event.ExchangeCompletedEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCompletedEvent;
 import org.apache.camel.spi.CamelLogger;
 import org.apache.camel.support.EventNotifierSupport;
 import org.apache.camel.support.RoutePolicySupport;
@@ -277,7 +277,7 @@ public class ThrottlingInflightRoutePolicy extends RoutePolicySupport implements
     private class ContextScopedEventNotifier extends EventNotifierSupport {
 
         @Override
-        public void notify(EventObject event) throws Exception {
+        public void notify(CamelEvent event) throws Exception {
             ExchangeCompletedEvent completedEvent = (ExchangeCompletedEvent) event;
             for (Route route : routes) {
                 throttle(route, completedEvent.getExchange());
@@ -285,7 +285,7 @@ public class ThrottlingInflightRoutePolicy extends RoutePolicySupport implements
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
+        public boolean isEnabled(CamelEvent event) {
             return event instanceof ExchangeCompletedEvent;
         }
 
diff --git a/camel-core/src/test/java/org/apache/camel/impl/FileWatcherReloadStrategyTest.java b/camel-core/src/test/java/org/apache/camel/impl/FileWatcherReloadStrategyTest.java
index 661e2c3..fca6202 100644
--- a/camel-core/src/test/java/org/apache/camel/impl/FileWatcherReloadStrategyTest.java
+++ b/camel-core/src/test/java/org/apache/camel/impl/FileWatcherReloadStrategyTest.java
@@ -17,14 +17,14 @@
 package org.apache.camel.impl;
 
 import java.io.File;
-import java.util.EventObject;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.management.event.RouteAddedEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.RouteAddedEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.apache.camel.util.FileUtil;
 import org.junit.Test;
@@ -85,12 +85,12 @@ public class FileWatcherReloadStrategyTest extends ContextTestSupport {
         final CountDownLatch latch = new CountDownLatch(2);
         context.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
             @Override
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 latch.countDown();
             }
 
             @Override
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 return event instanceof RouteAddedEvent;
             }
         });
@@ -141,12 +141,12 @@ public class FileWatcherReloadStrategyTest extends ContextTestSupport {
         final CountDownLatch latch = new CountDownLatch(2);
         context.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
             @Override
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 latch.countDown();
             }
 
             @Override
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 return event instanceof RouteAddedEvent;
             }
         });
diff --git a/camel-core/src/test/java/org/apache/camel/issues/SentExchangeEventNotifierIssueTest.java b/camel-core/src/test/java/org/apache/camel/issues/SentExchangeEventNotifierIssueTest.java
index f1b6017..1a9769c 100644
--- a/camel-core/src/test/java/org/apache/camel/issues/SentExchangeEventNotifierIssueTest.java
+++ b/camel-core/src/test/java/org/apache/camel/issues/SentExchangeEventNotifierIssueTest.java
@@ -16,14 +16,13 @@
  */
 package org.apache.camel.issues;
 
-import java.util.EventObject;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.apache.camel.support.DefaultExchange;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Test;
@@ -37,12 +36,12 @@ public class SentExchangeEventNotifierIssueTest extends ContextTestSupport {
         private int counter;
 
         @Override
-        public void notify(EventObject event) throws Exception {
+        public void notify(CamelEvent event) throws Exception {
             counter++;
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
+        public boolean isEnabled(CamelEvent event) {
             return event instanceof ExchangeSentEvent;
         }
 
diff --git a/camel-core/src/test/java/org/apache/camel/issues/SentExchangeEventNotifierTwoIssueTest.java b/camel-core/src/test/java/org/apache/camel/issues/SentExchangeEventNotifierTwoIssueTest.java
index 320114c..304e3e3 100644
--- a/camel-core/src/test/java/org/apache/camel/issues/SentExchangeEventNotifierTwoIssueTest.java
+++ b/camel-core/src/test/java/org/apache/camel/issues/SentExchangeEventNotifierTwoIssueTest.java
@@ -23,7 +23,8 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.apache.camel.support.DefaultExchange;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Test;
@@ -37,12 +38,12 @@ public class SentExchangeEventNotifierTwoIssueTest extends ContextTestSupport {
         private int counter;
 
         @Override
-        public void notify(EventObject event) throws Exception {
+        public void notify(CamelEvent event) throws Exception {
             counter++;
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
+        public boolean isEnabled(CamelEvent event) {
             return event instanceof ExchangeSentEvent;
         }
 
diff --git a/camel-core/src/test/java/org/apache/camel/management/AddEventNotifierTest.java b/camel-core/src/test/java/org/apache/camel/management/AddEventNotifierTest.java
index ed2714c..a4e1405 100644
--- a/camel-core/src/test/java/org/apache/camel/management/AddEventNotifierTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/AddEventNotifierTest.java
@@ -21,6 +21,7 @@ import java.util.List;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Before;
@@ -28,7 +29,7 @@ import org.junit.Test;
 
 public class AddEventNotifierTest extends ContextTestSupport {
 
-    private static List<EventObject> events = new ArrayList<>();
+    private static List<CamelEvent> events = new ArrayList<>();
     private EventNotifier notifier;
 
     @Override
@@ -48,11 +49,11 @@ public class AddEventNotifierTest extends ContextTestSupport {
 
         // we should be able to add after CamelContext has been started
         notifier = new EventNotifierSupport() {
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 events.add(event);
             }
 
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 return true;
             }
 
diff --git a/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java b/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java
index 8ddbcc3..cd2dada 100644
--- a/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java
@@ -40,13 +40,14 @@ import org.apache.camel.management.event.RouteAddedEvent;
 import org.apache.camel.management.event.RouteRemovedEvent;
 import org.apache.camel.management.event.RouteStartedEvent;
 import org.apache.camel.management.event.RouteStoppedEvent;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Before;
 import org.junit.Test;
 
 public class EventNotifierEventsTest extends ContextTestSupport {
 
-    private static List<EventObject> events = new ArrayList<>();
+    private static List<CamelEvent> events = new ArrayList<>();
 
     @Override
     @Before
@@ -59,11 +60,11 @@ public class EventNotifierEventsTest extends ContextTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         DefaultCamelContext context = new DefaultCamelContext(createRegistry());
         context.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 events.add(event);
             }
 
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 return true;
             }
 
diff --git a/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeCompletedTest.java b/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeCompletedTest.java
index 218b32b..120faa0 100644
--- a/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeCompletedTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeCompletedTest.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.EventObject;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
@@ -25,13 +25,14 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.management.event.ExchangeCompletedEvent;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Before;
 import org.junit.Test;
 
 public class EventNotifierExchangeCompletedTest extends ContextTestSupport {
 
-    private static List<EventObject> events = new ArrayList<>();
+    private static List<CamelEvent> events = new ArrayList<>();
 
     @Override
     @Before
@@ -44,11 +45,11 @@ public class EventNotifierExchangeCompletedTest extends ContextTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         DefaultCamelContext context = new DefaultCamelContext(createRegistry());
         context.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 events.add(event);
             }
 
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 // we only want the completed event
                 return event instanceof ExchangeCompletedEvent;
                 // you can add additional filtering such as the exchange
diff --git a/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeSentParallelTest.java b/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeSentParallelTest.java
index d031fba..aa32660 100644
--- a/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeSentParallelTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeSentParallelTest.java
@@ -16,10 +16,9 @@
  */
 package org.apache.camel.management;
 
-import java.util.EventObject;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.management.event.ExchangeSendingEvent;
+import org.apache.camel.spi.CamelEvent;
 import org.junit.Test;
 
 public class EventNotifierExchangeSentParallelTest extends EventNotifierExchangeSentTest {
@@ -42,7 +41,7 @@ public class EventNotifierExchangeSentParallelTest extends EventNotifierExchange
         // we run parallel so just assert we got 6 sending and 6 sent events
         int sent = 0;
         int sending = 0;
-        for (EventObject event : events) {
+        for (CamelEvent event : events) {
             if (event instanceof ExchangeSendingEvent) {
                 sending++;
             } else {
diff --git a/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeSentTest.java b/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeSentTest.java
index b4cc8c6..bdd12ef 100644
--- a/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeSentTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeSentTest.java
@@ -15,8 +15,8 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import java.util.ArrayList;
-import java.util.EventObject;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
@@ -26,6 +26,7 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.management.event.ExchangeSendingEvent;
 import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Before;
 import org.junit.Test;
@@ -34,7 +35,7 @@ import static org.awaitility.Awaitility.await;
 
 public class EventNotifierExchangeSentTest extends ContextTestSupport {
 
-    protected static List<EventObject> events = new ArrayList<>();
+    protected static List<CamelEvent> events = new ArrayList<>();
 
     @Override
     @Before
@@ -47,11 +48,11 @@ public class EventNotifierExchangeSentTest extends ContextTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         DefaultCamelContext context = new DefaultCamelContext(createRegistry());
         context.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 events.add(event);
             }
 
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 return true;
             }
 
@@ -163,7 +164,7 @@ public class EventNotifierExchangeSentTest extends ContextTestSupport {
         // which runs async so they can be in random order
         boolean found = false;
         boolean found2 = false;
-        for (EventObject event : events) {
+        for (CamelEvent event : events) {
             if (event instanceof ExchangeSendingEvent) {
                 ExchangeSendingEvent sending = (ExchangeSendingEvent) event;
                 String uri = sending.getEndpoint().getEndpointUri();
diff --git a/camel-core/src/test/java/org/apache/camel/management/EventNotifierFailureHandledEventsTest.java b/camel-core/src/test/java/org/apache/camel/management/EventNotifierFailureHandledEventsTest.java
index 2b6f1e4..7e041d9 100644
--- a/camel-core/src/test/java/org/apache/camel/management/EventNotifierFailureHandledEventsTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/EventNotifierFailureHandledEventsTest.java
@@ -34,13 +34,14 @@ import org.apache.camel.management.event.ExchangeSentEvent;
 import org.apache.camel.management.event.RouteAddedEvent;
 import org.apache.camel.management.event.RouteStartedEvent;
 import org.apache.camel.processor.SendProcessor;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Before;
 import org.junit.Test;
 
 public class EventNotifierFailureHandledEventsTest extends ContextTestSupport {
 
-    private static List<EventObject> events = new ArrayList<>();
+    private static List<CamelEvent> events = new ArrayList<>();
 
     @Override
     @Before
@@ -58,11 +59,11 @@ public class EventNotifierFailureHandledEventsTest extends ContextTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         DefaultCamelContext context = new DefaultCamelContext(createRegistry());
         context.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 events.add(event);
             }
 
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 return true;
             }
 
diff --git a/camel-core/src/test/java/org/apache/camel/management/EventNotifierRedeliveryEventsTest.java b/camel-core/src/test/java/org/apache/camel/management/EventNotifierRedeliveryEventsTest.java
index f057cb2..18670e8 100644
--- a/camel-core/src/test/java/org/apache/camel/management/EventNotifierRedeliveryEventsTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/EventNotifierRedeliveryEventsTest.java
@@ -15,8 +15,8 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import java.util.ArrayList;
-import java.util.EventObject;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
@@ -30,13 +30,14 @@ import org.apache.camel.management.event.ExchangeFailureHandlingEvent;
 import org.apache.camel.management.event.ExchangeRedeliveryEvent;
 import org.apache.camel.management.event.ExchangeSendingEvent;
 import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Before;
 import org.junit.Test;
 
 public class EventNotifierRedeliveryEventsTest extends ContextTestSupport {
 
-    private static List<EventObject> events = new ArrayList<>();
+    private static List<CamelEvent> events = new ArrayList<>();
 
     @Override
     @Before
@@ -54,11 +55,11 @@ public class EventNotifierRedeliveryEventsTest extends ContextTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         DefaultCamelContext context = new DefaultCamelContext(createRegistry());
         context.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 events.add(event);
             }
 
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 return true;
             }
 
diff --git a/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java b/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java
index 5e08efb..88e59ac 100644
--- a/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java
@@ -27,13 +27,14 @@ import org.apache.camel.management.event.CamelContextStartingEvent;
 import org.apache.camel.management.event.CamelContextStoppedEvent;
 import org.apache.camel.management.event.CamelContextStoppingEvent;
 import org.apache.camel.management.event.ServiceStopFailureEvent;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Before;
 import org.junit.Test;
 
 public class EventNotifierServiceStoppingFailedEventTest extends ContextTestSupport {
 
-    private static List<EventObject> events = new ArrayList<>();
+    private static List<CamelEvent> events = new ArrayList<>();
     private static String stopOrder;
 
     @Override
@@ -51,11 +52,11 @@ public class EventNotifierServiceStoppingFailedEventTest extends ContextTestSupp
         context.addService(new MyService("C", false));
 
         context.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 events.add(event);
             }
 
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 return true;
             }
 
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextRestartTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextRestartTest.java
index a8c6fb0..24f6a027 100644
--- a/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextRestartTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextRestartTest.java
@@ -15,13 +15,13 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
-import java.util.EventObject;
 
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Before;
 import org.junit.Test;
@@ -39,11 +39,11 @@ public class ManagedCamelContextRestartTest extends ManagementTestSupport {
 
         context.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
             @Override
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 // Empty.
             }
             @Override
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 return true;
             }
             @Override
diff --git a/camel-core/src/test/java/org/apache/camel/management/MultipleEventNotifierEventsTest.java b/camel-core/src/test/java/org/apache/camel/management/MultipleEventNotifierEventsTest.java
index a66f81c..199f0b7 100644
--- a/camel-core/src/test/java/org/apache/camel/management/MultipleEventNotifierEventsTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/MultipleEventNotifierEventsTest.java
@@ -36,14 +36,15 @@ import org.apache.camel.management.event.RouteAddedEvent;
 import org.apache.camel.management.event.RouteRemovedEvent;
 import org.apache.camel.management.event.RouteStartedEvent;
 import org.apache.camel.management.event.RouteStoppedEvent;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Before;
 import org.junit.Test;
 
 public class MultipleEventNotifierEventsTest extends ContextTestSupport {
 
-    private static List<EventObject> events = new ArrayList<>();
-    private static List<EventObject> events2 = new ArrayList<>();
+    private static List<CamelEvent> events = new ArrayList<>();
+    private static List<CamelEvent> events2 = new ArrayList<>();
 
     @Override
     protected boolean useJmx() {
@@ -62,11 +63,11 @@ public class MultipleEventNotifierEventsTest extends ContextTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         DefaultCamelContext context = new DefaultCamelContext(createRegistry());
         context.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 events.add(event);
             }
 
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 return true;
             }
 
@@ -79,11 +80,11 @@ public class MultipleEventNotifierEventsTest extends ContextTestSupport {
             }
         });
         context.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 events2.add(event);
             }
 
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 return true;
             }
 
diff --git a/camel-core/src/test/java/org/apache/camel/management/RemoveEventNotifierTest.java b/camel-core/src/test/java/org/apache/camel/management/RemoveEventNotifierTest.java
index ac847d9..9cd573e 100644
--- a/camel-core/src/test/java/org/apache/camel/management/RemoveEventNotifierTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/RemoveEventNotifierTest.java
@@ -15,14 +15,15 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import java.util.ArrayList;
-import java.util.EventObject;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Before;
@@ -30,7 +31,7 @@ import org.junit.Test;
 
 public class RemoveEventNotifierTest extends ContextTestSupport {
 
-    private static List<EventObject> events = new ArrayList<>();
+    private static List<CamelEvent> events = new ArrayList<>();
     private EventNotifier notifier;
 
     @Override
@@ -45,11 +46,11 @@ public class RemoveEventNotifierTest extends ContextTestSupport {
         DefaultCamelContext context = new DefaultCamelContext(createRegistry());
 
         notifier = new EventNotifierSupport() {
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 events.add(event);
             }
 
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 return true;
             }
 
diff --git a/camel-core/src/test/java/org/apache/camel/processor/EventNotifierExchangeSentTest.java b/camel-core/src/test/java/org/apache/camel/processor/EventNotifierExchangeSentTest.java
index ad37466..41a09ba 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/EventNotifierExchangeSentTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/EventNotifierExchangeSentTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.junit.Test;
 
 public class EventNotifierExchangeSentTest extends ContextTestSupport {
diff --git a/camel-core/src/test/java/org/apache/camel/processor/MyLoggingSentEventNotifer.java b/camel-core/src/test/java/org/apache/camel/processor/MyLoggingSentEventNotifer.java
index f6ff8ae..d958be7 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/MyLoggingSentEventNotifer.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/MyLoggingSentEventNotifer.java
@@ -16,15 +16,14 @@
  */
 package org.apache.camel.processor;
 
-import java.util.EventObject;
-
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.apache.camel.support.EventNotifierSupport;
 
 // START SNIPPET: e1
 public class MyLoggingSentEventNotifer extends EventNotifierSupport {
 
-    public void notify(EventObject event) throws Exception {
+    public void notify(CamelEvent event) throws Exception {
         // react only when its the sent event
         if (event instanceof ExchangeSentEvent) {
             ExchangeSentEvent sent = (ExchangeSentEvent) event;
@@ -33,7 +32,7 @@ public class MyLoggingSentEventNotifer extends EventNotifierSupport {
 
     }
 
-    public boolean isEnabled(EventObject event) {
+    public boolean isEnabled(CamelEvent event) {
         return true;
     }
 
diff --git a/camel-core/src/test/java/org/apache/camel/processor/MySentEventNotifier.java b/camel-core/src/test/java/org/apache/camel/processor/MySentEventNotifier.java
index 815eb36..1ee8d5d 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/MySentEventNotifier.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/MySentEventNotifier.java
@@ -17,27 +17,27 @@
 package org.apache.camel.processor;
 
 import java.util.ArrayList;
-import java.util.EventObject;
 import java.util.List;
 
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.apache.camel.support.EventNotifierSupport;
 
 public class MySentEventNotifier extends EventNotifierSupport {
 
-    private final List<EventObject> events = new ArrayList<>();
+    private final List<CamelEvent> events = new ArrayList<>();
 
-    public List<EventObject> getEvents() {
+    public List<CamelEvent> getEvents() {
         return events;
     }
 
-    public void notify(EventObject event) throws Exception {
+    public void notify(CamelEvent event) throws Exception {
         if (event instanceof ExchangeSentEvent) {
             events.add(event);
         }
     }
 
-    public boolean isEnabled(EventObject event) {
+    public boolean isEnabled(CamelEvent event) {
         return true;
     }
 
diff --git a/camel-core/src/test/java/org/apache/camel/processor/PipelineStepWithEventTest.java b/camel-core/src/test/java/org/apache/camel/processor/PipelineStepWithEventTest.java
index d93e482..b2f6247 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/PipelineStepWithEventTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/PipelineStepWithEventTest.java
@@ -185,6 +185,11 @@ public class PipelineStepWithEventTest extends ContextTestSupport {
             this.id = id;
         }
 
+        @Override
+        public Type getType() {
+            return Type.Custom;
+        }
+
         public String getId() {
             return id;
         }
@@ -201,6 +206,11 @@ public class PipelineStepWithEventTest extends ContextTestSupport {
             this.timeTaken = timeTaken;
         }
 
+        @Override
+        public Type getType() {
+            return Type.Custom;
+        }
+
         public String getId() {
             return id;
         }
diff --git a/camel-core/src/test/java/org/apache/camel/processor/SplitterUseOriginalNotPropagateExceptionTest.java b/camel-core/src/test/java/org/apache/camel/processor/SplitterUseOriginalNotPropagateExceptionTest.java
index cc28514..347c103 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/SplitterUseOriginalNotPropagateExceptionTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/SplitterUseOriginalNotPropagateExceptionTest.java
@@ -16,13 +16,12 @@
  */
 package org.apache.camel.processor;
 
-import java.util.EventObject;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.AggregationStrategies;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.management.event.ExchangeFailedEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeFailedEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Test;
 
@@ -78,12 +77,12 @@ public class SplitterUseOriginalNotPropagateExceptionTest extends ContextTestSup
         private int errors;
 
         @Override
-        public void notify(EventObject event) throws Exception {
+        public void notify(CamelEvent event) throws Exception {
             errors++;
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
+        public boolean isEnabled(CamelEvent event) {
             return event instanceof ExchangeFailedEvent;
         }
 
diff --git a/camel-core/src/test/java/org/apache/camel/processor/UnitOfWorkProducerTest.java b/camel-core/src/test/java/org/apache/camel/processor/UnitOfWorkProducerTest.java
index 7905776..25a52fb 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/UnitOfWorkProducerTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/UnitOfWorkProducerTest.java
@@ -15,32 +15,33 @@
  * limitations under the License.
  */
 package org.apache.camel.processor;
+
 import java.util.ArrayList;
-import java.util.EventObject;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.management.event.ExchangeCompletedEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCompletedEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.After;
 import org.junit.Test;
 
 public class UnitOfWorkProducerTest extends ContextTestSupport {
 
-    private static List<EventObject> events = new ArrayList<>();
+    private static List<CamelEvent> events = new ArrayList<>();
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
         DefaultCamelContext context = new DefaultCamelContext(createRegistry());
         context.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 events.add(event);
             }
 
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 return event instanceof ExchangeCompletedEvent;
             }
 
diff --git a/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointEventNotifierSendingTest.java b/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointEventNotifierSendingTest.java
index d4d75a4..d195735 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointEventNotifierSendingTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointEventNotifierSendingTest.java
@@ -17,21 +17,21 @@
 package org.apache.camel.processor.async;
 
 import java.util.ArrayList;
-import java.util.EventObject;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.management.event.ExchangeSendingEvent;
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Test;
 
 public class AsyncEndpointEventNotifierSendingTest extends ContextTestSupport {
 
-    private final List<EventObject> events = new ArrayList<>();
+    private final List<CamelEvent> events = new ArrayList<>();
 
     @Test
     public void testAsyncEndpointEventNotifier() throws Exception {
@@ -59,11 +59,11 @@ public class AsyncEndpointEventNotifierSendingTest extends ContextTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         DefaultCamelContext context = new DefaultCamelContext(createRegistry());
         context.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 events.add(event);
             }
 
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 return event instanceof ExchangeSendingEvent || event instanceof ExchangeSentEvent;
             }
 
diff --git a/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointEventNotifierTest.java b/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointEventNotifierTest.java
index 2e1d9cb..ad619a8 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointEventNotifierTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointEventNotifierTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.processor.async;
 
-import java.util.EventObject;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
@@ -25,7 +24,8 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Test;
 
@@ -55,7 +55,7 @@ public class AsyncEndpointEventNotifierTest extends ContextTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         DefaultCamelContext context = new DefaultCamelContext(createRegistry());
         context.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
-            public void notify(EventObject event) throws Exception {
+            public void notify(CamelEvent event) throws Exception {
                 try {
                     ExchangeSentEvent sent = (ExchangeSentEvent) event;
                     time.set(sent.getTimeTaken());
@@ -64,7 +64,7 @@ public class AsyncEndpointEventNotifierTest extends ContextTestSupport {
                 }
             }
 
-            public boolean isEnabled(EventObject event) {
+            public boolean isEnabled(CamelEvent event) {
                 // we only want the async endpoint
                 if (event instanceof ExchangeSentEvent) {
                     ExchangeSentEvent sent = (ExchangeSentEvent) event;
diff --git a/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherSendEventTest.java b/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherSendEventTest.java
index 120431a..f631ecf 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherSendEventTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherSendEventTest.java
@@ -24,9 +24,10 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.management.DefaultManagementStrategy;
-import org.apache.camel.management.event.ExchangeSendingEvent;
-import org.apache.camel.management.event.ExchangeSentEvent;
 import org.apache.camel.processor.async.MyAsyncComponent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.apache.camel.spi.ManagementStrategy;
 import org.apache.camel.spi.ShutdownStrategy;
 import org.apache.camel.support.EventNotifierSupport;
@@ -94,7 +95,7 @@ public class EnricherSendEventTest extends ContextTestSupport {
       
         
         @Override
-        public void notify(EventObject event) throws Exception {
+        public void notify(CamelEvent event) throws Exception {
             
             if (event instanceof ExchangeSendingEvent) {
                 exchangeSendingEvent.incrementAndGet();
@@ -104,7 +105,7 @@ public class EnricherSendEventTest extends ContextTestSupport {
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
+        public boolean isEnabled(CamelEvent event) {
             return true;
         }
 
diff --git a/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionEventBreakpointTest.java b/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionEventBreakpointTest.java
index 0486794..8f5449d 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionEventBreakpointTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionEventBreakpointTest.java
@@ -27,9 +27,10 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.BreakpointSupport;
 import org.apache.camel.impl.ConditionSupport;
 import org.apache.camel.impl.DefaultDebugger;
-import org.apache.camel.management.event.AbstractExchangeEvent;
-import org.apache.camel.management.event.ExchangeFailedEvent;
 import org.apache.camel.spi.Breakpoint;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
+import org.apache.camel.spi.CamelEvent.Type;
 import org.apache.camel.spi.Condition;
 import org.junit.Before;
 import org.junit.Test;
@@ -47,16 +48,15 @@ public class DebugExceptionEventBreakpointTest extends ContextTestSupport {
         super.setUp();
 
         breakpoint = new BreakpointSupport() {
-            public void onEvent(Exchange exchange, EventObject event, NamedNode definition) {
-                AbstractExchangeEvent aee = (AbstractExchangeEvent) event;
-                Exception e = aee.getExchange().getException();
+            public void onEvent(Exchange exchange, ExchangeEvent event, NamedNode definition) {
+                Exception e = event.getExchange().getException();
                 logs.add("Breakpoint at " + definition + " caused by: " + e.getClass().getSimpleName() + "[" + e.getMessage() + "]");
             }
         };
 
         exceptionCondition = new ConditionSupport() {
-            public boolean matchEvent(Exchange exchange, EventObject event) {
-                return event instanceof ExchangeFailedEvent;
+            public boolean matchEvent(Exchange exchange, ExchangeEvent event) {
+                return event.getType() == Type.ExchangeFailed;
             }
         };
     }
diff --git a/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugTest.java b/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugTest.java
index b25db3f..6d9aced 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugTest.java
@@ -28,9 +28,10 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.BreakpointSupport;
 import org.apache.camel.impl.ConditionSupport;
 import org.apache.camel.impl.DefaultDebugger;
-import org.apache.camel.management.event.ExchangeCompletedEvent;
 import org.apache.camel.model.ToDefinition;
 import org.apache.camel.spi.Breakpoint;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
+import org.apache.camel.spi.CamelEvent.Type;
 import org.apache.camel.spi.Condition;
 import org.junit.Before;
 import org.junit.Test;
@@ -55,7 +56,7 @@ public class DebugTest extends ContextTestSupport {
                 logs.add("Breakpoint at " + definition + " with body: " + body);
             }
 
-            public void onEvent(Exchange exchange, EventObject event, NamedNode definition) {
+            public void onEvent(Exchange exchange, ExchangeEvent event, NamedNode definition) {
                 String body = exchange.getIn().getBody(String.class);
                 logs.add("Breakpoint event " + event.getClass().getSimpleName() + " with body: " + body);
             }
@@ -80,8 +81,8 @@ public class DebugTest extends ContextTestSupport {
 
         doneCondition = new ConditionSupport() {
             @Override
-            public boolean matchEvent(Exchange exchange, EventObject event) {
-                return event instanceof ExchangeCompletedEvent;
+            public boolean matchEvent(Exchange exchange, ExchangeEvent event) {
+                return event.getType() == Type.ExchangeCompleted;
             }
         };
     }
diff --git a/camel-core/src/test/java/org/apache/camel/processor/routingslip/DynamicRouterEventNotifierTest.java b/camel-core/src/test/java/org/apache/camel/processor/routingslip/DynamicRouterEventNotifierTest.java
index 6ed510e..7d57743 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/routingslip/DynamicRouterEventNotifierTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/routingslip/DynamicRouterEventNotifierTest.java
@@ -16,16 +16,15 @@
  */
 package org.apache.camel.processor.routingslip;
 
-import java.util.EventObject;
-
 import org.apache.camel.Body;
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.Header;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.management.event.ExchangeSendingEvent;
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Test;
 
@@ -82,7 +81,7 @@ public class DynamicRouterEventNotifierTest extends ContextTestSupport {
         private int sent;
 
         @Override
-        public void notify(EventObject event) throws Exception {
+        public void notify(CamelEvent event) throws Exception {
             if (event instanceof ExchangeSendingEvent) {
                 log.info("Sending: {}", event);
                 sending++;
@@ -92,7 +91,7 @@ public class DynamicRouterEventNotifierTest extends ContextTestSupport {
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
+        public boolean isEnabled(CamelEvent event) {
             return event instanceof ExchangeSendingEvent || event instanceof ExchangeSentEvent;
         }
 
diff --git a/camel-core/src/test/java/org/apache/camel/processor/routingslip/RecipientListEventNotifierTest.java b/camel-core/src/test/java/org/apache/camel/processor/routingslip/RecipientListEventNotifierTest.java
index ee01ce8..b1e10d5 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/routingslip/RecipientListEventNotifierTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/routingslip/RecipientListEventNotifierTest.java
@@ -16,13 +16,12 @@
  */
 package org.apache.camel.processor.routingslip;
 
-import java.util.EventObject;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.management.event.ExchangeSendingEvent;
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Test;
 
@@ -66,7 +65,7 @@ public class RecipientListEventNotifierTest extends ContextTestSupport {
         private int sent;
 
         @Override
-        public void notify(EventObject event) throws Exception {
+        public void notify(CamelEvent event) throws Exception {
             if (event instanceof ExchangeSendingEvent) {
                 sending++;
             } else {
@@ -75,7 +74,7 @@ public class RecipientListEventNotifierTest extends ContextTestSupport {
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
+        public boolean isEnabled(CamelEvent event) {
             return event instanceof ExchangeSendingEvent || event instanceof ExchangeSentEvent;
         }
 
diff --git a/camel-core/src/test/java/org/apache/camel/processor/routingslip/RoutingSlipEventNotifierTest.java b/camel-core/src/test/java/org/apache/camel/processor/routingslip/RoutingSlipEventNotifierTest.java
index 22adf3f..ba55a70 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/routingslip/RoutingSlipEventNotifierTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/routingslip/RoutingSlipEventNotifierTest.java
@@ -16,13 +16,12 @@
  */
 package org.apache.camel.processor.routingslip;
 
-import java.util.EventObject;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.management.event.ExchangeSendingEvent;
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Test;
 
@@ -66,7 +65,7 @@ public class RoutingSlipEventNotifierTest extends ContextTestSupport {
         private int sent;
 
         @Override
-        public void notify(EventObject event) throws Exception {
+        public void notify(CamelEvent event) throws Exception {
             if (event instanceof ExchangeSendingEvent) {
                 log.info("Sending: {}", event);
                 sending++;
@@ -76,7 +75,7 @@ public class RoutingSlipEventNotifierTest extends ContextTestSupport {
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
+        public boolean isEnabled(CamelEvent event) {
             return event instanceof ExchangeSendingEvent || event instanceof ExchangeSentEvent;
         }
 
diff --git a/camel-core/src/test/java/org/apache/camel/util/EventHelperTest.java b/camel-core/src/test/java/org/apache/camel/util/EventHelperTest.java
index 113b4fa..6a6d87b 100644
--- a/camel-core/src/test/java/org/apache/camel/util/EventHelperTest.java
+++ b/camel-core/src/test/java/org/apache/camel/util/EventHelperTest.java
@@ -16,15 +16,13 @@
  */
 package org.apache.camel.util;
 
-import java.util.EventObject;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.management.event.CamelContextStoppingEvent;
-import org.apache.camel.management.event.RouteStartedEvent;
-import org.apache.camel.management.event.RouteStoppedEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.Type;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Test;
 
@@ -130,18 +128,18 @@ public class EventHelperTest {
         AtomicInteger camelContextStoppingEvent = new AtomicInteger();
         
         @Override
-        public void notify(EventObject event) throws Exception {
-            if (event instanceof RouteStartedEvent) {
+        public void notify(CamelEvent event) throws Exception {
+            if (event.getType() == Type.RouteStarted) {
                 routeStartedEvent.incrementAndGet();
-            } else if (event instanceof RouteStoppedEvent) {
+            } else if (event.getType() == Type.RouteStopped) {
                 routeStoppedEvent.incrementAndGet();
-            } else if (event instanceof CamelContextStoppingEvent) {
+            } else if (event.getType() == Type.CamelContextStopping) {
                 camelContextStoppingEvent.incrementAndGet();
             }
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
+        public boolean isEnabled(CamelEvent event) {
             return true;
         }
 
diff --git a/components/camel-aws-xray/src/main/java/org/apache/camel/component/aws/xray/XRayTracer.java b/components/camel-aws-xray/src/main/java/org/apache/camel/component/aws/xray/XRayTracer.java
index bbf0ed4..af584d9 100644
--- a/components/camel-aws-xray/src/main/java/org/apache/camel/component/aws/xray/XRayTracer.java
+++ b/components/camel-aws-xray/src/main/java/org/apache/camel/component/aws/xray/XRayTracer.java
@@ -41,8 +41,9 @@ import org.apache.camel.NamedNode;
 import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.StaticService;
-import org.apache.camel.management.event.ExchangeSendingEvent;
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.RoutePolicy;
 import org.apache.camel.spi.RoutePolicyFactory;
@@ -246,8 +247,8 @@ public class XRayTracer extends ServiceSupport implements RoutePolicyFactory, St
      * information collected by AWS XRay will not be available within that new thread!
      * <p/>
      * As  {@link ExchangeSendingEvent} and {@link ExchangeSentEvent} both are executed within the
-     * invoking thread (in contrast to {@link org.apache.camel.management.event.ExchangeCreatedEvent
-     * ExchangeCreatedEvent} and {@link org.apache.camel.management.event.ExchangeCompletedEvent
+     * invoking thread (in contrast to {@link org.apache.camel.spi.CamelEvent.ExchangeCreatedEvent
+     * ExchangeCreatedEvent} and {@link org.apache.camel.spi.CamelEvent.ExchangeCompletedEvent
      * ExchangeCompletedEvent} which both run in the context of the spawned thread), adding further
      * subsegments by this {@link org.apache.camel.spi.EventNotifier EventNotifier} implementation
      * should be safe.
@@ -255,7 +256,7 @@ public class XRayTracer extends ServiceSupport implements RoutePolicyFactory, St
     private final class XRayEventNotifier extends EventNotifierSupport {
 
         @Override
-        public void notify(EventObject event) throws Exception {
+        public void notify(CamelEvent event) throws Exception {
 
             if (event instanceof ExchangeSendingEvent) {
                 ExchangeSendingEvent ese = (ExchangeSendingEvent) event;
@@ -323,7 +324,7 @@ public class XRayTracer extends ServiceSupport implements RoutePolicyFactory, St
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
+        public boolean isEnabled(CamelEvent event) {
             // listen for either when an exchange invoked an other endpoint
             return event instanceof ExchangeSendingEvent
                     || event instanceof ExchangeSentEvent;
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
index 8830514..a6255d6 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
@@ -76,9 +76,9 @@ import org.apache.camel.RoutesBuilder;
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.management.event.AbstractExchangeEvent;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.RouteContainer;
+import org.apache.camel.spi.CamelEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -204,11 +204,11 @@ public class CdiCamelExtension implements Extension {
                 .collect(toSet())));
     }
 
-    private <T extends EventObject> void camelEventNotifiers(@Observes ProcessObserverMethod<T, ?> pom) {
+    private <T extends CamelEvent> void camelEventNotifiers(@Observes ProcessObserverMethod<T, ?> pom) {
         // Only activate Camel event notifiers for explicit Camel event observers, that is, an observer method for a super type won't activate notifiers.
         Type type = pom.getObserverMethod().getObservedType();
         // Camel events are raw types
-        if (type instanceof Class && Class.class.cast(type).getPackage().equals(AbstractExchangeEvent.class.getPackage())) {
+        if (type instanceof Class && CamelEvent.class.isAssignableFrom(Class.class.cast(type))) {
             Set<Annotation> qualifiers = pom.getObserverMethod().getObservedQualifiers();
             if (qualifiers.isEmpty()) {
                 eventQualifiers.add(ANY);
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventConsumer.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventConsumer.java
index 4345c45..ac2ad76 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventConsumer.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventConsumer.java
@@ -19,8 +19,8 @@ package org.apache.camel.cdi;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeExchangeException;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
 import org.apache.camel.support.DefaultConsumer;
-import org.apache.camel.management.event.AbstractExchangeEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -55,7 +55,7 @@ final class CdiEventConsumer<T> extends DefaultConsumer {
         exchange.getIn().setBody(event);
 
         // Avoid infinite loop of exchange events
-        if (event instanceof AbstractExchangeEvent) {
+        if (event instanceof ExchangeEvent) {
             exchange.setProperty(Exchange.NOTIFY_EVENT, Boolean.TRUE);
         }
         try {
@@ -63,7 +63,7 @@ final class CdiEventConsumer<T> extends DefaultConsumer {
         } catch (Exception cause) {
             throw new RuntimeExchangeException("Error while processing CDI event", exchange, cause);
         } finally {
-            if (event instanceof AbstractExchangeEvent) {
+            if (event instanceof ExchangeEvent) {
                 exchange.setProperty(Exchange.NOTIFY_EVENT, Boolean.FALSE);
             }
         }
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventNotifier.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventNotifier.java
index 1fba23b..19f6572 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventNotifier.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventNotifier.java
@@ -20,14 +20,12 @@ import java.lang.annotation.Annotation;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.EventObject;
 import java.util.List;
+
 import javax.enterprise.inject.spi.BeanManager;
 
-import org.apache.camel.management.event.RouteAddedEvent;
-import org.apache.camel.management.event.RouteRemovedEvent;
-import org.apache.camel.management.event.RouteStartedEvent;
-import org.apache.camel.management.event.RouteStoppedEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.RouteEvent;
 import org.apache.camel.support.EventNotifierSupport;
 
 import static org.apache.camel.util.ObjectHelper.isNotEmpty;
@@ -45,17 +43,11 @@ final class CdiEventNotifier extends EventNotifierSupport {
     }
 
     @Override
-    public void notify(EventObject event) {
+    public void notify(CamelEvent event) {
         String id = null;
 
-        if (event instanceof RouteAddedEvent) {
-            id = ((RouteAddedEvent) event).getRoute().getId();
-        } else if (event instanceof RouteStartedEvent) {
-            id = ((RouteStartedEvent) event).getRoute().getId();
-        } else if (event instanceof RouteStoppedEvent) {
-            id = ((RouteStoppedEvent) event).getRoute().getId();
-        } else if (event instanceof RouteRemovedEvent) {
-            id = ((RouteRemovedEvent) event).getRoute().getId();
+        if (event instanceof RouteEvent) {
+            id = ((RouteEvent) event).getRoute().getId();
         }
 
         if (isNotEmpty(id)) {
@@ -69,7 +61,7 @@ final class CdiEventNotifier extends EventNotifierSupport {
     }
 
     @Override
-    public boolean isEnabled(EventObject event) {
+    public boolean isEnabled(CamelEvent event) {
         return true;
     }
 }
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventEndpointTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventEndpointTest.java
index f298546..634eae5 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventEndpointTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventEndpointTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.cdi.test;
 
 import java.util.EventObject;
+
 import javax.inject.Inject;
 
 import org.apache.camel.builder.RouteBuilder;
@@ -24,12 +25,12 @@ import org.apache.camel.cdi.CdiCamelExtension;
 import org.apache.camel.cdi.CdiEventEndpoint;
 import org.apache.camel.cdi.Uri;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.management.event.CamelContextStartedEvent;
-import org.apache.camel.management.event.ExchangeCompletedEvent;
-import org.apache.camel.management.event.ExchangeCreatedEvent;
-import org.apache.camel.management.event.ExchangeSendingEvent;
-import org.apache.camel.management.event.ExchangeSentEvent;
-import org.apache.camel.management.event.RouteStartedEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCompletedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCreatedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent.RouteStartedEvent;
 import org.jboss.arquillian.container.test.api.Deployment;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.shrinkwrap.api.Archive;
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventNotifierTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventNotifierTest.java
index 8b7d64d..6221171 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventNotifierTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventNotifierTest.java
@@ -30,15 +30,15 @@ import org.apache.camel.cdi.CdiCamelExtension;
 import org.apache.camel.cdi.Uri;
 import org.apache.camel.cdi.bean.SimpleCamelRoute;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.management.event.AbstractExchangeEvent;
-import org.apache.camel.management.event.CamelContextStartedEvent;
-import org.apache.camel.management.event.CamelContextStartingEvent;
-import org.apache.camel.management.event.CamelContextStoppedEvent;
-import org.apache.camel.management.event.CamelContextStoppingEvent;
-import org.apache.camel.management.event.ExchangeCompletedEvent;
-import org.apache.camel.management.event.ExchangeCreatedEvent;
-import org.apache.camel.management.event.ExchangeSendingEvent;
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStartingEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStoppedEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStoppingEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCompletedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCreatedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.jboss.arquillian.container.test.api.Deployment;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.junit.InSequence;
@@ -76,8 +76,8 @@ public class CamelEventNotifierTest {
         events.add(CamelContextStartedEvent.class);
     }
 
-    private void onExchangeEvent(@Observes AbstractExchangeEvent event, List<Class> events) {
-        events.add(event.getClass());
+    private void onExchangeEvent(@Observes ExchangeEvent event, List<Class> events) {
+        events.add(event.getClass().getInterfaces()[0]);
     }
 
     private void onCamelContextStoppingEvent(@Observes CamelContextStoppingEvent event, List<Class> events) {
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelRouteEventNotifierTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelRouteEventNotifierTest.java
index 30e159c..2866f6a 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelRouteEventNotifierTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelRouteEventNotifierTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.cdi.test;
 
 import java.util.ArrayList;
-import java.util.EventObject;
 import java.util.List;
 
 import javax.enterprise.context.ApplicationScoped;
@@ -29,10 +28,11 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.cdi.CdiCamelExtension;
 import org.apache.camel.cdi.bean.OtherCamelRoute;
 import org.apache.camel.cdi.bean.SimpleCamelRoute;
-import org.apache.camel.management.event.RouteAddedEvent;
-import org.apache.camel.management.event.RouteRemovedEvent;
-import org.apache.camel.management.event.RouteStartedEvent;
-import org.apache.camel.management.event.RouteStoppedEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.RouteAddedEvent;
+import org.apache.camel.spi.CamelEvent.RouteRemovedEvent;
+import org.apache.camel.spi.CamelEvent.RouteStartedEvent;
+import org.apache.camel.spi.CamelEvent.RouteStoppedEvent;
 import org.jboss.arquillian.container.test.api.Deployment;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.junit.InSequence;
@@ -57,75 +57,75 @@ public class CamelRouteEventNotifierTest {
     @Produces
     @Named("all")
     @ApplicationScoped
-    private List<EventObject> allFiredEvents = new ArrayList<>();
+    private List<CamelEvent> allFiredEvents = new ArrayList<>();
 
     @Produces
     @Named("simple")
     @ApplicationScoped
-    private List<EventObject> simpleFiredEvents = new ArrayList<>();
+    private List<CamelEvent> simpleFiredEvents = new ArrayList<>();
 
     @Produces
     @Named("other")
     @ApplicationScoped
-    private List<EventObject> otherFiredEvents = new ArrayList<>();
+    private List<CamelEvent> otherFiredEvents = new ArrayList<>();
 
     private void onRouteAddedEventEventAll(@Observes RouteAddedEvent event,
-                                           @Named("all") List<EventObject> events) {
+                                           @Named("all") List<CamelEvent> events) {
         events.add(event);
     }
 
     private void onRouteAddedEventEventSimple(@Observes @Named("simple") RouteAddedEvent event,
-                                              @Named("simple") List<EventObject> events) {
+                                              @Named("simple") List<CamelEvent> events) {
         events.add(event);
     }
 
     private void onRouteAddedEventEventOther(@Observes @Named("other") RouteAddedEvent event,
-                                             @Named("other") List<EventObject> events) {
+                                             @Named("other") List<CamelEvent> events) {
         events.add(event);
     }
 
     private void onRouteStartedEventEventAll(@Observes RouteStartedEvent event,
-                                             @Named("all") List<EventObject> events) {
+                                             @Named("all") List<CamelEvent> events) {
         events.add(event);
     }
 
     private void onRouteStartedEventEventSimple(@Observes @Named("simple") RouteStartedEvent event,
-                                                @Named("simple") List<EventObject> events) {
+                                                @Named("simple") List<CamelEvent> events) {
         events.add(event);
     }
 
     private void onRouteStartedEventEventOther(@Observes @Named("other") RouteStartedEvent event,
-                                               @Named("other") List<EventObject> events) {
+                                               @Named("other") List<CamelEvent> events) {
         events.add(event);
     }
 
     private void onRouteStoppedEventEventAll(@Observes RouteStoppedEvent event,
-                                             @Named("all") List<EventObject> events) {
+                                             @Named("all") List<CamelEvent> events) {
         events.add(event);
     }
 
     private void onRouteStoppedEventEventSimple(@Observes @Named("simple") RouteStoppedEvent event,
-                                                @Named("simple") List<EventObject> events) {
+                                                @Named("simple") List<CamelEvent> events) {
         events.add(event);
     }
 
     private void onRouteStoppedEventEventOther(@Observes @Named("other") RouteStoppedEvent event,
-                                               @Named("other") List<EventObject> events) {
+                                               @Named("other") List<CamelEvent> events) {
         events.add(event);
     }
 
     private void onRouteRemovedEventEventAll(@Observes RouteRemovedEvent event,
-                                             @Named("all") List<EventObject> events) {
+                                             @Named("all") List<CamelEvent> events) {
         events.add(event);
     }
 
     private void onRouteRemovedEventEventSimple(@Observes @Named("simple") RouteRemovedEvent event,
-                                                @Named("simple") List<EventObject> events) {
+                                                @Named("simple") List<CamelEvent> events) {
         events.add(event);
     }
 
     private void onRouteRemovedEventEventOther(@Observes @Named("other") RouteRemovedEvent event,
-                                               @Named("other") List<EventObject> events) {
+                                               @Named("other") List<CamelEvent> events) {
         events.add(event);
     }
 
@@ -142,9 +142,9 @@ public class CamelRouteEventNotifierTest {
 
     @Test
     @InSequence(1)
-    public void startedCamelContext(@Named("all") List<EventObject> all,
-                                    @Named("simple") List<EventObject> simple,
-                                    @Named("other") List<EventObject> other) {
+    public void startedCamelContext(@Named("all") List<CamelEvent> all,
+                                    @Named("simple") List<CamelEvent> simple,
+                                    @Named("other") List<CamelEvent> other) {
         assertThat("Events fired are incorrect!", all,
             contains(
                 both(
@@ -186,9 +186,9 @@ public class CamelRouteEventNotifierTest {
     @Test
     @InSequence(3)
     public void stopCamelContext(CamelContext context,
-                                 @Named("all") List<EventObject> all,
-                                 @Named("simple") List<EventObject> simple,
-                                 @Named("other") List<EventObject> other) throws Exception {
+                                 @Named("all") List<CamelEvent> all,
+                                 @Named("simple") List<CamelEvent> simple,
+                                 @Named("other") List<CamelEvent> other) throws Exception {
         context.stop();
 
         assertThat("Events fired are incorrect!", all,
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextEventNotifierTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextEventNotifierTest.java
index 21c65da..54b94f2 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextEventNotifierTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextEventNotifierTest.java
@@ -38,13 +38,13 @@ import org.apache.camel.cdi.bean.FirstCamelContextRoute;
 import org.apache.camel.cdi.bean.SecondCamelContextBean;
 import org.apache.camel.cdi.bean.UriEndpointRoute;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.management.event.AbstractExchangeEvent;
-import org.apache.camel.management.event.CamelContextStartedEvent;
-import org.apache.camel.management.event.CamelContextStartingEvent;
-import org.apache.camel.management.event.ExchangeCompletedEvent;
-import org.apache.camel.management.event.ExchangeCreatedEvent;
-import org.apache.camel.management.event.ExchangeSendingEvent;
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStartingEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCompletedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCreatedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.jboss.arquillian.container.test.api.Deployment;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.junit.InSequence;
@@ -118,8 +118,8 @@ public class MultiContextEventNotifierTest {
         events.add(CamelContextStartedEvent.class);
     }
 
-    private void onAnyExchangeEvent(@Observes AbstractExchangeEvent event, @Named("anyContext") List<Class> events) {
-        events.add(event.getClass());
+    private void onAnyExchangeEvent(@Observes ExchangeEvent event, @Named("anyContext") List<Class> events) {
+        events.add(event.getClass().getInterfaces()[0]);
     }
 
 
@@ -131,8 +131,8 @@ public class MultiContextEventNotifierTest {
         events.add(CamelContextStartedEvent.class);
     }
 
-    private void onDefaultExchangeEvent(@Observes @Default AbstractExchangeEvent event, @Named("defaultContext") List<Class> events) {
-        events.add(event.getClass());
+    private void onDefaultExchangeEvent(@Observes @Default ExchangeEvent event, @Named("defaultContext") List<Class> events) {
+        events.add(event.getClass().getInterfaces()[0]);
     }
 
 
@@ -144,8 +144,8 @@ public class MultiContextEventNotifierTest {
         events.add(CamelContextStartedEvent.class);
     }
 
-    private void onFirstExchangeEvent(@Observes @ContextName("first") AbstractExchangeEvent event, @ContextName("first") List<Class> events) {
-        events.add(event.getClass());
+    private void onFirstExchangeEvent(@Observes @ContextName("first") ExchangeEvent event, @ContextName("first") List<Class> events) {
+        events.add(event.getClass().getInterfaces()[0]);
     }
 
 
@@ -157,8 +157,8 @@ public class MultiContextEventNotifierTest {
         events.add(CamelContextStartedEvent.class);
     }
 
-    private void onSecondExchangeEvent(@Observes @ContextName("second") AbstractExchangeEvent event, @ContextName("second") List<Class> events) {
-        events.add(event.getClass());
+    private void onSecondExchangeEvent(@Observes @ContextName("second") ExchangeEvent event, @ContextName("second") List<Class> events) {
+        events.add(event.getClass().getInterfaces()[0]);
     }
 
     @Deployment
diff --git a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiCamelContextPublisher.java b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiCamelContextPublisher.java
index 26ca21c..560b6b8 100644
--- a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiCamelContextPublisher.java
+++ b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiCamelContextPublisher.java
@@ -23,8 +23,9 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.management.event.CamelContextStartedEvent;
-import org.apache.camel.management.event.CamelContextStoppingEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextEvent;
+import org.apache.camel.spi.CamelEvent.Type;
 import org.apache.camel.support.EventNotifierSupport;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -53,12 +54,12 @@ public class OsgiCamelContextPublisher extends EventNotifierSupport {
         this.bundleContext = bundleContext;
     }
 
-    public void notify(EventObject event) throws Exception {
-        if (event instanceof CamelContextStartedEvent) {
-            CamelContext context = ((CamelContextStartedEvent) event).getContext();
+    public void notify(CamelEvent event) throws Exception {
+        if (event.getType() == Type.CamelContextStarted) {
+            CamelContext context = ((CamelContextEvent) event).getContext();
             registerCamelContext(context);
-        } else if (event instanceof CamelContextStoppingEvent) {
-            CamelContext context = ((CamelContextStoppingEvent) event).getContext();
+        } else if (event.getType() == Type.CamelContextStopping) {
+            CamelContext context = ((CamelContextEvent) event).getContext();
             ServiceRegistration<?> reg = registrations.remove(context);
             if (reg != null) {
                 if (log.isDebugEnabled()) {
@@ -73,11 +74,8 @@ public class OsgiCamelContextPublisher extends EventNotifierSupport {
         }
     }
 
-    public boolean isEnabled(EventObject event) {
-        if (event instanceof CamelContextStartedEvent || event instanceof CamelContextStoppingEvent) {
-            return true;
-        }
-        return false;
+    public boolean isEnabled(CamelEvent event) {
+        return event.getType() == Type.CamelContextStarted || event.getType() == Type.CamelContextStopping;
     }
 
     @Override
diff --git a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiEventAdminNotifier.java b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiEventAdminNotifier.java
index e9b79f0..63aa677 100644
--- a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiEventAdminNotifier.java
+++ b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiEventAdminNotifier.java
@@ -20,6 +20,7 @@ import java.util.Dictionary;
 import java.util.EventObject;
 import java.util.Hashtable;
 
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
 
 import org.osgi.framework.Bundle;
@@ -60,7 +61,7 @@ public class OsgiEventAdminNotifier extends EventNotifierSupport {
         setIgnoreExchangeEvents(true);
     }
 
-    public void notify(EventObject event) throws Exception {
+    public void notify(CamelEvent event) throws Exception {
         EventAdmin eventAdmin = tracker.getService();
         if (eventAdmin == null) {
             return;
@@ -82,7 +83,7 @@ public class OsgiEventAdminNotifier extends EventNotifierSupport {
         eventAdmin.postEvent(new Event(getTopic(event), props));
     }
 
-    public boolean isEnabled(EventObject event) {
+    public boolean isEnabled(CamelEvent event) {
         return true;
     }
 
@@ -108,15 +109,11 @@ public class OsgiEventAdminNotifier extends EventNotifierSupport {
         return sb.toString();
     }
 
-    public static String getType(EventObject event) {
-        String type = event.getClass().getSimpleName();
-        if (type.endsWith("Event")) {
-            type = type.substring(0, type.length() - "Event".length());
-        }
-        return type;
+    public static String getType(CamelEvent event) {
+        return event.getType().name();
     }
 
-    public static String getTopic(EventObject event) {
+    public static String getTopic(CamelEvent event) {
         String topic;
         String type = getType(event);
         if (type.startsWith("CamelContext")) {
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/AbstractMicrometerEventNotifier.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/AbstractMicrometerEventNotifier.java
index 8c7f5eb..07b519c 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/AbstractMicrometerEventNotifier.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/AbstractMicrometerEventNotifier.java
@@ -16,20 +16,22 @@
  */
 package org.apache.camel.component.micrometer.eventnotifier;
 
-import java.util.EventObject;
 import java.util.concurrent.TimeUnit;
+
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Tags;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.micrometer.MicrometerUtils;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
 import org.apache.camel.support.ServiceHelper;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.METRICS_REGISTRY_NAME;
 import static org.apache.camel.component.micrometer.MicrometerConstants.SERVICE_NAME;
 
-public abstract class AbstractMicrometerEventNotifier<T extends EventObject> extends EventNotifierSupport implements CamelContextAware {
+public abstract class AbstractMicrometerEventNotifier<T extends CamelEvent> extends EventNotifierSupport implements CamelContextAware {
 
     private final Class<T> eventType;
 
@@ -78,7 +80,7 @@ public abstract class AbstractMicrometerEventNotifier<T extends EventObject> ext
     }
 
     @Override
-    public boolean isEnabled(EventObject eventObject) {
+    public boolean isEnabled(CamelEvent eventObject) {
         return eventType.isAssignableFrom(eventObject.getClass());
     }
 
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifier.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifier.java
index a7a1158..35f7894 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifier.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifier.java
@@ -16,25 +16,26 @@
  */
 package org.apache.camel.component.micrometer.eventnotifier;
 
-import java.util.EventObject;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Predicate;
+
 import io.micrometer.core.instrument.Tags;
 import io.micrometer.core.instrument.Timer;
 import org.apache.camel.Exchange;
-import org.apache.camel.management.event.AbstractExchangeEvent;
-import org.apache.camel.management.event.ExchangeCompletedEvent;
-import org.apache.camel.management.event.ExchangeCreatedEvent;
-import org.apache.camel.management.event.ExchangeFailedEvent;
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCompletedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCreatedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeFailedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 
-public class MicrometerExchangeEventNotifier extends AbstractMicrometerEventNotifier<AbstractExchangeEvent> {
+public class MicrometerExchangeEventNotifier extends AbstractMicrometerEventNotifier<ExchangeEvent> {
 
     private Predicate<Exchange> ignoreExchanges = exchange -> false;
     private MicrometerExchangeEventNotifierNamingStrategy namingStrategy = MicrometerExchangeEventNotifierNamingStrategy.DEFAULT;
 
     public MicrometerExchangeEventNotifier() {
-        super(AbstractExchangeEvent.class);
+        super(ExchangeEvent.class);
     }
 
     public void setIgnoreExchanges(Predicate<Exchange> ignoreExchanges) {
@@ -54,14 +55,14 @@ public class MicrometerExchangeEventNotifier extends AbstractMicrometerEventNoti
     }
 
     @Override
-    public void notify(EventObject eventObject) {
-        if (!(getIgnoreExchanges().test(((AbstractExchangeEvent) eventObject).getExchange()))) {
+    public void notify(CamelEvent eventObject) {
+        if (!(getIgnoreExchanges().test(((ExchangeEvent) eventObject).getExchange()))) {
             if (eventObject instanceof ExchangeSentEvent) {
                 handleSentEvent((ExchangeSentEvent) eventObject);
             } else if (eventObject instanceof ExchangeCreatedEvent) {
                 handleCreatedEvent((ExchangeCreatedEvent) eventObject);
             } else if (eventObject instanceof ExchangeCompletedEvent || eventObject instanceof ExchangeFailedEvent) {
-                handleDoneEvent((AbstractExchangeEvent) eventObject);
+                handleDoneEvent((ExchangeEvent) eventObject);
             }
         }
     }
@@ -77,7 +78,7 @@ public class MicrometerExchangeEventNotifier extends AbstractMicrometerEventNoti
         createdEvent.getExchange().setProperty("eventTimer:" + name, Timer.start(getMeterRegistry()));
     }
 
-    protected void handleDoneEvent(AbstractExchangeEvent doneEvent) {
+    protected void handleDoneEvent(ExchangeEvent doneEvent) {
         String name = namingStrategy.getName(doneEvent.getExchange(), doneEvent.getExchange().getFromEndpoint());
         Tags tags = namingStrategy.getTags(doneEvent, doneEvent.getExchange().getFromEndpoint());
         // Would have preferred LongTaskTimer, but you cannot set the FAILED_TAG once it is registered
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierNamingStrategy.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierNamingStrategy.java
index 483a51c..3e078d9 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierNamingStrategy.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierNamingStrategy.java
@@ -17,11 +17,13 @@
 package org.apache.camel.component.micrometer.eventnotifier;
 
 import java.util.function.Predicate;
+
 import io.micrometer.core.instrument.Meter;
 import io.micrometer.core.instrument.Tags;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.camel.management.event.AbstractExchangeEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_EXCHANGE_EVENT_METER_NAME;
 import static org.apache.camel.component.micrometer.MicrometerConstants.ENDPOINT_NAME;
@@ -36,7 +38,7 @@ public interface MicrometerExchangeEventNotifierNamingStrategy {
 
     String getName(Exchange exchange, Endpoint endpoint);
 
-    default Tags getTags(AbstractExchangeEvent event, Endpoint endpoint) {
+    default Tags getTags(ExchangeEvent event, Endpoint endpoint) {
         return Tags.of(
                 CAMEL_CONTEXT_TAG, event.getExchange().getContext().getName(),
                 SERVICE_NAME, MicrometerEventNotifierService.class.getSimpleName(),
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerRouteEventNotifier.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerRouteEventNotifier.java
index 4b9d337..3bb0ebf 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerRouteEventNotifier.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerRouteEventNotifier.java
@@ -16,24 +16,25 @@
  */
 package org.apache.camel.component.micrometer.eventnotifier;
 
-import java.util.EventObject;
 import java.util.concurrent.atomic.AtomicLong;
+
 import io.micrometer.core.instrument.Gauge;
-import org.apache.camel.management.event.AbstractRouteEvent;
-import org.apache.camel.management.event.RouteAddedEvent;
-import org.apache.camel.management.event.RouteRemovedEvent;
-import org.apache.camel.management.event.RouteStartedEvent;
-import org.apache.camel.management.event.RouteStoppedEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.RouteAddedEvent;
+import org.apache.camel.spi.CamelEvent.RouteEvent;
+import org.apache.camel.spi.CamelEvent.RouteRemovedEvent;
+import org.apache.camel.spi.CamelEvent.RouteStartedEvent;
+import org.apache.camel.spi.CamelEvent.RouteStoppedEvent;
 
 
-public class MicrometerRouteEventNotifier extends AbstractMicrometerEventNotifier<AbstractRouteEvent> {
+public class MicrometerRouteEventNotifier extends AbstractMicrometerEventNotifier<RouteEvent> {
 
     private final AtomicLong routesAdded = new AtomicLong();
     private final AtomicLong routesRunning = new AtomicLong();
     private MicrometerRouteEventNotifierNamingStrategy namingStrategy = MicrometerRouteEventNotifierNamingStrategy.DEFAULT;
 
     public MicrometerRouteEventNotifier() {
-        super(AbstractRouteEvent.class);
+        super(RouteEvent.class);
     }
 
     public MicrometerRouteEventNotifierNamingStrategy getNamingStrategy() {
@@ -58,7 +59,7 @@ public class MicrometerRouteEventNotifier extends AbstractMicrometerEventNotifie
     }
 
     @Override
-    public void notify(EventObject eventObject) {
+    public void notify(CamelEvent eventObject) {
         if (eventObject instanceof RouteAddedEvent) {
             routesAdded.incrementAndGet();
         } else if (eventObject instanceof RouteRemovedEvent) {
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerRouteEventNotifierNamingStrategy.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerRouteEventNotifierNamingStrategy.java
index 6966047..83cfdc9 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerRouteEventNotifierNamingStrategy.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerRouteEventNotifierNamingStrategy.java
@@ -17,10 +17,12 @@
 package org.apache.camel.component.micrometer.eventnotifier;
 
 import java.util.function.Predicate;
+
 import io.micrometer.core.instrument.Meter;
 import io.micrometer.core.instrument.Tags;
 import org.apache.camel.CamelContext;
-import org.apache.camel.management.event.AbstractRouteEvent;
+import org.apache.camel.spi.CamelEvent.RouteEvent;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTES_ADDED;
 import static org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTES_RUNNING;
@@ -49,6 +51,6 @@ public interface MicrometerRouteEventNotifierNamingStrategy {
         return Tags.of(
                 SERVICE_NAME, MicrometerEventNotifierService.class.getSimpleName(),
                 CAMEL_CONTEXT_TAG, camelContext.getName(),
-                EVENT_TYPE_TAG, AbstractRouteEvent.class.getSimpleName());
+                EVENT_TYPE_TAG, RouteEvent.class.getSimpleName());
     }
 }
diff --git a/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosEventNotifier.java b/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosEventNotifier.java
index fbe6dd7..801c5f0 100644
--- a/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosEventNotifier.java
+++ b/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosEventNotifier.java
@@ -16,20 +16,19 @@
  */
 package org.apache.camel.component.nagios;
 
-import java.util.EventObject;
-
 import com.googlecode.jsendnsca.Level;
 import com.googlecode.jsendnsca.MessagePayload;
 import com.googlecode.jsendnsca.NagiosPassiveCheckSender;
 import com.googlecode.jsendnsca.NagiosSettings;
 import com.googlecode.jsendnsca.PassiveCheckSender;
-import org.apache.camel.management.event.CamelContextStartupFailureEvent;
-import org.apache.camel.management.event.CamelContextStopFailureEvent;
-import org.apache.camel.management.event.ExchangeFailedEvent;
-import org.apache.camel.management.event.ExchangeFailureHandledEvent;
-import org.apache.camel.management.event.ExchangeRedeliveryEvent;
-import org.apache.camel.management.event.ServiceStartupFailureEvent;
-import org.apache.camel.management.event.ServiceStopFailureEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStartupFailureEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStopFailureEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeFailedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeFailureHandledEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeRedeliveryEvent;
+import org.apache.camel.spi.CamelEvent.ServiceStartupFailureEvent;
+import org.apache.camel.spi.CamelEvent.ServiceStopFailureEvent;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
 
 /**
@@ -51,7 +50,7 @@ public class NagiosEventNotifier extends EventNotifierSupport {
         this.sender = sender;
     }
 
-    public void notify(EventObject eventObject) throws Exception {
+    public void notify(CamelEvent eventObject) throws Exception {
         // create message payload to send
         String message = eventObject.toString();
         Level level = determineLevel(eventObject);
@@ -64,11 +63,11 @@ public class NagiosEventNotifier extends EventNotifierSupport {
         log.trace("Sending notification done");
     }
 
-    public boolean isEnabled(EventObject eventObject) {
+    public boolean isEnabled(CamelEvent eventObject) {
         return true;
     }
 
-    protected Level determineLevel(EventObject eventObject) {
+    protected Level determineLevel(CamelEvent eventObject) {
         // failures is considered critical
         if (eventObject instanceof ExchangeFailedEvent
                 || eventObject instanceof CamelContextStartupFailureEvent
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracer.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracer.java
index 9b6f00d..27473bb 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracer.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/OpenTracingTracer.java
@@ -39,8 +39,9 @@ import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.StaticService;
 import org.apache.camel.api.management.ManagedResource;
-import org.apache.camel.management.event.ExchangeSendingEvent;
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.apache.camel.spi.CamelLogger;
 import org.apache.camel.spi.LogListener;
 import org.apache.camel.spi.RoutePolicy;
@@ -227,7 +228,7 @@ public class OpenTracingTracer extends ServiceSupport implements RoutePolicyFact
     private final class OpenTracingEventNotifier extends EventNotifierSupport {
 
         @Override
-        public void notify(EventObject event) throws Exception {
+        public void notify(CamelEvent event) throws Exception {
             try {
                 if (event instanceof ExchangeSendingEvent) {
                     ExchangeSendingEvent ese = (ExchangeSendingEvent)event;
@@ -276,7 +277,7 @@ public class OpenTracingTracer extends ServiceSupport implements RoutePolicyFact
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
+        public boolean isEnabled(CamelEvent event) {
             return event instanceof ExchangeSendingEvent || event instanceof ExchangeSentEvent;
         }
 
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java
index 2222076..14739ab 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java
@@ -19,7 +19,6 @@ package org.apache.camel.spring.boot;
 import java.io.FileNotFoundException;
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
-import java.util.EventObject;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
@@ -31,16 +30,17 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.StartupListener;
 import org.apache.camel.main.MainDurationEventNotifier;
-import org.apache.camel.management.event.CamelContextStartedEvent;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.RestsDefinition;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.Type;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.support.EventNotifierSupport;
-import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.support.ServiceHelper;
+import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.ApplicationContext;
@@ -230,7 +230,7 @@ public class RoutesCollector implements ApplicationListener<ContextRefreshedEven
                     // so use an event notifier to trigger when this happens
                     camelContext.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
                         @Override
-                        public void notify(EventObject eventObject) throws Exception {
+                        public void notify(CamelEvent eventObject) throws Exception {
                             for (CamelContextConfiguration camelContextConfiguration : camelContextConfigurations) {
                                 log.debug("CamelContextConfiguration found. Invoking afterApplicationStart: {}", camelContextConfiguration);
                                 try {
@@ -242,8 +242,8 @@ public class RoutesCollector implements ApplicationListener<ContextRefreshedEven
                         }
 
                         @Override
-                        public boolean isEnabled(EventObject eventObject) {
-                            return eventObject instanceof CamelContextStartedEvent;
+                        public boolean isEnabled(CamelEvent eventObject) {
+                            return eventObject.getType() == Type.CamelContextStarted;
                         }
                     });
                 }
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
index b6b9a7d..f2a4d7d 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
@@ -33,11 +33,11 @@ import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.StatefulService;
 import org.apache.camel.api.management.mbean.ManagedRouteMBean;
+import org.apache.camel.api.management.mbean.RouteError;
 import org.apache.camel.management.ManagedCamelContext;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.spi.RouteError;
 import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
 import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
 import org.springframework.boot.actuate.endpoint.annotation.Selector;
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/model/RouteDetails.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/model/RouteDetails.java
index f41fcb5..f68544a 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/model/RouteDetails.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/model/RouteDetails.java
@@ -20,7 +20,7 @@ import java.util.Date;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import org.apache.camel.api.management.mbean.ManagedRouteMBean;
-import org.apache.camel.spi.RouteError;
+import org.apache.camel.api.management.mbean.RouteError;
 
 @JsonInclude(JsonInclude.Include.NON_EMPTY)
 public class RouteDetails {
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelEventNotifierTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelEventNotifierTest.java
index 397c989..4aa80bf 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelEventNotifierTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelEventNotifierTest.java
@@ -16,13 +16,13 @@
  */
 package org.apache.camel.spring.boot;
 
-import java.util.EventObject;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.support.EventNotifierSupport;
 import org.junit.Assert;
@@ -87,12 +87,12 @@ public class CamelEventNotifierTest extends Assert {
         private final AtomicInteger counter = new AtomicInteger();
 
         @Override
-        public void notify(EventObject event) throws Exception {
+        public void notify(CamelEvent event) throws Exception {
             counter.incrementAndGet();
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
+        public boolean isEnabled(CamelEvent event) {
             return true;
         }
 
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/StartAndStopEventNotifier.java b/components/camel-spring/src/test/java/org/apache/camel/spring/StartAndStopEventNotifier.java
index b6de441..d9f4a5b 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/StartAndStopEventNotifier.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/StartAndStopEventNotifier.java
@@ -16,13 +16,11 @@
  */
 package org.apache.camel.spring;
 
-import java.util.EventObject;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.ProducerTemplate;
-import org.apache.camel.management.event.CamelContextStartedEvent;
-import org.apache.camel.management.event.CamelContextStoppingEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.Type;
 import org.apache.camel.support.EventNotifierSupport;
 
 /**
@@ -43,14 +41,14 @@ public class StartAndStopEventNotifier extends EventNotifierSupport implements C
     }
 
     @Override
-    public void notify(EventObject event) throws Exception {
+    public void notify(CamelEvent event) throws Exception {
         // Note: there is also a CamelContextStartingEvent which is send first
         // and then Camel is starting. And when all that is done this event
         // (CamelContextStartedEvent) is send
-        if (event instanceof CamelContextStartedEvent) {
+        if (event.getType() == Type.CamelContextStarted) {
             log.info("Sending a message on startup...");
             template.sendBody("file:target/startandstop/start.txt", "Starting");
-        } else if (event instanceof CamelContextStoppingEvent) {
+        } else if (event.getType() == Type.CamelContextStopping) {
             // Note: there is also a CamelContextStoppedEvent which is send
             // afterwards, when Camel has been fully stopped.
             log.info("Sending a message on stopping...");
@@ -59,7 +57,7 @@ public class StartAndStopEventNotifier extends EventNotifierSupport implements C
     }
 
     @Override
-    public boolean isEnabled(EventObject event) {
+    public boolean isEnabled(CamelEvent event) {
         return true;
     }
 
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/management/MyEventNotifier.java b/components/camel-spring/src/test/java/org/apache/camel/spring/management/MyEventNotifier.java
index 28586cf..b40be29 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/management/MyEventNotifier.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/management/MyEventNotifier.java
@@ -17,24 +17,24 @@
 package org.apache.camel.spring.management;
 
 import java.util.ArrayList;
-import java.util.EventObject;
 import java.util.List;
 
+import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
 
 public class MyEventNotifier extends EventNotifierSupport {
 
-    private List<EventObject> events = new ArrayList<>();
+    private List<CamelEvent> events = new ArrayList<>();
 
-    public void notify(EventObject event) throws Exception {
+    public void notify(CamelEvent event) throws Exception {
         events.add(event);
     }
 
-    public boolean isEnabled(EventObject event) {
+    public boolean isEnabled(CamelEvent event) {
         return true;
     }
 
-    public List<EventObject> getEvents() {
+    public List<CamelEvent> getEvents() {
         return events;
     }
 
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/RouteCoverageEventNotifier.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/RouteCoverageEventNotifier.java
index d8306af..be693f6 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/RouteCoverageEventNotifier.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/RouteCoverageEventNotifier.java
@@ -16,11 +16,12 @@
  */
 package org.apache.camel.test.spring;
 
-import java.util.EventObject;
 import java.util.function.Function;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.management.event.CamelContextStoppingEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStoppingEvent;
 import org.apache.camel.support.EventNotifierSupport;
 
 public class RouteCoverageEventNotifier extends EventNotifierSupport {
@@ -36,12 +37,12 @@ public class RouteCoverageEventNotifier extends EventNotifierSupport {
     }
 
     @Override
-    public boolean isEnabled(EventObject event) {
+    public boolean isEnabled(CamelEvent event) {
         return event instanceof CamelContextStoppingEvent;
     }
 
     @Override
-    public void notify(EventObject event) throws Exception {
+    public void notify(CamelEvent event) throws Exception {
         CamelContext context = ((CamelContextStoppingEvent) event).getContext();
         String testName = (String) testMethodName.apply(this);
         RouteCoverageDumper.dumpRouteCoverage(context, testClassName, testName);
diff --git a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java
index f728423..bf9f04e 100644
--- a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java
+++ b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java
@@ -48,11 +48,9 @@ import org.apache.camel.api.management.ManagedAttribute;
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.component.properties.ServiceHostPropertiesFunction;
 import org.apache.camel.component.properties.ServicePortPropertiesFunction;
-import org.apache.camel.management.event.ExchangeCompletedEvent;
-import org.apache.camel.management.event.ExchangeCreatedEvent;
-import org.apache.camel.management.event.ExchangeFailedEvent;
-import org.apache.camel.management.event.ExchangeSendingEvent;
-import org.apache.camel.management.event.ExchangeSentEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.apache.camel.spi.RoutePolicy;
 import org.apache.camel.spi.RoutePolicyFactory;
 import org.apache.camel.support.EventNotifierSupport;
@@ -719,7 +717,7 @@ public class ZipkinTracer extends ServiceSupport implements RoutePolicyFactory,
     private final class ZipkinEventNotifier extends EventNotifierSupport {
 
         @Override
-        public void notify(EventObject event) throws Exception {
+        public void notify(CamelEvent event) throws Exception {
             // use event notifier to track events when Camel messages to endpoints
             // these events corresponds to Zipkin client events
 
@@ -742,12 +740,17 @@ public class ZipkinTracer extends ServiceSupport implements RoutePolicyFactory,
         }
 
         @Override
-        public boolean isEnabled(EventObject event) {
-            return event instanceof ExchangeSendingEvent
-                    || event instanceof ExchangeSentEvent
-                    || event instanceof ExchangeCreatedEvent
-                    || event instanceof ExchangeCompletedEvent
-                    || event instanceof ExchangeFailedEvent;
+        public boolean isEnabled(CamelEvent event) {
+            switch (event.getType()) {
+                case ExchangeSending:
+                case ExchangeSent:
+                case ExchangeCreated:
+                case ExchangeCompleted:
+                case ExchangeFailed:
+                    return true;
+                default:
+                    return false;
+            }
         }
 
         @Override
diff --git a/docs/user-manual/en/release-notes/camel-2170-release.adoc b/docs/user-manual/en/release-notes/camel-2170-release.adoc
index 5aa545f..0566d18 100644
--- a/docs/user-manual/en/release-notes/camel-2170-release.adoc
+++ b/docs/user-manual/en/release-notes/camel-2170-release.adoc
@@ -98,7 +98,7 @@ using link:stream-caching.html[Stream caching]
 * The link:cdi.html[Camel CDI] component has been improved to better fit
 into the CDI programming model, cover a larger set of containers, and
 provide these new features:
-** The Camel events from the `org.apache.camel.management.event` package
+** The Camel events from the `org.apache.camel.spi.CamelEvent` class
 (like `CamelContextStartedEvent`) can be observed as CDI events
 ** The new CDI event Camel endpoint enable CDI events to be seamlessly
 consumed from (respectively produced by) Camel consumers (respectively
diff --git a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/Application.java b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/Application.java
index 2202d45..38c8be9 100644
--- a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/Application.java
+++ b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/Application.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.cdi.metrics;
 
 import java.util.concurrent.TimeUnit;
+
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.Disposes;
 import javax.enterprise.inject.Produces;
@@ -34,7 +35,7 @@ import org.apache.camel.LoggingLevel;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.cdi.ContextName;
 import org.apache.camel.component.metrics.MetricsConstants;
-import org.apache.camel.management.event.CamelContextStartedEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
 
 /**
  * This example registers the following meters into the Metrics registry:
diff --git a/examples/camel-example-cdi-properties/src/main/java/org/apache/camel/example/cdi/properties/Application.java b/examples/camel-example-cdi-properties/src/main/java/org/apache/camel/example/cdi/properties/Application.java
index 8113bc7..892330e 100644
--- a/examples/camel-example-cdi-properties/src/main/java/org/apache/camel/example/cdi/properties/Application.java
+++ b/examples/camel-example-cdi-properties/src/main/java/org/apache/camel/example/cdi/properties/Application.java
@@ -29,7 +29,7 @@ import org.apache.camel.cdi.Uri;
 import org.apache.camel.component.properties.DefaultPropertiesParser;
 import org.apache.camel.component.properties.PropertiesComponent;
 import org.apache.camel.component.properties.PropertiesParser;
-import org.apache.camel.management.event.CamelContextStartedEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
 import org.apache.deltaspike.core.api.config.ConfigProperty;
 import org.apache.deltaspike.core.api.config.ConfigResolver;
 
diff --git a/examples/camel-example-cdi-properties/src/test/java/org/apache/camel/example/cdi/properties/CdiPropertiesTest.java b/examples/camel-example-cdi-properties/src/test/java/org/apache/camel/example/cdi/properties/CdiPropertiesTest.java
index 535473b..79d2c61 100644
--- a/examples/camel-example-cdi-properties/src/test/java/org/apache/camel/example/cdi/properties/CdiPropertiesTest.java
+++ b/examples/camel-example-cdi-properties/src/test/java/org/apache/camel/example/cdi/properties/CdiPropertiesTest.java
@@ -21,8 +21,8 @@ import javax.enterprise.event.Observes;
 import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.cdi.Uri;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.management.event.CamelContextStartingEvent;
 import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.spi.CamelEvent.CamelContextStartingEvent;
 import org.apache.camel.test.cdi.CamelCdiRunner;
 import org.apache.deltaspike.core.api.config.ConfigProperty;
 import org.junit.Test;
diff --git a/examples/camel-example-cdi-test/src/main/java/org/apache/camel/example/cdi/test/Application.java b/examples/camel-example-cdi-test/src/main/java/org/apache/camel/example/cdi/test/Application.java
index 847f2e0..705420d 100644
--- a/examples/camel-example-cdi-test/src/main/java/org/apache/camel/example/cdi/test/Application.java
+++ b/examples/camel-example-cdi-test/src/main/java/org/apache/camel/example/cdi/test/Application.java
@@ -25,8 +25,8 @@ import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.cdi.ContextName;
 import org.apache.camel.cdi.Uri;
-import org.apache.camel.management.event.CamelContextStartedEvent;
-import org.apache.camel.management.event.CamelContextStoppingEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStoppingEvent;
 
 /**
  * Our CDI Camel application
diff --git a/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/AdviceTest.java b/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/AdviceTest.java
index c853a37..80c2763 100644
--- a/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/AdviceTest.java
+++ b/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/AdviceTest.java
@@ -23,8 +23,8 @@ import javax.enterprise.event.Observes;
 import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.cdi.Uri;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.management.event.CamelContextStartingEvent;
 import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.spi.CamelEvent.CamelContextStartingEvent;
 import org.apache.camel.test.cdi.CamelCdiRunner;
 import org.junit.ClassRule;
 import org.junit.Test;
diff --git a/examples/camel-example-cdi-xml/src/main/java/org/apache/camel/example/cdi/xml/Application.java b/examples/camel-example-cdi-xml/src/main/java/org/apache/camel/example/cdi/xml/Application.java
index 2549f5a..507c973 100644
--- a/examples/camel-example-cdi-xml/src/main/java/org/apache/camel/example/cdi/xml/Application.java
+++ b/examples/camel-example-cdi-xml/src/main/java/org/apache/camel/example/cdi/xml/Application.java
@@ -28,7 +28,7 @@ import org.apache.camel.CamelException;
 import org.apache.camel.Handler;
 import org.apache.camel.Processor;
 import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.management.event.RouteStoppedEvent;
+import org.apache.camel.spi.CamelEvent.RouteStoppedEvent;
 
 import static org.apache.camel.builder.Builder.simple;
 
diff --git a/examples/camel-example-cdi-xml/src/test/java/org/apache/camel/example/cdi/xml/CdiXmlTest.java b/examples/camel-example-cdi-xml/src/test/java/org/apache/camel/example/cdi/xml/CdiXmlTest.java
index 2510c95..6b7ad57 100644
--- a/examples/camel-example-cdi-xml/src/test/java/org/apache/camel/example/cdi/xml/CdiXmlTest.java
+++ b/examples/camel-example-cdi-xml/src/test/java/org/apache/camel/example/cdi/xml/CdiXmlTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.cdi.xml;
 
 import java.util.concurrent.TimeUnit;
+
 import javax.enterprise.event.Observes;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -29,8 +30,8 @@ import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.cdi.Uri;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.management.event.CamelContextStartingEvent;
 import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.spi.CamelEvent.CamelContextStartingEvent;
 import org.apache.camel.test.cdi.CamelCdiRunner;
 import org.apache.camel.test.cdi.Order;
 import org.awaitility.Awaitility;
diff --git a/examples/camel-example-opentracing/client/src/main/java/sample/camel/ClientApplication.java b/examples/camel-example-opentracing/client/src/main/java/sample/camel/ClientApplication.java
index c46431c..42beeee 100644
--- a/examples/camel-example-opentracing/client/src/main/java/sample/camel/ClientApplication.java
+++ b/examples/camel-example-opentracing/client/src/main/java/sample/camel/ClientApplication.java
@@ -19,8 +19,8 @@ package sample.camel;
 import javax.enterprise.event.Observes;
 
 import org.apache.camel.cdi.ContextName;
-import org.apache.camel.management.event.CamelContextStartingEvent;
 import org.apache.camel.opentracing.OpenTracingTracer;
+import org.apache.camel.spi.CamelEvent.CamelContextStartingEvent;
 
 @ContextName("Server1")
 public class ClientApplication {
diff --git a/examples/camel-example-zipkin/client/src/main/java/sample/camel/ClientApplication.java b/examples/camel-example-zipkin/client/src/main/java/sample/camel/ClientApplication.java
index 6376157..13afdaa 100644
--- a/examples/camel-example-zipkin/client/src/main/java/sample/camel/ClientApplication.java
+++ b/examples/camel-example-zipkin/client/src/main/java/sample/camel/ClientApplication.java
@@ -19,7 +19,7 @@ package sample.camel;
 import javax.enterprise.event.Observes;
 
 import org.apache.camel.cdi.ContextName;
-import org.apache.camel.management.event.CamelContextStartingEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStartingEvent;
 import org.apache.camel.zipkin.ZipkinTracer;
 
 @ContextName("Server1")