diff --git a/.eslintrc b/.eslintrc
index 2c700b50916e10e7084e5fef6bd06282ce5136bc..531acf5e568d6151e7015f7a87328681ff381cc0 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -38,6 +38,8 @@
       "ignoreStrings": true,
       "ignoreTemplateLiterals": true,
       "ignoreRegExpLiterals": true
-    }]
+    }],
+    "react/jsx-uses-react": "off",
+    "react/react-in-jsx-scope": "off"
   }
 }
diff --git a/__tests__/src/components/AccessTokenSender.test.js b/__tests__/src/components/AccessTokenSender.test.js
index d14f10a556cb8d994a2c4bc1a2999fadb1b45753..0281b4efb78581ee59f760a49d9e775c05b9d799 100644
--- a/__tests__/src/components/AccessTokenSender.test.js
+++ b/__tests__/src/components/AccessTokenSender.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { AccessTokenSender } from '../../../src/components/AccessTokenSender';
 
diff --git a/__tests__/src/components/AnnotationSettings.test.js b/__tests__/src/components/AnnotationSettings.test.js
index 5c3de53e8e80ea7f2e9e1d1d2dd03f16ade586ac..d15a537ec7c8c40df63284723da1d255b4131211 100644
--- a/__tests__/src/components/AnnotationSettings.test.js
+++ b/__tests__/src/components/AnnotationSettings.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import MiradorMenuButton from '../../../src/containers/MiradorMenuButton';
 import { AnnotationSettings } from '../../../src/components/AnnotationSettings';
diff --git a/__tests__/src/components/AnnotationsOverlay.test.js b/__tests__/src/components/AnnotationsOverlay.test.js
index 83459281043dd6a8eeeca347f7fe98937a9420c7..4766b19e921ef077fec534574be27c5faf45985a 100644
--- a/__tests__/src/components/AnnotationsOverlay.test.js
+++ b/__tests__/src/components/AnnotationsOverlay.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import OpenSeadragon from 'openseadragon';
 import { Utils } from 'manifesto.js';
diff --git a/__tests__/src/components/App.test.js b/__tests__/src/components/App.test.js
index 5046765124baa2018ddb8769162a0b42a03b0fd9..2d758ec5725fd1ee666a121c865450cc407ab19a 100644
--- a/__tests__/src/components/App.test.js
+++ b/__tests__/src/components/App.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import PluginProvider from '../../../src/extend/PluginProvider';
 import AppProviders from '../../../src/containers/AppProviders';
diff --git a/__tests__/src/components/AppProviders.test.js b/__tests__/src/components/AppProviders.test.js
index 8f8edbed97ce7013d695d3ad007877d1cc8c18ac..1ce84d264b218d771b70abef4960c03c547296e8 100644
--- a/__tests__/src/components/AppProviders.test.js
+++ b/__tests__/src/components/AppProviders.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { ThemeProvider, StylesProvider } from '@material-ui/core/styles';
 import { DndContext, DndProvider } from 'react-dnd';
diff --git a/__tests__/src/components/AttributionPanel.test.js b/__tests__/src/components/AttributionPanel.test.js
index b8ed56bf2748547b393873ac0561c6c0cb8580b0..af822aa54f3968fa37a27aabd8be1d7efc92d1e0 100644
--- a/__tests__/src/components/AttributionPanel.test.js
+++ b/__tests__/src/components/AttributionPanel.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Typography from '@material-ui/core/Typography';
 import Link from '@material-ui/core/Link';
diff --git a/__tests__/src/components/AudioViewer.test.js b/__tests__/src/components/AudioViewer.test.js
index cca67ee5dd9f4f10729c6a0a0dc955795025dadc..a74b8bfc3ef8a7c0a21dea7c3268a6157f214685 100644
--- a/__tests__/src/components/AudioViewer.test.js
+++ b/__tests__/src/components/AudioViewer.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { AudioViewer } from '../../../src/components/AudioViewer';
 
diff --git a/__tests__/src/components/BackgroundPluginArea.test.js b/__tests__/src/components/BackgroundPluginArea.test.js
index 974603b81a39f66b1087751ea007fdfbd91f46d2..bbe31fd5d336a01cbb5bc6295ce8385485d5da9a 100644
--- a/__tests__/src/components/BackgroundPluginArea.test.js
+++ b/__tests__/src/components/BackgroundPluginArea.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { BackgroundPluginArea } from '../../../src/components/BackgroundPluginArea';
 import { PluginHook } from '../../../src/components/PluginHook';
diff --git a/__tests__/src/components/Branding.test.js b/__tests__/src/components/Branding.test.js
index 661145873afbd9e8ea63e3e4ed0d0884df8f0121..fbbfc6c7d881e6d11a2ed3b0a270f2439e854a7f 100644
--- a/__tests__/src/components/Branding.test.js
+++ b/__tests__/src/components/Branding.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Typography from '@material-ui/core/Typography';
 import IconButton from '@material-ui/core/IconButton';
diff --git a/__tests__/src/components/CanvasAnnotations.test.js b/__tests__/src/components/CanvasAnnotations.test.js
index 63f0674ddb3bcd05b49eb131005d812fd99ecb75..a51a744c98f675b78f083f9d0346f7aafb32df64 100644
--- a/__tests__/src/components/CanvasAnnotations.test.js
+++ b/__tests__/src/components/CanvasAnnotations.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Typography from '@material-ui/core/Typography';
 import Chip from '@material-ui/core/Chip';
diff --git a/__tests__/src/components/CanvasInfo.test.js b/__tests__/src/components/CanvasInfo.test.js
index 0b816741fb08c904f109a4f5f1397aa3ba717cdd..ba83097303ecc4f7259916f3e0b55487cd9bafb1 100644
--- a/__tests__/src/components/CanvasInfo.test.js
+++ b/__tests__/src/components/CanvasInfo.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Typography from '@material-ui/core/Typography';
 import { CanvasInfo } from '../../../src/components/CanvasInfo';
diff --git a/__tests__/src/components/CanvasLayers.test.js b/__tests__/src/components/CanvasLayers.test.js
index b5eed71c8006a7f6e5b173e9decd750fcd7d8de5..fd5f337b7bb315320cc067272e94cdd22790f722 100644
--- a/__tests__/src/components/CanvasLayers.test.js
+++ b/__tests__/src/components/CanvasLayers.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Input from '@material-ui/core/Input';
 import Slider from '@material-ui/core/Slider';
diff --git a/__tests__/src/components/ChangeThemeDialog.test.js b/__tests__/src/components/ChangeThemeDialog.test.js
index 3585e08f2a987a6c89dafa6962b92d8411b673de..f2bf0d2688c04888ddb070db08f6374bd0b247fd 100644
--- a/__tests__/src/components/ChangeThemeDialog.test.js
+++ b/__tests__/src/components/ChangeThemeDialog.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Dialog from '@material-ui/core/Dialog';
 import ListItemText from '@material-ui/core/ListItemText';
diff --git a/__tests__/src/components/CollapsibleSection.test.js b/__tests__/src/components/CollapsibleSection.test.js
index c1d62d69ffcc82cb4ee32f92fa210b3f797e6d89..1db02cd182e54efd0effe42f456d5bd754279180 100644
--- a/__tests__/src/components/CollapsibleSection.test.js
+++ b/__tests__/src/components/CollapsibleSection.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Typography from '@material-ui/core/Typography';
 import MiradorMenuButton from '../../../src/containers/MiradorMenuButton';
diff --git a/__tests__/src/components/CollectionDialog.test.js b/__tests__/src/components/CollectionDialog.test.js
index 2b057a7d100d217269cc45e1107198a0bfe828ad..693282f658780d163856560686390c7c58866994 100644
--- a/__tests__/src/components/CollectionDialog.test.js
+++ b/__tests__/src/components/CollectionDialog.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Dialog from '@material-ui/core/Dialog';
 import DialogActions from '@material-ui/core/DialogActions';
diff --git a/__tests__/src/components/CollectionInfo.test.js b/__tests__/src/components/CollectionInfo.test.js
index b990a49f7213b10ba4f5f65d302081c81e2d9329..d768432032e005026f4d203236e2b577fa4e486b 100644
--- a/__tests__/src/components/CollectionInfo.test.js
+++ b/__tests__/src/components/CollectionInfo.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Button from '@material-ui/core/Button';
 import { CollectionInfo } from '../../../src/components/CollectionInfo';
diff --git a/__tests__/src/components/CompanionArea.test.js b/__tests__/src/components/CompanionArea.test.js
index 6e390ad13632ff646f0ee7c8c7996cc170aaaba3..9e7981b0bc0bd0857c0dd81eb6d008ee81a0ac4f 100644
--- a/__tests__/src/components/CompanionArea.test.js
+++ b/__tests__/src/components/CompanionArea.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Slide from '@material-ui/core/Slide';
 import ArrowLeftIcon from '@material-ui/icons/ArrowLeftSharp';
diff --git a/__tests__/src/components/CompanionWindow.test.js b/__tests__/src/components/CompanionWindow.test.js
index c14bfaecfb8018d9e1c72c636d3e3f5bc15bb6e3..99c5b8583a1e142c51f2333e0f698a41cf1d4d8c 100644
--- a/__tests__/src/components/CompanionWindow.test.js
+++ b/__tests__/src/components/CompanionWindow.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { Rnd } from 'react-rnd';
 import MiradorMenuButton from '../../../src/containers/MiradorMenuButton';
diff --git a/__tests__/src/components/CompanionWindowFactory.test.js b/__tests__/src/components/CompanionWindowFactory.test.js
index 1babf7564699ccdac0b086b250ef1de82edd76eb..acf0d39718561f11a001777108587f9647c5366e 100644
--- a/__tests__/src/components/CompanionWindowFactory.test.js
+++ b/__tests__/src/components/CompanionWindowFactory.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import WindowSideBarInfoPanel from '../../../src/containers/WindowSideBarInfoPanel';
 import WindowSideBarCanvasPanel from '../../../src/containers/WindowSideBarCanvasPanel';
diff --git a/__tests__/src/components/ErrorDialog.test.js b/__tests__/src/components/ErrorDialog.test.js
index 73eb88bb02d4d314c174858cf1af39e2019c7424..64a32a1e5740c6118ea6c14e7687519f7baa887a 100644
--- a/__tests__/src/components/ErrorDialog.test.js
+++ b/__tests__/src/components/ErrorDialog.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Button from '@material-ui/core/Button';
 import Dialog from '@material-ui/core/Dialog';
diff --git a/__tests__/src/components/FullScreenButton.test.js b/__tests__/src/components/FullScreenButton.test.js
index cd70231645a3abe0ca64db6f29cc391a904ac97f..b15f28aa3d018cdb9b76c65d95846dc6830dbff0 100644
--- a/__tests__/src/components/FullScreenButton.test.js
+++ b/__tests__/src/components/FullScreenButton.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import FullscreenIcon from '@material-ui/icons/FullscreenSharp';
 import FullscreenExitIcon from '@material-ui/icons/FullscreenExitSharp';
diff --git a/__tests__/src/components/GalleryView.test.js b/__tests__/src/components/GalleryView.test.js
index 4a15795c472795bbc44dc813aebd928954cdea30..3cb9b74342c65c15f793eb3b4721ce927e5e4929 100644
--- a/__tests__/src/components/GalleryView.test.js
+++ b/__tests__/src/components/GalleryView.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { Utils } from 'manifesto.js';
 import Paper from '@material-ui/core/Paper';
diff --git a/__tests__/src/components/GalleryViewThumbnail.test.js b/__tests__/src/components/GalleryViewThumbnail.test.js
index 3fbcc227c71cef8a14a5ed6800af599383a1b1f0..c15632938b55c1c3ea71828ec4a1068ad300a190 100644
--- a/__tests__/src/components/GalleryViewThumbnail.test.js
+++ b/__tests__/src/components/GalleryViewThumbnail.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { Utils } from 'manifesto.js';
 import Chip from '@material-ui/core/Chip';
diff --git a/__tests__/src/components/IIIFAuthentication.test.js b/__tests__/src/components/IIIFAuthentication.test.js
index 38599d353690cc48919b013e10626ee36113c838..c8f7261ff304aefe9de1a39fd105460d2acca086 100644
--- a/__tests__/src/components/IIIFAuthentication.test.js
+++ b/__tests__/src/components/IIIFAuthentication.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import WindowAuthenticationBar from '../../../src/containers/WindowAuthenticationBar';
 import { NewWindow } from '../../../src/components/NewWindow';
diff --git a/__tests__/src/components/IIIFThumbnail.test.js b/__tests__/src/components/IIIFThumbnail.test.js
index 8b2d3144229a068024aa15fc06106617bb71474f..bc6ee94104f9cde6683ed3688d043cb9d143c8eb 100644
--- a/__tests__/src/components/IIIFThumbnail.test.js
+++ b/__tests__/src/components/IIIFThumbnail.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { InView } from 'react-intersection-observer';
 import Typography from '@material-ui/core/Typography';
diff --git a/__tests__/src/components/LabelValueMetadata.test.js b/__tests__/src/components/LabelValueMetadata.test.js
index 2e3178bab9a6b4d222861dc2a0cc3004b40f32c1..a53a3f01c7d42ab98e9b435d88555ea3727a9323 100644
--- a/__tests__/src/components/LabelValueMetadata.test.js
+++ b/__tests__/src/components/LabelValueMetadata.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Typography from '@material-ui/core/Typography';
 import { LabelValueMetadata } from '../../../src/components/LabelValueMetadata';
diff --git a/__tests__/src/components/LanguageSettings.test.js b/__tests__/src/components/LanguageSettings.test.js
index ff1731013b2dbeb8deebaabcdfd88f22081b016b..e4e5462cc1366eeea37887993948bf0359fb9682 100644
--- a/__tests__/src/components/LanguageSettings.test.js
+++ b/__tests__/src/components/LanguageSettings.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import ListItemText from '@material-ui/core/ListItemText';
 import MenuItem from '@material-ui/core/MenuItem';
