diff --git a/src/com/android/browser/PageDialogsHandler.java b/src/com/android/browser/PageDialogsHandler.java
index b1e1d44..67078b5 100644
--- a/src/com/android/browser/PageDialogsHandler.java
+++ b/src/com/android/browser/PageDialogsHandler.java
@@ -354,6 +354,7 @@
             SslError error) {
         View certificateView = inflateCertificateView(certificate, mContext);
         Resources res = Resources.getSystem();
+        // load 'android.R.placeholder' via introspection, since it's not a public resource ID
         int placeholder_id = res.getIdentifier("placeholder", "id", "android");
         final LinearLayout placeholder =
                 (LinearLayout)certificateView.findViewById(placeholder_id);
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index f948203..ea7a511 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -202,7 +202,7 @@
     private boolean mFullScreen = false;
 
     /**
-     * See {@link #clearBackStackWhenItemAdded(String)}.
+     * See {@link #clearBackStackWhenItemAdded(java.util.regex.Pattern)}.
      */
     private Pattern mClearHistoryUrlPattern;
 
diff --git a/src/com/android/browser/homepages/RequestHandler.java b/src/com/android/browser/homepages/RequestHandler.java
index 8dbd0ef..df171b4 100644
--- a/src/com/android/browser/homepages/RequestHandler.java
+++ b/src/com/android/browser/homepages/RequestHandler.java
@@ -235,6 +235,10 @@
         Resources res = mContext.getResources();
         String packageName = R.class.getPackage().getName();
         int id = res.getIdentifier(fileName, null, packageName);
+        if (id == 0) {
+            id = res.getIdentifier(fileName, null, mContext.getPackageName());
+        }
+
         if (id != 0) {
             InputStream in = res.openRawResource(id);
             byte[] buf = new byte[4096];
diff --git a/src/com/android/browser/homepages/Template.java b/src/com/android/browser/homepages/Template.java
index cf31bbd..60cfe2f 100644
--- a/src/com/android/browser/homepages/Template.java
+++ b/src/com/android/browser/homepages/Template.java
@@ -236,7 +236,6 @@
     private static String replaceConsts(Context context, String template) {
         final Pattern pattern = Pattern.compile("<%@\\s*(\\w+/\\w+)\\s*%>");
         final Resources res = context.getResources();
-        final String packageName = R.class.getPackage().getName();
         Matcher m = pattern.matcher(template);
         StringBuffer sb = new StringBuffer();
         while (m.find()) {
@@ -244,7 +243,11 @@
             if (name.startsWith("drawable/")) {
                 m.appendReplacement(sb, "res/" + name);
             } else {
+                final String packageName = R.class.getPackage().getName();
                 int id = res.getIdentifier(name, null, packageName);
+                if(id == 0) {
+                    id = res.getIdentifier(name, null, context.getPackageName());
+                }
                 if (id != 0) {
                     TypedValue value = new TypedValue();
                     res.getValue(id, value, true);
diff --git a/src/com/android/browser/mynavigation/MyNavigationRequestHandler.java b/src/com/android/browser/mynavigation/MyNavigationRequestHandler.java
index 1de89d4..d7b6864 100755
--- a/src/com/android/browser/mynavigation/MyNavigationRequestHandler.java
+++ b/src/com/android/browser/mynavigation/MyNavigationRequestHandler.java
@@ -144,8 +144,11 @@
 
     void writeResource(String fileName) throws IOException {
         Resources res = mContext.getResources();
-        String packageName = R.class.getPackage().getName();
-        int id = res.getIdentifier(fileName, null, packageName);
+        int id = res.getIdentifier(fileName, null, mContext.getPackageName());
+        if (id == 0) {
+            String packageName = R.class.getPackage().getName();
+            id = res.getIdentifier(fileName, null, packageName);
+        }
         if (id != 0) {
             InputStream in = res.openRawResource(id);
             byte[] buf = new byte[4096];
diff --git a/src/com/android/browser/mynavigation/MyNavigationTemplate.java b/src/com/android/browser/mynavigation/MyNavigationTemplate.java
index 85d1baf..efaa3b2 100755
--- a/src/com/android/browser/mynavigation/MyNavigationTemplate.java
+++ b/src/com/android/browser/mynavigation/MyNavigationTemplate.java
@@ -259,7 +259,6 @@
     private static String replaceConsts(Context context, String template) {
         final Pattern pattern = Pattern.compile("<%@\\s*(\\w+/\\w+)\\s*%>");
         final Resources res = context.getResources();
-        final String packageName = R.class.getPackage().getName();
         Matcher m = pattern.matcher(template);
         StringBuffer sb = new StringBuffer();
         while (m.find()) {
@@ -267,7 +266,11 @@
             if (name.startsWith("drawable/")) {
                 m.appendReplacement(sb, "res/" + name);
             } else {
+                final String packageName = R.class.getPackage().getName();
                 int id = res.getIdentifier(name, null, packageName);
+                if(id == 0) {
+                    id = res.getIdentifier(name, null, context.getPackageName());
+                }
                 if (id != 0) {
                     TypedValue value = new TypedValue();
                     res.getValue(id, value, true);
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index 0535e59..e2e22c9 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -691,9 +691,18 @@
                     String thumbFileName = preloads[i+1];
 
                     int favIconId = res.getIdentifier(faviconFileName, "raw",
-                                                      R.class.getPackage().getName());
+                            R.class.getPackage().getName());
+                    if(favIconId == 0) {
+                        favIconId = res.getIdentifier(faviconFileName, "raw",
+                                getContext().getPackageName());
+                    }
+
                     int thumbId = res.getIdentifier(thumbFileName, "raw",
-                                                      R.class.getPackage().getName());
+                            R.class.getPackage().getName());
+                    if(thumbId == 0) {
+                        thumbId = res.getIdentifier(thumbFileName, "raw",
+                                getContext().getPackageName());
+                    }
 
                     byte[] thumb = null, favicon = null;
 
diff --git a/src/com/android/browser/search/SearchEngineInfo.java b/src/com/android/browser/search/SearchEngineInfo.java
index ec304f6..f0b478b 100644
--- a/src/com/android/browser/search/SearchEngineInfo.java
+++ b/src/com/android/browser/search/SearchEngineInfo.java
@@ -61,10 +61,13 @@
      */
     public SearchEngineInfo(Context context, String name) throws IllegalArgumentException {
         mName = name;
-        Resources res = context.getResources();
 
+        final Resources res = context.getResources();
         String packageName = R.class.getPackage().getName();
         int id_data = res.getIdentifier(name, "array", packageName);
+        if(id_data == 0) {
+            id_data = res.getIdentifier(name, "array", context.getPackageName());
+        }
         if (id_data == 0) {
             throw new IllegalArgumentException("No resources found for " + name);
         }
