diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventComponent.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventComponent.java
index 581773d..ec1fddb 100644
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventComponent.java
+++ b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,7 +22,7 @@
 	void activate(BundleContext context) {
 		eventAdmin = new EventAdminImpl(context);
 		eventAdmin.start();
-		eventRedeliverer = new EventRedeliverer(context);
+		eventRedeliverer = new EventRedeliverer(context, eventAdmin);
 		eventRedeliverer.open();
 	}
 
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventRedeliverer.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventRedeliverer.java
index 0b51c10..02e277e 100644
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventRedeliverer.java
+++ b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventRedeliverer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,65 +13,44 @@
 
 import org.osgi.framework.*;
 import org.osgi.service.event.EventAdmin;
-import org.osgi.util.tracker.ServiceTracker;
 
 /**
- * Main class for redeliver special events like FrameworkEvents via EventAdmin.
+ * Main class to redeliver framework published events via EventAdmin.
  * 
  * @version $Revision: 1.3 $
  */
 public class EventRedeliverer implements FrameworkListener, BundleListener, ServiceListener {
-	private final ServiceTracker<EventAdmin, EventAdmin> eventAdminTracker;
-	private final static boolean DEBUG = false;
-	private BundleContext bc;
+	private final EventAdmin eventAdmin;
+	private final BundleContext bc;
 
-	public EventRedeliverer(BundleContext bc) {
+	public EventRedeliverer(BundleContext bc, EventAdmin eventAdmin) {
 		this.bc = bc;
-		this.eventAdminTracker = new ServiceTracker<EventAdmin, EventAdmin>(bc, EventAdmin.class.getName(), null);
+		this.eventAdmin = eventAdmin;
 	}
 
 	public void close() {
-		eventAdminTracker.close();
 		bc.removeFrameworkListener(this);
 		bc.removeBundleListener(this);
 		bc.removeServiceListener(this);
 	}
 
 	/**
-	 * prepare any service trackers and register event listeners which are
+	 * register event listeners which are
 	 * necessary to obtain events to be mapped
 	 */
 	public void open() {
-		// open ServiceTracker for EventAdmin
-		eventAdminTracker.open();
-
 		// add legacy event listener for framework level event
 		bc.addFrameworkListener(this);
 		bc.addBundleListener(this);
 		bc.addServiceListener(this);
 	}
 
-	private EventAdmin getEventAdmin() {
-		return eventAdminTracker.getService();
-	}
-
 	/**
 	 * @param event
 	 * @see org.osgi.framework.FrameworkListener#frameworkEvent(org.osgi.framework.FrameworkEvent)
 	 */
 	public void frameworkEvent(FrameworkEvent event) {
-		EventAdmin eventAdmin = getEventAdmin();
-		if (eventAdmin != null) {
-			(new FrameworkEventAdapter(event, eventAdmin)).redeliver();
-		} else {
-			printNoEventAdminError();
-		}
-	}
-
-	private void printNoEventAdminError() {
-		if (DEBUG) {
-			System.out.println(this.getClass().getName() + ": Cannot find the EventAdmin."); //$NON-NLS-1$
-		}
+		new FrameworkEventAdapter(event, eventAdmin).redeliver();
 	}
 
 	/**
@@ -79,12 +58,7 @@
 	 * @see org.osgi.framework.BundleListener#bundleChanged(org.osgi.framework.BundleEvent)
 	 */
 	public void bundleChanged(BundleEvent event) {
-		EventAdmin eventAdmin = getEventAdmin();
-		if (eventAdmin != null) {
-			(new BundleEventAdapter(event, eventAdmin)).redeliver();
-		} else {
-			printNoEventAdminError();
-		}
+		new BundleEventAdapter(event, eventAdmin).redeliver();
 	}
 
 	/**
@@ -92,12 +66,6 @@
 	 * @see org.osgi.framework.ServiceListener#serviceChanged(org.osgi.framework.ServiceEvent)
 	 */
 	public void serviceChanged(ServiceEvent event) {
-		EventAdmin eventAdmin = getEventAdmin();
-		if (eventAdmin != null) {
-			(new ServiceEventAdapter(event, eventAdmin)).redeliver();
-		} else {
-			printNoEventAdminError();
-		}
+		new ServiceEventAdapter(event, eventAdmin).redeliver();
 	}
-
-}
\ No newline at end of file
+}
