diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 2438a8d75d87b8255a3b9ea2ebb5af27b6dd2f75..9688503e8c057434d2d89d76017c97b7477606fc 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,9 @@
+2002-02-13  Todd Stock  <toddastock@yahoo.com>
+
+	Fix for PR libgcj/5670:
+	* verify.cc (is_assignable_from_slow): If `source' is interface,
+	recursively look for merge with `target'.
+
 2002-02-14  Martin Kahlert  <martin.kahlert@infineon.com>
 
 	* include/jni.h: Fix typo.
diff --git a/libjava/verify.cc b/libjava/verify.cc
index 38421f46ad63f3ea8a1c8fdb011b7589c9510b3e..ed734eab8f6f2972fe88c067a281b3c40bff8d64 100644
--- a/libjava/verify.cc
+++ b/libjava/verify.cc
@@ -259,10 +259,22 @@ private:
 	    if (source == NULL)
 	      return false;
 	  }
+	else if (source->isInterface ())
+	  {
+	    for (int i = 0; i < target->interface_count; ++i)
+	      {
+		// We use a recursive call because we also need to
+		// check superinterfaces.
+		if (is_assignable_from_slow (target->interfaces[i], source))
+		  return true;
+	      }
+	    target = target->getSuperclass ();
+	    if (target == NULL)
+	      return false;
+	  }
 	else if (target == &java::lang::Object::class$)
 	  return true;
-	else if (source->isInterface ()
-		 || source == &java::lang::Object::class$)
+	else if (source == &java::lang::Object::class$)
 	  return false;
 	else
 	  source = source->getSuperclass ();