diff --git a/src/components/OpenSeadragonViewer.js b/src/components/OpenSeadragonViewer.js
index eb1050a1a206cd481df080b664accb29b7e6f2e8..0d7037322ed6d340963422765fd623c4a2a28d0c 100644
--- a/src/components/OpenSeadragonViewer.js
+++ b/src/components/OpenSeadragonViewer.js
@@ -84,7 +84,7 @@ export class OpenSeadragonViewer extends Component {
       this.viewer.viewport.panTo(viewer, true);
       this.viewer.viewport.zoomTo(viewer.zoom, viewer, true);
     }
-    this.addAllImageSources();
+    this.addAllImageSources(!(viewer));
   }
 
   /**
@@ -128,7 +128,8 @@ export class OpenSeadragonViewer extends Component {
       || !this.nonTiledImagedMatch(prevProps.nonTiledImages)
     ) {
       this.viewer.close();
-      this.addAllImageSources();
+      const canvasesChanged = !(isEqual(canvasWorld.canvasIds, prevProps.canvasWorld.canvasIds));
+      this.addAllImageSources((canvasesChanged || !viewer));
     } else if (!isEqual(canvasWorld.layers, prevProps.canvasWorld.layers)) {
       this.refreshTileProperties();
     } else if (viewer && !this.osdUpdating) {
@@ -203,14 +204,14 @@ export class OpenSeadragonViewer extends Component {
   }
 
   /** */
-  addAllImageSources() {
+  addAllImageSources(zoomAfterAdd = true) {
     const { nonTiledImages, infoResponses } = this.props;
     Promise.all(
       infoResponses.map(infoResponse => this.addTileSource(infoResponse)),
       nonTiledImages.map(image => this.addNonTiledImage(image)),
     ).then(() => {
       if (infoResponses[0] || nonTiledImages[0]) {
-        this.zoomToWorld();
+        if (zoomAfterAdd) this.zoomToWorld();
         this.refreshTileProperties();
       }
     });