diff --git a/__tests__/CanvasListItem.test.js b/__tests__/CanvasListItem.test.js
index 58d2576758426ab20ab880800bdd6d0cede0cc20..ad88fd2e582aa807b82c613ed9972906afbe0baa 100644
--- a/__tests__/CanvasListItem.test.js
+++ b/__tests__/CanvasListItem.test.js
@@ -26,6 +26,7 @@ function createWrapper(props, context = {}) {
         canvases: [],
         receiveAnnotation,
         storageAdapter,
+        switchToSingleCanvasView: () => undefined,
         ...context,
       }}
     >
diff --git a/src/CanvasListItem.js b/src/CanvasListItem.js
index 24188a4e1cf63b28b54921d3816838ab97855ea0..bf2313ad0a249e4fa96830379a18194b69a1fd42 100644
--- a/src/CanvasListItem.js
+++ b/src/CanvasListItem.js
@@ -6,6 +6,7 @@ import ToggleButton from '@material-ui/lab/ToggleButton';
 import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup';
 import flatten from 'lodash/flatten';
 import AnnotationActionsContext from './AnnotationActionsContext';
+import { SingleCanvasDialog } from './SingleCanvasDialog';
 
 /** */
 class CanvasListItem extends Component {
@@ -15,11 +16,14 @@ class CanvasListItem extends Component {
 
     this.state = {
       isHovering: false,
+      singleCanvasDialogOpen: false,
     };
 
     this.handleMouseHover = this.handleMouseHover.bind(this);
     this.handleDelete = this.handleDelete.bind(this);
     this.handleEdit = this.handleEdit.bind(this);
+    this.toggleSingleCanvasDialogOpen = this.toggleSingleCanvasDialogOpen.bind(this);
+    this.switchCanvas = this.switchCanvas.bind(this);
   }
 
   /** */
@@ -82,10 +86,41 @@ class CanvasListItem extends Component {
     return flatten(annoIds).includes(annotationid);
   }
 
+  /** */
+  switchCanvas() {
+    const { annotationsOnCanvases, canvases, setCanvas } = this.context;
+    const { annotationid } = this.props;
+    let canvasId;
+    canvases.forEach((canvas) => {
+      if (annotationsOnCanvases[canvas.id]) {
+        Object.entries(annotationsOnCanvases[canvas.id]).forEach(([key, value], i) => {
+          if (value.json && value.json.items) {
+            const annotation = value.json.items.find((anno) => anno.id === annotationid);
+            if (annotation) {
+              canvasId = canvas.id;
+            }
+          }
+        });
+      }
+    });
+    if (canvasId) {
+      setCanvas(canvasId);
+    }
+  }
+
+  /** */
+  toggleSingleCanvasDialogOpen() {
+    const { singleCanvasDialogOpen } = this.state;
+    this.setState({
+      singleCanvasDialogOpen: !singleCanvasDialogOpen,
+    });
+  }
+
   /** */
   render() {
     const { children } = this.props;
-    const { isHovering } = this.state;
+    const { isHovering, singleCanvasDialogOpen } = this.state;
+    const { windowViewType, switchToSingleCanvasView } = this.context;
     return (
       <div
         onMouseEnter={this.handleMouseHover}
@@ -107,7 +142,11 @@ class CanvasListItem extends Component {
                 right: 0,
               }}
             >
-              <ToggleButton aria-label="Edit" onClick={this.handleEdit} value="edit">
+              <ToggleButton
+                aria-label="Edit"
+                onClick={windowViewType === 'single' ? this.handleEdit : this.toggleSingleCanvasDialogOpen}
+                value="edit"
+              >
                 <EditIcon />
               </ToggleButton>
               <ToggleButton aria-label="Delete" onClick={this.handleDelete} value="delete">
@@ -116,6 +155,15 @@ class CanvasListItem extends Component {
             </ToggleButtonGroup>
           </div>
         )}
+        {windowViewType !== 'single' && (
+          <SingleCanvasDialog
+            handleClose={this.toggleSingleCanvasDialogOpen}
+            open={singleCanvasDialogOpen}
+            openCreateAnnotationCompanionWindow={this.handleEdit}
+            setCanvas={this.switchCanvas}
+            switchToSingleCanvasView={switchToSingleCanvasView}
+          />
+        )}
         <li
           {...this.props} // eslint-disable-line react/jsx-props-no-spreading
         >
diff --git a/src/SingleCanvasDialog.js b/src/SingleCanvasDialog.js
index 76be5f3eba216627ac4e4fdc8d1a7b520e9291db..48a1cd3e577426fb50bc7a4f059290ff4d81ea4d 100644
--- a/src/SingleCanvasDialog.js
+++ b/src/SingleCanvasDialog.js
@@ -23,9 +23,11 @@ export class SingleCanvasDialog extends Component {
     const {
       handleClose,
       openCreateAnnotationCompanionWindow,
+      setCanvas,
       switchToSingleCanvasView,
     } = this.props;
     switchToSingleCanvasView();
+    setCanvas();
     openCreateAnnotationCompanionWindow();
     handleClose();
   }
@@ -69,9 +71,11 @@ SingleCanvasDialog.propTypes = {
   handleClose: PropTypes.func.isRequired,
   open: PropTypes.bool,
   openCreateAnnotationCompanionWindow: PropTypes.func.isRequired,
+  setCanvas: PropTypes.func,
   switchToSingleCanvasView: PropTypes.func.isRequired,
 };
 
 SingleCanvasDialog.defaultProps = {
   open: false,
+  setCanvas: () => undefined,
 };
diff --git a/src/plugins/canvasAnnotationsPlugin.js b/src/plugins/canvasAnnotationsPlugin.js
index 2b71eabb3d023741369c1bf987ef580aeb8918d7..37e0866b82dc8372221c10a90992887af011d8da 100644
--- a/src/plugins/canvasAnnotationsPlugin.js
+++ b/src/plugins/canvasAnnotationsPlugin.js
@@ -2,6 +2,7 @@ import React, { Component } from 'react';
 import PropTypes from 'prop-types';
 import { getVisibleCanvases } from 'mirador/dist/es/src/state/selectors/canvases';
 import * as actions from 'mirador/dist/es/src/state/actions';
+import { getWindowViewType } from 'mirador/dist/es/src/state/selectors';
 import CanvasListItem from '../CanvasListItem';
 import AnnotationActionsContext from '../AnnotationActionsContext';
 
@@ -10,8 +11,8 @@ class CanvasAnnotationsWrapper extends Component {
   /** */
   render() {
     const {
-      addCompanionWindow, canvases, config, receiveAnnotation, TargetComponent,
-      targetProps, annotationsOnCanvases,
+      addCompanionWindow, annotationsOnCanvases, canvases, config, receiveAnnotation,
+      setCanvas, switchToSingleCanvasView, TargetComponent, targetProps, windowViewType,
     } = this.props;
     const props = {
       ...targetProps,
@@ -25,8 +26,11 @@ class CanvasAnnotationsWrapper extends Component {
           canvases,
           config,
           receiveAnnotation,
+          setCanvas,
           storageAdapter: config.annotation.adapter,
+          switchToSingleCanvasView,
           windowId: targetProps.windowId,
+          windowViewType,
         }}
       >
         <TargetComponent
@@ -49,11 +53,14 @@ CanvasAnnotationsWrapper.propTypes = {
     }),
   }).isRequired,
   receiveAnnotation: PropTypes.func.isRequired,
