diff --git a/geolocation.module b/geolocation.module
index 6db984c..fe052c1 100644
--- a/geolocation.module
+++ b/geolocation.module
@@ -48,6 +48,7 @@ function geolocation_theme() {
         'fitbounds' => NULL,
         'locations' => NULL,
         'id' => NULL,
+        'icon' => '',
       ]
     ],
     'geolocation_common_map_location' => [
diff --git a/js/geolocation-common-map.js b/js/geolocation-common-map.js
index 475e9fd..43977be 100644
--- a/js/geolocation-common-map.js
+++ b/js/geolocation-common-map.js
@@ -54,6 +54,11 @@
                     fitBounds = map.data('fitbounds');
                 }
 
+                var icon = '';
+                if (map.data('icon')) {
+                  icon = map.data('icon');
+                }
+
                 // Load the actual map.
                 // If enabled, the fitBounds() will later override these values.
                 var googleMap = new google.maps.Map(container[0], {
@@ -74,7 +79,8 @@
                         position: position,
                         map: googleMap,
                         title: item.children('h2').text(),
-                        content: item.html()
+                        content: item.html(),
+                        icon: icon
                     });
 
                     marker.addListener('click', function () {
diff --git a/src/Plugin/views/style/CommonMap.php b/src/Plugin/views/style/CommonMap.php
index 38c61fc..be974ed 100644
--- a/src/Plugin/views/style/CommonMap.php
+++ b/src/Plugin/views/style/CommonMap.php
@@ -177,6 +177,11 @@ class CommonMap extends StylePluginBase {
     }
     $build['#fitbounds'] = $fitbounds;
 
+    $build['#icon'] = '';
+    if (!empty($this->options['icon'])) {
+      $build['#icon'] = $this->options['icon'];
+    }
+
     return $build;
   }
 
@@ -189,6 +194,7 @@ class CommonMap extends StylePluginBase {
     $options['geolocation_field'] = ['default' => ''];
     $options['title_field'] = ['default' => ''];
     $options['centre'] = ['default' => ''];
+    $options['icon'] = ['default' => ''];
 
     return $options;
   }
@@ -342,5 +348,13 @@ class CommonMap extends StylePluginBase {
     ];
 
     uasort($form['centre'], 'Drupal\Component\Utility\SortArray::sortByWeightProperty');
+
+    $form['icon'] = [
+      '#title' => $this->t('Marker icon'),
+      '#type' => 'textfield',
+      '#default_value' => $this->options['icon'],
+      '#description' => $this->t('The URL to the marker icon you want to use'),
+    ];
+
   }
 }
diff --git a/templates/geolocation-common-map-display.html.twig b/templates/geolocation-common-map-display.html.twig
index a177a70..1b720bf 100644
--- a/templates/geolocation-common-map-display.html.twig
+++ b/templates/geolocation-common-map-display.html.twig
@@ -1,4 +1,4 @@
-<div id="{{ id }}" class="geolocation-common-map" {% if centre.lat is not empty and centre.lng is not empty %} data-centre-lat="{{ centre.lat }}" data-centre-lng="{{ centre.lng }}" {% endif %} {% if zoom is not empty %} data-zoom="{{ zoom }}" {% endif %} {% if fitbounds is not empty %} data-fitbounds="{{ fitbounds }}" {% endif %} >
+<div id="{{ id }}" class="geolocation-common-map" {% if centre.lat is not empty and centre.lng is not empty %} data-centre-lat="{{ centre.lat }}" data-centre-lng="{{ centre.lng }}" {% endif %} {% if zoom is not empty %} data-zoom="{{ zoom }}" {% endif %} {% if fitbounds is not empty %} data-fitbounds="{{ fitbounds }}" {% endif %} {% if icon is not empty %} data-icon="{{ icon|e('html_attr') }}" {% endif %} >
     <div class="geolocation-common-map-locations">
     {%  for location in locations %}
         {{ location }}
