diff --git a/src/Controller/HandlePdfController.php b/src/Controller/HandlePdfController.php
index 10f2e121258ca721b897e395461bf2c2bd12f3f8..a3e428d3a1c5543890d7c6ddfe26a3c153d98a5d 100644
--- a/src/Controller/HandlePdfController.php
+++ b/src/Controller/HandlePdfController.php
@@ -7,7 +7,12 @@
 namespace Drupal\fillpdf\Controller;
 
 use Drupal\Core\Controller\ControllerBase;
+use Drupal\Core\Entity\ContentEntityInterface;
+use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Field\FieldDefinitionInterface;
+use Drupal\file\Entity\File;
+use Drupal\file\FileInterface;
 use Drupal\fillpdf\Component\Helper\FillPdfMappingHelper;
 use Drupal\fillpdf\Entity\FillPdfForm;
 use Drupal\fillpdf\EntityHelper;
@@ -96,32 +101,77 @@ class HandlePdfController extends ControllerBase {
 
     $field_mapping = [
       'fields' => [],
-      // @todo: Image-filling support. Probably both the local and remote plugins could extend the same class.
       'images' => [],
     ];
 
     $mapped_fields = &$field_mapping['fields'];
-//    $image_data = &$field_mapping['images'];
+    $image_data = &$field_mapping['images'];
     foreach ($fields as $field) {
       $pdf_key = $field->pdf_key->value;
       if ($context['sample']) {
         $mapped_fields[$pdf_key] = $pdf_key;
       }
       else {
+        // Get image fields attached to the entity and derive their token names based on the entity types we are working with at the moment.
         $fill_pattern = $field->value->value;
-        $replaced_string = $this->tokenResolver->replace($fill_pattern, $entities);
-
-        // Apply field transformations.
-        // Replace <br /> occurrences with newlines
-        $replaced_string = preg_replace('|<br />|', '
+        $is_image_token = FALSE;
+        $transform_string = TRUE;
+        foreach ($entities as $entity_type => $entities_of_that_type) {
+          $lifo_entities = array_reverse($entities_of_that_type);
+          /**
+           * @var string $entity_id
+           * @var EntityInterface $entity
+           */
+          foreach ($lifo_entities as $entity_id => $entity) {
+            if (method_exists($entity, 'getFields')) {
+              /**
+               * @var ContentEntityInterface $entity
+               * @var string $field_name
+               * @var FieldDefinitionInterface $field_definition
+               */
+              foreach ($entity->getFields() as $field_name => $field_data) {
+                $field_definition = $field_data->getFieldDefinition();
+                if ($field_definition->getType() === 'image') {
+                  if ($fill_pattern === "[{$entity_type}:{$field_name}]") {
+                    // It's a match!
+                    $is_image_token = TRUE;
+                    if (count($entity->{$field_name})) {
+                      /** @var FileInterface $image_file */
+                      $image_file = File::load($entity->{$field_name}->target_id);
+                      $image_path = $image_file->getFileUri();
+                      $mapped_fields[$pdf_key] = "{image}{$image_path}";
+                      $image_path_info = pathinfo($image_path);
+                      // Store the image data to transmit to the remote service if necessary
+                      $file_data = file_get_contents($image_path);
+                      if ($file_data) {
+                        $image_data[$pdf_key] = [
+                          'data' => base64_encode($file_data),
+                          'filenamehash' => md5($image_path_info['filename']) . '.' . $image_path_info['extension'],
+                        ];
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+
+        if (!$is_image_token) {
+          $replaced_string = $this->tokenResolver->replace($fill_pattern, $entities);
+
+          // Apply field transformations.
+          // Replace <br /> occurrences with newlines
+          $replaced_string = preg_replace('|<br />|', '
 ', $replaced_string);
 
-        $form_replacements = FillPdfMappingHelper::parseReplacements($fillpdf_form->replacements->value);
-        $field_replacements = FillPdfMappingHelper::parseReplacements($field->replacements->value);
+          $form_replacements = FillPdfMappingHelper::parseReplacements($fillpdf_form->replacements->value);
+          $field_replacements = FillPdfMappingHelper::parseReplacements($field->replacements->value);
 
-        $replaced_string = FillPdfMappingHelper::transformString($replaced_string, $form_replacements, $field_replacements);
+          $replaced_string = FillPdfMappingHelper::transformString($replaced_string, $form_replacements, $field_replacements);
 
-        $mapped_fields[$pdf_key] = $replaced_string;
+          $mapped_fields[$pdf_key] = $replaced_string;
+        }
       }
     }