diff --git a/__tests__/src/components/LayersPanel.test.js b/__tests__/src/components/LayersPanel.test.js
index 769bde8c999b3eee6f71639f07bbe27682d98da4..9439ae81b486ffd6f3b770b023501699bae54c32 100644
--- a/__tests__/src/components/LayersPanel.test.js
+++ b/__tests__/src/components/LayersPanel.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import CanvasLayers from '../../../src/containers/CanvasLayers';
 import { LayersPanel } from '../../../src/components/LayersPanel';
diff --git a/__tests__/src/components/LocalePicker.test.js b/__tests__/src/components/LocalePicker.test.js
index e12431caf73355b3fab0000beed1ab54e9f6a7ce..4babd052f1e381a40b2b3090486e6c25848029c0 100644
--- a/__tests__/src/components/LocalePicker.test.js
+++ b/__tests__/src/components/LocalePicker.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import MenuItem from '@material-ui/core/MenuItem';
 import Select from '@material-ui/core/Select';
diff --git a/__tests__/src/components/ManifestForm.test.js b/__tests__/src/components/ManifestForm.test.js
index 4d170be7a8962c0ffe5f2692db9a75e9ba1d4d14..543aa66d7c48056471f86f9964e77920cba3addf 100644
--- a/__tests__/src/components/ManifestForm.test.js
+++ b/__tests__/src/components/ManifestForm.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { mount } from 'enzyme';
 import { ManifestForm } from '../../../src/components/ManifestForm';
 
diff --git a/__tests__/src/components/ManifestInfo.test.js b/__tests__/src/components/ManifestInfo.test.js
index 543a2da4c01d5995fbb067d3a987346812a9f231..eda171cca4b2baaa1c7e1b02b76461135adc9dd7 100644
--- a/__tests__/src/components/ManifestInfo.test.js
+++ b/__tests__/src/components/ManifestInfo.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Typography from '@material-ui/core/Typography';
 import { ManifestInfo } from '../../../src/components/ManifestInfo';
diff --git a/__tests__/src/components/ManifestListItem.test.js b/__tests__/src/components/ManifestListItem.test.js
index bd75e02b3d4fe3b48169f61e54e84b0de41e1ea5..3b80d03a23df4a22a62ecfb2ebfe58566062a13a 100644
--- a/__tests__/src/components/ManifestListItem.test.js
+++ b/__tests__/src/components/ManifestListItem.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import ButtonBase from '@material-ui/core/ButtonBase';
 import ListItem from '@material-ui/core/ListItem';
diff --git a/__tests__/src/components/ManifestListItemError.test.js b/__tests__/src/components/ManifestListItemError.test.js
index 4bd6c599bae7393f036a0e21dd6aa3d4466b412c..c70ec7948cb1759bcd3dcb23ef217940bb0252bb 100644
--- a/__tests__/src/components/ManifestListItemError.test.js
+++ b/__tests__/src/components/ManifestListItemError.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Button from '@material-ui/core/Button';
 import Typography from '@material-ui/core/Typography';
diff --git a/__tests__/src/components/ManifestRelatedLinks.test.js b/__tests__/src/components/ManifestRelatedLinks.test.js
index 4bf7994f71580435d722be7eac01ab860077b0b8..270608bff950163aefe0320ac79ecbbccc7d7924 100644
--- a/__tests__/src/components/ManifestRelatedLinks.test.js
+++ b/__tests__/src/components/ManifestRelatedLinks.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Typography from '@material-ui/core/Typography';
 import Link from '@material-ui/core/Link';
diff --git a/__tests__/src/components/MiradorMenuButton.test.js b/__tests__/src/components/MiradorMenuButton.test.js
index ad865d63dab0cd05901265415cc6d263618c5ea0..4e3783f71003bdc672448d61133a014d979332fc 100644
--- a/__tests__/src/components/MiradorMenuButton.test.js
+++ b/__tests__/src/components/MiradorMenuButton.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Badge from '@material-ui/core/Badge';
 import IconButton from '@material-ui/core/IconButton';
diff --git a/__tests__/src/components/MosaicRenderPreview.test.js b/__tests__/src/components/MosaicRenderPreview.test.js
index f65a4a76d4a013cd32d8f39ae794acee7f26bdc2..929e492fc2d8feee408113e29f77cbe0d68fc9dc 100644
--- a/__tests__/src/components/MosaicRenderPreview.test.js
+++ b/__tests__/src/components/MosaicRenderPreview.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import MinimalWindow from '../../../src/containers/MinimalWindow';
 import { MosaicRenderPreview } from '../../../src/components/MosaicRenderPreview';
diff --git a/__tests__/src/components/NestedMenu.test.js b/__tests__/src/components/NestedMenu.test.js
index 6db2b464cfb440374d01469df7be36e53c43ddbb..e0849fe8cf4b80588500bbee93e7336ba31000cd 100644
--- a/__tests__/src/components/NestedMenu.test.js
+++ b/__tests__/src/components/NestedMenu.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import ListItemIcon from '@material-ui/core/ListItemIcon';
 import ListItemText from '@material-ui/core/ListItemText';
diff --git a/__tests__/src/components/NewWindow.test.js b/__tests__/src/components/NewWindow.test.js
index 2b1e67ef3a359f25aabcd03b04e2dc99c57c3d5f..1d09dd50268da603efa4e1a38881047924a98e39 100644
--- a/__tests__/src/components/NewWindow.test.js
+++ b/__tests__/src/components/NewWindow.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { NewWindow } from '../../../src/components/NewWindow';
 
diff --git a/__tests__/src/components/OpenSeadragonViewer.test.js b/__tests__/src/components/OpenSeadragonViewer.test.js
index 1c957824c3ece5fbe987c8146b10bd258d1f0b2b..39dc6cbd9edc23abe68ed344b6b4811d7e84d119 100644
--- a/__tests__/src/components/OpenSeadragonViewer.test.js
+++ b/__tests__/src/components/OpenSeadragonViewer.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import OpenSeadragon from 'openseadragon';
 import { Utils } from 'manifesto.js';
diff --git a/__tests__/src/components/PluginHook.test.js b/__tests__/src/components/PluginHook.test.js
index 091781368fbf617fd1dcdb2c4ac665adb6e2313c..bda3c70e057c630525b07098559b7ec0ced23363 100644
--- a/__tests__/src/components/PluginHook.test.js
+++ b/__tests__/src/components/PluginHook.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { PluginHook } from '../../../src/components/PluginHook';
 
diff --git a/__tests__/src/components/PrimaryWindow.test.js b/__tests__/src/components/PrimaryWindow.test.js
index 47c41be28c49a31d30581ed24262dcfd2f4c1093..7f706545f0658fb439bdcbb6a939cad57388ffe6 100644
--- a/__tests__/src/components/PrimaryWindow.test.js
+++ b/__tests__/src/components/PrimaryWindow.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { PrimaryWindow } from '../../../src/components/PrimaryWindow';
 import WindowSideBar from '../../../src/containers/WindowSideBar';
diff --git a/__tests__/src/components/SanitizedHtml.test.js b/__tests__/src/components/SanitizedHtml.test.js
index 76104761fe7372887d58db3c45a807342226ac6b..c3bcf3e7429698c90b2e4a6dfce0a18f46551778 100644
--- a/__tests__/src/components/SanitizedHtml.test.js
+++ b/__tests__/src/components/SanitizedHtml.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { SanitizedHtml } from '../../../src/components/SanitizedHtml';
 
diff --git a/__tests__/src/components/ScrollIndicatedDialogContent.test.js b/__tests__/src/components/ScrollIndicatedDialogContent.test.js
index 5cc43d5472303c65ffad635254c62d3f34c5e5bb..0f39735c9304055d887d137fdec2780e66a7d807 100644
--- a/__tests__/src/components/ScrollIndicatedDialogContent.test.js
+++ b/__tests__/src/components/ScrollIndicatedDialogContent.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import DialogContent from '@material-ui/core/DialogContent';
 import { ScrollIndicatedDialogContent } from '../../../src/components/ScrollIndicatedDialogContent';
diff --git a/__tests__/src/components/ScrollTo.test.js b/__tests__/src/components/ScrollTo.test.js
index ecb4a6d3f7de6891e958139b7ca8c0e95ebac435..c412e525fcca7f40101519e26aa3497985ab7bac 100644
--- a/__tests__/src/components/ScrollTo.test.js
+++ b/__tests__/src/components/ScrollTo.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { ScrollTo } from '../../../src/components/ScrollTo';
 
diff --git a/__tests__/src/components/SearchHit.test.js b/__tests__/src/components/SearchHit.test.js
index 2be8074e53fa3e436142168b13a58fc6512ef7a9..9fd9fdbf7b051ad2080542bd739412fe22460811 100644
--- a/__tests__/src/components/SearchHit.test.js
+++ b/__tests__/src/components/SearchHit.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { SearchHit } from '../../../src/components/SearchHit';
 import { ScrollTo } from '../../../src/components/ScrollTo';
diff --git a/__tests__/src/components/SearchPanel.test.js b/__tests__/src/components/SearchPanel.test.js
index ce33f8e8816d7a0fabe7a8f42d2ebf564005c9da..2d8f7eeb1d97d7b6a5a719dc4591093f3e917f11 100644
--- a/__tests__/src/components/SearchPanel.test.js
+++ b/__tests__/src/components/SearchPanel.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Button from '@material-ui/core/Button';
 import CompanionWindow from '../../../src/containers/CompanionWindow';
diff --git a/__tests__/src/components/SearchPanelControls.test.js b/__tests__/src/components/SearchPanelControls.test.js
index 64c57780ca19c57ccfa76ff0b03ff1aa340eca34..aa147c12e2536772f8f5628a7e64eb062570addc 100644
--- a/__tests__/src/components/SearchPanelControls.test.js
+++ b/__tests__/src/components/SearchPanelControls.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Autocomplete from '@material-ui/lab/Autocomplete';
 import CircularProgress from '@material-ui/core/CircularProgress';
diff --git a/__tests__/src/components/SearchPanelNavigation.test.js b/__tests__/src/components/SearchPanelNavigation.test.js
index bec2c1b63ad8c8e8ea433145f83383be4259b88a..50b005fdffa916d5ebc2660a891c7551b7149768 100644
--- a/__tests__/src/components/SearchPanelNavigation.test.js
+++ b/__tests__/src/components/SearchPanelNavigation.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { SearchPanelNavigation } from '../../../src/components/SearchPanelNavigation';
 
diff --git a/__tests__/src/components/SearchResults.test.js b/__tests__/src/components/SearchResults.test.js
index 2ceaaba79604609a468c4c24c22b201fdf4bd970..ce0603bc1d00425b3d99e78b9f32a8bbd637cca2 100644
--- a/__tests__/src/components/SearchResults.test.js
+++ b/__tests__/src/components/SearchResults.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Button from '@material-ui/core/Button';
 import { SearchResults } from '../../../src/components/SearchResults';
diff --git a/__tests__/src/components/SidebarIndexItem.test.js b/__tests__/src/components/SidebarIndexItem.test.js
index fb4295ffed531ae77b04bc7022d0e0fa90f4403a..23adb0a16ed2f4588be62307fcee24ce1c739872 100644
--- a/__tests__/src/components/SidebarIndexItem.test.js
+++ b/__tests__/src/components/SidebarIndexItem.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Typography from '@material-ui/core/Typography';
 import { SidebarIndexItem } from '../../../src/components/SidebarIndexItem';
diff --git a/__tests__/src/components/SidebarIndexList.test.js b/__tests__/src/components/SidebarIndexList.test.js
index 364a7646ad812bb8ecfcdc30d41b0604cfa526c1..b65bbab101bfc2016271b46f73fc300b0fcaac71 100644
--- a/__tests__/src/components/SidebarIndexList.test.js
+++ b/__tests__/src/components/SidebarIndexList.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import MenuList from '@material-ui/core/MenuList';
 import MenuItem from '@material-ui/core/MenuItem';
diff --git a/__tests__/src/components/SidebarIndexTableOfContents.test.js b/__tests__/src/components/SidebarIndexTableOfContents.test.js
index c30044db7e6b9a0028151acafd6bdba79d3f524b..76565846a2960586c54d8b98aee93a4b24f9253d 100644
--- a/__tests__/src/components/SidebarIndexTableOfContents.test.js
+++ b/__tests__/src/components/SidebarIndexTableOfContents.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { Utils } from 'manifesto.js';
 import TreeItem from '@material-ui/lab/TreeItem';
diff --git a/__tests__/src/components/SidebarIndexThumbnail.test.js b/__tests__/src/components/SidebarIndexThumbnail.test.js
index 316bc8565d2d9a3ad396b6aaa431a929070ce85d..b2e3563966c9ace7f6acb51f90f696c83568a88a 100644
--- a/__tests__/src/components/SidebarIndexThumbnail.test.js
+++ b/__tests__/src/components/SidebarIndexThumbnail.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Typography from '@material-ui/core/Typography';
 import { Utils } from 'manifesto.js';
diff --git a/__tests__/src/components/ThumbnailCanvasGrouping.test.js b/__tests__/src/components/ThumbnailCanvasGrouping.test.js
index 23208396eab984161937f387444403778adff548..1442a8784d1736b37e26cfd96cf98bc5049514ea 100644
--- a/__tests__/src/components/ThumbnailCanvasGrouping.test.js
+++ b/__tests__/src/components/ThumbnailCanvasGrouping.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { Utils } from 'manifesto.js';
 import { ThumbnailCanvasGrouping } from '../../../src/components/ThumbnailCanvasGrouping';
diff --git a/__tests__/src/components/ThumbnailNavigation.test.js b/__tests__/src/components/ThumbnailNavigation.test.js
index 67173837815e7b127784a502db0a22ac08732053..cfeaa462183044dccec9692c47ae8701136c2688 100644
--- a/__tests__/src/components/ThumbnailNavigation.test.js
+++ b/__tests__/src/components/ThumbnailNavigation.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { Utils } from 'manifesto.js';
 import { ThumbnailNavigation } from '../../../src/components/ThumbnailNavigation';
