diff --git a/crossword.post_update.php b/crossword.post_update.php
index 76bc1a8..c6d91bf 100644
--- a/crossword.post_update.php
+++ b/crossword.post_update.php
@@ -28,9 +28,9 @@ use Drupal\Core\Entity\Display\EntityDisplayInterface;
 /**
  * Install submodules if using certain field formatters.
  */
-function crossword_post_update_musical_formatters_step_1(&$sandbox){
+function crossword_post_update_musical_formatters_step_1(&$sandbox) {
   $config_entity_updater = \Drupal::classResolver(ConfigEntityUpdater::class);
-  $formatter_callback = function (EntityDisplayInterface $display){
+  $formatter_callback = function (EntityDisplayInterface $display) {
     $needs_save = FALSE;
     foreach ($display->getComponents() as $field_name => $component) {
       if (isset($component['type'])) {
@@ -38,6 +38,7 @@ function crossword_post_update_musical_formatters_step_1(&$sandbox){
           case 'crossword_pseudofield':
             \Drupal::service('module_installer')->install(['crossword_pseudofields']);
             break;
+
           case 'crossword_thumbnail':
             \Drupal::service('module_installer')->install(['crossword_image']);
             break;
@@ -54,13 +55,13 @@ function crossword_post_update_musical_formatters_step_1(&$sandbox){
 /**
  * Update formatters to account for removals and new submodules.
  */
-function crossword_post_update_musical_formatters_step_2(&$sandbox){
+function crossword_post_update_musical_formatters_step_2(&$sandbox) {
   $config_entity_updater = \Drupal::classResolver(ConfigEntityUpdater::class);
   /** @var \Drupal\Core\Field\FormatterPluginManager $field_formatter_manager */
   $field_formatter_manager = \Drupal::service('plugin.manager.field.formatter');
   $field_formatter_manager->clearCachedDefinitions();
 
-  $formatter_callback = function (EntityDisplayInterface $display){
+  $formatter_callback = function (EntityDisplayInterface $display) {
     $needs_save = FALSE;
     foreach ($display->getComponents() as $field_name => $component) {
       if (isset($component['type'])) {
@@ -72,6 +73,7 @@ function crossword_post_update_musical_formatters_step_2(&$sandbox){
             \Drupal::messenger()->addWarning('Possible breaking change: Crossword Puzzle (Book) formatter changed to Crossword Puzzle Formatter. Please inspect your site for resulting changes.');
             \Drupal::logger('crossword')->warning('Possible breaking change: Crossword Puzzle (Book) formatter changed to Crossword Puzzle Formatter. Please inspect your site for resulting changes.');
             break;
+
           case 'crossword_file_download_link':
           case 'crossword_image_download':
             $component['type'] = 'file_default_crossword';
@@ -80,11 +82,13 @@ function crossword_post_update_musical_formatters_step_2(&$sandbox){
             \Drupal::logger('crossword')->warning("Possible breaking change: Instance of File Download Link or Crossword Image (download) converted to Generic File formatter. Please inspect your site for resulting changes.");
             $needs_save = TRUE;
             break;
+
           case 'crossword_pseudofield':
             $component['type'] = 'crossword_pseudofields';
             $display->setComponent($field_name, $component);
             $needs_save = TRUE;
             break;
+
           case 'crossword_thumbnail':
             $component['type'] = 'crossword_image_rendered';
             $display->setComponent($field_name, $component);
diff --git a/crossword.services.yml b/crossword.services.yml
index ed5de59..cecdd7b 100644
--- a/crossword.services.yml
+++ b/crossword.services.yml
@@ -1,7 +1,7 @@
 services:
   crossword.data_service:
     class: Drupal\crossword\CrosswordDataService
-    arguments: ['@cache.crossword', '@crossword.manager.parser']
+    arguments: ['@cache.crossword', '@crossword.manager.parser', '@module_handler']
   crossword.manager.parser:
     class: Drupal\crossword\CrosswordFileParserManager
     parent: default_plugin_manager
diff --git a/css/default.css b/css/default.css
index cd52015..c72d7bd 100644
--- a/css/default.css
+++ b/css/default.css
@@ -128,16 +128,16 @@
   float: left;
 }
 
-#active-clues {
+.active-clues {
   padding: 1em 0;
-  -webkit-box-shadow: 0px 3px 3px 0px rgba(0,0,0,0.75);
-  -moz-box-shadow: 0px 3px 3px 0px rgba(0,0,0,0.75);
-  box-shadow: 0px 3px 3px 0px rgba(0,0,0,0.75);
+  -webkit-box-shadow: 0 3px 3px 0 rgba(0,0,0,0.75);
+  -moz-box-shadow: 0 3px 3px 0 rgba(0,0,0,0.75);
+  box-shadow: 0 3px 3px 0 rgba(0,0,0,0.75);
   border-top: 1px solid black;
 }
 
 /* Make active clues sticky in default formatter display */
-.crossword #active-clues {
+.crossword .active-clues {
   position: sticky;
   position: -webkit-sticky;
   top: 0;
diff --git a/css/print.css b/css/print.css
index b1b0f1f..56e7f8a 100644
--- a/css/print.css
+++ b/css/print.css
@@ -63,7 +63,7 @@
     display: none;
   }
 
-  #active-clues {
+  .active-clues {
     display: none;
   }
 
diff --git a/modules/crossword_download/src/Plugin/Field/FieldFormatter/CrosswordImageDownload.php b/modules/crossword_download/src/Plugin/Field/FieldFormatter/CrosswordImageDownload.php
index c1601b1..fd2bd54 100644
--- a/modules/crossword_download/src/Plugin/Field/FieldFormatter/CrosswordImageDownload.php
+++ b/modules/crossword_download/src/Plugin/Field/FieldFormatter/CrosswordImageDownload.php
@@ -76,7 +76,6 @@ class CrosswordImageDownload extends FileDownloadLink {
   protected function getExampleToken() {
     $entity_type = $this->fieldDefinition->getTargetEntityTypeId();
     $field = $this->fieldDefinition->getName();
-    $type = $this->fieldDefinition->getType();
     $entity_type = $this->tokenEntityMapper->getTokenTypeForEntityType($entity_type);
     return "Solution for [$entity_type:$field:entity:crossword_title] ([file:extension], [file:size])";
   }
diff --git a/modules/crossword_media/crossword_media.module b/modules/crossword_media/crossword_media.module
index afbb030..1136c92 100644
--- a/modules/crossword_media/crossword_media.module
+++ b/modules/crossword_media/crossword_media.module
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * {@file}
+ * @file
  * Hooks for crossword media.
  */
 
@@ -35,7 +35,7 @@ function crossword_media_entity_extra_field_info() {
       if ($field->getType() == 'crossword') {
         foreach ($pseudo_keys as $key => $label) {
           $extra['media'][$bundle->id()]['display']["crossword_$key"] = [
-            'label' => t("{$field->getLabel()}: $label"),
+            'label' => "{$field->getLabel()}: $label",
             'visible' => FALSE,
           ];
         }
diff --git a/modules/crossword_pseudofields/crossword_pseudofields.module b/modules/crossword_pseudofields/crossword_pseudofields.module
index 25023f9..5209427 100644
--- a/modules/crossword_pseudofields/crossword_pseudofields.module
+++ b/modules/crossword_pseudofields/crossword_pseudofields.module
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * {@file}
+ * @file
  * Hooks for crossword pseudofields.
  */
 
@@ -32,7 +32,7 @@ function crossword_pseudofields_entity_extra_field_info() {
       if ($field->getType() == 'crossword') {
         foreach ($pseudo_keys as $key => $label) {
           $extra['node'][$bundle->id()]['display']["crossword_$key"] = [
-            'label' => t("{$field->getLabel()}: $label"),
+            'label' => "{$field->getLabel()}: $label",
             'visible' => FALSE,
           ];
         }
diff --git a/modules/crossword_pseudofields/src/Plugin/Field/FieldFormatter/CrosswordPseudofieldsFormatter.php b/modules/crossword_pseudofields/src/Plugin/Field/FieldFormatter/CrosswordPseudofieldsFormatter.php
index e03388f..d80b7ca 100644
--- a/modules/crossword_pseudofields/src/Plugin/Field/FieldFormatter/CrosswordPseudofieldsFormatter.php
+++ b/modules/crossword_pseudofields/src/Plugin/Field/FieldFormatter/CrosswordPseudofieldsFormatter.php
@@ -68,12 +68,7 @@ class CrosswordPseudofieldsFormatter extends CrosswordFormatter {
       'active_clue' => [
         '#markup' => '<div id="active-clues" class="active-clues"></div>',
       ],
-      'grid' => [
-        $this->getGrid($data),
-        '#attached' => [
-          'library' => 'crossword/crossword.grid',
-        ],
-      ],
+      'grid' => $this->getGrid($data),
       'across' => $this->getAcross($data),
       'down' => $this->getDown($data),
       'playable' => [
@@ -99,6 +94,10 @@ class CrosswordPseudofieldsFormatter extends CrosswordFormatter {
         'tags' => $file->getCacheTags(),
       ],
     ];
+    // Add grid library.
+    $elements['grid']['#attached'] = [
+      'library' => 'crossword/crossword.grid',
+    ];
     // Add cache/attach info to each pseudofield.
     foreach ($elements as $key => $element) {
       if (substr($key, 0, 1) != '#') {
diff --git a/src/CrosswordDataService.php b/src/CrosswordDataService.php
index 7e2a9ea..a4f12e7 100644
--- a/src/CrosswordDataService.php
+++ b/src/CrosswordDataService.php
@@ -3,6 +3,7 @@
 namespace Drupal\crossword;
 
 use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal\Core\Extension\ModuleHandler;
 use Drupal\file\FileInterface;
 
 /**
@@ -29,6 +30,13 @@ class CrosswordDataService {
    */
   protected $parserManager;
 
+  /**
+   * The module handler.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandler
+   */
+  protected $moduleHandler;
+
   /**
    * Construct the Crossword Data Service.
    *
@@ -36,10 +44,13 @@ class CrosswordDataService {
    *   The cache.
    * @param Drupal\crossword\CrosswordFileParserManager $parser_manager
    *   The crossword parser manager.
+   * @param Drupal\Core\Extension\ModuleHandler $module_handler
+   *   The module handler.
    */
-  public function __construct(CacheBackendInterface $cache, CrosswordFileParserManager $parser_manager) {
+  public function __construct(CacheBackendInterface $cache, CrosswordFileParserManager $parser_manager, ModuleHandler $module_handler) {
     $this->cache = $cache;
     $this->parserManager = $parser_manager;
+    $this->moduleHandler = $module_handler;
   }
 
   /**
@@ -62,7 +73,7 @@ class CrosswordDataService {
       $parser = $this->parserManager->loadCrosswordFileParserFromInput($file);
       if ($parser) {
         $data = $parser->parse();
-        \Drupal::moduleHandler()->alter('crossword_data', $data, $file);
+        $this->moduleHandler->alter('crossword_data', $data, $file);
         $this->cache->set($file->id(), ["data" => $data], CacheBackendInterface::CACHE_PERMANENT, $file->getCacheTags());
       }
     }
diff --git a/src/Plugin/Field/FieldFormatter/CrosswordFormatter.php b/src/Plugin/Field/FieldFormatter/CrosswordFormatter.php
index 9d995f1..36e7286 100644
--- a/src/Plugin/Field/FieldFormatter/CrosswordFormatter.php
+++ b/src/Plugin/Field/FieldFormatter/CrosswordFormatter.php
@@ -3,9 +3,12 @@
 namespace Drupal\crossword\Plugin\Field\FieldFormatter;
 
 use Drupal\Component\Utility\Html;
+use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\crossword\CrosswordDataService;
 use Drupal\file\Plugin\Field\FieldFormatter\FileFormatterBase;
 use Drupal\Core\Form\FormStateInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Plugin implementation of the 'crossword' formatter.
@@ -20,6 +23,54 @@ use Drupal\Core\Form\FormStateInterface;
  */
 class CrosswordFormatter extends FileFormatterBase {
 
+  /**
+   * Crossword data service.
+   *
+   * @var \Drupal\crossword\CrosswordDataService
+   */
+  protected $crosswordDataService;
+
+  /**
+   * Constructs a FileDownloadLink object.
+   *
+   * @param string $plugin_id
+   *   The plugin_id for the formatter.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition
+   *   The definition of the field to which the formatter is associated.
+   * @param array $settings
+   *   The formatter settings.
+   * @param string $label
+   *   The formatter label display setting.
+   * @param string $view_mode
+   *   The view mode.
+   * @param array $third_party_settings
+   *   Any third party settings.
+   * @param \Drupal\crossword\CrosswordDataService $crossword_data_service
+   *   Token service.
+   */
+  public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, CrosswordDataService $crossword_data_service) {
+    parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings);
+    $this->crosswordDataService = $crossword_data_service;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $plugin_id,
+      $plugin_definition,
+      $configuration['field_definition'],
+      $configuration['settings'],
+      $configuration['label'],
+      $configuration['view_mode'],
+      $configuration['third_party_settings'],
+      $container->get('crossword.data_service')
+    );
+  }
+
   /**
    * {@inheritdoc}
    */
@@ -189,7 +240,7 @@ class CrosswordFormatter extends FileFormatterBase {
     $elements = [];
     foreach ($this->getEntitiesToView($items, $langcode) as $delta => $file) {
 
-      $data = \Drupal::service('crossword.data_service')->getData($file);
+      $data = $this->crosswordDataService->getData($file);
 
       $elements[$delta] = [
         '#theme' => 'crossword',
@@ -463,7 +514,7 @@ class CrosswordFormatter extends FileFormatterBase {
    * Return render array for rebus entry checkbox.
    */
   protected function getRebusEntryCheckbox($file) {
-    if ($this->getSetting('rebus')['show'] || \Drupal::service('crossword.data_service')->isRebus($file)) {
+    if ($this->getSetting('rebus')['show'] || $this->crosswordDataService->isRebus($file)) {
       return [
         '#type' => 'checkbox',
         '#title' => 'Rebus Entry Active',
diff --git a/src/Plugin/Validation/Constraint/CrosswordFileValidator.php b/src/Plugin/Validation/Constraint/CrosswordFileValidator.php
index 3f69d87..8d151da 100644
--- a/src/Plugin/Validation/Constraint/CrosswordFileValidator.php
+++ b/src/Plugin/Validation/Constraint/CrosswordFileValidator.php
@@ -2,12 +2,12 @@
 
 namespace Drupal\crossword\Plugin\Validation\Constraint;
 
+use Drupal\Core\Entity\EntityTypeManager;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\crossword\CrosswordFileParserManagerInterface;
-use Drupal\file\Entity\File;
 
 /**
  * Validates the crossword file.
@@ -21,14 +21,24 @@ class CrosswordFileValidator extends ConstraintValidator implements ContainerInj
    */
   protected $parserManager;
 
+  /**
+   * File storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $fileStorage;
+
   /**
    * Create an instance of the validator.
    *
    * @param \Drupal\crossword\CrosswordFileParserManagerInterface $parser_manager
    *   The parser manager service.
+   * @param \Drupal\Core\Entity\EntityTypeManager $entity_type_manager
+   *   Entity type manager.
    */
-  public function __construct(CrosswordFileParserManagerInterface $parser_manager) {
+  public function __construct(CrosswordFileParserManagerInterface $parser_manager, EntityTypeManager $entity_type_manager) {
     $this->parserManager = $parser_manager;
+    $this->fileStorage = $entity_type_manager->getStorage('file');
   }
 
   /**
@@ -36,7 +46,8 @@ class CrosswordFileValidator extends ConstraintValidator implements ContainerInj
    */
   public static function create(ContainerInterface $container) {
     return new static(
-      $container->get('crossword.manager.parser')
+      $container->get('crossword.manager.parser'),
+      $container->get('entity_type.manager')
     );
   }
 
@@ -50,7 +61,7 @@ class CrosswordFileValidator extends ConstraintValidator implements ContainerInj
 
     foreach ($items as $item) {
       if (get_class($item) == "Drupal\Core\TypedData\Plugin\DataType\IntegerData") {
-        $file = File::load($item->getCastedValue());
+        $file = $this->fileStorage->load($item->getCastedValue());
         if (FALSE === $this->parserManager->filterApplicableDefinitions($allowed_parser_definitions, $file)) {
           $this->context->addViolation($constraint->noParser);
         }
diff --git a/tests/src/Kernel/Formatter/CrosswordFileDownloadLinkFormatterTest.php b/tests/src/Kernel/Formatter/CrosswordFileDownloadLinkFormatterTest.php
index b15ebaa..e6f4b2e 100644
--- a/tests/src/Kernel/Formatter/CrosswordFileDownloadLinkFormatterTest.php
+++ b/tests/src/Kernel/Formatter/CrosswordFileDownloadLinkFormatterTest.php
@@ -37,7 +37,7 @@ class CrosswordFileDownloadLinkFormatterTest extends SimpleCrosswordFormatterTes
     'token',
     'crossword',
     'crossword_token',
-    'crossword_download'
+    'crossword_download',
   ];
 
   /**
@@ -54,7 +54,6 @@ class CrosswordFileDownloadLinkFormatterTest extends SimpleCrosswordFormatterTes
       'label' => 'hidden',
       'settings' => $settings,
     ]);
-    $file = $this->entity->field_crossword->referencedEntities()[0];
     $expected_render = [
       '#type' => 'link',
       '#title' => 'Test Puzzle (3x3)',
diff --git a/tests/src/Kernel/Formatter/CrosswordImageDownloadLinkFormatterTest.php b/tests/src/Kernel/Formatter/CrosswordImageDownloadLinkFormatterTest.php
index 8f7ca0e..50c415f 100644
--- a/tests/src/Kernel/Formatter/CrosswordImageDownloadLinkFormatterTest.php
+++ b/tests/src/Kernel/Formatter/CrosswordImageDownloadLinkFormatterTest.php
@@ -38,7 +38,7 @@ class CrosswordImageDownloadLinkFormatterTest extends SimpleCrosswordFormatterTe
     'crossword',
     'crossword_image',
     'crossword_token',
-    'crossword_download'
+    'crossword_download',
   ];
 
   /**
diff --git a/tests/src/Kernel/Formatter/CrosswordImageRenderedFormatterTest.php b/tests/src/Kernel/Formatter/CrosswordImageRenderedFormatterTest.php
index fcb18e2..70372ff 100644
--- a/tests/src/Kernel/Formatter/CrosswordImageRenderedFormatterTest.php
+++ b/tests/src/Kernel/Formatter/CrosswordImageRenderedFormatterTest.php
@@ -40,12 +40,6 @@ class CrosswordImageRenderedFormatterTest extends SimpleCrosswordFormatterTestBa
    * {@inheritdoc}
    */
   public function testFormatter() {
-    // These are the values in the test puzzle.
-    $detail_values = [
-      'title' => 'Test Puzzle',
-      'author' => 'Test Author',
-      'notepad' => 'This is a test.',
-    ];
     // Get an array of settings sets together.
     $default_settings = $this->class::defaultSettings();
     $settings_array[] = $default_settings;
