diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index eb74cf830cdf..6e916a71b637 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,8 @@
+2007-04-19  Keith Seitz  <keiths@redhat.com>
+
+	* interpret-run.cc [insn_breakpoint]: Save the original
+	insn for the breakpoint before posting the JVMTI notification.
+
 2007-04-19  Tom Tromey  <tromey@redhat.com>
 
 	* gnu/javax/net/ssl/provider/SSLSocketFactoryImpl.h: Rebuilt.
diff --git a/libjava/interpret-run.cc b/libjava/interpret-run.cc
index b8c88af78278..649b1bd24867 100644
--- a/libjava/interpret-run.cc
+++ b/libjava/interpret-run.cc
@@ -2600,18 +2600,19 @@ details.  */
 	Thread *thread = Thread::currentThread ();
 	JNIEnv *jni_env = _Jv_GetCurrentJNIEnv ();
 
-	_Jv_JVMTI_PostEvent (JVMTI_EVENT_BREAKPOINT, thread, jni_env,
-			     method, location);
-
-	// Continue execution
+	// Save the insn here since the breakpoint could be removed
+	// before the JVMTI notification returns.
 	using namespace gnu::gcj::jvmti;
 	Breakpoint *bp
 	  = BreakpointManager::getBreakpoint (reinterpret_cast<jlong> (method),
 					      location);
 	JvAssert (bp != NULL);
-
 	pc_t opc = reinterpret_cast<pc_t> (bp->getInsn ());
 
+	_Jv_JVMTI_PostEvent (JVMTI_EVENT_BREAKPOINT, thread, jni_env,
+			     method, location);
+
+	// Continue execution
 #ifdef DIRECT_THREADED
 	goto *(opc->insn);
 #else