diff --git a/__tests__/src/components/VideoViewer.test.js b/__tests__/src/components/VideoViewer.test.js
index 7b3521c08ac2bff116aff550356b69d5c3710bb7..7802ccb3b9d096b3b91e081c0f3f0b648817da95 100644
--- a/__tests__/src/components/VideoViewer.test.js
+++ b/__tests__/src/components/VideoViewer.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { VideoViewer } from '../../../src/components/VideoViewer';
 
diff --git a/__tests__/src/components/ViewerInfo.test.js b/__tests__/src/components/ViewerInfo.test.js
index d1abda25898eaa039371a096c4e248ba8848654e..2700970c4cbf869f14b907dec106ec4e116a6af8 100644
--- a/__tests__/src/components/ViewerInfo.test.js
+++ b/__tests__/src/components/ViewerInfo.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { Typography } from '@material-ui/core';
 import { ViewerInfo } from '../../../src/components/ViewerInfo';
diff --git a/__tests__/src/components/ViewerNavigation.test.js b/__tests__/src/components/ViewerNavigation.test.js
index 36ffe068bdeae5cc577e68b58754d195717de906..1c4efd3c456595f6659f3d813f2a3e6a52610b1c 100644
--- a/__tests__/src/components/ViewerNavigation.test.js
+++ b/__tests__/src/components/ViewerNavigation.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import NavigationIcon from '@material-ui/icons/PlayCircleOutlineSharp';
 import MiradorMenuButton from '../../../src/containers/MiradorMenuButton';
diff --git a/__tests__/src/components/Window.test.js b/__tests__/src/components/Window.test.js
index 78bd9f3884e3690e29f85f8d67361bb369e4ffec..cfb4920115984a00f4b8d6aa7d848b6ef203c1b9 100644
--- a/__tests__/src/components/Window.test.js
+++ b/__tests__/src/components/Window.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { Window } from '../../../src/components/Window';
 import WindowTopBar from '../../../src/containers/WindowTopBar';
diff --git a/__tests__/src/components/WindowAuthenticationBar.test.js b/__tests__/src/components/WindowAuthenticationBar.test.js
index bab84214dbeb67d2c55b716ef560f4e5993dfb9d..a75e46d4a5f796a6846069dc3534a8c653366fd7 100644
--- a/__tests__/src/components/WindowAuthenticationBar.test.js
+++ b/__tests__/src/components/WindowAuthenticationBar.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Button from '@material-ui/core/Button';
 import Collapse from '@material-ui/core/Collapse';
diff --git a/__tests__/src/components/WindowCanvasNavigationControls.test.js b/__tests__/src/components/WindowCanvasNavigationControls.test.js
index 3ef2240bef394ecb93eee7e3a365752e4387d702..16a7f1154e1dcc0dcdea2e44abeba53bc432acb3 100644
--- a/__tests__/src/components/WindowCanvasNavigationControls.test.js
+++ b/__tests__/src/components/WindowCanvasNavigationControls.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Paper from '@material-ui/core/Paper';
 import Typography from '@material-ui/core/Typography';
diff --git a/__tests__/src/components/WindowList.test.js b/__tests__/src/components/WindowList.test.js
index 1162170938df764e8ab1b476ea2bbcd0c8dd1e48..35818ccb74b5bec94926d88e8ce53ebae6eb551b 100644
--- a/__tests__/src/components/WindowList.test.js
+++ b/__tests__/src/components/WindowList.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Menu from '@material-ui/core/Menu';
 import MenuItem from '@material-ui/core/MenuItem';
diff --git a/__tests__/src/components/WindowListButton.test.js b/__tests__/src/components/WindowListButton.test.js
index 6bdebd88294de5616a2eacb994e54ed6a0c0d350..0cba161d6e1bf6dbe9ba02c501e256e4b51327cc 100644
--- a/__tests__/src/components/WindowListButton.test.js
+++ b/__tests__/src/components/WindowListButton.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import MiradorMenuButton from '../../../src/containers/MiradorMenuButton';
 import WindowList from '../../../src/containers/WindowList';
diff --git a/__tests__/src/components/WindowSideBar.test.js b/__tests__/src/components/WindowSideBar.test.js
index 167de0ec030195c746cfced5cf8a711c0e56cd24..95eb09ff445b00d90e8b70c97a0d517ec1698e0b 100644
--- a/__tests__/src/components/WindowSideBar.test.js
+++ b/__tests__/src/components/WindowSideBar.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Drawer from '@material-ui/core/Drawer';
 import { WindowSideBar } from '../../../src/components/WindowSideBar';
diff --git a/__tests__/src/components/WindowSideBarAnnotationsPanel.test.js b/__tests__/src/components/WindowSideBarAnnotationsPanel.test.js
index 0ed16619527ba0b1cda0bb35ee209ccd60fefaf1..b07a4c4dac7a93b94a1b71cbbdafb30a9cd45db2 100644
--- a/__tests__/src/components/WindowSideBarAnnotationsPanel.test.js
+++ b/__tests__/src/components/WindowSideBarAnnotationsPanel.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Typography from '@material-ui/core/Typography';
 import CanvasAnnotations from '../../../src/containers/CanvasAnnotations';
diff --git a/__tests__/src/components/WindowSideBarButtons.test.js b/__tests__/src/components/WindowSideBarButtons.test.js
index abcb15d04cb79ece827cc6d1902f13e57995a69a..7fb8a94f8d049a9260abf118fab5ce70b9f2e61f 100644
--- a/__tests__/src/components/WindowSideBarButtons.test.js
+++ b/__tests__/src/components/WindowSideBarButtons.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { mount } from 'enzyme';
 import Badge from '@material-ui/core/Badge';
 import Tabs from '@material-ui/core/Tabs';
diff --git a/__tests__/src/components/WindowSideBarCanvasPanel.test.js b/__tests__/src/components/WindowSideBarCanvasPanel.test.js
index 12ed93e36acaf9fa50ec20f8bb27fc5eccdfe454..3a9951f7377f146c926c4ed4c56b61c70a477d4a 100644
--- a/__tests__/src/components/WindowSideBarCanvasPanel.test.js
+++ b/__tests__/src/components/WindowSideBarCanvasPanel.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { Utils } from 'manifesto.js';
 import compact from 'lodash/compact';
diff --git a/__tests__/src/components/WindowSideBarInfoPanel.test.js b/__tests__/src/components/WindowSideBarInfoPanel.test.js
index a986abb29bed4df5bdfc8941d9be18fe28d238b2..d830bd1a3d3080cc56fd68da551e86c5a830eaaa 100644
--- a/__tests__/src/components/WindowSideBarInfoPanel.test.js
+++ b/__tests__/src/components/WindowSideBarInfoPanel.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { WindowSideBarInfoPanel } from '../../../src/components/WindowSideBarInfoPanel';
 import CanvasInfo from '../../../src/containers/CanvasInfo';
diff --git a/__tests__/src/components/WindowThumbnailSettings.test.js b/__tests__/src/components/WindowThumbnailSettings.test.js
index 5a6c5282dfc2c4dc56c0dac3299626e03ba667f1..4d16056404387c7bf1b5391bb89485335bdaed97 100644
--- a/__tests__/src/components/WindowThumbnailSettings.test.js
+++ b/__tests__/src/components/WindowThumbnailSettings.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import FormControlLabel from '@material-ui/core/FormControlLabel';
 import ListSubheader from '@material-ui/core/ListSubheader';
diff --git a/__tests__/src/components/WindowTopBar.test.js b/__tests__/src/components/WindowTopBar.test.js
index 92c832beb115b1e2d9d0ee7c22157b2ee555cfa6..69bf35bf27798e252d9605187fb284055518eda0 100644
--- a/__tests__/src/components/WindowTopBar.test.js
+++ b/__tests__/src/components/WindowTopBar.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 
 import Toolbar from '@material-ui/core/Toolbar';
diff --git a/__tests__/src/components/WindowTopBarPluginArea.test.js b/__tests__/src/components/WindowTopBarPluginArea.test.js
index 31e9e2d33f9ef9721752db628df21d57e53d419d..1b9feb8be0def3ba4fe84d3c3676be5642a0f8ee 100644
--- a/__tests__/src/components/WindowTopBarPluginArea.test.js
+++ b/__tests__/src/components/WindowTopBarPluginArea.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { WindowTopBarPluginArea } from '../../../src/components/WindowTopBarPluginArea';
 import { PluginHook } from '../../../src/components/PluginHook';
diff --git a/__tests__/src/components/WindowTopBarPluginMenu.test.js b/__tests__/src/components/WindowTopBarPluginMenu.test.js
index c27ef214d9867e68ce60e042f83bc09e827cfe19..f41e301d434eed9655bb116dda20269dc4a7ff22 100644
--- a/__tests__/src/components/WindowTopBarPluginMenu.test.js
+++ b/__tests__/src/components/WindowTopBarPluginMenu.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Menu from '@material-ui/core/Menu';
 import MiradorMenuButton from '../../../src/containers/MiradorMenuButton';
diff --git a/__tests__/src/components/WindowTopBarTitle.test.js b/__tests__/src/components/WindowTopBarTitle.test.js
index f3b01c10e2b080db1f03ce955ee04ebf250e02f8..282b31673aef36fd1bbacd7e01fb0912175f1093 100644
--- a/__tests__/src/components/WindowTopBarTitle.test.js
+++ b/__tests__/src/components/WindowTopBarTitle.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Skeleton from '@material-ui/lab/Skeleton';
 
diff --git a/__tests__/src/components/WindowTopMenu.test.js b/__tests__/src/components/WindowTopMenu.test.js
index 3eacc72fb4360e0e3e0667da11272f4f5dc5f35f..147240de3ced900b2992fe781b6744b69a8c0642 100644
--- a/__tests__/src/components/WindowTopMenu.test.js
+++ b/__tests__/src/components/WindowTopMenu.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Menu from '@material-ui/core/Menu';
 import WindowThumbnailSettings from '../../../src/containers/WindowThumbnailSettings';
diff --git a/__tests__/src/components/WindowTopMenuButton.test.js b/__tests__/src/components/WindowTopMenuButton.test.js
index 37c147c0496fb2337ea2e84ae232ca115411efb9..2dc7c9501ecde0520ed408b900b859713e96f0f5 100644
--- a/__tests__/src/components/WindowTopMenuButton.test.js
+++ b/__tests__/src/components/WindowTopMenuButton.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import WindowTopMenu from '../../../src/containers/WindowTopMenu';
 import { WindowTopMenuButton } from '../../../src/components/WindowTopMenuButton';
diff --git a/__tests__/src/components/WindowViewSettings.test.js b/__tests__/src/components/WindowViewSettings.test.js
index 51886769e237f6b4c4035a82e9c88fbc129faf7e..61c11a2bc87c3db30873c5462d9a086c55b5553e 100644
--- a/__tests__/src/components/WindowViewSettings.test.js
+++ b/__tests__/src/components/WindowViewSettings.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { mount } from 'enzyme';
 import FormControlLabel from '@material-ui/core/FormControlLabel';
 import ListSubheader from '@material-ui/core/ListSubheader';
diff --git a/__tests__/src/components/WindowViewer.test.js b/__tests__/src/components/WindowViewer.test.js
index 7535e74372597688afe4b180c9d292975066e11a..6c7af5c441750a8f78d20b1be0f5933c994bab29 100644
--- a/__tests__/src/components/WindowViewer.test.js
+++ b/__tests__/src/components/WindowViewer.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { WindowViewer } from '../../../src/components/WindowViewer';
 import WindowCanvasNavigationControls from '../../../src/containers/WindowCanvasNavigationControls';
diff --git a/__tests__/src/components/Workspace.test.js b/__tests__/src/components/Workspace.test.js
index 8852772d759a7f9c53b7b36c7a9adab387a12357..fc71c76c8330ba9b8717b3123290180c07abb762 100644
--- a/__tests__/src/components/Workspace.test.js
+++ b/__tests__/src/components/Workspace.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Typography from '@material-ui/core/Typography';
 import WorkspaceMosaic from '../../../src/containers/WorkspaceMosaic';
diff --git a/__tests__/src/components/WorkspaceAdd.test.js b/__tests__/src/components/WorkspaceAdd.test.js
index 9398f7e13ba20dadff809a6f03ce645d1d0b0b85..ce61aa599988608409d8d1881e3847d52b3826e1 100644
--- a/__tests__/src/components/WorkspaceAdd.test.js
+++ b/__tests__/src/components/WorkspaceAdd.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import AppBar from '@material-ui/core/AppBar';
 import Drawer from '@material-ui/core/Drawer';
diff --git a/__tests__/src/components/WorkspaceAddButton.test.js b/__tests__/src/components/WorkspaceAddButton.test.js
index cd1a65c0dcf1ea4d416dc8e3e7e314ee3fb70159..820906f0a576e97dda16821e2cfbca7d2c161ffe 100644
--- a/__tests__/src/components/WorkspaceAddButton.test.js
+++ b/__tests__/src/components/WorkspaceAddButton.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Fab from '@material-ui/core/Fab';
 import Typography from '@material-ui/core/Typography';
diff --git a/__tests__/src/components/WorkspaceArea.test.js b/__tests__/src/components/WorkspaceArea.test.js
index 462385e1d100dfd0b4c2505db1b88f06c0cdf9d6..679439458a93a965b1815908e5e5031413facf82 100644
--- a/__tests__/src/components/WorkspaceArea.test.js
+++ b/__tests__/src/components/WorkspaceArea.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import WorkspaceControlPanel from '../../../src/containers/WorkspaceControlPanel';
 import Workspace from '../../../src/containers/Workspace';
