diff --git a/src/org/chromium/support_lib_boundary/util/BoundaryInterfaceReflectionUtil.java b/src/org/chromium/support_lib_boundary/util/BoundaryInterfaceReflectionUtil.java
index 5a772c5..51c78ed 100644
--- a/src/org/chromium/support_lib_boundary/util/BoundaryInterfaceReflectionUtil.java
+++ b/src/org/chromium/support_lib_boundary/util/BoundaryInterfaceReflectionUtil.java
@@ -16,13 +16,14 @@
  */
 public class BoundaryInterfaceReflectionUtil {
     /**
-     * Utility method for fetching a method from the current classloader, with the same signature
+     * Utility method for fetching a method from {@param delegateLoader}, with the same signature
      * (package + class + method name + parameters) as a given method defined in another
      * classloader.
      */
-    public static Method dupeMethod(Method method)
+    public static Method dupeMethod(Method method, ClassLoader delegateLoader)
             throws ClassNotFoundException, NoSuchMethodException {
-        Class<?> declaringClass = Class.forName(method.getDeclaringClass().getName());
+        Class<?> declaringClass =
+                Class.forName(method.getDeclaringClass().getName(), true, delegateLoader);
         Class[] otherSideParameterClasses = method.getParameterTypes();
         Class[] parameterClasses = new Class[otherSideParameterClasses.length];
         for (int n = 0; n < parameterClasses.length; n++) {
@@ -30,7 +31,9 @@
             // Primitive classes are shared between the classloaders - so we can use the same
             // primitive class declarations on either side. Non-primitive classes must be looked up
             // by name.
-            parameterClasses[n] = clazz.isPrimitive() ? clazz : Class.forName(clazz.getName());
+            parameterClasses[n] = clazz.isPrimitive()
+                    ? clazz
+                    : Class.forName(clazz.getName(), true, delegateLoader);
         }
         return declaringClass.getDeclaredMethod(method.getName(), parameterClasses);
     }
@@ -53,11 +56,12 @@
      */
     @TargetApi(Build.VERSION_CODES.KITKAT)
     public static InvocationHandler createInvocationHandlerFor(final Object delegate) {
+        final ClassLoader delegateLoader = delegate.getClass().getClassLoader();
         return new InvocationHandler() {
             @Override
             public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                 try {
-                    return dupeMethod(method).invoke(delegate, objects);
+                    return dupeMethod(method, delegateLoader).invoke(delegate, objects);
                 } catch (InvocationTargetException e) {
                     // If something went wrong, ensure we throw the original exception.
                     throw e.getTargetException();
