diff --git a/imageapi_optimize_webp.services.yml b/imageapi_optimize_webp.services.yml
deleted file mode 100644
index c09046e2d27b4288e6e7ce634eec96763a5a4fcd..0000000000000000000000000000000000000000
--- a/imageapi_optimize_webp.services.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-services:
-  imageapi_optimize_webp.route_subscriber:
-    class: Drupal\imageapi_optimize_webp\Routing\RouteSubscriber
-    arguments: ['@module_handler']
-    tags:
-      - { name: event_subscriber }
\ No newline at end of file
diff --git a/modules/imageapi_optimize_webp_responsive/imageapi_optimize_webp_responsive.module b/modules/imageapi_optimize_webp_responsive/imageapi_optimize_webp_responsive.module
index fae1f1c6284295d9347f44f66bbf351acc33cf95..8cddc4bc88f123a1129b5e96154ffb6f88f3b96d 100644
--- a/modules/imageapi_optimize_webp_responsive/imageapi_optimize_webp_responsive.module
+++ b/modules/imageapi_optimize_webp_responsive/imageapi_optimize_webp_responsive.module
@@ -51,11 +51,16 @@ function imageapi_optimize_webp_responsive_preprocess_responsive_image(&$variabl
           $image_uri = $image_style->buildUri($variables['uri']);
           $image_url = \Drupal::service('file_url_generator')->generateAbsoluteString($image_uri);
           $image_relative_path = \Drupal::service('file_url_generator')->transformRelative($image_url);
+          $image_token = $image_style->getPathToken($variables['uri']);
+          $image_relative_path .= '?itok=' . $image_token;
 
-          $image_relative_path_file = explode('?', $image_relative_path)[0];
-          $webp_relative_path = str_replace($image_relative_path_file,
-            $image_relative_path_file . '.webp', $image_relative_path);
-          $image_style_map[$image_relative_path] = $webp_relative_path;
+          $image_webp_uri = $image_style->buildUri($variables['uri'] . '.webp');
+          $image_webp_url = \Drupal::service('file_url_generator')->generateAbsoluteString($image_webp_uri);
+          $image_webp_relative_path = \Drupal::service('file_url_generator')->transformRelative($image_webp_url);
+          $image_webp_token = $image_style->getPathToken($variables['uri'] . '.webp');
+          $image_webp_relative_path .= '?itok=' . $image_webp_token;
+
+          $image_style_map[$image_relative_path] = $image_webp_relative_path;
         }
       }
     }
