diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java b/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java
index ad540cbb32c96cbef0918109ade384756bc8d054..05ce1f1b50749a246841a311ca099c73789fe363 100644
--- a/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java
+++ b/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java
@@ -7,9 +7,10 @@ import org.pepstock.charba.client.plugins.AbstractPlugin;
 
 import com.google.gwt.canvas.client.Canvas;
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.ImageElement;
 
+import fr.agrometinfo.www.client.util.ApplicationUtils;
+
 /**
  * Append RF+AgroMetInfo logo on the chart.
  *
@@ -33,18 +34,11 @@ public final class LogoPlugin extends AbstractPlugin {
      */
     private static final double LOGO_SIZE_RATIO = 2.1087;
 
-    /**
-     * The application logo.
-     */
-    private final ImageElement logoImg = Document.get().createImageElement();
-
     /**
      * Constructor.
      */
     public LogoPlugin() {
         super("Logo");
-        // Load the image once for all
-        logoImg.setSrc("app/img/logo_etat-agrometinfo.svg");
     }
 
     @Override
@@ -56,6 +50,7 @@ public final class LogoPlugin extends AbstractPlugin {
         // Charba Canvas only accept a canvas as image
         // 1. create a GWT canvas with the logo
         final Canvas logoCanvas = Canvas.createIfSupported();
+        final ImageElement logoImg = ApplicationUtils.getApplicationLogo();
         logoCanvas.getContext2d().drawImage(logoImg, //
                 0d, //
                 0d, //
diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasTitle.java b/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasTitle.java
index 9615a5c9ed9ff7ecb9d0c1e15c4cb6db0cb736ee..c51ad112f25b79a778b79bf7db8086d517979ccc 100644
--- a/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasTitle.java
+++ b/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasTitle.java
@@ -7,11 +7,11 @@ import java.util.StringJoiner;
 import com.google.gwt.canvas.dom.client.Context2d;
 import com.google.gwt.canvas.dom.client.Context2d.TextAlign;
 import com.google.gwt.canvas.dom.client.TextMetrics;
-import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.ImageElement;
 import com.google.gwt.i18n.client.NumberFormat;
 
 import elemental2.dom.DomGlobal;
+import fr.agrometinfo.www.client.util.ApplicationUtils;
 import fr.agrometinfo.www.client.util.UiUtils;
 import fr.agrometinfo.www.client.util.color.ColorInterval;
 import ol.Map;
@@ -82,11 +82,6 @@ public final class CanvasTitle extends CanvasWidget {
      */
     private List<ColorInterval> colorIntervals;
 
-    /**
-     * The application logo.
-     */
-    private final ImageElement logoImg = Document.get().createImageElement();
-
     /**
      * Constructor.
      *
@@ -94,8 +89,6 @@ public final class CanvasTitle extends CanvasWidget {
      */
     public CanvasTitle(final Map map) {
         super(map);
-        // Load the image once for all
-        logoImg.setSrc("app/img/logo_etat-agrometinfo.svg");
     }
 
     /**
@@ -150,6 +143,7 @@ public final class CanvasTitle extends CanvasWidget {
      */
     private void drawLogo() {
         final Context2d ctx = getCanvas().getContext2d();
+        final ImageElement logoImg = ApplicationUtils.getApplicationLogo();
         ctx.drawImage(logoImg, //
                 0d + BORDER_SIZE + PADDING, //
                 0d + BORDER_SIZE + PADDING, //
diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java b/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java
index b2ff87a8d51b2134f79ded1ec784613e28a93cdf..63170447a6ddc67ef1babd23eb562515560adf6a 100644
--- a/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java
+++ b/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java
@@ -5,15 +5,52 @@ import java.util.HashMap;
 import java.util.Map;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Document;
+import com.google.gwt.dom.client.ImageElement;
 import com.google.gwt.i18n.client.DateTimeFormat;
 import com.google.gwt.user.client.DOM;
 
+import elemental2.dom.XMLHttpRequest;
+
 /**
  * Helper class.
  *
  * @author Olivier Maury
  */
 public final class ApplicationUtils {
+
+    /**
+     * The application logo, retrieved once.
+     */
+    private static final ImageElement LOGO_IMG = Document.get().createImageElement();
+
+    /**
+     * @param b string to encode
+     * @return base64-encoded string
+     */
+    private static native String base64encode(String b) /*-{
+        return window.btoa(b);
+    }-*/;
+
+    /**
+     * Create and return a unique img element with SVG source, ready to export as
+     * image from map an chart.
+     *
+     * @return HTML img element with SVG source as data in src attribute.
+     */
+    public static ImageElement getApplicationLogo() {
+        if (LOGO_IMG.getSrc() == null || LOGO_IMG.getSrc().isEmpty()) {
+            final XMLHttpRequest xhr = new XMLHttpRequest();
+            xhr.onload = e -> {
+                final String resp = xhr.responseText;
+                LOGO_IMG.setSrc("data:image/svg+xml;base64," + base64encode(resp));
+            };
+            xhr.open("GET", "app/img/logo_etat-agrometinfo.svg");
+            xhr.send();
+        }
+        return LOGO_IMG;
+    }
+
     /**
      * @return root path of application.
      */