diff --git a/__tests__/integration/mirador/layers.html b/__tests__/integration/mirador/layers.html
index 9dd9151604d9b43108b16c5ceb711aa15a4d2a40..9be3209d0228e610a21ca10da7ce2d6c9abe84f8 100644
--- a/__tests__/integration/mirador/layers.html
+++ b/__tests__/integration/mirador/layers.html
@@ -14,7 +14,7 @@
      var miradorInstance = Mirador.viewer({
        id: 'mirador',
        windows: [{
-         manifestId: 'https://prtd.app/hamilton/manifest.json',
+         manifestId: 'https://dvp.prtd.app/hamilton/manifest.json',
        }],
        window: {
          defaultSideBarPanel: 'layers',
diff --git a/__tests__/src/components/OpenSeadragonViewer.test.js b/__tests__/src/components/OpenSeadragonViewer.test.js
index 5ea1e47d055691a762e93c593b8952ebd45c21fb..f0c3031133ec451fbb810dd9faa51e6c12f38287 100644
--- a/__tests__/src/components/OpenSeadragonViewer.test.js
+++ b/__tests__/src/components/OpenSeadragonViewer.test.js
@@ -185,6 +185,7 @@ describe('OpenSeadragonViewer', () => {
       const setOpacity = jest.fn();
       const setItemIndex = jest.fn();
       const canvasWorld = {
+        contentResource: i => i,
         layerIndexOfImageResource: i => 1 - i,
         layerOpacityOfImageResource: i => 0.5,
       };
@@ -192,7 +193,7 @@ describe('OpenSeadragonViewer', () => {
       wrapper.instance().loaded = true;
       wrapper.instance().viewer = {
         world: {
-          getItemAt: i => ({ setOpacity, source: i }),
+          getItemAt: i => ({ setOpacity, source: { id: i } }),
           getItemCount: () => 2,
           setItemIndex,
         },
@@ -205,9 +206,9 @@ describe('OpenSeadragonViewer', () => {
       expect(setOpacity.mock.calls[1]).toEqual([0.5]);
 
       expect(setItemIndex).toHaveBeenCalledTimes(2);
-      expect(setItemIndex.mock.calls[0][0].source).toEqual(0);
+      expect(setItemIndex.mock.calls[0][0].source.id).toEqual(0);
       expect(setItemIndex.mock.calls[0][1]).toEqual(1);
-      expect(setItemIndex.mock.calls[1][0].source).toEqual(1);
+      expect(setItemIndex.mock.calls[1][0].source.id).toEqual(1);
       expect(setItemIndex.mock.calls[1][1]).toEqual(0);
     });
   });
diff --git a/src/components/OpenSeadragonViewer.js b/src/components/OpenSeadragonViewer.js
index 6d9b652d3cc4e6700fda4897b1793947c055108b..157d048868abd74fe605b99e77fa45c2ed2f9168 100644
--- a/src/components/OpenSeadragonViewer.js
+++ b/src/components/OpenSeadragonViewer.js
@@ -245,7 +245,7 @@ export class OpenSeadragonViewer extends Component {
       }
 
       const tileSource = infoResponse.json;
-      const contentResource = canvasWorld.contentResource(infoResponse);
+      const contentResource = canvasWorld.contentResource(infoResponse.id);
 
       if (!contentResource) return;
 
@@ -273,9 +273,10 @@ export class OpenSeadragonViewer extends Component {
     }
 
     items.forEach((item, i) => {
-      const newIndex = canvasWorld.layerIndexOfImageResource(item.source);
+      const contentResource = canvasWorld.contentResource(item.source['@id'] || item.source.id);
+      const newIndex = canvasWorld.layerIndexOfImageResource(contentResource);
       if (i !== newIndex) world.setItemIndex(item, newIndex);
-      item.setOpacity(canvasWorld.layerOpacityOfImageResource(item.source));
+      item.setOpacity(canvasWorld.layerOpacityOfImageResource(contentResource));
     });
   }
 
diff --git a/src/lib/CanvasWorld.js b/src/lib/CanvasWorld.js
index e74ab23dccd9dff59aca0b47efa675cf0bd34e5e..ab44caade4562a6b108c0e54533c05d1aa205df4 100644
--- a/src/lib/CanvasWorld.js
+++ b/src/lib/CanvasWorld.js
@@ -57,17 +57,16 @@ export default class CanvasWorld {
   }
 
   /** Get the IIIF content resource for an image */
-  contentResource(infoResponse) {
-    const imageId = infoResponse.id;
+  contentResource(infoResponseId) {
     const manifestoCanvas = this.canvases.find(c => c.imageServiceIds.some(id => (
       normalizeUrl(id, { stripAuthentication: false })
-        === normalizeUrl(imageId, { stripAuthentication: false }))));
+        === normalizeUrl(infoResponseId, { stripAuthentication: false }))));
     if (!manifestoCanvas) return undefined;
 
     return manifestoCanvas.imageResources
       .find(r => (
         normalizeUrl(r.getServices()[0].id, { stripAuthentication: false })
-        === normalizeUrl(imageId, { stripAuthentication: false })));
+        === normalizeUrl(infoResponseId, { stripAuthentication: false })));
   }
 
   /** @private */