diff --git a/README.md b/README.md
index de6f9d59..ca85bfa1 100644
--- a/README.md
+++ b/README.md
@@ -1,56 +1,60 @@
 # Islandora FITS
 Config module to make Islandora aware of FITS microservice
 
-
-
 ## Installation
 #### Install this module
-Install and enable this module in the usual way.  On installation the module will 
-add a context causing the creation of A FITs media when an Original File media is ingested.
-
+Install and enable this module in the usual way.  On installation the module will
+add a context causing the creation of A FITS media when an Original File media is ingested; however, this process is
+predicated on the existence of an `islandora_media_use` term with an external URI of `https://projects.iq.harvard.
+edu/fits`--the `islandora_fits_tags` migration might be executed to create such a term.
 
 #### Install FITS Webservice
-FITS xmls are generated from an easily installed web service.  
+FITS XMLs are generated from an easily installed web service.
 Get the latest fits.zip and fits.war from https://projects.iq.harvard.edu/fits/downloads
-(on my box I had to install a missing zip library with 
+(on my box I had to install a missing zip library with
 ‘sudo apt-get install php7.1-zip’)
 
 Install following their instructions.
-Copy the .war file to your webapps directory  and test.
-Edit the catalina.properties file on the Drupal server by adding the 
-following two lines to the bottom of the file-
+Copy the `.war` file to your webapps directory and test.
+Edit the `catalina.properties` file on the Drupal server by adding the
+following two lines to the bottom of the file:
 
+```properties
 fits.home=/\<path-to-fits>/fits
-
 shared.loader=/\<path-to-fits>/fits/lib/*.jar
+```
 
-Restart Tomcat and test with 
-
-`curl -k -F datafile="@/path/to/myfile.jpg" http://example.com:8080/fits/examine`
+Restart Tomcat and test with:
+```bash
+curl -k -F datafile="@/path/to/myfile.jpg" http://example.com:8080/fits/examine
+```
 (note: the ‘@’ is required.)
 
-#### Installing Microservice 
-Get code from https://github.com/roblib/CrayFits and install.  This code can live anywhere, including an external server, 
-but most installations will have it at /var/www/html.
-
-The App runs by entering php bin/console server:start *:8050 in the App 
-root folder.
-The server is stopped with php bin/console server:stop.  
-On a production machine you'd probably want to configure an additional 
+#### Installing Microservice
+Get code from https://github.com/roblib/CrayFits and install.  This code can live anywhere, including an external server,
+but most installations will have it at `/var/www/html`.
+
+The App runs by entering:
+```bash
+php bin/console server:start *:8050
+```
+in the App root folder.
+The server is stopped with:
+```bash
+php bin/console server:stop
+```
+On a production machine you'd probably want to configure an additional
 port in Apache.
 
-
-Note: The location of the fits webserver is stored in the .env file in the 
-root dir of the Symfony app.  This will have to be reconfigured if the Fits 
-server is anywhere other than localhost:8080/fits
-
+Note: The location of the FITS webserver is stored in the `.env` file in the
+root dir of the Symfony app.  This will have to be reconfigured if the FITS
+server is anywhere other than `localhost:8080/fits`
 
 #### Adding FITs requests to the queue
-Copy the file `assets/ca.islandora.alpaca.connector.ocr.blueprint.xml` 
+Copy the file `assets/ca.islandora.alpaca.connector.ocr.blueprint.xml`
 to `/opt/karak/deploy` on your server.  There is no need to restart.
 
-
 #### Adding Checksum to Display
-A pseudo field with the computed checksum can be added to Repository Item 
-display.  Navigate to `admin/structure/types/manage/islandora_object/display` 
-to enable or disable display of `File Checksum`.  
+A pseudo field with the computed checksum can be added to Repository Item
+display.  Navigate to `admin/structure/types/manage/islandora_object/display`
+to enable or disable display of `File Checksum`.
diff --git a/islandora_fits.install b/islandora_fits.install
index 7034b281..9e0da0b7 100644
--- a/islandora_fits.install
+++ b/islandora_fits.install
@@ -6,25 +6,22 @@
  */
 
 
-
-use Drupal\taxonomy\Entity\Term;
 use Drupal\field\Entity\FieldConfig;
 
 /**
  * Implements hook_install().
  */
-function islandora_fits_install() {
-  $term_name = 'FITS File';
-  $test_terms = taxonomy_term_load_multiple_by_name($term_name);
-  if (!$test_terms) {
-    $term = Term::create([
-      'parent' => [],
-      'name' => $term_name,
-      'vid' => 'islandora_media_use',
-      'description' => 'Technical Metadata associated with an original media file',
-      'field_external_uri' => ['uri' => 'https://projects.iq.harvard.edu/fits'],
-    ])->save();
+function islandora_fits_install($is_syncing) {
+
+  if (!_islandora_fits_term_exists()) {
+    $callable = $is_syncing ? [\Drupal::messenger(), 'addStatus'] : [\Drupal::messenger(), 'addWarning'];
+    $callable(t('A term in the taxonomy @vid with the URI @uri does not appear to exist. The @migration_id migration can be executed to create it.', [
+      '@vid' => 'islandora_media_use',
+      '@uri' => 'https://projects.iq.harvard.edu/fits',
+      '@migration_id' => 'islandora_fits_tags',
+    ]));
   }
+
   // Add xml extension if it doesn't already exist.
   $field = FieldConfig::load("media.file.field_media_file");
   if ($field) {
@@ -37,3 +34,47 @@ function islandora_fits_install() {
     }
   }
 }
+
+/**
+ * Implements hook_requirements().
+ */
+function islandora_fits_requirements($phase) : array {
+  $requirements = [];
+
+  if ($phase == 'runtime') {
+    $term_exists = _islandora_fits_term_exists();
+    $requirements['islandora_fits_term_exists'] = [
+      'title' => t('FITS Term Exists'),
+      'value' => $term_exists ? t('Exists') : t('Does not exist'),
+      'description' => t('Whether or not a term with the URI targeted by default FITS derivative configuration exists. If derivative configurations were made to target another URI, this can probably be ignored.'),
+      'severity' => $term_exists ? REQUIREMENT_OK : REQUIREMENT_WARNING
+    ];
+  }
+
+  return $requirements;
+}
+
+/**
+ * Helper; determine if a term with the target URI exists.
+ *
+ * @return bool
+ *   TRUE if a term (at least one) with the target URI exists; otherwise, FALSE.
+ *
+ * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
+ * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
+ */
+function _islandora_fits_term_exists() {
+  $table_exists = \Drupal::database()->schema()->tableExists('taxonomy_term__field_external_uri');
+  if (!$table_exists) {
+    // XXX: If the table does not exist, then avoid attempting to make a query
+    // making use of the non-existent table.
+    return FALSE;
+  }
+
+  $query = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->getQuery()
+    ->condition('vid', 'islandora_media_use')
+    ->condition('field_external_uri.uri', 'https://projects.iq.harvard.edu/fits')
+    ->count();
+  $count = $query->execute();
+  return $count > 0;
+}
diff --git a/migrations/islandora_fits_tags.yml b/migrations/islandora_fits_tags.yml
new file mode 100644
index 00000000..2ab2c5f0
--- /dev/null
+++ b/migrations/islandora_fits_tags.yml
@@ -0,0 +1,25 @@
+---
+id: islandora_fits_tags
+migration_tags:
+  - islandora
+migration_group: islandora
+label: "FITS Term(s)"
+source:
+  plugin: embedded_data
+  data_rows:
+    - vid: islandora_media_use
+      name: FITS File
+      description: Technical Metadata associated with an original media file
+      uri: https://projects.iq.harvard.edu/fits
+  ids:
+    uri:
+      type: string
+process:
+  vid: vid
+  name: name
+  description: description
+  field_external_uri/uri: uri
+destination:
+  plugin: entity:taxonomy_term
+migration_dependencies:
+  required: { }