diff --git a/__tests__/src/components/WorkspaceControlPanel.test.js b/__tests__/src/components/WorkspaceControlPanel.test.js
index 591ca3650db719d36c6c5757e730b1329afe6a9c..5da5dae955cf05121c23e1d856a6a9a887251d48 100644
--- a/__tests__/src/components/WorkspaceControlPanel.test.js
+++ b/__tests__/src/components/WorkspaceControlPanel.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import AppBar from '@material-ui/core/AppBar';
 import createStore from '../../../src/state/createStore';
diff --git a/__tests__/src/components/WorkspaceControlPanelButtons.test.js b/__tests__/src/components/WorkspaceControlPanelButtons.test.js
index c94ecdd0d08568ec3774ee447a6f221a7ed70eaa..5f01250727d1c9dbca31531eacf9d0d805ee8728 100644
--- a/__tests__/src/components/WorkspaceControlPanelButtons.test.js
+++ b/__tests__/src/components/WorkspaceControlPanelButtons.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import WorkspaceMenuButton from '../../../src/containers/WorkspaceMenuButton';
 import FullScreenButton from '../../../src/containers/FullScreenButton';
diff --git a/__tests__/src/components/WorkspaceElastic.test.js b/__tests__/src/components/WorkspaceElastic.test.js
index 5a0e59ca7d89cada8d1288d421fe5efae8428969..0d436f7d4b1fbfd29444c55b8111ae40b9962dff 100644
--- a/__tests__/src/components/WorkspaceElastic.test.js
+++ b/__tests__/src/components/WorkspaceElastic.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { Rnd } from 'react-rnd';
 import ResizeObserver from 'react-resize-observer';
diff --git a/__tests__/src/components/WorkspaceElasticWindow.test.js b/__tests__/src/components/WorkspaceElasticWindow.test.js
index eda0e2bc76e6866fea5c74fd039b8ee07c8e924e..3a5673a32420c281b4cbd49157f8957ac327c5fd 100644
--- a/__tests__/src/components/WorkspaceElasticWindow.test.js
+++ b/__tests__/src/components/WorkspaceElasticWindow.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { Rnd } from 'react-rnd';
 import WorkspaceElasticWindow from '../../../src/components/WorkspaceElasticWindow';
diff --git a/__tests__/src/components/WorkspaceExport.test.js b/__tests__/src/components/WorkspaceExport.test.js
index 94450b51664138f1d27869b0958a0644ab711980..f8392f249f2302f52697c37320dd202b1454eb17 100644
--- a/__tests__/src/components/WorkspaceExport.test.js
+++ b/__tests__/src/components/WorkspaceExport.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Dialog from '@material-ui/core/Dialog';
 import Button from '@material-ui/core/Button';
diff --git a/__tests__/src/components/WorkspaceImport.test.js b/__tests__/src/components/WorkspaceImport.test.js
index e750a2bd41d45857eb250fd7509023b098d0b43a..02b54e126d8d5ca16447fee9c2a39d9f8fab220b 100644
--- a/__tests__/src/components/WorkspaceImport.test.js
+++ b/__tests__/src/components/WorkspaceImport.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Dialog from '@material-ui/core/Dialog';
 import TextField from '@material-ui/core/TextField';
diff --git a/__tests__/src/components/WorkspaceMenu.test.js b/__tests__/src/components/WorkspaceMenu.test.js
index ab0087528614d6737655489c7536193c93a9b60e..a8c56fe50ed894e226ca9906ef0f6ab2cae1083f 100644
--- a/__tests__/src/components/WorkspaceMenu.test.js
+++ b/__tests__/src/components/WorkspaceMenu.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Menu from '@material-ui/core/Menu';
 import MenuItem from '@material-ui/core/MenuItem';
diff --git a/__tests__/src/components/WorkspaceMenuButton.test.js b/__tests__/src/components/WorkspaceMenuButton.test.js
index 219c39b10f85a8a1f2aac54bf0267c5bfa0b0bc7..3e8a1a0fd65b600cf7090c3385baba9d711a0975 100644
--- a/__tests__/src/components/WorkspaceMenuButton.test.js
+++ b/__tests__/src/components/WorkspaceMenuButton.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import MiradorMenuButton from '../../../src/containers/MiradorMenuButton';
 import { WorkspaceMenuButton } from '../../../src/components/WorkspaceMenuButton';
diff --git a/__tests__/src/components/WorkspaceMosaic.test.js b/__tests__/src/components/WorkspaceMosaic.test.js
index 868a37e9386ecb1f0227899fe577b981bfd24784..9fde83e6758fd34ffe2e0cb816b2e66ccbb22d7e 100644
--- a/__tests__/src/components/WorkspaceMosaic.test.js
+++ b/__tests__/src/components/WorkspaceMosaic.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import { MosaicWithoutDragDropContext } from 'react-mosaic-component';
 import MosaicRenderPreview from '../../../src/containers/MosaicRenderPreview';
diff --git a/__tests__/src/components/WorkspaceOptionsButton.test.js b/__tests__/src/components/WorkspaceOptionsButton.test.js
index ad88119b4f5986035b68c9a627215d37a426a937..d9b20cd029998c4f068488bbef529b06b843a867 100644
--- a/__tests__/src/components/WorkspaceOptionsButton.test.js
+++ b/__tests__/src/components/WorkspaceOptionsButton.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import MiradorMenuButton from '../../../src/containers/MiradorMenuButton';
 import WorkspaceOptionsMenu from '../../../src/containers/WorkspaceOptionsMenu';
diff --git a/__tests__/src/components/WorkspaceOptionsMenu.test.js b/__tests__/src/components/WorkspaceOptionsMenu.test.js
index ec1401c9011c0d50269ea1addda228a676b177c3..5f60cbf35b550b44b7a1c9be45668c8aa282a02b 100644
--- a/__tests__/src/components/WorkspaceOptionsMenu.test.js
+++ b/__tests__/src/components/WorkspaceOptionsMenu.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import MenuItem from '@material-ui/core/MenuItem';
 import WorkspaceExport from '../../../src/containers/WorkspaceExport';
diff --git a/__tests__/src/components/WorkspaceSelectionDialog.test.js b/__tests__/src/components/WorkspaceSelectionDialog.test.js
index bd40f59ea8721fa6c258d6365af5f37e21fbccd2..895a4a68f9114fb2b80d4b547869621f628ee54c 100644
--- a/__tests__/src/components/WorkspaceSelectionDialog.test.js
+++ b/__tests__/src/components/WorkspaceSelectionDialog.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import Dialog from '@material-ui/core/Dialog';
 import MenuItem from '@material-ui/core/MenuItem';
diff --git a/__tests__/src/components/ZoomControls.test.js b/__tests__/src/components/ZoomControls.test.js
index 2b77fc3f71bed93954c8bbcf12dbfdf7107db05b..e7e49671be7bf281fc6cf961e340a3d669f889ee 100644
--- a/__tests__/src/components/ZoomControls.test.js
+++ b/__tests__/src/components/ZoomControls.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { shallow } from 'enzyme';
 import MiradorMenuButton from '../../../src/containers/MiradorMenuButton';
 import { ZoomControls } from '../../../src/components/ZoomControls';
diff --git a/__tests__/src/extend/withPlugins.test.js b/__tests__/src/extend/withPlugins.test.js
index 7fdda8ce5649b84a9f263908667350badd0da8dc..cbf62333402770850676c4b6fc448231337af9be 100644
--- a/__tests__/src/extend/withPlugins.test.js
+++ b/__tests__/src/extend/withPlugins.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import PropTypes from 'prop-types';
 import { mount } from 'enzyme';
 import { withPlugins } from '../../../src/extend/withPlugins';
diff --git a/babel.config.js b/babel.config.js
index fc73760539b35499cf110a984fc2bc76609bd3b3..eb0b0f586e482882ad5a0e23d5ba5b5198510d17 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -23,7 +23,6 @@ module.exports = function (api) {
           node: 'current',
         },
       },
-      '@babel/preset-react',
     ],
     (isProductionEnv || isDevelopmentEnv) && [
       '@babel/preset-env',
@@ -39,6 +38,7 @@ module.exports = function (api) {
       '@babel/preset-react',
       {
         development: isDevelopmentEnv || isTestEnv,
+        runtime: 'automatic',
         useBuiltIns: true,
       },
     ],
diff --git a/package.json b/package.json
index 3fce4731b396f6da1edf926bc6c3f8706da9bbee..89b5fcff5d53738d820d43fd351d840e5c4a92f1 100644
--- a/package.json
+++ b/package.json
@@ -114,8 +114,8 @@
     "jest-puppeteer": "^6.1.0",
     "jsdom": "^21.0.0",
     "puppeteer": "^13.5.1",
-    "react": "^16.8.6",
-    "react-dom": "^16.8.6",
+    "react": "^16.14.0",
+    "react-dom": "^16.14.0",
     "react-refresh": "^0.14.0",
     "redux-mock-store": "^1.5.1",
     "redux-saga-test-plan": "^4.0.0-rc.3",
@@ -125,7 +125,7 @@
     "webpack-dev-server": "^4.7.4"
   },
   "peerDependencies": {
-    "react": "^16.8.3",
-    "react-dom": "^16.8.3"
+    "react": "^16.14.0",
+    "react-dom": "^16.14.0"
   }
 }
diff --git a/src/components/AccessTokenSender.js b/src/components/AccessTokenSender.js
index 90a731d6c068e94f1de6f68fc63b6895b52d353e..99a396fea584073d57602418a2bb21de529ef759 100644
--- a/src/components/AccessTokenSender.js
+++ b/src/components/AccessTokenSender.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import IComCom from 'icomcom-react';
 
diff --git a/src/components/AnnotationSettings.js b/src/components/AnnotationSettings.js
index 29ec4a843c1c2abfb4f42d4e603e3b7a5a7bf091..dd91bdc754f4ef9f4494d62a1f43ce64593af6dd 100644
--- a/src/components/AnnotationSettings.js
+++ b/src/components/AnnotationSettings.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import VisibilityIcon from '@material-ui/icons/VisibilitySharp';
 import VisibilityOffIcon from '@material-ui/icons/VisibilityOffSharp';
diff --git a/src/components/AnnotationsOverlay.js b/src/components/AnnotationsOverlay.js
index 454d407ec1562adb5d49c711cbcfbcb9e23d39f5..f68ced24754f36ead80cec7b5dca64c272f63eb8 100644
--- a/src/components/AnnotationsOverlay.js
+++ b/src/components/AnnotationsOverlay.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { createRef, Component } from 'react';
 import ReactDOM from 'react-dom';
 import PropTypes from 'prop-types';
 import isEqual from 'lodash/isEqual';
