diff --git a/samples/BrowserPlugin/jni/background/BackgroundPlugin.cpp b/samples/BrowserPlugin/jni/background/BackgroundPlugin.cpp
index af518a9..0f90291 100644
--- a/samples/BrowserPlugin/jni/background/BackgroundPlugin.cpp
+++ b/samples/BrowserPlugin/jni/background/BackgroundPlugin.cpp
@@ -38,6 +38,7 @@
 extern ANPLogInterfaceV0       gLogI;
 extern ANPPaintInterfaceV0     gPaintI;
 extern ANPSurfaceInterfaceV0   gSurfaceI;
+extern ANPSystemInterfaceV0    gSystemI;
 extern ANPTypefaceInterfaceV0  gTypefaceI;
 
 #define ARRAY_COUNT(array)      (sizeof(array) / sizeof(array[0]))
@@ -66,6 +67,7 @@
     test_bitmaps(); // android bitmaps
     test_domAccess();
     test_javascript();
+    test_loadJavaClass();
 }
 
 BackgroundPlugin::~BackgroundPlugin() {
@@ -421,3 +423,39 @@
     // free the memory allocated within the browser
     browser->memfree(stringMem);
 }
+
+///////////////////////////////////////////////////////////////////////////////
+// Load Java Classes Tests
+///////////////////////////////////////////////////////////////////////////////
+
+void BackgroundPlugin::test_loadJavaClass() {
+
+    JNIEnv* env = NULL;
+    if (gVM->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
+        gLogI.log(inst(), kError_ANPLogType, " ---- LoadJavaTest: failed to get env");
+        return;
+    }
+
+    const char* className = "com.android.sampleplugin.BackgroundTest";
+    jclass backgroundClass = gSystemI.loadJavaClass(inst(), className);
+
+    if(!backgroundClass) {
+        gLogI.log(inst(), kError_ANPLogType, " ---- LoadJavaTest: failed to load class");
+        return;
+    }
+
+    jmethodID constructor = env->GetMethodID(backgroundClass, "<init>", "()V");
+    jmethodID addMethod = env->GetMethodID(backgroundClass, "addInt", "(II)I");
+    jobject backgroundObject = env->NewObject(backgroundClass, constructor);
+
+    if(!backgroundObject) {
+        gLogI.log(inst(), kError_ANPLogType, " ---- LoadJavaTest: failed to construct object");
+        return;
+    }
+
+    jint result = env->CallIntMethod(backgroundObject, addMethod, 2, 2);
+
+    if (result != 4) {
+        gLogI.log(inst(), kError_ANPLogType, " ---- LoadJavaTest: invalid result (%d != 4)", result);
+    }
+}
diff --git a/samples/BrowserPlugin/jni/background/BackgroundPlugin.h b/samples/BrowserPlugin/jni/background/BackgroundPlugin.h
index d370810..0e8f6f7 100644
--- a/samples/BrowserPlugin/jni/background/BackgroundPlugin.h
+++ b/samples/BrowserPlugin/jni/background/BackgroundPlugin.h
@@ -62,6 +62,7 @@
     void test_bitmap_transparency(const ANPEvent* evt);
     void test_domAccess();
     void test_javascript();
+    void test_loadJavaClass();
 
 };
 
diff --git a/samples/BrowserPlugin/jni/main.cpp b/samples/BrowserPlugin/jni/main.cpp
index 6f0ed96..4bc825e 100644
--- a/samples/BrowserPlugin/jni/main.cpp
+++ b/samples/BrowserPlugin/jni/main.cpp
@@ -157,9 +157,8 @@
 
     // Scripting functions appeared in NPAPI version 14
     if (browser->version >= 14) {
-    instance->pdata = browser->createobject (instance, getPluginClass());
-    obj = static_cast<PluginObject*>(instance->pdata);
-    bzero(obj, sizeof(*obj));
+        instance->pdata = browser->createobject (instance, getPluginClass());
+        obj = static_cast<PluginObject*>(instance->pdata);
     }
     /* END: STANDARD PLUGIN FRAMEWORK */
 
@@ -407,9 +406,9 @@
         PluginObject *obj = (PluginObject*) instance->pdata;
 
         if (obj)
-            browser->retainobject((NPObject*)obj);
+            browser->retainobject(&obj->header);
 
-        *v = obj;
+        *v = &(obj->header);
         return NPERR_NO_ERROR;
     }
 
diff --git a/samples/BrowserPlugin/jni/main.h b/samples/BrowserPlugin/jni/main.h
index 5906b0b..66629e6 100644
--- a/samples/BrowserPlugin/jni/main.h
+++ b/samples/BrowserPlugin/jni/main.h
@@ -28,6 +28,7 @@
 #include <npruntime.h>
 #include "android_npapi.h"
 #include "ANPSurface_npapi.h"
+#include "ANPSystem_npapi.h"
 
 extern NPNetscapeFuncs* browser;
 extern JavaVM* gVM;
diff --git a/samples/BrowserPlugin/src/com/android/sampleplugin/BackgroundTest.java b/samples/BrowserPlugin/src/com/android/sampleplugin/BackgroundTest.java
new file mode 100644
index 0000000..1f6b0d4
--- /dev/null
+++ b/samples/BrowserPlugin/src/com/android/sampleplugin/BackgroundTest.java
@@ -0,0 +1,11 @@
+package com.android.sampleplugin;
+
+public class BackgroundTest {
+
+    public BackgroundTest() {}
+    
+    public int addInt(int x, int y) {
+        return x + y;
+    }
+    
+}
