diff --git a/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
index c191f79..d334ba9 100644
--- a/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
+++ b/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
@@ -22,6 +22,8 @@
 import com.android.ide.common.rendering.api.LayoutLog;
 import com.android.ide.common.rendering.api.LayoutlibCallback;
 import com.android.ide.common.rendering.api.RenderResources;
+import com.android.ide.common.rendering.api.ResourceNamespace;
+import com.android.ide.common.rendering.api.ResourceNamespace.Resolver;
 import com.android.ide.common.rendering.api.ResourceReference;
 import com.android.ide.common.rendering.api.ResourceValue;
 import com.android.ide.common.rendering.api.StyleResourceValue;
@@ -99,6 +101,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.IdentityHashMap;
 import java.util.List;
@@ -117,6 +120,9 @@
     private static final Map<String, ResourceValue> FRAMEWORK_PATCHED_VALUES = new HashMap<>(2);
     private static final Map<String, ResourceValue> FRAMEWORK_REPLACE_VALUES = new HashMap<>(3);
 
+    private static final Resolver LEGACY_NAMESPACE_RESOLVER =
+            Collections.singletonMap(SdkConstants.TOOLS_PREFIX, SdkConstants.TOOLS_URI)::get;
+
     static {
         FRAMEWORK_PATCHED_VALUES.put("animateFirstView", new ResourceValue(
                 ResourceType.BOOL, "animateFirstView", "false", false));
@@ -714,6 +720,13 @@
         PropertiesMap defaultPropMap = null;
         boolean isPlatformFile = true;
 
+        // TODO(namespaces): We need to figure out how to keep track of the namespace of the current
+        // layout file.
+        ResourceNamespace currentFileNamespace = ResourceNamespace.TODO;
+
+        // TODO(namespaces): get this through the callback, only in non-namespaced projects.
+        ResourceNamespace.Resolver resolver = LEGACY_NAMESPACE_RESOLVER;
+
         // Hint: for XmlPullParser, attach source //DEVICE_SRC/dalvik/libcore/xml/src/java
         if (set instanceof BridgeXmlBlockParser) {
             BridgeXmlBlockParser parser;
@@ -726,6 +739,8 @@
                 defaultPropMap = mDefaultPropMaps.computeIfAbsent(key, k -> new PropertiesMap());
             }
 
+            resolver = parser::getNamespace;
+            currentFileNamespace = ResourceNamespace.fromBoolean(parser.isPlatformFile());
         } else if (set instanceof BridgeLayoutParamsMapAttributes) {
             // this is only for temp layout params generated dynamically, so this is never
             // platform content.
@@ -957,10 +972,19 @@
                     ta.bridgeSetValue(index, attrName, frameworkAttr, attributeHolder.resourceId,
                             defaultValue);
                 } else {
-                    // there is a value in the XML, but we need to resolve it in case it's
+                    // There is a value in the XML, but we need to resolve it in case it's
                     // referencing another resource or a theme value.
-                    ta.bridgeSetValue(index, attrName, frameworkAttr, attributeHolder.resourceId,
-                            mRenderResources.resolveValue(null, attrName, value, isPlatformFile));
+                    ResourceValue dummy =
+                            new ResourceValue(
+                                    currentFileNamespace,
+                                    null,
+                                    attrName,
+                                    value);
+                    dummy.setNamespaceLookup(resolver);
+
+                    ta.bridgeSetValue(
+                            index, attrName, frameworkAttr, attributeHolder.resourceId,
+                            mRenderResources.resolveResValue(dummy));
                 }
             }
         }
diff --git a/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java b/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java
index f18cd48..d50117e 100644
--- a/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java
+++ b/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java
@@ -159,7 +159,7 @@
 
     @Override
     public String getNamespace(String prefix) {
-        throw new RuntimeException("getNamespace() not supported");
+        return mParser.getNamespace(prefix);
     }
 
     @Override
diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTestBase.java b/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTestBase.java
index eb34f3c..399997b 100644
--- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTestBase.java
+++ b/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTestBase.java
@@ -18,6 +18,7 @@
 
 import com.android.ide.common.rendering.api.LayoutLog;
 import com.android.ide.common.rendering.api.RenderSession;