@@ -50,7 +50,7 @@ export class AnnotationsOverlay extends Component {
   constructor(props) {
     super(props);
 
-    this.ref = React.createRef();
+    this.ref = createRef();
     this.osdCanvasOverlay = null;
     // An initial value for the updateCanvas method
     this.updateCanvas = () => {};
diff --git a/src/components/App.js b/src/components/App.js
index ed42b7aabf312e6b8df56865f8bb23311b8d06c8..9c12117fc85c5cb09864af8470894d2b7db60bd4 100644
--- a/src/components/App.js
+++ b/src/components/App.js
@@ -1,4 +1,4 @@
-import React, { Component, lazy, Suspense } from 'react';
+import { Component, lazy, Suspense } from 'react';
 import PropTypes from 'prop-types';
 import PluginProvider from '../extend/PluginProvider';
 import AppProviders from '../containers/AppProviders';
diff --git a/src/components/AppProviders.js b/src/components/AppProviders.js
index 25b6cb13b87a9bb61179efb8cbd50e9ea82e6452..aab7a26ed7b183e3360551a29680b10a33df9d68 100644
--- a/src/components/AppProviders.js
+++ b/src/components/AppProviders.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import { FullScreen, useFullScreenHandle } from 'react-full-screen';
 import { I18nextProvider } from 'react-i18next';
diff --git a/src/components/AttributionPanel.js b/src/components/AttributionPanel.js
index dc6e2462eeedb79adba97f10e03313230da35e52..c2d8cc6979e1332c0b9ef46a4c0369209d645342 100644
--- a/src/components/AttributionPanel.js
+++ b/src/components/AttributionPanel.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Typography from '@material-ui/core/Typography';
 import Link from '@material-ui/core/Link';
diff --git a/src/components/AudioViewer.js b/src/components/AudioViewer.js
index 15d51c3d1401e1e63576fbf9e29c9cc86e362e69..ab7b9d6883b7186b6b990744707d5be5923eab32 100644
--- a/src/components/AudioViewer.js
+++ b/src/components/AudioViewer.js
@@ -1,4 +1,4 @@
-import React, { Component, Fragment } from 'react';
+import { Component, Fragment } from 'react';
 import PropTypes from 'prop-types';
 
 /** */
diff --git a/src/components/BackgroundPluginArea.js b/src/components/BackgroundPluginArea.js
index 0972993b2bfa8aebabceed4b0a3fb9df3430d944..c59c745e6aa3e54eda0f2cab3dbb771876122bce 100644
--- a/src/components/BackgroundPluginArea.js
+++ b/src/components/BackgroundPluginArea.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import PropTypes from 'prop-types';
 import ns from '../config/css-ns';
 import { PluginHook } from './PluginHook';
diff --git a/src/components/Branding.js b/src/components/Branding.js
index 6c9b2b15fb296441f5466cc81bef500f91af2c11..d2f4d4f9e1a42cd605136baa9da81cba0526586e 100644
--- a/src/components/Branding.js
+++ b/src/components/Branding.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import IconButton from '@material-ui/core/IconButton';
 import Typography from '@material-ui/core/Typography';
diff --git a/src/components/CanvasAnnotations.js b/src/components/CanvasAnnotations.js
index 37263106c9ae5913124c29c44f1bf6b0318e98a0..5d5b5379359830cce9116a43fc48ec380a431004 100644
--- a/src/components/CanvasAnnotations.js
+++ b/src/components/CanvasAnnotations.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import clsx from 'clsx';
 import Chip from '@material-ui/core/Chip';
diff --git a/src/components/CanvasInfo.js b/src/components/CanvasInfo.js
index fb735316ea8474220c138f8ddfca0c6bfdf50183..93f4b31243d6b9e5b33632085d6b53c4b3e3207c 100644
--- a/src/components/CanvasInfo.js
+++ b/src/components/CanvasInfo.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Typography from '@material-ui/core/Typography';
 import CollapsibleSection from '../containers/CollapsibleSection';
diff --git a/src/components/CanvasLayers.js b/src/components/CanvasLayers.js
index 7847eefbf2a3cf1377bc2e524aef171aed6b02f0..99e400ca2573b8237ef3137fa27712764c9b6d81 100644
--- a/src/components/CanvasLayers.js
+++ b/src/components/CanvasLayers.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import clsx from 'clsx';
 import { v4 as uuid } from 'uuid';
diff --git a/src/components/ChangeThemeDialog.js b/src/components/ChangeThemeDialog.js
index e5bb6102de498e007c2feb6130c8f645d3efbe8e..c01da4ce861c550c06d1947a78758146b824c9aa 100644
--- a/src/components/ChangeThemeDialog.js
+++ b/src/components/ChangeThemeDialog.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import {
   Dialog,
   DialogTitle,
diff --git a/src/components/CollapsibleSection.js b/src/components/CollapsibleSection.js
index eca0a2ff33d747c7e6782acebd50774c9de49b3b..8773c9b6d951d9c14ccbb6ec3000db74bd032811 100644
--- a/src/components/CollapsibleSection.js
+++ b/src/components/CollapsibleSection.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Typography from '@material-ui/core/Typography';
 import KeyboardArrowDown from '@material-ui/icons/KeyboardArrowDownSharp';
diff --git a/src/components/CollectionDialog.js b/src/components/CollectionDialog.js
index df4d9012427cfeb2757ff7b6bd375731d2b6986f..71ecb472ee6184448832f67dd0711f3666ae6fc5 100644
--- a/src/components/CollectionDialog.js
+++ b/src/components/CollectionDialog.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import {
   Button,
diff --git a/src/components/CollectionInfo.js b/src/components/CollectionInfo.js
index 15670b1c98db518dddeac26431b457bf1e1596a5..4cd3d3961e5bf804d24687e703199d8b0e6b4d61 100644
--- a/src/components/CollectionInfo.js
+++ b/src/components/CollectionInfo.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Button from '@material-ui/core/Button';
 import Typography from '@material-ui/core/Typography';
diff --git a/src/components/CompanionArea.js b/src/components/CompanionArea.js
index fbdaf0c734dc9b77f8a858a719c2d0b1df695d88..bdf7610b6e5e06f26505d86cce8b4622818ed98b 100644
--- a/src/components/CompanionArea.js
+++ b/src/components/CompanionArea.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Slide from '@material-ui/core/Slide';
 import ArrowLeftIcon from '@material-ui/icons/ArrowLeftSharp';
diff --git a/src/components/CompanionWindow.js b/src/components/CompanionWindow.js
index 7026555820a04939249d23f0dc047dfe92873529..9cf4fe29a4e55f7576b7b3a6af724b0a87a4297a 100644
--- a/src/components/CompanionWindow.js
+++ b/src/components/CompanionWindow.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Children, cloneElement, Component } from 'react';
 import PropTypes from 'prop-types';
 import CloseIcon from '@material-ui/icons/CloseSharp';
 import OpenInNewIcon from '@material-ui/icons/OpenInNewSharp';
@@ -74,9 +74,9 @@ export class CompanionWindow extends Component {
 
     const isBottom = (position === 'bottom' || position === 'far-bottom');
 
-    const childrenWithAdditionalProps = React.Children.map(children, (child) => {
+    const childrenWithAdditionalProps = Children.map(children, (child) => {
       if (!child) return null;
-      return React.cloneElement(
+      return cloneElement(
         child,
         {
           parentactions: {
diff --git a/src/components/CompanionWindowFactory.js b/src/components/CompanionWindowFactory.js
index 7bc32d1e84afd2838eefe8575e48f90eae1cdb77..9676af994eca038153a013c9e7fc06d10b4a3d00 100644
--- a/src/components/CompanionWindowFactory.js
+++ b/src/components/CompanionWindowFactory.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { createElement, Component } from 'react';
 import PropTypes from 'prop-types';
 import CompanionWindowRegistry from '../lib/CompanionWindowRegistry';
 import CompanionWindow from '../containers/CompanionWindow';
@@ -62,7 +62,7 @@ export class CompanionWindowFactory extends Component {
 
     if (!type) return null;
 
-    return React.createElement(type, { id, windowId });
+    return createElement(type, { id, windowId });
   }
 }
 
diff --git a/src/components/CustomPanel.js b/src/components/CustomPanel.js
index 5d0dcc0ce235a01233f1f8ee497881a4031c7d79..cf80b1d497141fcaec668f43ce127ad8baaa1c1e 100644
--- a/src/components/CustomPanel.js
+++ b/src/components/CustomPanel.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import CompanionWindow from '../containers/CompanionWindow';
 
diff --git a/src/components/ErrorContent.js b/src/components/ErrorContent.js
index f122e0c228d9b5e0f72d153ff230a893aa06c807..d6e996ece45f003bfe8bb20b09483454a870409d 100644
--- a/src/components/ErrorContent.js
+++ b/src/components/ErrorContent.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Accordion from '@material-ui/core/Accordion';
 import AccordionSummary from '@material-ui/core/AccordionSummary';
diff --git a/src/components/ErrorDialog.js b/src/components/ErrorDialog.js
index fcd83eaa3ac57b400d2fa160af2cc9638b97b4bd..89336efea11eb9f43034a33282bc05f4a1a39ff3 100644
--- a/src/components/ErrorDialog.js
+++ b/src/components/ErrorDialog.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import Dialog from '@material-ui/core/Dialog';
 import DialogContent from '@material-ui/core/DialogContent';
 import DialogTitle from '@material-ui/core/DialogTitle';
diff --git a/src/components/FullScreenButton.js b/src/components/FullScreenButton.js
index 40361176c5536575f35d0ae51546c91369e9a25f..3e6b8a8682e1412ca19abbc79a40b534eb6999ea 100644
--- a/src/components/FullScreenButton.js
+++ b/src/components/FullScreenButton.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import FullscreenIcon from '@material-ui/icons/FullscreenSharp';
 import FullscreenExitIcon from '@material-ui/icons/FullscreenExitSharp';
 import PropTypes from 'prop-types';
diff --git a/src/components/GalleryView.js b/src/components/GalleryView.js
index 3cd865608fbaf4983939e720b51b6704fa0620a7..3dc9cfd529178b588350b3b9219db2a11edb748c 100644
--- a/src/components/GalleryView.js
+++ b/src/components/GalleryView.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Paper from '@material-ui/core/Paper';
 import GalleryViewThumbnail from '../containers/GalleryViewThumbnail';
diff --git a/src/components/GalleryViewThumbnail.js b/src/components/GalleryViewThumbnail.js
index 5ea6d433ec607696b21f293a4121d9358cc8ed7e..961c38af9abebbba2ef05cf3d0b2471d66ccb4b3 100644
--- a/src/components/GalleryViewThumbnail.js
+++ b/src/components/GalleryViewThumbnail.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { createRef, Component } from 'react';
 import PropTypes from 'prop-types';
 import Avatar from '@material-ui/core/Avatar';
 import Chip from '@material-ui/core/Chip';
@@ -18,7 +18,7 @@ export class GalleryViewThumbnail extends Component {
   constructor(props) {
     super(props);
 
-    this.myRef = React.createRef();
+    this.myRef = createRef();
     this.state = { requestedAnnotations: false };
 
     this.handleSelect = this.handleSelect.bind(this);
diff --git a/src/components/IIIFAuthentication.js b/src/components/IIIFAuthentication.js
index c7d4c3ec6d47e75d4f2e973140486a47581c79b6..c804e69715533642e61c3f1820ce5d2f9e0ad06f 100644
--- a/src/components/IIIFAuthentication.js
+++ b/src/components/IIIFAuthentication.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import { AccessTokenSender } from './AccessTokenSender';
 import { NewWindow } from './NewWindow';
diff --git a/src/components/IIIFDropTarget.js b/src/components/IIIFDropTarget.js
index 8bbbc77fff96925d1372499784c3ab773fe72f11..8b48beefc91d35ca4d149023e1f3846f58c4012f 100644
--- a/src/components/IIIFDropTarget.js
+++ b/src/components/IIIFDropTarget.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import PropTypes from 'prop-types';
 import Backdrop from '@material-ui/core/Backdrop';
 import InsertDriveFileSharpIcon from '@material-ui/icons/InsertDriveFileSharp';
diff --git a/src/components/IIIFThumbnail.js b/src/components/IIIFThumbnail.js
index a4f036f6d731c3fdf17114c505c9e252b270fd23..de2aa4317be1c3886d1b2318063a453fd65779a7 100644
--- a/src/components/IIIFThumbnail.js
+++ b/src/components/IIIFThumbnail.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Typography from '@material-ui/core/Typography';
 import { InView } from 'react-intersection-observer';
diff --git a/src/components/LabelValueMetadata.js b/src/components/LabelValueMetadata.js
index 91fd0b40d3305341d53c50f0bbc58ab67913db2d..d68650f4099a087a07617112b34e6b9c46cd7bc2 100644
--- a/src/components/LabelValueMetadata.js
+++ b/src/components/LabelValueMetadata.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Typography from '@material-ui/core/Typography';
 import SanitizedHtml from '../containers/SanitizedHtml';
diff --git a/src/components/LanguageSettings.js b/src/components/LanguageSettings.js
index 5296dee060e49427e9829f586159a44abe96f7b8..7901c4e440ada6bd9e5f251b71998158a850ed6a 100644
--- a/src/components/LanguageSettings.js
+++ b/src/components/LanguageSettings.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import ListItemIcon from '@material-ui/core/ListItemIcon';
 import ListItemText from '@material-ui/core/ListItemText';
 import MenuItem from '@material-ui/core/MenuItem';
diff --git a/src/components/LayersPanel.js b/src/components/LayersPanel.js
index 09cda41e93b4ed1a75c3b9f29db94ca0c97157fe..9575b9f8ea74a51802ccbd1ebfcf7026a122338b 100644
--- a/src/components/LayersPanel.js
+++ b/src/components/LayersPanel.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import CompanionWindow from '../containers/CompanionWindow';
 import CanvasLayers from '../containers/CanvasLayers';
diff --git a/src/components/LocalePicker.js b/src/components/LocalePicker.js
index 24cf3bd7b8d864036f46323de5d2ff34eda7ccc2..beb212324eb40595e03bde77284bd7a2e3303636 100644
--- a/src/components/LocalePicker.js
+++ b/src/components/LocalePicker.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import MenuItem from '@material-ui/core/MenuItem';
 import FormControl from '@material-ui/core/FormControl';
diff --git a/src/components/ManifestForm.js b/src/components/ManifestForm.js
index 19702f071430b2d07f6f29889e811a012ae056d6..18d304cd6dca0f1301e1dd735d812d9135641eb8 100644
--- a/src/components/ManifestForm.js
+++ b/src/components/ManifestForm.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Button from '@material-ui/core/Button';
 import Grid from '@material-ui/core/Grid';
diff --git a/src/components/ManifestInfo.js b/src/components/ManifestInfo.js
index d597983c14d7761f51b677196d5a1a3aa8e69156..a66be288bc11fc2d1198b1f1e144169ab7136791 100644
--- a/src/components/ManifestInfo.js
+++ b/src/components/ManifestInfo.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Typography from '@material-ui/core/Typography';
 import CollapsibleSection from '../containers/CollapsibleSection';
diff --git a/src/components/ManifestListItem.js b/src/components/ManifestListItem.js
index edf14971b5ccc6f7115e67a7b92daebb2768ca50..accd5ede56d5dadcfb6ab8d791359aaeaf838b13 100644
--- a/src/components/ManifestListItem.js
+++ b/src/components/ManifestListItem.js
@@ -1,4 +1,4 @@
-import React from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import ListItem from '@material-ui/core/ListItem';
 import ButtonBase from '@material-ui/core/ButtonBase';
@@ -16,7 +16,7 @@ import ns from '../config/css-ns';
  */
 
 /** */
-export class ManifestListItem extends React.Component {
+export class ManifestListItem extends Component {
   /** */
   constructor(props) {
     super(props);
diff --git a/src/components/ManifestListItemError.js b/src/components/ManifestListItemError.js
index a6a3fb43ac4eabb161bbd324049c177474071a1e..3d63e48afd3445ff3df92814908d91c9ca19a1d2 100644
--- a/src/components/ManifestListItemError.js
+++ b/src/components/ManifestListItemError.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Button from '@material-ui/core/Button';
 import ErrorIcon from '@material-ui/icons/ErrorOutlineSharp';
diff --git a/src/components/ManifestRelatedLinks.js b/src/components/ManifestRelatedLinks.js
index 943d287ff3be7df3682ce5224777412ca4e2062f..62436ea79a4ba2009ff7ae9cee421a83e1995d40 100644
--- a/src/components/ManifestRelatedLinks.js
+++ b/src/components/ManifestRelatedLinks.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Typography from '@material-ui/core/Typography';
 import Link from '@material-ui/core/Link';
diff --git a/src/components/MinimalWindow.js b/src/components/MinimalWindow.js
index 79ecf36ea5d85253f9cbefba734957d33b7806c8..f19b35385f339bf38761b7d6390e421101833330 100644
--- a/src/components/MinimalWindow.js
+++ b/src/components/MinimalWindow.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import MenuIcon from '@material-ui/icons/MenuSharp';
 import cn from 'classnames';
diff --git a/src/components/MiradorMenuButton.js b/src/components/MiradorMenuButton.js
index 83c13b26168a35cc3ca97b2092b973e306b27153..d528a7aef21fb65575e5b62e48abd986fe3364e0 100644
--- a/src/components/MiradorMenuButton.js
+++ b/src/components/MiradorMenuButton.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import PropTypes from 'prop-types';
 import Badge from '@material-ui/core/Badge';
 import IconButton from '@material-ui/core/IconButton';
diff --git a/src/components/MosaicRenderPreview.js b/src/components/MosaicRenderPreview.js
index 3957f5008284c25c5ea15538e7f00195f74efe91..201a650a3250527c99017f72dedf5ae9e9f24144 100644
--- a/src/components/MosaicRenderPreview.js
+++ b/src/components/MosaicRenderPreview.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import PropTypes from 'prop-types';
 import MinimalWindow from '../containers/MinimalWindow';
 
diff --git a/src/components/NestedMenu.js b/src/components/NestedMenu.js
index 6831c4de37921b00824a9876ff9f9c05ca5652af..65fcfeec57a1d7681510747b3dc3bb120358d57f 100644
--- a/src/components/NestedMenu.js
+++ b/src/components/NestedMenu.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import ListItemIcon from '@material-ui/core/ListItemIcon';
 import ListItemText from '@material-ui/core/ListItemText';
diff --git a/src/components/OpenSeadragonViewer.js b/src/components/OpenSeadragonViewer.js
index 3f352eddd9139a964ae92f2b4d9f2e6b6d079696..5103f69941175629d9707e00cf0bc4a4541a2ff7 100644
--- a/src/components/OpenSeadragonViewer.js
+++ b/src/components/OpenSeadragonViewer.js
@@ -1,4 +1,6 @@
-import React, { Component } from 'react';
+import {
+  createRef, Children, cloneElement, Component,
+} from 'react';
 import PropTypes from 'prop-types';
 import debounce from 'lodash/debounce';
 import isEqual from 'lodash/isEqual';
@@ -22,8 +24,8 @@ export class OpenSeadragonViewer extends Component {
     super(props);
 
     this.state = { viewer: undefined };
-    this.ref = React.createRef();
-    this.apiRef = React.createRef();
+    this.ref = createRef();
+    this.apiRef = createRef();
     OSDReferences.set(props.windowId, this.apiRef);
     this.onCanvasMouseMove = debounce(this.onCanvasMouseMove.bind(this), 10);
     this.onViewportChange = this.onViewportChange.bind(this);
@@ -345,8 +347,8 @@ export class OpenSeadragonViewer extends Component {
     } = this.props;
     const { viewer } = this.state;
 
-    const enhancedChildren = React.Children.map(children, child => (
-      React.cloneElement(
+    const enhancedChildren = Children.map(children, child => (
+      cloneElement(
         child,
         {
           zoomToWorld: this.zoomToWorld,
diff --git a/src/components/PluginHook.js b/src/components/PluginHook.js
index 5c16c579c4626486181a9b7c523ce366eaadf7b8..0119fcf08961c1035b05589770cd7a737987d62d 100644
--- a/src/components/PluginHook.js
+++ b/src/components/PluginHook.js
@@ -1,13 +1,13 @@
-import React from 'react';
+import { forwardRef, isValidElement, cloneElement } from 'react';
 
 /** Renders plugins */
-export const PluginHook = React.forwardRef((props, ref) => {
+export const PluginHook = forwardRef((props, ref) => {
   const { PluginComponents } = props; // eslint-disable-line react/prop-types
   const { classes, ...otherProps } = props; // eslint-disable-line react/prop-types
   return PluginComponents ? (
     PluginComponents.map((PluginComponent, index) => ( // eslint-disable-line react/prop-types
-      React.isValidElement(PluginComponent)
-        ? React.cloneElement(PluginComponent, { ...otherProps, ref })
+      isValidElement(PluginComponent)
+        ? cloneElement(PluginComponent, { ...otherProps, ref })
         : (
           <PluginComponent
             ref={ref}
diff --git a/src/components/PrimaryWindow.js b/src/components/PrimaryWindow.js
index 05cecad9b6325d91cba30d8db6d7e54c5f22d0c0..988b6784aea40a2167782f35ea06cc8964e10851 100644
--- a/src/components/PrimaryWindow.js
+++ b/src/components/PrimaryWindow.js
@@ -1,4 +1,4 @@
-import React, { Component, lazy, Suspense } from 'react';
+import { Component, lazy, Suspense } from 'react';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
 import WindowSideBar from '../containers/WindowSideBar';
diff --git a/src/components/SanitizedHtml.js b/src/components/SanitizedHtml.js
index c1dcd5fa03408a54ee85db1f1121f69b7b23ea02..da9bcd7021be52ae46f56f35c1027fc690c51946 100644
--- a/src/components/SanitizedHtml.js
+++ b/src/components/SanitizedHtml.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import DOMPurify from 'dompurify';
 import ns from '../config/css-ns';
diff --git a/src/components/ScrollIndicatedDialogContent.js b/src/components/ScrollIndicatedDialogContent.js
index 4fd3cb5f5c9f9769b20b16542ffac4493f454eb7..a8de5229d8d8e09e70aa881432246ccb568c5fc3 100644
--- a/src/components/ScrollIndicatedDialogContent.js
+++ b/src/components/ScrollIndicatedDialogContent.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import PropTypes from 'prop-types';
 import DialogContent from '@material-ui/core/DialogContent';
 
diff --git a/src/components/ScrollTo.js b/src/components/ScrollTo.js
index d69f91d1de5f3598325974fa3745b862d986c5d0..7d7f8a82cadfc2af5d31aedc93de2ba5a00d3b22 100644
--- a/src/components/ScrollTo.js
+++ b/src/components/ScrollTo.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { createRef, Component } from 'react';
 import PropTypes from 'prop-types';
 
 /**
@@ -9,7 +9,7 @@ export class ScrollTo extends Component {
   constructor(props) {
     super(props);
 
-    this.scrollToRef = React.createRef();
+    this.scrollToRef = createRef();
   }
 
   /** */
diff --git a/src/components/SearchHit.js b/src/components/SearchHit.js
index f27228fe15fbc9fe02ad9cbaf0fcdb2ffab817f6..7feac2d9741108b5887cea314b1d62dd8e23e9dd 100644
--- a/src/components/SearchHit.js
+++ b/src/components/SearchHit.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import clsx from 'clsx';
 import Button from '@material-ui/core/Button';
diff --git a/src/components/SearchPanel.js b/src/components/SearchPanel.js
index c3430660be80a4fd296e849eee72a4352a4721b4..375e39951f3a43d210b8608e0d003c7689190813 100644
--- a/src/components/SearchPanel.js
+++ b/src/components/SearchPanel.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { createRef, Component } from 'react';
 import PropTypes from 'prop-types';
 import Button from '@material-ui/core/Button';
 import Chip from '@material-ui/core/Chip';
@@ -13,7 +13,7 @@ export class SearchPanel extends Component {
   constructor(props) {
     super(props);
 
-    this.containerRef = React.createRef();
+    this.containerRef = createRef();
   }
 
   /** */
diff --git a/src/components/SearchPanelControls.js b/src/components/SearchPanelControls.js
index 391f57bca6865eb56d2fc68022fa98a7fb7e68da..af2e53f3f7c889c5959bd4a552e41a0224a22662 100644
--- a/src/components/SearchPanelControls.js
+++ b/src/components/SearchPanelControls.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import deburr from 'lodash/deburr';
 import debounce from 'lodash/debounce';
diff --git a/src/components/SearchPanelNavigation.js b/src/components/SearchPanelNavigation.js
index 21c76dda1e794a2db646fa8f58a6ef23a57b28ee..72eb84e1fe181a6756d8a32644721fe28e4f7b40 100644
--- a/src/components/SearchPanelNavigation.js
+++ b/src/components/SearchPanelNavigation.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import ChevronLeftIcon from '@material-ui/icons/ChevronLeftSharp';
 import ChevronRightIcon from '@material-ui/icons/ChevronRightSharp';
diff --git a/src/components/SearchResults.js b/src/components/SearchResults.js
index bb75972a80306f2dc0470dfbe0ba7cca10a5405e..912f9084746e04e8f2e894ec4ba314ff0007eca5 100644
--- a/src/components/SearchResults.js
+++ b/src/components/SearchResults.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Button from '@material-ui/core/Button';
 import List from '@material-ui/core/List';
diff --git a/src/components/SelectCollection.js b/src/components/SelectCollection.js
index aeb98e71291df1e5834cce2c6929067138a87ccf..c3d275a17933a97e29f70865052c5491908dd804 100644
--- a/src/components/SelectCollection.js
+++ b/src/components/SelectCollection.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Button from '@material-ui/core/Button';
 import Grid from '@material-ui/core/Grid';
diff --git a/src/components/SidebarIndexItem.js b/src/components/SidebarIndexItem.js
index b880e180a3b41a7f7ae9013c2f8731ce2a2264af..d6b1a96668006e072062bd0cd0b1b0d0d1f9dc4e 100644
--- a/src/components/SidebarIndexItem.js
+++ b/src/components/SidebarIndexItem.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Typography from '@material-ui/core/Typography';
 import classNames from 'classnames';
diff --git a/src/components/SidebarIndexList.js b/src/components/SidebarIndexList.js
index ba88ee4aeeacb6866b34581f56275a28c0167d16..104019beddce9ee0cf6397b6f748d5e47bac3805 100644
--- a/src/components/SidebarIndexList.js
+++ b/src/components/SidebarIndexList.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import MenuList from '@material-ui/core/MenuList';
 import MenuItem from '@material-ui/core/MenuItem';
diff --git a/src/components/SidebarIndexTableOfContents.js b/src/components/SidebarIndexTableOfContents.js
index badc3e77fb57c5cdb6da04aed9726e9baf182ede..bfcf61bff1c41202fa20eef786f667d5da60c1ff 100644
--- a/src/components/SidebarIndexTableOfContents.js
+++ b/src/components/SidebarIndexTableOfContents.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import TreeView from '@material-ui/lab/TreeView';
 import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
diff --git a/src/components/SidebarIndexThumbnail.js b/src/components/SidebarIndexThumbnail.js
index 5ac21782e7c5403d3259abf863246def01c510a7..7abd1973d6051d0e71e4c18bbaf40bd3a4031669 100644
--- a/src/components/SidebarIndexThumbnail.js
+++ b/src/components/SidebarIndexThumbnail.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Typography from '@material-ui/core/Typography';
 import classNames from 'classnames';
diff --git a/src/components/ThumbnailCanvasGrouping.js b/src/components/ThumbnailCanvasGrouping.js
index 72f08bb4a3479bf7060b5ed174952e8eca3cefe8..6e8902339c361816aad67a35f270418eee0eed4b 100644
--- a/src/components/ThumbnailCanvasGrouping.js
+++ b/src/components/ThumbnailCanvasGrouping.js
@@ -1,4 +1,4 @@
-import React, { PureComponent } from 'react';
+import { PureComponent } from 'react';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
 import IIIFThumbnail from '../containers/IIIFThumbnail';
diff --git a/src/components/ThumbnailNavigation.js b/src/components/ThumbnailNavigation.js
index e7c6db2945535d7a293694054acb970da4307316..4dda633c9471d4e7ad88621b781603e95bb350f5 100644
--- a/src/components/ThumbnailNavigation.js
+++ b/src/components/ThumbnailNavigation.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { createRef, Component } from 'react';
 import PropTypes from 'prop-types';
 import Paper from '@material-ui/core/Paper';
 import AutoSizer from 'react-virtualized-auto-sizer';
@@ -23,7 +23,7 @@ export class ThumbnailNavigation extends Component {
     this.handleKeyUp = this.handleKeyUp.bind(this);
     this.nextCanvas = this.nextCanvas.bind(this);
     this.previousCanvas = this.previousCanvas.bind(this);
-    this.gridRef = React.createRef();
+    this.gridRef = createRef();
   }
 
   /**
diff --git a/src/components/VideoViewer.js b/src/components/VideoViewer.js
index bb1d0327083448f793ad48026911ccc53019a580..e8a3d617df6b3f516fbacb7abcfd7b05c2894a78 100644
--- a/src/components/VideoViewer.js
+++ b/src/components/VideoViewer.js
@@ -1,4 +1,4 @@
-import React, { Component, Fragment } from 'react';
+import { Component, Fragment } from 'react';
 import PropTypes from 'prop-types';
 
 /** */
diff --git a/src/components/ViewerInfo.js b/src/components/ViewerInfo.js
index e9ec8a8175ca03ee8925ab0d86f3670636dc2cc9..595ed37d0f7c94bbef408772c3e39c419a14a481 100644
--- a/src/components/ViewerInfo.js
+++ b/src/components/ViewerInfo.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import Typography from '@material-ui/core/Typography';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
diff --git a/src/components/ViewerNavigation.js b/src/components/ViewerNavigation.js
index b03a6946a807e1fccff31c1ee96e5b52a62b5e4e..0253cefa5278df9db46b91480be5dac6c12362e2 100644
--- a/src/components/ViewerNavigation.js
+++ b/src/components/ViewerNavigation.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import NavigationIcon from '@material-ui/icons/PlayCircleOutlineSharp';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
diff --git a/src/components/Window.js b/src/components/Window.js
index 30462d2e7ed84326a6f4687e16cb9043c0e9abf2..6033c76919ba2e2364984d351fa2267eb4d93447 100644
--- a/src/components/Window.js
+++ b/src/components/Window.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import cn from 'classnames';
 import Paper from '@material-ui/core/Paper';
diff --git a/src/components/WindowAuthenticationBar.js b/src/components/WindowAuthenticationBar.js
index 97a54f87d5cc697d02671cecc15db57ac471ea2b..bbfbd5a5388cc7889297364298b394c23edcdb96 100644
--- a/src/components/WindowAuthenticationBar.js
+++ b/src/components/WindowAuthenticationBar.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Button from '@material-ui/core/Button';
 import Paper from '@material-ui/core/Paper';
diff --git a/src/components/WindowCanvasNavigationControls.js b/src/components/WindowCanvasNavigationControls.js
index 39e662db8bdb6631310e56a53c29f72b641db976..eaee4dc152d82477faf268ccb1f636010fda3647 100644
--- a/src/components/WindowCanvasNavigationControls.js
+++ b/src/components/WindowCanvasNavigationControls.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
 import Paper from '@material-ui/core/Paper';
diff --git a/src/components/WindowList.js b/src/components/WindowList.js
index 5e45ad0378c2ab27ed55d004a1cbe9cd551100fd..6b3adfcb9a6d88ee4b4761c4622732b8626c1300 100644
--- a/src/components/WindowList.js
+++ b/src/components/WindowList.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import Menu from '@material-ui/core/Menu';
 import MenuItem from '@material-ui/core/MenuItem';
 import ListItemText from '@material-ui/core/ListItemText';
diff --git a/src/components/WindowListButton.js b/src/components/WindowListButton.js
index 7baa53f1b8fef69ff012508a4fcac59efee5ba78..68a9bd2ac974089ddfb88609ab29b27bb4cf5954 100644
--- a/src/components/WindowListButton.js
+++ b/src/components/WindowListButton.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import BookmarksIcon from '@material-ui/icons/BookmarksSharp';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
diff --git a/src/components/WindowSideBar.js b/src/components/WindowSideBar.js
index eaeceaae43ea026917d68940037e207b4070d639..c6fbc6ef3f75ecd493fc2a36b9df35fe234539f6 100644
--- a/src/components/WindowSideBar.js
+++ b/src/components/WindowSideBar.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
 import Drawer from '@material-ui/core/Drawer';
diff --git a/src/components/WindowSideBarAnnotationsPanel.js b/src/components/WindowSideBarAnnotationsPanel.js
index f5a13189296267a8fb9aa9acb0b6b43cf41ed87f..f5182e6443dcfc8430aba05f808200e6ac83f25b 100644
--- a/src/components/WindowSideBarAnnotationsPanel.js
+++ b/src/components/WindowSideBarAnnotationsPanel.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { createRef, Component } from 'react';
 import PropTypes from 'prop-types';
 import Typography from '@material-ui/core/Typography';
 import AnnotationSettings from '../containers/AnnotationSettings';
@@ -14,7 +14,7 @@ export class WindowSideBarAnnotationsPanel extends Component {
   constructor(props) {
     super(props);
 
-    this.containerRef = React.createRef();
+    this.containerRef = createRef();
   }
 
   /**
diff --git a/src/components/WindowSideBarButtons.js b/src/components/WindowSideBarButtons.js
index fd4c717f3f8c1762c2312d14137ef48969e6d07f..edff59c2eeaa234ef6937b4dc7838c567a12ef81 100644
--- a/src/components/WindowSideBarButtons.js
+++ b/src/components/WindowSideBarButtons.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Badge from '@material-ui/core/Badge';
 import Tabs from '@material-ui/core/Tabs';
diff --git a/src/components/WindowSideBarCanvasPanel.js b/src/components/WindowSideBarCanvasPanel.js
index 9d4e988f7958801e75972ce91316c9807a328986..948fd4408336db7d2377342450229b2ac77638d4 100644
--- a/src/components/WindowSideBarCanvasPanel.js
+++ b/src/components/WindowSideBarCanvasPanel.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { createRef, Component } from 'react';
 import PropTypes from 'prop-types';
 import Tabs from '@material-ui/core/Tabs';
 import Tab from '@material-ui/core/Tab';
@@ -26,7 +26,7 @@ export class WindowSideBarCanvasPanel extends Component {
     this.handleSequenceChange = this.handleSequenceChange.bind(this);
     this.handleVariantChange = this.handleVariantChange.bind(this);
 
-    this.containerRef = React.createRef();
+    this.containerRef = createRef();
   }
 
   /** */
diff --git a/src/components/WindowSideBarCollectionPanel.js b/src/components/WindowSideBarCollectionPanel.js
index cf58cccfff8665ac17d55ffeb400e1e84e9d2c45..a6964ca77705542d3092fabc33881113f91abad8 100644
--- a/src/components/WindowSideBarCollectionPanel.js
+++ b/src/components/WindowSideBarCollectionPanel.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import List from '@material-ui/core/List';
 import ListItem from '@material-ui/core/ListItem';
diff --git a/src/components/WindowSideBarInfoPanel.js b/src/components/WindowSideBarInfoPanel.js
index 8136fc66abd662197443db92568866885a0e5305..e2931f70e34426beac5cb635019dff157a79f99e 100644
--- a/src/components/WindowSideBarInfoPanel.js
+++ b/src/components/WindowSideBarInfoPanel.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import CompanionWindow from '../containers/CompanionWindow';
 import CanvasInfo from '../containers/CanvasInfo';
diff --git a/src/components/WindowThumbnailSettings.js b/src/components/WindowThumbnailSettings.js
index 9db790fc928175d67d8e54c8e3cbc717c973b7da..22b7eb57db316222e7a93a9e18b8301d138e7fb3 100644
--- a/src/components/WindowThumbnailSettings.js
+++ b/src/components/WindowThumbnailSettings.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import FormControlLabel from '@material-ui/core/FormControlLabel';
 import ListSubheader from '@material-ui/core/ListSubheader';
 import MenuItem from '@material-ui/core/MenuItem';
diff --git a/src/components/WindowTopBar.js b/src/components/WindowTopBar.js
index 6bb4cbd62a000c07d36111f73187635390854de3..31795b9b9ce376ba27fc3a21c2d87a7bd6d50479 100644
--- a/src/components/WindowTopBar.js
+++ b/src/components/WindowTopBar.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import MenuIcon from '@material-ui/icons/MenuSharp';
 import CloseIcon from '@material-ui/icons/CloseSharp';
diff --git a/src/components/WindowTopBarPluginArea.js b/src/components/WindowTopBarPluginArea.js
index 63e32ac03e89f14dcb7895c4e7167c3ba5d4d8ad..f70e21e7e0278f32833ee24bbbe81c3eee12c5c6 100644
--- a/src/components/WindowTopBarPluginArea.js
+++ b/src/components/WindowTopBarPluginArea.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import { PluginHook } from './PluginHook';
 
 /**
diff --git a/src/components/WindowTopBarPluginMenu.js b/src/components/WindowTopBarPluginMenu.js
index f19331c035f682de00e35ff64a8b22c83bd959f8..a44ddf9d155ae364ee60bf17f0eda41c92fc62cc 100644
--- a/src/components/WindowTopBarPluginMenu.js
+++ b/src/components/WindowTopBarPluginMenu.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import MoreVertIcon from '@material-ui/icons/MoreVertSharp';
 import Menu from '@material-ui/core/Menu';
diff --git a/src/components/WindowTopBarTitle.js b/src/components/WindowTopBarTitle.js
index bc2c466825e0ac0fd1d2d46258f6285fe20eb815..b47f00c2c2e03433cf198724553503e38fecb5ec 100644
--- a/src/components/WindowTopBarTitle.js
+++ b/src/components/WindowTopBarTitle.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Typography from '@material-ui/core/Typography';
 import Skeleton from '@material-ui/lab/Skeleton';
diff --git a/src/components/WindowTopMenu.js b/src/components/WindowTopMenu.js
index 6148f94d24085780611b2ddf1e8373740104cf24..99e89f0d2138a48268d2cd35af89ea7076335fd1 100644
--- a/src/components/WindowTopMenu.js
+++ b/src/components/WindowTopMenu.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import Menu from '@material-ui/core//Menu';
 import ListSubheader from '@material-ui/core/ListSubheader';
 import PropTypes from 'prop-types';
diff --git a/src/components/WindowTopMenuButton.js b/src/components/WindowTopMenuButton.js
index 1ff393ae74fe8155127a8495eb3f6b0b9f87e6e9..8fee77043e56336a5ce4a92a005b52972593f0b5 100644
--- a/src/components/WindowTopMenuButton.js
+++ b/src/components/WindowTopMenuButton.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import WindowTopMenu from '../containers/WindowTopMenu';
 import MiradorMenuButton from '../containers/MiradorMenuButton';
diff --git a/src/components/WindowViewSettings.js b/src/components/WindowViewSettings.js
index 547656f0610058bea917d1af551108aa614dc25d..90c56b823269cf733b54c88132b4cb732467883e 100644
--- a/src/components/WindowViewSettings.js
+++ b/src/components/WindowViewSettings.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import FormControlLabel from '@material-ui/core/FormControlLabel';
 import MenuItem from '@material-ui/core/MenuItem';
 import ListSubheader from '@material-ui/core/ListSubheader';
diff --git a/src/components/WindowViewer.js b/src/components/WindowViewer.js
index 91257b42a43f02891218dcce4cb7b68c89c001ff..c099945b7d717dc87f49610d35183503b189de88 100644
--- a/src/components/WindowViewer.js
+++ b/src/components/WindowViewer.js
@@ -1,4 +1,4 @@
-import React, { Component, lazy, Suspense } from 'react';
+import { Component, lazy, Suspense } from 'react';
 import PropTypes from 'prop-types';
 import WindowCanvasNavigationControls from '../containers/WindowCanvasNavigationControls';
 
diff --git a/src/components/Workspace.js b/src/components/Workspace.js
index 951b23539a3369c7508b812d961bf1348cee3963..f99f61d4e4351078b811d874dba828aca7d7ad6f 100644
--- a/src/components/Workspace.js
+++ b/src/components/Workspace.js
@@ -1,4 +1,4 @@
-import React from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
 import Grid from '@material-ui/core/Grid';
@@ -14,7 +14,7 @@ import { IIIFDropTarget } from './IIIFDropTarget';
  * @memberof Workspace
  * @private
  */
-export class Workspace extends React.Component {
+export class Workspace extends Component {
   /** */
   constructor(props) {
     super(props);
diff --git a/src/components/WorkspaceAdd.js b/src/components/WorkspaceAdd.js
index f1676e47a9ebe1116ae7dbf23cce29538ba3b7d2..172c8d3474970c769e39084dbde0bad3b43c846f 100644
--- a/src/components/WorkspaceAdd.js
+++ b/src/components/WorkspaceAdd.js
@@ -1,4 +1,4 @@
-import React from 'react';
+import { createRef, Component } from 'react';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
 import AddIcon from '@material-ui/icons/AddSharp';
@@ -23,13 +23,13 @@ import { PluginHook } from './PluginHook';
  * @memberof Workspace
  * @private
  */
-export class WorkspaceAdd extends React.Component {
+export class WorkspaceAdd extends Component {
   /** */
   constructor(props) {
     super(props);
 
     this.state = { addResourcesOpen: false };
-    this.ref = React.createRef();
+    this.ref = createRef();
 
     this.onSubmit = this.onSubmit.bind(this);
     this.setAddResourcesVisibility = this.setAddResourcesVisibility.bind(this);
diff --git a/src/components/WorkspaceAddButton.js b/src/components/WorkspaceAddButton.js
index e3fdeb2f7ac8e088ae5cf53f9592f5f012fa7bb6..b80ec8136911b0e8a34a16b74ab6c748de3ce6f2 100644
--- a/src/components/WorkspaceAddButton.js
+++ b/src/components/WorkspaceAddButton.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import Fab from '@material-ui/core/Fab';
 import Tooltip from '@material-ui/core/Tooltip';
diff --git a/src/components/WorkspaceArea.js b/src/components/WorkspaceArea.js
index 3203d39d903c98037294cabfedab8dc11d047920..9650158cb7cf49d9a386ceba2bc3fa8fea4f0cb9 100644
--- a/src/components/WorkspaceArea.js
+++ b/src/components/WorkspaceArea.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
 import ErrorDialog from '../containers/ErrorDialog';
diff --git a/src/components/WorkspaceControlPanel.js b/src/components/WorkspaceControlPanel.js
index de849c8fb72e11fbc5c7fe0ec8e51996e684c35e..f6703ff883a55a904ffe2842f477f400cdb57f19 100644
--- a/src/components/WorkspaceControlPanel.js
+++ b/src/components/WorkspaceControlPanel.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
 import AppBar from '@material-ui/core/AppBar';
diff --git a/src/components/WorkspaceControlPanelButtons.js b/src/components/WorkspaceControlPanelButtons.js
index cc0fdb2ab91bda30b85da5763564b7a0cc896fc3..b07adfc54298955b08cbfc1ffd60299bbad125f9 100644
--- a/src/components/WorkspaceControlPanelButtons.js
+++ b/src/components/WorkspaceControlPanelButtons.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import FullScreenButton from '../containers/FullScreenButton';
 import WorkspaceMenuButton from '../containers/WorkspaceMenuButton';
diff --git a/src/components/WorkspaceElastic.js b/src/components/WorkspaceElastic.js
index 263b48d1a708cf5eae1fdcbafa772aa08d15a1a1..a79219ac1ba1697359168476f0ea816acb9ebee2 100644
--- a/src/components/WorkspaceElastic.js
+++ b/src/components/WorkspaceElastic.js
@@ -1,4 +1,4 @@
-import React from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import { Rnd } from 'react-rnd';
 import ResizeObserver from 'react-resize-observer';
@@ -11,7 +11,7 @@ import ns from '../config/css-ns';
  * @memberof Workspace
  * @private
  */
-class WorkspaceElastic extends React.Component {
+class WorkspaceElastic extends Component {
   /**
    */
   render() {
diff --git a/src/components/WorkspaceElasticWindow.js b/src/components/WorkspaceElasticWindow.js
index afe006ebc8ca7642f15c95194e39d24b12244e78..169b5d5fde9422f9160ceac401d7f6fa844b7f9e 100644
--- a/src/components/WorkspaceElasticWindow.js
+++ b/src/components/WorkspaceElasticWindow.js
@@ -1,4 +1,4 @@
-import React from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import { Rnd } from 'react-rnd';
 import Window from '../containers/Window';
@@ -9,7 +9,7 @@ import ns from '../config/css-ns';
  * @memberof Workspace
  * @private
  */
-class WorkspaceElasticWindow extends React.Component {
+class WorkspaceElasticWindow extends Component {
   /**
    */
   render() {
diff --git a/src/components/WorkspaceExport.js b/src/components/WorkspaceExport.js
index 2a7ff7e0ce6a882742e5ee6ecb10ac30466d52ae..0ee2f72a822ea38692cc2b0d681854dee05b696a 100644
--- a/src/components/WorkspaceExport.js
+++ b/src/components/WorkspaceExport.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import Button from '@material-ui/core/Button';
 import Dialog from '@material-ui/core/Dialog';
 import DialogActions from '@material-ui/core/DialogActions';
diff --git a/src/components/WorkspaceImport.js b/src/components/WorkspaceImport.js
index 4a19c42f448cce4f71e4e8680096f2e5499d750b..7adf4838d5137f93a7f81e1c823dfaa685aa384a 100644
--- a/src/components/WorkspaceImport.js
+++ b/src/components/WorkspaceImport.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import Dialog from '@material-ui/core/Dialog';
 import DialogTitle from '@material-ui/core/DialogTitle';
 import PropTypes from 'prop-types';
diff --git a/src/components/WorkspaceMenu.js b/src/components/WorkspaceMenu.js
index 0d526491c3394279702547b5db79fd2fba0914e7..4bc9963f964c10b60ce383718d34c7330b63eada 100644
--- a/src/components/WorkspaceMenu.js
+++ b/src/components/WorkspaceMenu.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import Menu from '@material-ui/core/Menu';
 import MenuItem from '@material-ui/core/MenuItem';
 import Typography from '@material-ui/core/Typography';
diff --git a/src/components/WorkspaceMenuButton.js b/src/components/WorkspaceMenuButton.js
index 327a50ffdda63606fc1f1184a1790a56f2dd5cb4..b1e4fe3dcd84df88eef085eb5f59cf066fdca3c5 100644
--- a/src/components/WorkspaceMenuButton.js
+++ b/src/components/WorkspaceMenuButton.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import SettingsIcon from '@material-ui/icons/SettingsSharp';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
diff --git a/src/components/WorkspaceMosaic.js b/src/components/WorkspaceMosaic.js
index 275ac7952364c658683ce2471307fb26a90af54b..620a8f6015b4356cab42fbf76df151347f8a5668 100644
--- a/src/components/WorkspaceMosaic.js
+++ b/src/components/WorkspaceMosaic.js
@@ -1,4 +1,4 @@
-import React from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import {
   MosaicWithoutDragDropContext, MosaicWindow, getLeaves, createBalancedTreeFromLeaves,
@@ -15,7 +15,7 @@ import MosaicLayout from '../lib/MosaicLayout';
  * @memberof Workspace
  * @private
  */
-export class WorkspaceMosaic extends React.Component {
+export class WorkspaceMosaic extends Component {
   /**
    */
   constructor(props) {
diff --git a/src/components/WorkspaceOptionsButton.js b/src/components/WorkspaceOptionsButton.js
index 302de5f3884844cfeac911498c2426bce451b060..f82691e4304faa3d1d2c6ec4b725578d57c8a5bd 100644
--- a/src/components/WorkspaceOptionsButton.js
+++ b/src/components/WorkspaceOptionsButton.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
 import MoreHorizontalIcon from '@material-ui/icons/MoreHorizSharp';
diff --git a/src/components/WorkspaceOptionsMenu.js b/src/components/WorkspaceOptionsMenu.js
index cba05a3fca3ae8a3e6244e1a3abc9f78b02f4e6a..bcd482d1e4030aafc91281997538695eeded6f56 100644
--- a/src/components/WorkspaceOptionsMenu.js
+++ b/src/components/WorkspaceOptionsMenu.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import PropTypes from 'prop-types';
 import ImportIcon from '@material-ui/icons/Input';
 import SaveAltIcon from '@material-ui/icons/SaveAltSharp';
diff --git a/src/components/WorkspaceSelectionDialog.js b/src/components/WorkspaceSelectionDialog.js
index e0cb679109a0d0dd73069510deaea38e0b3ad871..839c227efe396c1fde096e045a6e6e2528d8acd8 100644
--- a/src/components/WorkspaceSelectionDialog.js
+++ b/src/components/WorkspaceSelectionDialog.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import Dialog from '@material-ui/core/Dialog';
 import DialogTitle from '@material-ui/core/DialogTitle';
 import {
diff --git a/src/components/ZoomControls.js b/src/components/ZoomControls.js
index 566cc19394b5410589e2944e3fa0b89adb76d4a4..133c9950a8d8facc4598ac95c74a034d4e1d1e7a 100644
--- a/src/components/ZoomControls.js
+++ b/src/components/ZoomControls.js
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import { Component } from 'react';
 import AddCircleIcon from '@material-ui/icons/AddCircleOutlineSharp';
 import RemoveCircleIcon from '@material-ui/icons/RemoveCircleOutlineSharp';
 import PropTypes from 'prop-types';
diff --git a/src/components/icons/BookViewIcon.js b/src/components/icons/BookViewIcon.js
index 3d38ba9340d189c14143d14f33282f29cbb7f8af..a6668b1f30dd3f2334232b6a78defa451bf7e982 100644
--- a/src/components/icons/BookViewIcon.js
+++ b/src/components/icons/BookViewIcon.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import SvgIcon from '@material-ui/core/SvgIcon';
 
 /**
diff --git a/src/components/icons/CanvasIndexIcon.js b/src/components/icons/CanvasIndexIcon.js
index c977716bdf8b851df486c75d57d4ab66c1678054..8d5af98b10ffc6d5a8b644a75b88260ccf3ef5af 100644
--- a/src/components/icons/CanvasIndexIcon.js
+++ b/src/components/icons/CanvasIndexIcon.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import SvgIcon from '@material-ui/core/SvgIcon';
 
 /**
diff --git a/src/components/icons/GalleryViewIcon.js b/src/components/icons/GalleryViewIcon.js
index 5caa1d5d2f574d072b31ba309d503bb2ab078a7a..9a410033404f1fb35a6260eae3892bb9f91f8d11 100644
--- a/src/components/icons/GalleryViewIcon.js
+++ b/src/components/icons/GalleryViewIcon.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import SvgIcon from '@material-ui/core/SvgIcon';
 
 /**
diff --git a/src/components/icons/MiradorIcon.js b/src/components/icons/MiradorIcon.js
index 1c70c3475db81d1c9484375f015afca6cbc819ea..920256dd9bf3c856729973c4343eff41265b0d60 100644
--- a/src/components/icons/MiradorIcon.js
+++ b/src/components/icons/MiradorIcon.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import SvgIcon from '@material-ui/core/SvgIcon';
 
 /**
diff --git a/src/components/icons/RestoreZoomIcon.js b/src/components/icons/RestoreZoomIcon.js
index a9c6ba4a37335b396b06674701c426e4494a98c1..2005e6e89c5b61f851bcf398014e26581008eb7e 100644
--- a/src/components/icons/RestoreZoomIcon.js
+++ b/src/components/icons/RestoreZoomIcon.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import SvgIcon from '@material-ui/core/SvgIcon';
 
 /**
diff --git a/src/components/icons/ThumbnailNavigationBottomIcon.js b/src/components/icons/ThumbnailNavigationBottomIcon.js
index 012b801ec9dd239ac632d8ef78ba03b78a290481..5c7080a787b68f4431e3f5b31b73d9996a859eb3 100644
--- a/src/components/icons/ThumbnailNavigationBottomIcon.js
+++ b/src/components/icons/ThumbnailNavigationBottomIcon.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import SvgIcon from '@material-ui/core/SvgIcon';
 
 /**
diff --git a/src/components/icons/ThumbnailNavigationRightIcon.js b/src/components/icons/ThumbnailNavigationRightIcon.js
index 707ea32364d4835681553144ac87193809a9f9c0..8f22b31d00ac81fffb763d4fc82e49c2eedc1ae6 100644
--- a/src/components/icons/ThumbnailNavigationRightIcon.js
+++ b/src/components/icons/ThumbnailNavigationRightIcon.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import SvgIcon from '@material-ui/core/SvgIcon';
 
 /**
diff --git a/src/components/icons/WindowMaxIcon.js b/src/components/icons/WindowMaxIcon.js
index 4e7239cf554cb980f5c1a75590bbcdfd401c46f4..9590bbb180d5ac1bbb1b322dfadc7960604efb70 100644
--- a/src/components/icons/WindowMaxIcon.js
+++ b/src/components/icons/WindowMaxIcon.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import SvgIcon from '@material-ui/core/SvgIcon';
 
 /**
diff --git a/src/components/icons/WindowMinIcon.js b/src/components/icons/WindowMinIcon.js
index f441b602e6869d85c731054fafe3b4e0b2dbc46d..7a2ef3be9ca1ec7ffd926f0b5edad8f8b66b247c 100644
--- a/src/components/icons/WindowMinIcon.js
+++ b/src/components/icons/WindowMinIcon.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import SvgIcon from '@material-ui/core/SvgIcon';
 
 /**
diff --git a/src/components/icons/WindowOptionsIcon.js b/src/components/icons/WindowOptionsIcon.js
index 7b55ad378a1fc1f12c4edff24ab5d72f82d2fd00..3e365c29307ee2d02b5970e4a4253f84caa5f657 100644
--- a/src/components/icons/WindowOptionsIcon.js
+++ b/src/components/icons/WindowOptionsIcon.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import SvgIcon from '@material-ui/core/SvgIcon';
 
 /**
diff --git a/src/components/icons/WorkspaceTypeElasticIcon.js b/src/components/icons/WorkspaceTypeElasticIcon.js
index 64428c37c0e0c60cf4f86cee9148d8230408a2c2..c817330897909d6a7daafa8fbb88d29074187a48 100644
--- a/src/components/icons/WorkspaceTypeElasticIcon.js
+++ b/src/components/icons/WorkspaceTypeElasticIcon.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import SvgIcon from '@material-ui/core/SvgIcon';
 
 /**
diff --git a/src/components/icons/WorkspaceTypeMosaicIcon.js b/src/components/icons/WorkspaceTypeMosaicIcon.js
index 529426e4c0dca302c3677480099bca4759beaa7a..5cdb0c34a10bed5204c03410330c7439bf0894ee 100644
--- a/src/components/icons/WorkspaceTypeMosaicIcon.js
+++ b/src/components/icons/WorkspaceTypeMosaicIcon.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import SvgIcon from '@material-ui/core/SvgIcon';
 
 /**
diff --git a/src/extend/PluginContext.js b/src/extend/PluginContext.js
index 1c138010ea836aae74d08404f28147afcd70bbed..954daf425c15e54497397fbc35ff39b65ffd0991 100644
--- a/src/extend/PluginContext.js
+++ b/src/extend/PluginContext.js
@@ -1,5 +1,5 @@
-import React from 'react';
+import { createContext } from 'react';
 
-const PluginContext = React.createContext();
+const PluginContext = createContext();
 
 export default PluginContext;
diff --git a/src/extend/PluginProvider.js b/src/extend/PluginProvider.js
index 784191184315d514b59b25a64e23bd1897bc9f1b..b840bcf3ccae4084ff66b62e589730ec0b0b8be6 100644
--- a/src/extend/PluginProvider.js
+++ b/src/extend/PluginProvider.js
@@ -1,4 +1,4 @@
-import React, { useEffect, useState } from 'react';
+import { useEffect, useState } from 'react';
 import PropTypes from 'prop-types';
 import PluginContext from './PluginContext';
 import {
diff --git a/src/extend/withPlugins.js b/src/extend/withPlugins.js
index 11320b1b737d222e4aa96ea20edec79de2cf50a9..9de3a699bc90572d205449aac397cdb38bad23a4 100644
--- a/src/extend/withPlugins.js
+++ b/src/extend/withPlugins.js
@@ -1,4 +1,4 @@
-import React, { useContext } from 'react';
+import { forwardRef, useContext } from 'react';
 import curry from 'lodash/curry';
 import isEmpty from 'lodash/isEmpty';
 import PluginContext from './PluginContext';
@@ -46,7 +46,7 @@ function _withPlugins(targetName, TargetComponent) { // eslint-disable-line no-u
     return plugins.wrap.slice().reverse()
       .reduce(pluginWrapper, <TargetComponent {...passDownProps} />);
   }
-  const whatever = React.forwardRef(PluginHoc);
+  const whatever = forwardRef(PluginHoc);
 
   whatever.displayName = `WithPlugins(${targetName})`;
   return whatever;
diff --git a/src/extend/withRef.js b/src/extend/withRef.js
index 7e1bc667b10a8c7eac3abb37c1ef4b08f2a6d54c..3048a34bf59d2e5d87ceb7000f36dd9fbcda0e67 100644
--- a/src/extend/withRef.js
+++ b/src/extend/withRef.js
@@ -1,4 +1,4 @@
-import React, { forwardRef } from 'react';
+import { forwardRef } from 'react';
 
 /** */
 export const withRef = () => (Component) => {
diff --git a/src/lib/MiradorViewer.js b/src/lib/MiradorViewer.js
index cd825870d784d8f94c418f620a51c7be3c83836c..c6fcf583e23f75e07bb8c9c6feac892c15973f13 100644
--- a/src/lib/MiradorViewer.js
+++ b/src/lib/MiradorViewer.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import ReactDOM from 'react-dom';
 import { Provider } from 'react-redux';
 import HotApp from '../components/App';
diff --git a/webpack.config.js b/webpack.config.js
index 8c4e2eaf0637d3348b43251a47cd32f59d0fe097..d33c34832911432a1ca12909d7f55ea8e0cb84db 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -48,6 +48,8 @@ const baseConfig = mode => ({
     alias: {
       // needs shared global state for context to work
       'react-dnd': path.resolve(path.join(__dirname, 'node_modules', 'react-dnd')),
+      'react/jsx-dev-runtime': 'react/jsx-dev-runtime.js',
+      'react/jsx-runtime': 'react/jsx-runtime.js',
     },
     extensions: ['.js'],
   },