diff --git a/leaflet.formatters.inc b/leaflet.formatters.inc
index cf03480..dd963c4 100644
--- a/leaflet.formatters.inc
+++ b/leaflet.formatters.inc
@@ -53,7 +53,6 @@ function leaflet_field_formatter_settings_form($field, $instance, $view_mode, $f
   $display = $instance['display'][$view_mode];
   $settings = $display['settings'];
   $element = array();
-
   if ($display['type'] == 'geofield_leaflet') {
     $options = array('' => t('-- Select --'));
     foreach (leaflet_map_get_info() as $key => $map) {
@@ -293,6 +292,13 @@ function leaflet_field_formatter_settings_form($field, $instance, $view_mode, $f
       '#default_value' => isset($settings['icon']['popupAnchor']['y']) ? $settings['icon']['popupAnchor']['y'] : '',
       '#element_validate' => array('element_validate_number'),
     );
+    // Show the list of available tokens.
+    $element['icon']['token_help'] = array(
+      '#theme' => 'token_tree',
+      '#token_types' => 'all',
+      '#weight' => 999,
+      '#dialog' => TRUE,
+    );
   }
 
   return $element;
@@ -434,6 +440,18 @@ function leaflet_field_formatter_settings_summary($field, $instance, $view_mode)
 }
 
 /**
+ * Replaces all tokens in a given string with appropriate values.
+ *
+ * This is a wrapper arround token_replace, to apply token_replace only
+ * to strings.
+ */
+function _leaflet_token_replace(&$subject, $key, $data = array()) {
+  if (is_string($subject) && $subject) {
+    $subject = token_replace($subject, $data['data'], $data['options']);
+  }
+}
+
+/**
  * Implements hook_field_formatter_view().
  */
 function leaflet_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
@@ -455,6 +473,12 @@ function leaflet_field_formatter_view($entity_type, $entity, $field, $instance,
           $features[0]['popup'] = entity_label($entity_type, $entity);
         }
 
+        if (is_array($settings['icon'])) {
+          // Replace tokens in all icon settings.
+          $args = array('data' => array($entity_type => $entity), 'options' => array('clear' => TRUE));
+          array_walk_recursive($settings['icon'], '_leaflet_token_replace', $args);
+        }
+
         if (!empty($settings['icon']) && $settings['icon']['iconUrl']) {
           foreach ($features as $key => $feature) {
             $features[$key]['icon'] = $settings['icon'];