+  setCanvas: PropTypes.func.isRequired,
+  switchToSingleCanvasView: PropTypes.func.isRequired,
   TargetComponent: PropTypes.oneOfType([
     PropTypes.func,
     PropTypes.node,
   ]).isRequired,
   targetProps: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
+  windowViewType: PropTypes.string.isRequired,
 };
 
 CanvasAnnotationsWrapper.defaultProps = {
@@ -65,6 +72,7 @@ CanvasAnnotationsWrapper.defaultProps = {
 function mapStateToProps(state, { targetProps: { windowId } }) {
   const canvases = getVisibleCanvases(state, { windowId });
   const annotationsOnCanvases = {};
+
   canvases.forEach((canvas) => {
     const anno = state.annotations[canvas.id];
     if (anno) {
@@ -75,6 +83,7 @@ function mapStateToProps(state, { targetProps: { windowId } }) {
     annotationsOnCanvases,
     canvases,
     config: state.config,
+    windowViewType: getWindowViewType(state, { windowId }),
   };
 }
 
@@ -86,6 +95,12 @@ const mapDispatchToProps = (dispatch, props) => ({
   receiveAnnotation: (targetId, id, annotation) => dispatch(
     actions.receiveAnnotation(targetId, id, annotation),
   ),
+  setCanvas: (canvasId) => dispatch(
+    actions.setCanvas(props.targetProps.windowId, canvasId),
+  ),
+  switchToSingleCanvasView: () => dispatch(
+    actions.setWindowViewType(props.targetProps.windowId, 'single'),
+  ),
 });
 
 export default {