+import com.android.ide.common.rendering.api.ResourceNamespace;
 import com.android.ide.common.rendering.api.Result;
 import com.android.ide.common.rendering.api.SessionParams;
 import com.android.ide.common.rendering.api.SessionParams.RenderingMode;
@@ -59,6 +60,7 @@
 import java.util.concurrent.TimeUnit;
 
 import com.google.android.collect.Lists;
+import com.google.common.collect.ImmutableMap;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
@@ -418,9 +420,8 @@
                 }
 
                 @Override
-                public void fidelityWarning(@Nullable String tag, String message,
-                        Throwable throwable, Object data) {
-
+                public void fidelityWarning(String tag, String message, Throwable throwable,
+                        Object viewCookie, Object data) {
                     System.out.println("FidelityWarning " + tag + ": " + message);
                     if (throwable != null) {
                         throwable.printStackTrace();
diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java b/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java
index 9ecf1ce..3b4851f 100644
--- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java
+++ b/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java
@@ -17,6 +17,7 @@
 package com.android.layoutlib.bridge.intensive;
 
 import com.android.ide.common.rendering.api.RenderSession;
+import com.android.ide.common.rendering.api.ResourceNamespace;
 import com.android.ide.common.rendering.api.ResourceValue;
 import com.android.ide.common.rendering.api.SessionParams;
 import com.android.ide.common.rendering.api.SessionParams.RenderingMode;
@@ -800,8 +801,13 @@
 
         try {
             ColorStateList stateList = ResourceHelper.getColorStateList(
-                    new ResourceValue(ResourceUrl.create(null, ResourceType.COLOR, "test_list"),
-                            tmpColorList.getAbsolutePath()), mContext, null);
+                    new ResourceValue(
+                            ResourceNamespace.RES_AUTO,
+                            ResourceType.COLOR,
+                            "test_list",
+                            tmpColorList.getAbsolutePath()),
+                    mContext,
+                    null);
             assertNotNull(stateList);
             assertEquals(Color.parseColor("#ffffffff"), stateList.getColorForState(
                     StateSet.get(StateSet.VIEW_STATE_PRESSED),
@@ -817,8 +823,13 @@
             Resources.Theme theme = mContext.getResources().newTheme();
             theme.applyStyle(R.style.ThemeOverlay_Material_Light, true);
             stateList = ResourceHelper.getColorStateList(
-                    new ResourceValue(ResourceUrl.create(null, ResourceType.COLOR, "test_list"),
-                            tmpColorList.getAbsolutePath()), mContext, theme);
+                    new ResourceValue(
+                            ResourceNamespace.RES_AUTO,
+                            ResourceType.COLOR,
+                            "test_list",
+                            tmpColorList.getAbsolutePath()),
+                    mContext,
+                    theme);
             assertNotNull(stateList);
             assertEquals(Color.parseColor("#ff000000"), stateList.getColorForState(
                     StateSet.get(StateSet.VIEW_STATE_PRESSED),
diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java b/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java
index 34fc726..684cf12 100644
--- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java
+++ b/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java
@@ -163,8 +163,7 @@
     private Navigation mNavigation = Navigation.NONAV;
 
     public FolderConfiguration getFolderConfig() {
-        FolderConfiguration config = new FolderConfiguration();
-        config.createDefault();
+        FolderConfiguration config = FolderConfiguration.createDefault();
         config.setDensityQualifier(new DensityQualifier(mDensity));
         config.setNavigationMethodQualifier(new NavigationMethodQualifier(mNavigation));
         if (mScreenWidth > mScreenHeight) {
diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/SessionParamsBuilder.java b/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/SessionParamsBuilder.java
index 4bd3640..058b965 100644
--- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/SessionParamsBuilder.java
+++ b/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/SessionParamsBuilder.java
@@ -20,6 +20,7 @@
 import com.android.ide.common.rendering.api.AssetRepository;
 import com.android.ide.common.rendering.api.LayoutLog;
 import com.android.ide.common.rendering.api.LayoutlibCallback;
+import com.android.ide.common.rendering.api.ResourceNamespace;
 import com.android.ide.common.rendering.api.SessionParams;
 import com.android.ide.common.rendering.api.SessionParams.RenderingMode;
 import com.android.ide.common.resources.ResourceRepository;
@@ -33,6 +34,8 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import com.google.common.collect.ImmutableMap;
+
 /**
  * Builder to help setting up {@link SessionParams} objects.
  */
@@ -149,10 +152,12 @@
         assert mLayoutlibCallback != null;
 
         FolderConfiguration config = mConfigGenerator.getFolderConfig();
-        ResourceResolver resourceResolver =
-                ResourceResolver.create(mProjectResources.getConfiguredResources(config),
-                        mFrameworkResources.getConfiguredResources(config), mThemeName,
-                        isProjectTheme);
+        ResourceResolver resourceResolver = ResourceResolver.create(
+                ImmutableMap.of(
+                        ResourceNamespace.ANDROID, mFrameworkResources.getConfiguredResources(config),
+                        ResourceNamespace.TODO, mProjectResources.getConfiguredResources(config)),
+                mThemeName,
+                isProjectTheme);
 
         SessionParams params = new SessionParams(mLayoutParser, mRenderingMode, mProjectKey /* for
         caching */, mConfigGenerator.getHardwareConfig(), resourceResolver, mLayoutlibCallback,
diff --git a/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteLayoutLogAdapter.java b/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteLayoutLogAdapter.java
index e87a0e0..c5dbfab 100644
--- a/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteLayoutLogAdapter.java
+++ b/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteLayoutLogAdapter.java
@@ -42,9 +42,9 @@
     }
 
     @Override
-    public void fidelityWarning(String tag, String message, Throwable throwable,
-            Serializable data) {
-        mLog.fidelityWarning(tag, message, throwable, null);
+    public void fidelityWarning(String tag, String message, Throwable throwable, Object viewCookie,
+            Object data) {
+        mLog.fidelityWarning(tag, message, throwable, viewCookie, data);
     }
 
     @Override
diff --git a/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteRenderResourcesAdapter.java b/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteRenderResourcesAdapter.java
index 4303b77..6434df1 100644
--- a/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteRenderResourcesAdapter.java
+++ b/remote/client/src/com/android/layoutlib/bridge/remote/client/adapters/RemoteRenderResourcesAdapter.java
@@ -17,6 +17,7 @@
 package com.android.layoutlib.bridge.remote.client.adapters;
 
 import com.android.ide.common.rendering.api.RenderResources;
+import com.android.ide.common.rendering.api.ResourceReference;
 import com.android.ide.common.rendering.api.ResourceValue;
 import com.android.ide.common.rendering.api.StyleResourceValue;
 import com.android.layout.remote.api.RemoteRenderResources;
@@ -92,11 +93,6 @@
     }
 
     @Override
-    public ResourceValue findResValue(String reference, boolean forceFrameworkOnly) {
-        return mDelegate.findResValue(reference, forceFrameworkOnly);
-    }
-
-    @Override
     public ResourceValue resolveValue(ResourceValue value) {
         return mDelegate.resolveResValue(value);
     }
@@ -116,4 +112,14 @@
     public StyleResourceValue getStyle(String styleName, boolean isFramework) {
         return mDelegate.getStyle(styleName, isFramework);
     }
+
+    @Override
+    public ResourceValue dereference(ResourceValue resourceValue) throws RemoteException {
+        return mDelegate.dereference(resourceValue);
+    }
+
+    @Override
+    public ResourceValue getUnresolvedResource(ResourceReference reference) {
+        return mDelegate.getUnresolvedResource(reference);
+    }
 }
diff --git a/remote/common/src/com/android/layout/remote/api/RemoteLayoutLog.java b/remote/common/src/com/android/layout/remote/api/RemoteLayoutLog.java
index 6240036..c3b5c61 100644
--- a/remote/common/src/com/android/layout/remote/api/RemoteLayoutLog.java
+++ b/remote/common/src/com/android/layout/remote/api/RemoteLayoutLog.java
@@ -44,10 +44,11 @@
      * @param tag a tag describing the type of the warning
      * @param message the message of the warning
      * @param throwable an optional Throwable that triggered the warning
+     * @param viewCookie optional cookie of the view associated to this error
      * @param data an optional data bundle that the client can use to improve the warning display.
      */
-    void fidelityWarning(String tag, String message, Throwable throwable, Serializable data)
-            throws RemoteException;
+    void fidelityWarning(String tag, String message, Throwable throwable, Object viewCookie,
+            Object data) throws RemoteException;
 
     /**
      * Logs an error.
diff --git a/remote/common/src/com/android/layout/remote/api/RemoteRenderResources.java b/remote/common/src/com/android/layout/remote/api/RemoteRenderResources.java
index f7341dc..0ec5652 100644
--- a/remote/common/src/com/android/layout/remote/api/RemoteRenderResources.java
+++ b/remote/common/src/com/android/layout/remote/api/RemoteRenderResources.java
@@ -17,6 +17,7 @@
 package com.android.layout.remote.api;
 
 import com.android.ide.common.rendering.api.RenderResources;
+import com.android.ide.common.rendering.api.ResourceReference;
 import com.android.ide.common.rendering.api.ResourceValue;
 import com.android.ide.common.rendering.api.StyleResourceValue;
 import com.android.resources.ResourceType;
@@ -57,9 +58,6 @@
     ResourceValue findItemInStyle(StyleResourceValue style, String attrName,
             boolean isFrameworkAttr) throws RemoteException;
 
-
-    ResourceValue findResValue(String reference, boolean forceFrameworkOnly) throws RemoteException;
-
     ResourceValue resolveValue(ResourceValue value) throws RemoteException;
 
     ResourceValue resolveValue(ResourceType type, String name, String value,
@@ -68,4 +66,8 @@
     StyleResourceValue getParent(StyleResourceValue style) throws RemoteException;
 
     StyleResourceValue getStyle(String styleName, boolean isFramework) throws RemoteException;
+
+    ResourceValue dereference(ResourceValue resourceValue) throws RemoteException;
+
+    ResourceValue getUnresolvedResource(ResourceReference reference) throws RemoteException;
 }
diff --git a/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteLayoutLogAdapter.java b/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteLayoutLogAdapter.java
index 7a3fcfa..6878d46 100644
--- a/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteLayoutLogAdapter.java
+++ b/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteLayoutLogAdapter.java
@@ -39,9 +39,10 @@
     }
 
     @Override
-    public void fidelityWarning(String tag, String message, Throwable throwable, Object data) {
+    public void fidelityWarning(String tag, String message, Throwable throwable, Object viewCookie,
+            Object data) {
         try {
-            mLog.fidelityWarning(tag, message, throwable, null);
+            mLog.fidelityWarning(tag, message, throwable, viewCookie, data);
         } catch (RemoteException e) {
             throw new RuntimeException(e);
         }
diff --git a/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteRenderResourcesAdapter.java b/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteRenderResourcesAdapter.java
index 61ab170..2fa5b04 100644
--- a/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteRenderResourcesAdapter.java
+++ b/remote/server/src/com/android/layoutlib/bridge/remote/server/adapters/RemoteRenderResourcesAdapter.java
@@ -18,6 +18,7 @@
 
 import com.android.ide.common.rendering.api.LayoutLog;
 import com.android.ide.common.rendering.api.RenderResources;
+import com.android.ide.common.rendering.api.ResourceReference;
 import com.android.ide.common.rendering.api.ResourceValue;
 import com.android.ide.common.rendering.api.StyleResourceValue;
 import com.android.layout.remote.api.RemoteRenderResources;
@@ -154,9 +155,19 @@
     }
 
     @Override
-    public ResourceValue findResValue(String reference, boolean forceFrameworkOnly) {
+    public ResourceValue dereference(ResourceValue resourceValue) {
         try {
-            return mDelegate.findResValue(reference, forceFrameworkOnly);
+            return mDelegate.dereference(resourceValue);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /** Returns a resource by namespace, type and name. The returned resource is unresolved. */
+    @Override
+    public ResourceValue getUnresolvedResource(ResourceReference reference) {
+        try {
+            return mDelegate.getUnresolvedResource(reference);
         } catch (RemoteException e) {
             throw new RuntimeException(e);
         }
