diff --git a/src/Plugin/Field/FieldWidget/SvgImageWidget.php b/src/Plugin/Field/FieldWidget/SvgImageWidget.php
index 4a8dbb7b38d6bf6597427ed5778492678139d02f..21529da82e2e12cd85516f508e4eac6491a30eec 100755
--- a/src/Plugin/Field/FieldWidget/SvgImageWidget.php
+++ b/src/Plugin/Field/FieldWidget/SvgImageWidget.php
@@ -50,11 +50,11 @@ class SvgImageWidget extends ImageWidget {
   }
 
   /**
-   * {@inheritdoc}
+   * Build preview for image widget.
+   *
+   * Used by svg_image_field_widget_single_element_form_alter hook.
    */
-  public static function process($element, FormStateInterface $form_state, $form) {
-    $element = parent::process($element, $form_state, $form);
-
+  public static function processElement($element, FormStateInterface $form_state, $form) {
     // Add the image preview.
     if (!empty($element['#files']) && $element['#preview_image_style']) {
       // Override image preview if SVG file.
@@ -70,10 +70,17 @@ class SvgImageWidget extends ImageWidget {
         $element['preview'] = static::buildSvgPreview($file);
       }
     }
-
     return $element;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public static function process($element, FormStateInterface $form_state, $form) {
+    $element = parent::process($element, $form_state, $form);
+    return static::processElement($element, $form_state, $form);
+  }
+
   /**
    * Builds the SVG file preview.
    *
diff --git a/svg_image.module b/svg_image.module
index 838030e94438e597e6f0f3ff1e0f8fb60bb6393a..e6813588534ced2d90e98f9e79413de118094171 100644
--- a/svg_image.module
+++ b/svg_image.module
@@ -5,6 +5,7 @@
  * Contains main functions and hooks for svg_image module.
  */
 
+use Drupal\image\Plugin\Field\FieldWidget\ImageWidget;
 use Drupal\file\Entity\File;
 use Drupal\svg_image\Plugin\Field\FieldFormatter\SvgImageFormatter;
 use Drupal\svg_image\Plugin\Field\FieldFormatter\SvgImageUrlFormatter;
@@ -132,3 +133,43 @@ function svg_image_get_image_file_dimensions(File $file) {
 function svg_image_is_file_svg(File $file) {
   return $file->getMimeType() === 'image/svg+xml';
 }
+
+/**
+ * Implements hook_field_widget_single_element_form_alter().
+ */
+function svg_image_field_widget_single_element_form_alter(&$element, &$form_state, $context) {
+  $widget = $context['widget'];
+
+  // Ensure the widget is an ImageWidget but not an SvgImageWidget.
+  if (!$widget instanceof ImageWidget || $widget instanceof SvgImageWidget) {
+    return;
+  }
+
+  $field_definition = $context['items']->getFieldDefinition();
+  $field_settings = $field_definition->getSettings();
+
+  // Ensure the field allows SVG uploads.
+  if (!isset($field_settings['file_extensions']) || !str_contains($field_settings['file_extensions'], 'svg')) {
+    return;
+  }
+
+  // Check if upload validators are set.
+  if (!isset($element['#upload_validators']['FileExtension']['extensions'])) {
+    return;
+  }
+
+  // Add 'svg' to allowed extensions if it's missing.
+  $extensions = explode(' ', $element['#upload_validators']['FileExtension']['extensions']);
+  if (!in_array('svg', $extensions)) {
+    $extensions[] = 'svg';
+    $element['#upload_validators']['FileExtension']['extensions'] = implode(' ', $extensions);
+  }
+
+  // Remove default image validation. Otherwise, we get an error on upload:
+  // Won't be needed anymore if #3515345 gets merged.
+  unset($element['#upload_validators']['FileIsImage']);
+
+  // Add the custom process function.
+  $class = '\Drupal\svg_image\Plugin\Field\FieldWidget\SvgImageWidget';
+  $element['#process'][] = [$class, 'processElement'];
+}