diff --git a/imagecache_external.api.php b/imagecache_external.api.php
index 904d210..c9ba491 100644
--- a/imagecache_external.api.php
+++ b/imagecache_external.api.php
@@ -12,7 +12,7 @@
  */
 function hook_imagecache_external_needs_refresh_alter(&$needs_refresh, $filepath) {
   // Example: refresh images at least once a week.
-  if (filemtime($filepath) > REQUEST_TIME - 60 * 60 * 24 * 7) {
+  if (filemtime($filepath) > \Drupal::time()->getRequestTime() - 60 * 60 * 24 * 7) {
     $needs_refresh = TRUE;
   }
 }
diff --git a/imagecache_external.info.yml b/imagecache_external.info.yml
index cd8aae0..6aede72 100644
--- a/imagecache_external.info.yml
+++ b/imagecache_external.info.yml
@@ -3,6 +3,5 @@ name: Imagecache External
 description: Allows you to fetch external images and use image styles on them.
 dependencies:
   - image
-core: 8.x
+core_version_requirement: ^8 || ^9
 configure: imagecache_external.admin_settings
-version: 8.x-1.x
diff --git a/imagecache_external.module b/imagecache_external.module
index 64774fe..7032f1e 100755
--- a/imagecache_external.module
+++ b/imagecache_external.module
@@ -6,6 +6,8 @@
 
 use Drupal\Component\Utility\UrlHelper;
 use Drupal\Core\Messenger\MessengerInterface;
+use Drupal\Core\StreamWrapper\StreamWrapperManager;
+use Drupal\Core\File\FileSystemInterface;
 use Drupal\file\Entity\File;
 
 /**
@@ -108,8 +110,8 @@ function imagecache_external_generate_path($url) {
   $file_system = \Drupal::service('file_system');
 
   // Check if this is a non-standard file stream and adjust accordingly.
-  $scheme = $file_system->uriScheme($url);
-  $default_scheme = file_default_scheme();
+  $scheme = StreamWrapperManager::getScheme($url);
+  $default_scheme = \Drupal::config('system.file')->get('default_scheme');
 
   if ($scheme == $default_scheme) {
     // Don't try fetch already existing files on local file system.
@@ -135,7 +137,7 @@ function imagecache_external_generate_path($url) {
   }
 
   $directory = $default_scheme . '://' . $config->get('imagecache_directory');
-  if (file_prepare_directory($directory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS)) {
+  if ($file_system->prepareDirectory($directory, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS)) {
     $needs_refresh = FALSE;
     $filepath = $directory . '/' . $filename;
     // Allow modules to add custom logic to check if it needs to be re-fetched.
@@ -211,10 +213,10 @@ function imagecache_external_fetch($url, $cachepath) {
     }
     if (!empty($result->getBody()) && $code != 400 && $code != 500 && $content_type_allowed) {
       if ($config->get('imagecache_external_management') == 'unmanaged') {
-        return file_unmanaged_save_data($result->getBody(), $cachepath, FILE_EXISTS_REPLACE);
+        return \Drupal::service('file_system')->saveData($result->getBody(), $cachepath, FileSystemInterface::EXISTS_REPLACE);
       }
       else {
-        $file = file_save_data($result->getBody(), $cachepath, FILE_EXISTS_REPLACE);
+        $file = file_save_data($result->getBody(), $cachepath, FileSystemInterface::EXISTS_REPLACE);
         return $file->getFileUri();
       }
     }
@@ -316,7 +318,7 @@ function imagecache_external_file_download($uri) {
  */
 function imagecache_external_get_directory_path() {
   $config = imagecache_external_config();
-  $scheme = file_default_scheme();
+  $scheme = \Drupal::config('system.file')->get('default_scheme');
   $wrapper = \Drupal::service('stream_wrapper_manager')->getViaScheme($scheme);
   $path = realpath($wrapper->getDirectoryPath() . '/' . $config->get('imagecache_directory'));
   return $path;
@@ -401,7 +403,7 @@ function imagecache_external_batch_flush($path) {
   }
   elseif (empty($files)) {
     $directory = imagecache_external_get_directory_path();
-    file_unmanaged_delete_recursive($directory);
+    \Drupal::service('file_system')->deleteRecursive($directory);
     return TRUE;
   }
   else {
@@ -414,7 +416,7 @@ function imagecache_external_batch_flush($path) {
  */
 function imagecache_external_batch_flush_process($chunk, $operation_details, &$context) {
   foreach ($chunk as $file) {
-    file_unmanaged_delete_recursive($file);
+    \Drupal::service('file_system')->deleteRecursive($file);
   }
 
   // Show what chunk is currently being processed.
@@ -427,7 +429,7 @@ function imagecache_external_batch_flush_process($chunk, $operation_details, &$c
 function imagecache_external_batch_flush_finished($success, $files, $operations) {
   if ($success) {
     $directory = imagecache_external_get_directory_path();
-    file_unmanaged_delete_recursive($directory);
+    \Drupal::service('file_system')->deleteRecursive($directory);
   }
   else {
     $error_operation = reset($operations);
diff --git a/src/Form/SettingsForm.php b/src/Form/SettingsForm.php
index 1bb900d..e24eb81 100644
--- a/src/Form/SettingsForm.php
+++ b/src/Form/SettingsForm.php
@@ -2,14 +2,58 @@
 
 namespace Drupal\imagecache_external\Form;
 
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Extension\ModuleInstallerInterface;
+use Drupal\Core\File\FileSystemInterface;
 use Drupal\Core\Form\ConfigFormBase;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Locale\CountryManagerInterface;
+use Drupal\Core\State\StateInterface;
+use Drupal\user\UserStorageInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Defines a form that configures uploadcare settings.
  */
 class SettingsForm extends ConfigFormBase {
 
+  /**
+   * The file system service.
+   *
+   * @var \Drupal\Core\File\FileSystemInterface
+   */
+  protected $fileSystem;
+
+  /**
+   * The config factory.
+   *
+   * @var \Drupal\Core\Config\ConfigFactoryInterface
+   */
+  protected $configFactory;
+
+  /**
+   * Constructs a new SettingsForm.
+   *
+   * @param \Drupal\Core\File\FileSystemInterface $fileSystem
+   *   The file system service.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The config factory.
+   */
+  public function __construct(FileSystemInterface $fileSystem, ConfigFactoryInterface $config_factory) {
+    $this->fileSystem = $fileSystem;
+    $this->configFactory = $config_factory;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('file_system'),
+      $container->get('config.factory')
+    );
+  }
+
   /**
    * {@inheritdoc}
    */
@@ -114,9 +158,9 @@ class SettingsForm extends ConfigFormBase {
    * {@inheritdoc}
    */
   public function validateForm(array &$form, FormStateInterface $form_state) {
-    $scheme = file_default_scheme();
+    $scheme = $this->configFactory->get('system.file')->get('default_scheme');
     $directory = $scheme . '://' . $form_state->getValue('imagecache_directory');
-    if (!file_prepare_directory($directory, FILE_CREATE_DIRECTORY)) {
+    if (!$this->fileSystem->prepareDirectory($directory, FileSystemInterface::CREATE_DIRECTORY)) {
       $error = $this->t('The directory %directory does not exist or is not writable.', ['%directory' => $directory]);
       $form_state->setErrorByName('imagecache_directory', $error);
       $this->logger('imagecache_external')->error($error);
