diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java
index 14b9e40..ee7aebd 100644
--- a/src/com/android/browser/BrowserHistoryPage.java
+++ b/src/com/android/browser/BrowserHistoryPage.java
@@ -421,8 +421,8 @@
                 Class[] type = new Class[] { android.content.Context.class,
                                              String.class,
                                              String.class};
-                ReflectHelper.invokeStaticMethod("android.provider.Browser","sendString",
-                    type, params);
+                ReflectHelper.invokeMethod("android.provider.Browser","sendString",
+                                           type, params);
                 return true;
             case R.id.copy_url_context_menu_id:
                 copy(url);
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 34ba56b..e3f31c0 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -43,7 +43,6 @@
 
 import java.io.InputStream;
 import java.lang.ref.WeakReference;
-import java.lang.reflect.Method;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.Locale;
@@ -358,16 +357,16 @@
 
         // add for carrier useragent feature
         String ua = null;
-        try {
-            Class c = Class.forName("com.qrd.useragent.UserAgentHandler");
-            Object cObj = c.newInstance();
-            Method m = c.getDeclaredMethod("getUAString", Context.class);
-            ua = (String)m.invoke(cObj, mContext);
-        } catch (Exception e) {
-            Log.e(TAG, "plug in Load failed, err " + e);
+        Object objUserAgentHandler = ReflectHelper.newObject(
+                "com.qrd.useragent.UserAgentHandler", null, null);
+        Object[] params = {mContext};
+        Class[] type = new Class[] {Context.class};
+        ua = (String) ReflectHelper.invokeMethod(objUserAgentHandler,"getUAString",
+                                type, params);
+        if (ua == null)
             ua = mCustomUserAgents.get(settings);
-        }
-        if (ua != null) {
+
+        if (ua != null){
             settings.setUserAgentString(ua);
         } else {
             settings.setUserAgentString(USER_AGENTS[getUserAgent()]);
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 4d96cf5..c0ffd83 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -906,8 +906,8 @@
                         this.getContext().startActivity(intent);
                     }
                 } else {
-                    if ((Boolean)ReflectHelper.invokeStaticMethod(
-                             "ActivityManagerNative", "isSystemReady", null, null)) {
+                    if ((Boolean)ReflectHelper.invokeMethod(
+                             "android.app.ActivityManagerNative", "isSystemReady", null, null)) {
                         try {
                             Intent intent = new Intent(INTENT_PICK_NETWORK);
                             intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -947,7 +947,7 @@
         Object[] params  = {new String(PROP_NETSWITCH),
                             new Boolean(false)};
         Class[] type = new Class[] {String.class, boolean.class};
-        Boolean result = (Boolean) ReflectHelper.invokeStaticMethod(
+        Boolean result = (Boolean) ReflectHelper.invokeMethod(
                         "android.os.SystemProperties", "getBoolean",
                         type, params);
         if (result) {
@@ -1164,7 +1164,7 @@
             public String[] doInBackground(Void... unused) {
                 Object[] params  = {mActivity.getContentResolver()};
                 Class[] type = new Class[] {ContentResolver.class};
-                return (String[])ReflectHelper.invokeStaticMethod(
+                return (String[])ReflectHelper.invokeMethod(
                     "android.provider.Browser","getVisitedHistory",
                     type, params);
             }
@@ -2001,7 +2001,7 @@
             case R.id.exit_menu_id:
                 Object[] params  = { new String("persist.debug.browsermonkeytest")};
                 Class[] type = new Class[] {String.class};
-                String ret = (String)ReflectHelper.invokeStaticMethod(
+                String ret = (String)ReflectHelper.invokeMethod(
                              "android.os.SystemProperties","get", type, params);
                 if (ret != null && ret.equals("enable"))
                     break;
diff --git a/src/com/android/browser/DownloadHandler.java b/src/com/android/browser/DownloadHandler.java
index 1de6ac6..1e969c5 100644
--- a/src/com/android/browser/DownloadHandler.java
+++ b/src/com/android/browser/DownloadHandler.java
@@ -117,7 +117,7 @@
     private static boolean isAudioFileType(int fileType){
         Object[] params  = {Integer.valueOf(fileType)};
         Class[] type = new Class[] {int.class};
-        Boolean result = (Boolean) ReflectHelper.invokeStaticMethod("android.media.MediaFile",
+        Boolean result = (Boolean) ReflectHelper.invokeMethod("android.media.MediaFile",
                                "isAudioFileType", type, params);
         return result;
     }
@@ -125,7 +125,7 @@
     private static boolean isVideoFileType(int fileType){
         Object[] params  = {Integer.valueOf(fileType)};
         Class[] type = new Class[] {int.class};
-        Boolean result = (Boolean) ReflectHelper.invokeStaticMethod("android.media.MediaFile",
+        Boolean result = (Boolean) ReflectHelper.invokeMethod("android.media.MediaFile",
                              "isVideoFileType", type, params);
         return result;
     }
@@ -160,7 +160,7 @@
             // For those file types other than audio or video, download it immediately.
             Object[] params = {mimetype};
             Class[] type = new Class[] {String.class};
-            Integer result = (Integer) ReflectHelper.invokeStaticMethod("android.media.MediaFile",
+            Integer result = (Integer) ReflectHelper.invokeMethod("android.media.MediaFile",
                                            "getFileTypeForMimeType", type, params);
             int fileType = result.intValue();
             if ("http".equalsIgnoreCase(scheme) &&
diff --git a/src/com/android/browser/DownloadSettings.java b/src/com/android/browser/DownloadSettings.java
index 4ae00e3..cca26cc 100644
--- a/src/com/android/browser/DownloadSettings.java
+++ b/src/com/android/browser/DownloadSettings.java
@@ -131,7 +131,7 @@
             String updatedFileName = filenameBase + "." + filenameExtension;
             Object[] params = {updatedFileName};
             Class[] type = new Class[] {String.class};
-            mimetype = (String) ReflectHelper.invokeStaticMethod("android.media.MediaFile",
+            mimetype = (String) ReflectHelper.invokeMethod("android.media.MediaFile",
                                            "getMimeTypeForFile", type, params);
         }
 
diff --git a/src/com/android/browser/DownloadTouchIcon.java b/src/com/android/browser/DownloadTouchIcon.java
index d2c4024..fe139e8 100644
--- a/src/com/android/browser/DownloadTouchIcon.java
+++ b/src/com/android/browser/DownloadTouchIcon.java
@@ -121,7 +121,7 @@
                 //HttpHost httpHost = Proxy.getPreferredHttpHost(mContext, url);
                 Object[] params  = { mContext, url};
                 Class[] type = new Class[] {android.content.Context.class, String.class};
-                HttpHost httpHost = (HttpHost) ReflectHelper.invokeStaticMethod(
+                HttpHost httpHost = (HttpHost) ReflectHelper.invokeMethod(
                     "android.net.Proxy", "getPreferredHttpHost",
                     type, params);
                 if (httpHost != null) {
diff --git a/src/com/android/browser/FetchUrlMimeType.java b/src/com/android/browser/FetchUrlMimeType.java
index f42d627..fbd8be7 100644
--- a/src/com/android/browser/FetchUrlMimeType.java
+++ b/src/com/android/browser/FetchUrlMimeType.java
@@ -79,7 +79,7 @@
         try {
             Class<?> argTypes[] = new Class[]{Context.class, String.class};
             Object args[] = new Object[]{mContext, mUri};
-            httpHost = (HttpHost) ReflectHelper.invokeStaticMethod("android.net.Proxy",
+            httpHost = (HttpHost) ReflectHelper.invokeMethod("android.net.Proxy",
                 "getPreferredHttpHost", argTypes, args);
             if (httpHost != null) {
                 ConnRouteParams.setDefaultProxy(client.getParams(), httpHost);
diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index 22655f2..826d519 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -174,7 +174,7 @@
             Object[] params  = {new String("persist.env.browser.wap2estore"),
                                     Boolean.valueOf(false)};
             Class[] type = new Class[] {String.class, boolean.class};
-            Boolean wap2estore = (Boolean) ReflectHelper.invokeStaticMethod(
+            Boolean wap2estore = (Boolean) ReflectHelper.invokeMethod(
                       "android.os.SystemProperties", "getBoolean", type, params);
             if ((wap2estore && isEstoreTypeUrl(text)) || isRtspTypeUrl(text)
                 || isMakeCallTypeUrl(text)) {
diff --git a/src/com/android/browser/PageDialogsHandler.java b/src/com/android/browser/PageDialogsHandler.java
index a38b904..b1e1d44 100644
--- a/src/com/android/browser/PageDialogsHandler.java
+++ b/src/com/android/browser/PageDialogsHandler.java
@@ -16,8 +16,6 @@
 
 package com.android.browser;
 
-import java.lang.reflect.Method;
-
 import android.app.AlertDialog;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -31,6 +29,7 @@
 import org.codeaurora.swe.SslErrorHandler;
 import org.codeaurora.swe.WebView;
 
+import com.android.browser.reflect.ReflectHelper;
 import com.android.browser.R;
 
 import android.widget.LinearLayout;
@@ -339,25 +338,9 @@
     }
 
     private static View inflateCertificateView(SslCertificate certificate, Context ctx) {
-        Class certClass;
-        try {
-            certClass = Class.forName("android.net.http.SslCertificate");
-
-            Class argTypes[] = new Class[1];
-            argTypes[0] = Context.class;
-
-            Method m =  certClass.getDeclaredMethod("inflateCertificateView", argTypes);
-            m.setAccessible(true);
-
-            Object args[] = new Object[1];
-            args[0] = ctx;
-            return (View) m.invoke(certificate, args);
-
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        return null;
+        Object[] params = {ctx};
+        Class[] type = new Class[] {Context.class};
+        return (View)ReflectHelper.invokeMethod(certificate, "inflateCertificateView",type, params);
     }
 
     /*
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index a1ebd72..e0c3286 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -19,8 +19,6 @@
 import android.os.Bundle;
 import android.util.Log;
 
-import com.android.browser.reflect.ReflectHelper;
-
 import org.codeaurora.swe.WebView;
 
 import java.util.ArrayList;
diff --git a/src/com/android/browser/UploadHandler.java b/src/com/android/browser/UploadHandler.java
index 8dec49c..349f67f 100644
--- a/src/com/android/browser/UploadHandler.java
+++ b/src/com/android/browser/UploadHandler.java
@@ -125,7 +125,7 @@
         Object[] params  = {new String("persist.env.browser.drmupload"),
                             Boolean.valueOf(false)};
         Class[] type = new Class[] {String.class, boolean.class};
-        Boolean drmUpload = (Boolean) ReflectHelper.invokeStaticMethod(
+        Boolean drmUpload = (Boolean) ReflectHelper.invokeMethod(
                       "android.os.SystemProperties", "getBoolean", type, params);
         if (drmUpload && isDrmFileUpload(result)) {
             mUploadMessage.onReceiveValue(null);
diff --git a/src/com/android/browser/UrlHandler.java b/src/com/android/browser/UrlHandler.java
index 783f11a..4b40df9 100755
--- a/src/com/android/browser/UrlHandler.java
+++ b/src/com/android/browser/UrlHandler.java
@@ -107,7 +107,7 @@
         Object[] params  = {new String("persist.env.browser.wap2estore"),
                             Boolean.valueOf(false)};
         Class[] type = new Class[] {String.class, boolean.class};
-        Boolean wap2estore = (Boolean)ReflectHelper.invokeStaticMethod(
+        Boolean wap2estore = (Boolean)ReflectHelper.invokeMethod(
                       "android.os.SystemProperties", "getBoolean", type, params);
         if (wap2estore && isEstoreTypeUrl(url)) {
             handleEstoreTypeUrl(url);
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index e37e7fe..8b968a9 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -58,7 +58,6 @@
 import com.android.browser.platformsupport.BrowserContract.Searches;
 import com.android.browser.platformsupport.BrowserContract.Settings;
 import com.android.browser.platformsupport.BrowserContract.SyncState;
-import com.android.browser.reflect.ReflectHelper;
 import com.android.browser.widget.BookmarkThumbnailWidgetProvider;
 import com.google.common.annotations.VisibleForTesting;
 
diff --git a/src/com/android/browser/reflect/ReflectHelper.java b/src/com/android/browser/reflect/ReflectHelper.java
index 5a5f2ae..06ac8d0 100644
--- a/src/com/android/browser/reflect/ReflectHelper.java
+++ b/src/com/android/browser/reflect/ReflectHelper.java
@@ -41,42 +41,46 @@
 
     private final static String LOGTAG = "ReflectHelper";
 
-    public static Object newObject(String className) {
-        Object obj = null;
-        try {
-            Class clazz = Class.forName(className);
-            obj = clazz.newInstance();
-        } catch (Exception e) {
-            Log.e(LOGTAG, "An exception occured : " + e.getMessage());
-        }
-        return obj;
-    }
-
     public static Object newObject(String className, Class[] argTypes, Object[] args) {
-        if (args == null || args.length == 0) {
-            return newObject(className);
-        }
         Object obj = null;
-        try {
+
+        try{
             Class clazz = Class.forName(className);
-            Constructor ctor = clazz.getDeclaredConstructor(argTypes);
-            obj = ctor.newInstance(args);
-        } catch (Exception e) {
+
+            if (args == null || args.length == 0) {
+                obj = clazz.newInstance();
+            } else {
+                Constructor ctor = clazz.getDeclaredConstructor(argTypes);
+                obj = ctor.newInstance(args);
+            }
+        }
+        catch (Exception e) {
             Log.e(LOGTAG, "An exception occured : " + e.getMessage() );
         }
         return obj;
     }
 
     public static Object invokeMethod(Object obj, String method, Class[] argTypes, Object[] args) {
-        Object result  = null;
         boolean modifiedAccessibility = false;
-        if (obj == null || method == null) {
-            throw new IllegalArgumentException("Object and Method must be supplied.");
-        }
+        Object result = null;
+        Method m = null;
+
+        if (obj == null || method == null)
+            return null;
+
         try {
-            Method m = obj.getClass().getDeclaredMethod(method, argTypes);
+            if (obj instanceof String){
+                //Process call as a static method call
+                String className = (String)obj;
+                obj = null;
+                Class clazz = Class.forName(className);
+                m = clazz.getDeclaredMethod(method, argTypes);
+            } else {
+                //Process call on instance of obj
+                m = obj.getClass().getDeclaredMethod(method, argTypes);
+            }
+
             if(m != null) {
-                // make it visible
                 if (!m.isAccessible()) {
                     modifiedAccessibility = true;
                     m.setAccessible(true);
@@ -87,33 +91,34 @@
             }
         } catch (Exception e) {
             Log.e(LOGTAG, "An exception occured : " + e.getMessage() );
+            return null;
         }
         return result;
     }
 
-    public static Object invokeStaticMethod(String className, String method,
-                                            Class[] argTypes, Object[] args) {
-        Object result  = null;
+    public static Object invokeProxyMethod(String proxyClassName, String method, Object obj,
+                                           Class[] proxyArgTypes, Object[] args) {
+        Object result = null;
         boolean modifiedAccessibility = false;
-        if (className == null || method == null) {
+        if (proxyClassName == null || method == null) {
             throw new IllegalArgumentException("Object and Method must be supplied.");
         }
         try {
-            Class clazz = Class.forName(className);
-            Method m = clazz.getDeclaredMethod(method, argTypes);
+            Class clazz = Class.forName(proxyClassName);
+            Method m = clazz.getDeclaredMethod(method, proxyArgTypes);
             if(m != null) {
                 // make it visible
                 if (!m.isAccessible()) {
                     modifiedAccessibility = true;
                     m.setAccessible(true);
                 }
-                result = m.invoke(null, args);
+                result = m.invoke(obj, args);
                 if (modifiedAccessibility)
                     m.setAccessible(false);
+                }
+            } catch (Exception e) {
+                Log.e(LOGTAG, "An exception occured : " + e.getMessage() );
             }
-        } catch (Exception e) {
-            Log.e(LOGTAG, "An exception occured : " + e.getMessage() );
-        }
         return result;
     }
 
diff --git a/src/com/android/browser/search/SearchEngines.java b/src/com/android/browser/search/SearchEngines.java
index c840afc..91bddc8 100644
--- a/src/com/android/browser/search/SearchEngines.java
+++ b/src/com/android/browser/search/SearchEngines.java
@@ -16,8 +16,6 @@
 package com.android.browser.search;
 
 import com.android.browser.R;
-import com.android.browser.reflect.ReflectHelper;
-
 import android.content.Context;
 import android.content.res.Resources;
 import android.text.TextUtils;
diff --git a/src/com/android/browser/view/BookmarkExpandableView.java b/src/com/android/browser/view/BookmarkExpandableView.java
index 763efa7..aec00ff 100644
--- a/src/com/android/browser/view/BookmarkExpandableView.java
+++ b/src/com/android/browser/view/BookmarkExpandableView.java
@@ -33,13 +33,13 @@
 
 import com.android.browser.BreadCrumbView;
 import com.android.browser.BrowserBookmarksAdapter;
-import com.android.browser.R;
 import com.android.browser.platformsupport.BrowserContract;
+import com.android.browser.reflect.ReflectHelper;
+import com.android.browser.R;
 
 import org.json.JSONException;
 import org.json.JSONObject;
 
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashMap;
 
@@ -160,20 +160,10 @@
     // Since the 'menu' object is of type MenuBuilder, java reflection method
     // is the only way to access MenuBuilder.setCurrentMenuInfo().
     static void setCurrentMenuInfo(ContextMenu menu, ContextMenuInfo menuInfo) {
-        try {
-            Class<?> proxyClass = Class.forName("com.android.internal.view.menu.MenuBuilder");
-            Class<?> argTypes[] = new Class[1];
-            argTypes[0] = ContextMenuInfo.class;
-            Method m =  proxyClass.getDeclaredMethod("setCurrentMenuInfo", argTypes);
-            m.setAccessible(true);
-
-            Object args[] = new Object[1];
-            args[0] = menuInfo;
-            m.invoke(menu, args);
-        } catch (Exception e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
+        Object[] params = {menuInfo};
+        Class[] proxyType = new Class[] {ContextMenuInfo.class};
+        ReflectHelper.invokeProxyMethod("com.android.internal.view.menu.MenuBuilder",
+                                        "setCurrentMenuInfo", menu, proxyType, params);
     }
 
     @Override