diff --git a/src/Controller/ImageStyleDownloadController.php b/src/Controller/ImageStyleDownloadController.php
deleted file mode 100644
index bfd4cb54bcf783b751fc6eba9532e1ee3291e3d8..0000000000000000000000000000000000000000
--- a/src/Controller/ImageStyleDownloadController.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-namespace Drupal\imageapi_optimize_webp\Controller;
-
-use Drupal\image\Controller\ImageStyleDownloadController as CoreImageStyleDownloadController;
-use Drupal\image\ImageStyleInterface;
-use Symfony\Component\HttpFoundation\BinaryFileResponse;
-use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\HttpFoundation\Response;
-use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
-
-/**
- * Defines a controller to serve image styles.
- */
-class ImageStyleDownloadController extends CoreImageStyleDownloadController {
-
-  /**
-   * Lookup potential source files based on webp uri.
-   *
-   * @param string $image_uri
-   *   The webp image uri.
-   *
-   * @return mixed|null
-   *   The source image uri.
-   */
-  public function lookupSourceImage($image_uri) {
-    $source_image = substr($image_uri, 0, strrpos($image_uri, "."));
-    if($source_image . '.webp' === $image_uri) {
-      return $source_image;
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function deliver(Request $request, $scheme, ImageStyleInterface $image_style, string $required_derivative_scheme) {
-    $target = $request->query->get('file');
-    if (!$target) {
-      throw new NotFoundHttpException();
-    }
-    $path_info = pathinfo($target);
-    // If .webp file, look for image to derive from.
-    if (isset($path_info['extension']) && $path_info['extension'] === 'webp') {
-      $image_uri = $scheme . '://' . $target;
-      // Continue processing if source found, else throw NotFoundHttpException.
-      if ($source_uri = $this->lookupSourceImage($image_uri)) {
-        // Replace webp image with source image and call parent:deliver().
-        $request->query->set('file', str_replace($scheme . '://', '', $source_uri));
-        $source_response = parent::deliver($request, $scheme, $image_style, $required_derivative_scheme);
-        $derivative_uri = $image_style->buildUri($image_uri);
-        // If parent:deliver() returns BinaryFileResponse, we'll replace
-        // the BinaryFileResponse with one containing the .webp image
-        // so long as it exists.
-        if ($source_response instanceof BinaryFileResponse) {
-          if (file_exists($derivative_uri)) {
-            $image = $this->imageFactory->get($derivative_uri);
-            $uri = $image->getSource();
-            $headers = [
-              'Content-Type' => 'image/webp',
-              'Content-Length' => $image->getFileSize(),
-            ];
-            return new BinaryFileResponse($uri, 200, $headers, $scheme !== 'private');
-          }
-          // If the derivative does not exist, return a failed reponse.
-          return new Response($this->t('Error generating image.'), 500);
-        }
-        // If we get any response other than BinaryFileResponse,
-        // then return the response unchanged.
-        return $source_response;
-      }
-      throw new NotFoundHttpException();
-    }
-    else {
-      return parent::deliver($request, $scheme, $image_style, $required_derivative_scheme);
-    }
-  }
-
-}
diff --git a/src/Entity/ImageAPIOptimizeWebPPipeline.php b/src/Entity/ImageAPIOptimizeWebPPipeline.php
index 62ac40886e3aac4d4d6491cffb2248ea448edffd..da2926cdfc6e11dc7b8486736fd17fd13c63118f 100644
--- a/src/Entity/ImageAPIOptimizeWebPPipeline.php
+++ b/src/Entity/ImageAPIOptimizeWebPPipeline.php
@@ -3,7 +3,7 @@
 namespace Drupal\imageapi_optimize_webp\Entity;
 
 use Drupal\imageapi_optimize\Entity\ImageAPIOptimizePipeline;
-use Drupal\Core\File\FileExists;
+use Drupal\Core\File\FileSystemInterface;
 
 /**
  * Wrap ImageAPIOptimizePipeline to copy webp derivative to proper directory.
@@ -34,7 +34,7 @@ class ImageAPIOptimizeWebPPipeline extends ImageAPIOptimizePipeline {
       foreach ($this->temporaryFiles as $temp_image_uri) {
         $temp_webp_uri = $temp_image_uri . '.webp';
         if (file_exists($temp_webp_uri)) {
-          $temp_image_uri = \Drupal::service('file_system')->copy($temp_webp_uri, $webp_uri, FileExists::Rename);
+          $temp_image_uri = \Drupal::service('file_system')->copy($temp_webp_uri, $webp_uri, FileSystemInterface::EXISTS_RENAME);
           if ($temp_image_uri) {
             $this->temporaryFiles[] = $temp_webp_uri;
             break;
diff --git a/src/Plugin/ImageAPIOptimizeProcessor/WebP.php b/src/Plugin/ImageAPIOptimizeProcessor/WebP.php
index 070c6fea7c163cec00365aa04e4e48bbdf8c1712..3ec91272917d37c55c401df7368febb6060e494f 100644
--- a/src/Plugin/ImageAPIOptimizeProcessor/WebP.php
+++ b/src/Plugin/ImageAPIOptimizeProcessor/WebP.php
@@ -19,13 +19,12 @@ class WebP extends ConfigurableImageAPIOptimizeProcessorBase {
    */
   public function applyToImage($image_uri) {
     $source_image = $this->imageFactory->get($image_uri, 'gd');
-    if ($source_image) {
-      $destination = $image_uri . '.webp';
-      // @todo: Add try/catch.
-      imagewebp($source_image->getToolkit()->getResource(), $destination, $this->configuration['quality']);
+    $file_type = pathinfo($image_uri, PATHINFO_EXTENSION);
+    if ($file_type == 'webp' &&  $source_image->getToolkit()->getMimeType() != 'image/webp') {
+      imagewebp($source_image->getToolkit()->getImage(), $image_uri, $this->configuration['quality']);
       // Fix issue where sometimes image fails to generate.
-      if (filesize($destination) % 2 == 1) {
-        file_put_contents($destination, "\0", FILE_APPEND);
+      if (filesize($image_uri) % 2 == 1) {
+        file_put_contents($image_uri, "\0", FILE_APPEND);
       }
       return TRUE;
     }
diff --git a/src/Routing/RouteSubscriber.php b/src/Routing/RouteSubscriber.php
deleted file mode 100644
index 069d50053d73e21640c4356f893cd990aeea6fea..0000000000000000000000000000000000000000
--- a/src/Routing/RouteSubscriber.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-namespace Drupal\imageapi_optimize_webp\Routing;
-
-use Drupal\Core\Routing\RouteSubscriberBase;
-use Symfony\Component\Routing\RouteCollection;
-
-/**
- * Class RouteSubscriber.
- *
- * Override 'image.style_public' controller to handle .webp deriver.
- */
-class RouteSubscriber extends RouteSubscriberBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function alterRoutes(RouteCollection $collection) {
-    if ($route = $collection->get('image.style_public')) {
-      $route->setDefault('_controller', 'Drupal\imageapi_optimize_webp\Controller\ImageStyleDownloadController::deliver');
-    }
-    if ($route = $collection->get('image.style_private')) {
-      $route->setDefault('_controller', 'Drupal\imageapi_optimize_webp\Controller\ImageStyleDownloadController::deliver');
-    }
-  }
-
-}