diff --git a/samples/BrowserPlugin/jni/animation/AnimationPlugin.cpp b/samples/BrowserPlugin/jni/animation/AnimationPlugin.cpp
index 7f15d0d..45b5cbb 100644
--- a/samples/BrowserPlugin/jni/animation/AnimationPlugin.cpp
+++ b/samples/BrowserPlugin/jni/animation/AnimationPlugin.cpp
@@ -37,6 +37,7 @@
 extern ANPPaintInterfaceV0     gPaintI;
 extern ANPPathInterfaceV0      gPathI;
 extern ANPTypefaceInterfaceV0  gTypefaceI;
+extern ANPWindowInterfaceV0    gWindowI;
 
 static void inval(NPP instance) {
     browser->invalidaterect(instance, NULL);
@@ -101,7 +102,7 @@
     gTypefaceI.unref(tf);
 
     //register for key and touch events
-    ANPEventFlags flags = kKey_ANPEventFlag | kTouch_ANPEventFlag;
+    ANPEventFlags flags = kKey_ANPEventFlag | kTouch_ANPEventFlag | kVisibleRect_ANPEventFlag;
     NPError err = browser->setvalue(inst, kAcceptEvents_ANPSetValue, &flags);
     if (err != NPERR_NO_ERROR) {
         gLogI.log(inst, kError_ANPLogType, "Error selecting input events.");
@@ -186,6 +187,39 @@
     }
 }
 
+void BallAnimation::centerPluginOnScreen() {
+    NPP instance = this->inst();
+    PluginObject *obj = (PluginObject*) instance->pdata;
+    NPWindow *window = obj->window;
+
+    //find global (x,y) coordinates for center of the plugin
+    int pluginCenterX = window->x + (window->width / 2);
+    int pluginCenterY = window->y + (window->height / 2);
+
+    gLogI.log(instance, kDebug_ANPLogType, "---- %p Plugin Center: %d,%d : %d,%d",
+              instance, pluginCenterX, pluginCenterY, window->x, window->y);
+
+    //find global (x,y) coordinates for center of the visible screen
+    int screenCenterX = m_scrollX + (m_screenW / 2);
+    int screenCenterY = m_scrollY + (m_screenH / 2);
+
+    gLogI.log(instance, kDebug_ANPLogType, "---- %p Screen Center: %d,%d : %d,%d",
+              instance, screenCenterX, screenCenterY, m_scrollX, m_scrollY);
+
+    //compute the delta of the two coordinates
+    int deltaX = pluginCenterX - screenCenterX;
+    int deltaY = pluginCenterY - screenCenterY;
+
+    gLogI.log(instance, kDebug_ANPLogType, "---- %p Centering: %d,%d : %d,%d",
+              instance, deltaX, deltaY, m_scrollX + deltaX, m_scrollY + deltaY);
+
+    //move the visible screen
+    //webviewCore...
+    // (m_scrollX + deltaX, m_scrollY + deltaY)
+    gWindowI.scrollTo(instance, m_scrollX + deltaX, m_scrollY + deltaY);
+
+}
+
 int16 BallAnimation::handleEvent(const ANPEvent* evt) {
     NPP instance = this->inst();
 
@@ -206,7 +240,18 @@
                 browser->invalidaterect(instance, NULL);
             }
             return 1;
+        case kTouch_ANPEventType:
+             if (kDown_ANPTouchAction == evt->data.touch.action) {
+                 centerPluginOnScreen();
+             }
+             return 1;
 
+        case kVisibleRect_ANPEventType:
+             m_scrollX = evt->data.visibleRect.x;
+             m_scrollY = evt->data.visibleRect.y;
+             m_screenW = evt->data.visibleRect.width;
+             m_screenH = evt->data.visibleRect.height;
+             return 1;
         default:
             break;
     }
diff --git a/samples/BrowserPlugin/jni/animation/AnimationPlugin.h b/samples/BrowserPlugin/jni/animation/AnimationPlugin.h
index 1771d79..fa60a8a 100644
--- a/samples/BrowserPlugin/jni/animation/AnimationPlugin.h
+++ b/samples/BrowserPlugin/jni/animation/AnimationPlugin.h
@@ -47,6 +47,12 @@
     ANPPaint*   m_paint;
 
     static const float SCALE = 0.1;
+
+    void centerPluginOnScreen();
+    int m_scrollX;
+    int m_scrollY;
+    int m_screenH;
+    int m_screenW;
 };
 
 uint32_t getMSecs();
diff --git a/samples/BrowserPlugin/jni/main.cpp b/samples/BrowserPlugin/jni/main.cpp
index e2fb6d6..0b77741 100644
--- a/samples/BrowserPlugin/jni/main.cpp
+++ b/samples/BrowserPlugin/jni/main.cpp
@@ -67,8 +67,10 @@
 ANPPaintInterfaceV0         gPaintI;
 ANPPathInterfaceV0          gPathI;
 ANPTypefaceInterfaceV0      gTypefaceI;
+ANPWindowInterfaceV0        gWindowI;
 
 #define ARRAY_COUNT(array)      (sizeof(array) / sizeof(array[0]))
+#define DEBUG_PLUGIN_EVENTS     0
 
 NPError NP_Initialize(NPNetscapeFuncs* browserFuncs, NPPluginFuncs* pluginFuncs, void *java_env, void *application_context)
 {
@@ -110,6 +112,7 @@
         { kPathInterfaceV0_ANPGetValue,         sizeof(gPathI),     &gPathI },
         { kTypefaceInterfaceV0_ANPGetValue,     sizeof(gPaintI),    &gTypefaceI },
         { kAudioTrackInterfaceV0_ANPGetValue,   sizeof(gSoundI),    &gSoundI },
+        { kWindowInterfaceV0_ANPGetValue,       sizeof(gWindowI),    &gWindowI },
     };
     for (size_t i = 0; i < ARRAY_COUNT(gPairs); i++) {
         gPairs[i].i->inSize = gPairs[i].size;
@@ -299,6 +302,7 @@
     PluginObject *obj = reinterpret_cast<PluginObject*>(instance->pdata);
     const ANPEvent* evt = reinterpret_cast<const ANPEvent*>(event);
 
+#if DEBUG_PLUGIN_EVENTS
     switch (evt->eventType) {
         case kDraw_ANPEventType:
 
@@ -352,11 +356,20 @@
                     }
                 }
             }
-            return 1;
+            break;
+
+       case kVisibleRect_ANPEventType:
+            gLogI.log(instance, kDebug_ANPLogType, "---- %p VisibleRect [%d %d %d %d]",
+                      instance, evt->data.visibleRect.x, evt->data.visibleRect.y,
+                      evt->data.visibleRect.width, evt->data.visibleRect.height);
+            break;
 
         default:
+            gLogI.log(instance, kError_ANPLogType, "---- %p Unknown Event [%d]",
+                      instance, evt->eventType);
             break;
     }
+#endif
 
     if(!obj->activePlugin) {
         gLogI.log(instance, kError_ANPLogType, "the active plugin is null.");
