diff --git a/framework/src/main/java/org/apache/felix/framework/Felix.java b/framework/src/main/java/org/apache/felix/framework/Felix.java
index f24d4df..bb91c47 100644
--- a/framework/src/main/java/org/apache/felix/framework/Felix.java
+++ b/framework/src/main/java/org/apache/felix/framework/Felix.java
@@ -3699,7 +3699,7 @@
                 {
                     stopBundle(m_bundle, false);
                 }
-                catch (BundleException ex)
+                catch (Throwable ex)
                 {
                     fireFrameworkEvent(FrameworkEvent.ERROR, m_bundle, ex);
                 }
@@ -3728,7 +3728,7 @@
                     refreshBundle(m_bundle);
                 }
             }
-            catch (Exception ex)
+            catch (Throwable ex)
             {
                 fireFrameworkEvent(FrameworkEvent.ERROR, m_bundle, ex);
             }
@@ -3742,7 +3742,7 @@
                 {
                     startBundle(m_bundle, false);
                 }
-                catch (BundleException ex)
+                catch (Throwable ex)
                 {
                     fireFrameworkEvent(FrameworkEvent.ERROR, m_bundle, ex);
                 }
diff --git a/framework/src/main/java/org/apache/felix/framework/PackageAdminImpl.java b/framework/src/main/java/org/apache/felix/framework/PackageAdminImpl.java
index 3ccd241..16cdcf4 100644
--- a/framework/src/main/java/org/apache/felix/framework/PackageAdminImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/PackageAdminImpl.java
@@ -331,6 +331,9 @@
             }
 
             // Perform refresh.
+            // NOTE: We don't catch any exceptions here, because
+            // the invoked method shields us from exceptions by
+            // catching Throwables when its invokes callbacks.
             m_felix.refreshPackages(bundles);
 
             // Remove the first request since it is now completed.
diff --git a/framework/src/main/java/org/apache/felix/framework/StartLevelImpl.java b/framework/src/main/java/org/apache/felix/framework/StartLevelImpl.java
index 8dafb70..0a71168 100644
--- a/framework/src/main/java/org/apache/felix/framework/StartLevelImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/StartLevelImpl.java
@@ -36,14 +36,12 @@
     private static final int BUNDLE_IDX = 0;
     private static final int STARTLEVEL_IDX = 1;
 
-    private Logger m_logger = null;
-    private Felix m_felix = null;
+    private final Felix m_felix;
     private final List m_requestList = new ArrayList();
     private Thread m_thread = null;
 
-    public StartLevelImpl(Logger logger, Felix felix)
+    public StartLevelImpl(Felix felix)
     {
-        m_logger = logger;
         m_felix = felix;
         // Start a thread to perform asynchronous package refreshes.
         m_thread = new Thread(this, "FelixStartLevel");
@@ -135,7 +133,7 @@
             catch (InterruptedException ex)
             {
                 // Log it and ignore since it won't cause much of an issue.
-                m_logger.log(
+                m_felix.getLogger().log(
                     Logger.LOG_WARNING,
                     "Wait for start level change during shutdown interrupted.",
                     ex);
@@ -256,6 +254,9 @@
             // is to set the framework start level. If the request is
             // an Object array, then the request is to set the start
             // level for a bundle.
+            // NOTE: We don't catch any exceptions here, because
+            // the invoked methods shield us from exceptions by
+            // catching Throwables when they invoke callbacks.
             if (request instanceof Integer)
             {
                 // Set the new framework start level.
diff --git a/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java b/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java
index 8b3a565..5213202 100644
--- a/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java
+++ b/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java
@@ -868,6 +868,9 @@
             // Deliver event outside of synchronized block
             // so that we don't block other requests from being
             // queued during event processing.
+            // NOTE: We don't catch any exceptions here, because
+            // the invoked method shields us from exceptions by
+            // catching Throwables when it invokes callbacks.
             fireEventImmediately(req.m_logger, req.m_type, req.m_listeners, req.m_event);
 
             // Put dispatch request in cache.
@@ -893,4 +896,4 @@
         public Object[] m_listeners = null;
         public EventObject m_event = null;
     }
-}
+}
\ No newline at end of file
