diff --git a/src/Plugin/views/style/CommonMap.php b/src/Plugin/views/style/CommonMap.php
index 4b6dbd0..70e4530 100644
--- a/src/Plugin/views/style/CommonMap.php
+++ b/src/Plugin/views/style/CommonMap.php
@@ -7,6 +7,7 @@ use Drupal\Core\Form\FormStateInterface;
 use Drupal\geolocation\Plugin\views\field\GeolocationField;
 use Drupal\geolocation\GoogleMapsDisplayTrait;
 use Drupal\image\Entity\ImageStyle;
+use Drupal\Core\Url;
 
 /**
  * Allow to display several field items on a common map.
@@ -197,6 +198,9 @@ class CommonMap extends StylePluginBase {
       }
     }
 
+    // Call renderFields() anyway to retrieve tokens.
+    $this->renderFields($this->view->result);
+
     /*
      * Add locations to output.
      */
@@ -275,6 +279,32 @@ class CommonMap extends StylePluginBase {
         if (!empty($icon_url)) {
           $location['#icon'] = $icon_url;
         }
+        else {
+          if (
+            !empty($this->options['google_map_settings']['marker_icon_path'])
+            && !empty($this->rowTokens[$row_number])
+          ) {
+            $icon_token_uri = $this->viewsTokenReplace($this->options['google_map_settings']['marker_icon_path'], $this->rowTokens[$row_number]);
+            $icon_token_url = file_create_url($icon_token_uri);
+
+            if ($icon_token_url) {
+              $location['#icon'] = $icon_token_url;
+            }
+            else {
+              try {
+                $icon_token_url = Url::fromUri($icon_token_uri);
+                if ($icon_token_url) {
+                  $location['#icon'] = $icon_token_url->setAbsolute(TRUE)
+                    ->toString();
+                }
+              }
+              catch (\Exception $e) {
+                // User entered mal-formed URL, but that doesn't matter.
+                // We hereby skip it anyway.
+              }
+            }
+          }
+        }
         if (!empty($location_id)) {
           $location['#location_id'] = $location_id;
         }
