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 cff6656..097e13b 100644
--- a/framework/src/main/java/org/apache/felix/framework/Felix.java
+++ b/framework/src/main/java/org/apache/felix/framework/Felix.java
@@ -788,15 +788,26 @@
         // If there is a gate, wait on it; otherwise, return immediately.
         // Grab a copy of the gate, since it is volatile.
         ThreadGate gate = m_shutdownGate;
+        boolean open = false;
         if (gate != null)
         {
-            gate.await(timeout);
+            open = gate.await(timeout);
         }
 
-        // TODO: RFC132 - We need to modify this to return the proper reason:
-        //       FrameEvent.STOPPED, FrameEvent.STOPPED_UPDATE,
-        //       FrameEvent.STOPPED_BOOTCLASSPATH_MODIFIED, FrameEvent.ERROR
-        return new FrameworkEvent(FrameworkEvent.STOPPED, this, null);
+        FrameworkEvent event;
+        if (open && (gate.getMessage() != null))
+        {
+            event = (FrameworkEvent) gate.getMessage();
+        }
+        else if (!open && (gate != null))
+        {
+            event = new FrameworkEvent(FrameworkEvent.WAIT_TIMEDOUT, this, null);
+        }
+        else
+        {
+            event = new FrameworkEvent(FrameworkEvent.STOPPED, this, null);
+        }
+        return event;
     }
 
     public void uninstall() throws BundleException
@@ -837,6 +848,9 @@
                 {
                     // First acquire the system bundle lock to verify the state.
                     acquireBundleLock(Felix.this, Bundle.STARTING | Bundle.ACTIVE);
+                    // Set the reason for the shutdown.
+                    m_shutdownGate.setMessage(
+                        new FrameworkEvent(FrameworkEvent.STOPPED_UPDATE, Felix.this, null));
                     // Record the state and stop the system bundle.
                     int oldState = Felix.this.getState();
                     try
diff --git a/framework/src/main/java/org/apache/felix/framework/util/ThreadGate.java b/framework/src/main/java/org/apache/felix/framework/util/ThreadGate.java
index 158ee14..f9900a3 100644
--- a/framework/src/main/java/org/apache/felix/framework/util/ThreadGate.java
+++ b/framework/src/main/java/org/apache/felix/framework/util/ThreadGate.java
@@ -26,6 +26,8 @@
 public class ThreadGate
 {
     private boolean m_open = false;
+    private Object m_msg = null;
+    private boolean m_initialized = false;
 
     /**
      * Open the gate and release any waiting threads.
@@ -37,11 +39,38 @@
     }
 
     /**
+     * Returns the message object associated with the gate; the
+     * message is just an arbitrary object used to pass information
+     * to the waiting threads.
+     * @return the message object associated with the gate.
+    **/
+    public synchronized Object getMessage()
+    {
+        return m_msg;
+    }
+
+    /**
+     * Sets the message object associated with the gate. The message
+     * object can only be set once, subsequent calls to this method
+     * are ignored.
+     * @param msg the message object to associate with this gate.
+    **/
+    public synchronized void setMessage(Object msg)
+    {
+        if (!m_initialized)
+        {
+            m_msg = msg;
+            m_initialized = true;
+        }
+    }
+
+    /**
      * Wait for the gate to open.
+     * @return <tt>true</tt> if the gate was opened or <tt>false</tt> if the timeout expired.
      * @throws java.lang.InterruptedException If the calling thread is interrupted;
      *         the gate still remains closed until opened.
     **/
-    public synchronized void await(long timeout) throws InterruptedException
+    public synchronized boolean await(long timeout) throws InterruptedException
     {
         long start = System.currentTimeMillis();
         long remaining = timeout;
@@ -57,5 +86,6 @@
                 }
             }
         }
+        return m_open;
     }
 }
\ No newline at end of file
