diff --git a/Lib/test/test_profilehooks.py b/Lib/test/test_profilehooks.py
index 33c3f53..cc97df8 100644
--- a/Lib/test/test_profilehooks.py
+++ b/Lib/test/test_profilehooks.py
@@ -37,7 +37,8 @@
 
 
 class ProfileSimulator(HookWatcher):
-    def __init__(self):
+    def __init__(self, testcase):
+        self.testcase = testcase
         self.stack = []
         HookWatcher.__init__(self)
 
@@ -54,13 +55,8 @@
         self.stack.pop()
 
     def trace_exception(self, frame):
-        if len(self.stack) >= 2 and frame is self.stack[-2]:
-            self.add_event('propogate-from', self.stack[-1])
-            self.stack.pop()
-        else:
-            # Either an exception was raised in Python or a C function
-            # raised an exception; this does not represent propogation.
-            self.add_event('ignore', frame)
+        self.testcase.fail(
+            "the profiler should never receive exception events")
 
     dispatch = {
         'call': trace_call,
@@ -94,8 +90,7 @@
             1/0
         f_ident = ident(f)
         self.check_events(f, [(1, 'call', f_ident),
-                              (1, 'exception', f_ident),
-                              (0, 'exception', protect_ident),
+                              (1, 'return', f_ident),
                               ])
 
     def test_caught_exception(self):
@@ -104,7 +99,6 @@
             except: pass
         f_ident = ident(f)
         self.check_events(f, [(1, 'call', f_ident),
-                              (1, 'exception', f_ident),
                               (1, 'return', f_ident),
                               ])
 
@@ -114,7 +108,6 @@
             except: pass
         f_ident = ident(f)
         self.check_events(f, [(1, 'call', f_ident),
-                              (1, 'exception', f_ident),
                               (1, 'return', f_ident),
                               ])
 
@@ -123,11 +116,10 @@
             1/0
         f_ident = ident(f)
         self.check_events(f, [(1, 'call', f_ident),
-                              (1, 'exception', f_ident),
                               # This isn't what I expected:
-                              (0, 'exception', protect_ident),
+                              # (0, 'exception', protect_ident),
                               # I expected this again:
-                              # (1, 'exception', f_ident),
+                              (1, 'return', f_ident),
                               ])
 
     def test_exception_in_except_clause(self):
@@ -143,11 +135,9 @@
         g_ident = ident(g)
         self.check_events(g, [(1, 'call', g_ident),
                               (2, 'call', f_ident),
-                              (2, 'exception', f_ident),
-                              (1, 'exception', g_ident),
+                              (2, 'return', f_ident),
                               (3, 'call', f_ident),
-                              (3, 'exception', f_ident),
-                              (1, 'exception', g_ident),
+                              (3, 'return', f_ident),
                               (1, 'return', g_ident),
                               ])
 
@@ -161,10 +151,9 @@
         g_ident = ident(g)
         self.check_events(g, [(1, 'call', g_ident),
                               (2, 'call', f_ident),
-                              (2, 'exception', f_ident),
-                              (1, 'exception', g_ident),
+                              (2, 'return', f_ident),
                               (1, 'falling through', g_ident),
-                              (0, 'exception', protect_ident),
+                              (1, 'return', g_ident),
                               ])
 
     def test_raise_twice(self):
@@ -173,9 +162,7 @@
             except: 1/0
         f_ident = ident(f)
         self.check_events(f, [(1, 'call', f_ident),
-                              (1, 'exception', f_ident),
-                              (1, 'exception', f_ident),
-                              (0, 'exception', protect_ident)
+                              (1, 'return', f_ident),
                               ])
 
     def test_raise_reraise(self):
@@ -184,8 +171,7 @@
             except: raise
         f_ident = ident(f)
         self.check_events(f, [(1, 'call', f_ident),
-                              (1, 'exception', f_ident),
-                              (0, 'exception', protect_ident)
+                              (1, 'return', f_ident),
                               ])
 
     def test_raise(self):
@@ -193,8 +179,7 @@
             raise Exception()
         f_ident = ident(f)
         self.check_events(f, [(1, 'call', f_ident),
-                              (1, 'exception', f_ident),
-                              (0, 'exception', protect_ident)
+                              (1, 'return', f_ident),
                               ])
 
     def test_distant_exception(self):
@@ -218,12 +203,11 @@
                               (3, 'call', h_ident),
                               (4, 'call', g_ident),
                               (5, 'call', f_ident),
-                              (5, 'exception', f_ident),
-                              (4, 'exception', g_ident),
-                              (3, 'exception', h_ident),
-                              (2, 'exception', i_ident),
-                              (1, 'exception', j_ident),
-                              (0, 'exception', protect_ident),
+                              (5, 'return', f_ident),
+                              (4, 'return', g_ident),
+                              (3, 'return', h_ident),
+                              (2, 'return', i_ident),
+                              (1, 'return', j_ident),
                               ])
 
     def test_generator(self):
@@ -266,14 +250,14 @@
                               (2, 'return', f_ident),
                               # once more to hit the raise:
                               (2, 'call', f_ident),
-                              (2, 'exception', f_ident),
+                              (2, 'return', f_ident),
                               (1, 'return', g_ident),
                               ])
 
 
 class ProfileSimulatorTestCase(TestCaseBase):
     def new_watcher(self):
-        return ProfileSimulator()
+        return ProfileSimulator(self)
 
     def test_simple(self):
         def f(p):
@@ -288,8 +272,7 @@
             1/0
         f_ident = ident(f)
         self.check_events(f, [(1, 'call', f_ident),
-                              (1, 'ignore', f_ident),
-                              (1, 'propogate-from', f_ident),
+                              (1, 'return', f_ident),
                               ])
 
     def test_caught_exception(self):
@@ -298,7 +281,6 @@
             except: pass
         f_ident = ident(f)
         self.check_events(f, [(1, 'call', f_ident),
-                              (1, 'ignore', f_ident),
                               (1, 'return', f_ident),
                               ])
 
@@ -323,12 +305,11 @@
                               (3, 'call', h_ident),
                               (4, 'call', g_ident),
                               (5, 'call', f_ident),
-                              (5, 'ignore', f_ident),
-                              (5, 'propogate-from', f_ident),
-                              (4, 'propogate-from', g_ident),
-                              (3, 'propogate-from', h_ident),
-                              (2, 'propogate-from', i_ident),
-                              (1, 'propogate-from', j_ident),
+                              (5, 'return', f_ident),
+                              (4, 'return', g_ident),
+                              (3, 'return', h_ident),
+                              (2, 'return', i_ident),
+                              (1, 'return', j_ident),
                               ])
 
 
