Correct some things in test 068.  Add detail to a verification error message.
diff --git a/tests/068-classloader/expected.txt b/tests/068-classloader/expected.txt
index 2056234..bf131ee 100644
--- a/tests/068-classloader/expected.txt
+++ b/tests/068-classloader/expected.txt
@@ -6,6 +6,7 @@
 Got expected LinkageError on DE
 Got DEO result DoubledExtendOkay 1
 Got LinkageError on GD
+Got LinkageError on TA
 Ctor: doubled implement, type 1
 DoubledImplement one
 Got LinkageError on DI (early)
diff --git a/tests/068-classloader/src-ex/AbstractGet.java b/tests/068-classloader/src-ex/AbstractGet.java
new file mode 100644
index 0000000..b62aa8f
--- /dev/null
+++ b/tests/068-classloader/src-ex/AbstractGet.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Verify that we don't reject this with a LinkageError.
+ */
+public class AbstractGet extends AbstractBase {
+    public DoubledExtendOkay getExtended() {
+        return new DoubledExtendOkay();
+    }
+}
+
+/**
+ * Abstract class, does not declare getAbstract.  This cause the VM to
+ * generate a "miranda" method.
+ */
+abstract class AbstractBase extends BaseOkay {
+    public abstract DoubledExtendOkay getExtended();
+}
+
diff --git a/tests/068-classloader/src-ex/GetDoubled.java b/tests/068-classloader/src-ex/GetDoubled.java
index fed70ed..5e20441 100644
--- a/tests/068-classloader/src-ex/GetDoubled.java
+++ b/tests/068-classloader/src-ex/GetDoubled.java
@@ -20,8 +20,8 @@
  * to return.
  */
 public class GetDoubled implements IGetDoubled {
-    public DoubledExtend getDoubled() {
-        return new DoubledExtend();
+    public DoubledExtendOkay getDoubled() {
+        return new DoubledExtendOkay();
     }
 }
 
diff --git a/tests/068-classloader/src/IGetDoubled.java b/tests/068-classloader/src/IGetDoubled.java
index da7f806..0a4ac91 100644
--- a/tests/068-classloader/src/IGetDoubled.java
+++ b/tests/068-classloader/src/IGetDoubled.java
@@ -18,6 +18,6 @@
  * Interface, loaded from one loader, used from another.
  */
 public interface IGetDoubled {
-    public DoubledExtend getDoubled();
+    public DoubledExtendOkay getDoubled();
 }
 
diff --git a/tests/068-classloader/src/Main.java b/tests/068-classloader/src/Main.java
index 24abfee..0788b52 100644
--- a/tests/068-classloader/src/Main.java
+++ b/tests/068-classloader/src/Main.java
@@ -25,6 +25,8 @@
         FancyLoader loader;
 
         loader = new FancyLoader(ClassLoader.getSystemClassLoader());
+        //System.out.println("SYSTEM: " + ClassLoader.getSystemClassLoader());
+        //System.out.println("ALTERN: " + loader);
 
         /*
          * This statement has no effect on this program, but it can
@@ -53,6 +55,7 @@
         testExtend(loader);
         testExtendOkay(loader);
         testInterface(loader);
+        testAbstract(loader);
         testImplement(loader);
         testIfaceImplement(loader);
     }
@@ -232,7 +235,7 @@
         Class getDoubledClass;
         Object obj;
 
-        /* get the "alternate" version of GetDoubled */
+        /* get GetDoubled from the "alternate" class loader */
         try {
             getDoubledClass = loader.loadClass("GetDoubled");
         } catch (ClassNotFoundException cnfe) {
@@ -251,7 +254,7 @@
             return;
         } catch (LinkageError le) {
             // Dalvik bails here
-            System.err.println("Got LinkageError on GD");
+            System.out.println("Got LinkageError on GD");
             return;
         }
 
@@ -260,18 +263,63 @@
          */
         IGetDoubled iface = (IGetDoubled) obj;
         try {
-            /* "de" will be the wrong variety of DoubledExtend */
-            DoubledExtend de = iface.getDoubled();
+            /* "de" will be the wrong variety of DoubledExtendOkay */
+            DoubledExtendOkay de = iface.getDoubled();
             // reference impl bails here
             String str = de.getStr();
         } catch (LinkageError le) {
-            System.err.println("Got LinkageError on GD");
+            System.out.println("Got LinkageError on GD");
             return;
         }
         System.err.println("Should have failed by now on GetDoubled");
     }
 
     /**
+     * Throw an abstract class into the middle and see what happens.
+     */
+    static void testAbstract(ClassLoader loader) {
+        Class abstractGetClass;
+        Object obj;
+
+        /* get AbstractGet from the "alternate" loader */
+        try {
+            abstractGetClass = loader.loadClass("AbstractGet");
+        } catch (ClassNotFoundException cnfe) {
+            System.err.println("loadClass ta failed: " + cnfe);
+            return;
+        }
+
+        /* instantiate */
+        try {
+            obj = abstractGetClass.newInstance();
+        } catch (InstantiationException ie) {
+            System.err.println("newInstance failed: " + ie);
+            return;
+        } catch (IllegalAccessException iae) {
+            System.err.println("newInstance failed: " + iae);
+            return;
+        } catch (LinkageError le) {
+            System.out.println("Got LinkageError on TA");
+            return;
+        }
+
+        /* use the base class reference to get a CL-specific instance */
+        BaseOkay baseRef = (BaseOkay) obj;
+        DoubledExtendOkay de = baseRef.getExtended();
+
+        /* try to call through it */
+        try {
+            String result;
+
+            result = BaseOkay.doStuff(de);
+        } catch (LinkageError le) {
+            System.out.println("Got LinkageError on TA");
+            return;
+        }
+        System.err.println("Should have failed by now in testAbstract");
+    }
+
+    /**
      * Test a doubled class that implements a common interface.
      */
     static void testImplement(ClassLoader loader) {
diff --git a/vm/analysis/CodeVerify.c b/vm/analysis/CodeVerify.c
index 0bb899d..0ab36ea 100644
--- a/vm/analysis/CodeVerify.c
+++ b/vm/analysis/CodeVerify.c
@@ -3531,8 +3531,9 @@
                 if (!dvmIsInterfaceClass(declClass) &&
                     !dvmInstanceof(resClass, declClass))
                 {
-                    LOG_VFY("VFY: returning %s, declared %s\n",
-                            resClass->descriptor, declClass->descriptor);
+                    LOG_VFY("VFY: returning %s (cl=%p), declared %s (cl=%p)\n",
+                            resClass->descriptor, resClass->classLoader,
+                            declClass->descriptor, declClass->classLoader);
                     failure = VERIFY_ERROR_GENERIC;
                     break;
                 }