diff --git a/mobile-configuration/pom.xml b/mobile-configuration/pom.xml
index 839a4a162..4b56b0924 100644
--- a/mobile-configuration/pom.xml
+++ b/mobile-configuration/pom.xml
@@ -23,7 +23,7 @@
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>org.silverpeas.components</groupId>
@@ -31,6 +31,11 @@
     <version>6.4-SNAPSHOT</version>
   </parent>
 
+  <properties>
+    <timestamp>${maven.build.timestamp}</timestamp>
+    <maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
+  </properties>
+
   <groupId>org.silverpeas.components.mobile</groupId>
   <artifactId>silverpeas-mobile-configuration</artifactId>
   <packaging>jar</packaging>
@@ -40,8 +45,17 @@
     <resources>
       <resource>
         <directory>src/main/config</directory>
+        <filtering>true</filtering>
       </resource>
     </resources>
+
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-resources-plugin</artifactId>
+      </plugin>
+    </plugins>
+
   </build>
 
 </project>
diff --git a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties
index 645652fd9..f061b3c17 100644
--- a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties
+++ b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties
@@ -1,6 +1,12 @@
+version=${project.version}
+build.date=${timestamp}
+
 # css skin file url
 styleSheet=
 
+# css for wysiwyg contents
+wysiwyg.styleSheet=
+
 # icons app
 apple-touch-icon=touch-icon-iphone.png
 apple-touch-icon72x72=touch-icon-iphone.png
@@ -17,6 +23,12 @@ log.module.name=silverpeas.components.mobile
 # true if tablets must use mobile GUI. false if tablets must use standard GUI.
 guiMobileForTablets=true
 
+# Display information about cookies data storage
+displayCookiesInformation=true
+
+# How often a user should accept cookies
+displayCookiesInformationFrequency=90
+
 # Default users domain selected on login page
 defaultDomainId=0
 
@@ -25,6 +37,8 @@ defaultDomainId=0
 homepage.lastpublications=true
 # display upcomming events or not on main home page
 homepage.lastevents=true
+# display lasts news or not on main home page
+homepage.lastnews=true
 # display free zone on main home page
 homepage.freezone=true
 # display free zone thin on main home page
@@ -33,6 +47,10 @@ homepage.freezonethin=true
 spacehomepage.lastpublications=true
 # display last events or not on spaces home page
 spacehomepage.lastevents=true
+# display last news or not on spaces home page
+spacehomepage.lastnews=true
+
+spacehomepage.displayUrlType=true
 
 # home page zones order
 homepage.zone.changeorder=false
@@ -86,7 +104,7 @@ directory.display.tab.default=allcontacts
 avatar.updatable=true
 
 # size of users avatars
-avatar.size=24x
+avatar.size=32x
 
 # size of user avatar in main menu
 big.avatar.size=40x
@@ -120,6 +138,7 @@ push.notification.clientConfig=
 
 # json configuration for pwa add to home screen
 manifest.json.path=
+web-app-origin-association.json.path=
 
 #footer custom buttons
 #customButtonUrl1=
@@ -132,4 +151,7 @@ nocache=false
 form.htmllayer.display=false
 
 # maintain http session (store ids in local storage)
-maintain.session=true
\ No newline at end of file
+maintain.session=true
+
+# speaking configuration
+speaking=true
\ No newline at end of file
diff --git a/mobile-war/pom.xml b/mobile-war/pom.xml
index c03b6410b..c756f169c 100644
--- a/mobile-war/pom.xml
+++ b/mobile-war/pom.xml
@@ -30,7 +30,7 @@
   <parent>
     <groupId>org.silverpeas.components</groupId>
     <artifactId>mobile</artifactId>
-    <version>6.4-SNAPSHOT</version>
+    <version>6.4-JR-SNAPSHOT</version>
   </parent>
 
   <groupId>org.silverpeas.components.mobile</groupId>
@@ -396,7 +396,7 @@
     <dependency>
       <groupId>commons-fileupload</groupId>
       <artifactId>commons-fileupload</artifactId>
-      <version>1.4</version>
+      <version>1.5</version>
     </dependency>
 
   </dependencies>
diff --git a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java
index 5a7232db8..65bb4b9a2 100644
--- a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java
+++ b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java
@@ -39,8 +39,8 @@
 import org.silverpeas.core.security.token.TokenGenerator;
 import org.silverpeas.core.security.token.TokenGeneratorProvider;
 import org.silverpeas.core.security.token.synchronizer.SynchronizerToken;
-import org.silverpeas.core.util.ResourceLocator;
-import org.silverpeas.core.util.SettingBundle;
+import org.silverpeas.kernel.bundle.ResourceLocator;
+import org.silverpeas.kernel.bundle.SettingBundle;
 import org.silverpeas.core.util.URLUtil;
 import org.silverpeas.core.web.mvc.controller.MainSessionController;
 
@@ -52,7 +52,6 @@
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
 import java.io.IOException;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -72,40 +71,47 @@ public void destroy() {
   public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
       throws IOException, ServletException {
 
-    String url = ((HttpServletRequest) req).getRequestURL().toString();
+    final HttpServletRequest request = (HttpServletRequest) req;
+    final HttpServletResponse response = (HttpServletResponse) res;
+    String url = request.getRequestURL().toString();
 
     if (url.contains("spmobile") && res != null) {
-      String csp = ((HttpServletResponse) res).getHeader("Content-Security-Policy");
+      String csp = response.getHeader("Content-Security-Policy");
       if (csp != null && !csp.contains("img-src")) {
         csp += "; img-src * data: blob:;";
-        ((HttpServletResponse) res).setHeader("Content-Security-Policy", csp);
+        response.setHeader("Content-Security-Policy", csp);
       }
     }
 
-    Boolean mob = (Boolean) ((HttpServletRequest) req).getSession().getAttribute("isMobile");
-    if (mob != null && !mob) {
+    // the session could not exist
+    final SafeSessionManager session = new SafeSessionManager(request);
+
+    final Boolean mobileAlreadyDetected = session.getAttribute("isMobile", Boolean.class);
+    if (mobileAlreadyDetected != null && !mobileAlreadyDetected) {
       chain.doFilter(req, res);
       return;
     }
 
-    String userAgent = ((HttpServletRequest) req).getHeader("User-Agent");
+    final String userAgent = request.getHeader("User-Agent");
     if (userAgent != null) {
-      boolean isMobile = userAgent.contains("Android") || userAgent.contains("iPhone");
-      ((HttpServletRequest) req).getSession().setAttribute("isMobile", Boolean.valueOf(isMobile));
+      final boolean isMobile = Boolean.TRUE.equals(mobileAlreadyDetected)
+                               || userAgent.contains("Android")
+                               || userAgent.contains("iPhone");
+      session.setAttribute("isMobile", isMobile);
 
-      Boolean tablet = (Boolean) ((HttpServletRequest) req).getSession().getAttribute("tablet");
-      if (tablet == null) {
-        tablet = Boolean.valueOf(false);
-      }
+      final boolean tablet = session.getAttribute("tablet", Boolean.class, false);
 
       boolean redirect = isRedirect(url);
-
       if (isMobile && !url.contains("sso") && !url.contains("services") &&
-          !url.contains("spmobile") && !url.contains(URLUtil.getApplicationURL() + "/chat/") &&
-          !url.contains(URLUtil.getApplicationURL() + "/visio/") &&
-          !url.contains(URLUtil.getApplicationURL() + "/util/") && (!tablet) &&
-          !url.contains("attached_file") && !url.contains("Ticket") &&
-          !url.contains("LinkFile/Key") && redirect) {
+              !url.contains("spmobile") && !url.contains(URLUtil.getApplicationURL() + "/chat/") &&
+              !url.contains(URLUtil.getApplicationURL() + "/media/") &&
+              !url.contains(URLUtil.getApplicationURL() + "/visio/") &&
+              !url.contains(URLUtil.getApplicationURL() + "/util/") && (!tablet) &&
+              !url.contains("attached_file") && !url.contains("Ticket") &&
+              !url.contains("LinkFile/Key")  &&
+              !url.contains("Logout") &&
+              !url.contains("FileServer/vignette") &&
+              !url.contains("FileServer/thumbnail") && redirect) {
         String params = "";
         if (url.contains("Publication")) {
           String id = url.substring(url.lastIndexOf("/") + 1);
@@ -113,6 +119,15 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
           String appId = pub.getInstanceId();
           params = "?shortcutContentType=Publication&shortcutContentId=" + id + "&shortcutAppId=" +
                   appId;
+        } else if (url.contains("/File/")) {
+          String id = url.substring(url.lastIndexOf("/") + 1);
+          String l = request.getParameter("ContentLanguage");
+          params = "?shortcutContentType=Attachment&shortcutContentId=" + id + "&shortcutRole=" + l;
+        } else if (url.contains("/Topic/")) {
+            // sample : /silverpeas/Topic/6278?ComponentId=kmelia2431
+            String id = url.substring(url.lastIndexOf("/")+1);
+            String appId = ((HttpServletRequest) req).getParameter("ComponentId");
+            params = "?shortcutContentType=Folder&shortcutContentId=" + id + "&shortcutAppId=" + appId;
         } else if (url.contains("Form")) {
           // sample : /silverpeas/Form/1?ComponentId=formsOnline1
           String id = url.substring(url.lastIndexOf("/") + 1);
@@ -174,9 +189,15 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
         } else if (url.contains("Contribution")) {
           String contributionId = url.substring(url.lastIndexOf("/") + 1);
           params = "?shortcutContentType=Event&shortcutContributionId=" + contributionId;
+        } else if (url.contains("Space")) {
+          String spaceId = url.substring(url.lastIndexOf("/") + 1);
+          params = "?shortcutContentType=Space&shortcutAppId=" + spaceId;
         } else if (url.contains("Component")) {
           String appId = url.substring(url.lastIndexOf("/") + 1);
           params = "?shortcutContentType=Component&shortcutAppId=" + appId;
+        } else if (url.contains("/needSession")) {
+          String appId = url.replaceAll("/needSession","");
+          params = "?shortcutContentType=Url&shortcutAppId=" + appId;
         } else if (!url.contains("AuthenticationServlet") &&
             (url.endsWith("silverpeas") || url.endsWith("silverpeas/") ||
                 url.contains("/silverpeas/"))) {
@@ -187,10 +208,9 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
           return;
         }
 
-        HttpSession session = ((HttpServletRequest) req).getSession(false);
-        SynchronizerToken token = (SynchronizerToken) session.getAttribute(SESSION_TOKEN_KEY);
-        MainSessionController controller = (MainSessionController) session.getAttribute(
-            MainSessionController.MAIN_SESSION_CONTROLLER_ATT);
+        SynchronizerToken token = session.getAttribute(SESSION_TOKEN_KEY, SynchronizerToken.class);
+        MainSessionController controller = session.getAttribute(
+            MainSessionController.MAIN_SESSION_CONTROLLER_ATT, MainSessionController.class);
         if (controller != null && token == null) {
           //logger.warn("security.web.protection.token is disable");
           // generate fake token for auto login without token security
@@ -200,26 +220,18 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
           session.setAttribute(SESSION_TOKEN_KEY, token);
         }
 
-        if (session.getAttribute(SESSION_PARAMS_KEY) != null && params.isEmpty()) {
-          params = (String) session.getAttribute(SESSION_PARAMS_KEY);
-          session.removeAttribute(SESSION_PARAMS_KEY);
+        if (session.getAttribute(SESSION_PARAMS_KEY, String.class) != null && params.isEmpty()) {
+          params = session.removeAttribute(SESSION_PARAMS_KEY, String.class);
         }
 
         String aDestinationPage = "/silverpeas/spmobile/spmobil.jsp" + params;
         session.setAttribute(SESSION_PARAMS_KEY, params);
-        String urlWithSessionID =
-            ((HttpServletResponse) res).encodeRedirectURL(aDestinationPage.toString());
-        ((HttpServletResponse) res).sendRedirect(urlWithSessionID);
-        return;
-
-      } else {
-        chain.doFilter(req, res);
+        String urlWithSessionID = response.encodeRedirectURL(aDestinationPage);
+        response.sendRedirect(urlWithSessionID);
         return;
       }
-    } else {
-      chain.doFilter(req, res);
-      return;
     }
+    chain.doFilter(req, res);
   }
 
   private String extractSurveyParameters(final ServletRequest req) {
diff --git a/mobile-war/src/main/java/org/silverpeas/bridge/SafeSessionManager.java b/mobile-war/src/main/java/org/silverpeas/bridge/SafeSessionManager.java
new file mode 100644
index 000000000..2792a13fb
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/bridge/SafeSessionManager.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2000 - 2023 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.bridge;
+
+import javax.servlet.http.HttpServletRequest;
+
+import static java.util.Optional.ofNullable;
+
+/**
+ * This class allows handling a session safely against the different request calls.
+ * <p>
+ *   Some synchronized access are performed around session creation and session attribute accesses.
+ * </p>
+ * @author silveryocha
+ */
+public class SafeSessionManager {
+  private static final Object MUTEX = new Object();
+
+  private final HttpServletRequest request;
+
+  public SafeSessionManager(final HttpServletRequest request) {
+    this.request = request;
+  }
+
+  /**
+   * Gets the specified attribute value from the session.
+   * <p>
+   *   If the session does not exists, it is not created.
+   * </p>
+   * <p>
+   *   If no value exists, null is returned.
+   * </p>
+   * @param attributeName the name of the attribute to fetch.
+   * @param aClass the class of the value fetched.
+   * @return the value if any, null otherwise.
+   * @param <T> the type of the value.
+   */
+  public <T> T getAttribute(final String attributeName, final Class<T> aClass) {
+    return getAttribute(attributeName, aClass, null);
+  }
+
+  /**
+   * Gets the specified attribute value from the session.
+   * <p>
+   *   If the session does not exists, it is not created.
+   * </p>
+   * <p>
+   *   If no value exists, default one is returned.
+   * </p>
+   * @param attributeName the name of the attribute to fetch.
+   * @param aClass the class of the value fetched.
+   * @param defaultValue default value of no value fetched from session.
+   * @return the value if any, default value otherwise.
+   * @param <T> the type of the value.
+   */
+  public <T> T getAttribute(final String attributeName, final Class<T> aClass,
+      final T defaultValue) {
+    synchronized (MUTEX) {
+      return ofNullable(request.getSession(false))
+          .map(s -> s.getAttribute(attributeName))
+          .map(aClass::cast)
+          .orElse(defaultValue);
+    }
+  }
+
+  /**
+   * Sets the specified attribute value into the session.
+   * <p>
+   *   If the session does not exist, it is created.
+   * </p>
+   * @param attributeName the name of the attribute to fetch.
+   * @param value the value to put.
+   * @param <T> the type of the value.
+   */
+  public <T> void setAttribute(final String attributeName, final T value) {
+    synchronized (MUTEX) {
+      request.getSession().setAttribute(attributeName, value);
+    }
+  }
+
+  /**
+   * Removes from the session the specified attribute.
+   * <p>
+   *   If the session does not exist, nothing is performed.
+   * </p>
+   * @param attributeName the name of the attribute to fetch.
+   * @param aClass the class of the value fetched.
+   * @return the removed value if any, null otherwise.
+   * @param <T> the type of the value.
+   */
+  public <T> T removeAttribute(final String attributeName, final Class<T> aClass) {
+    synchronized (MUTEX) {
+      final T value = getAttribute(attributeName, aClass);
+      ofNullable(request.getSession(false))
+          .ifPresent(s -> s.removeAttribute(attributeName));
+      return value;
+    }
+  }
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java
index 93283e058..a480e82a5 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java
@@ -74,14 +74,17 @@
 import org.silverpeas.mobile.client.common.event.authentication.AuthenticationEventHandler;
 import org.silverpeas.mobile.client.common.mobil.MobilUtils;
 import org.silverpeas.mobile.client.common.mobil.Orientation;
+import org.silverpeas.mobile.client.common.navigation.LinksManager;
 import org.silverpeas.mobile.client.common.navigation.PageHistory;
 import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly;
 import org.silverpeas.mobile.client.common.network.NetworkHelper;
+import org.silverpeas.mobile.client.common.resources.ResourcesManager;
 import org.silverpeas.mobile.client.common.storage.CacheStorageHelper;
 import org.silverpeas.mobile.client.common.storage.LocalStorageHelper;
 import org.silverpeas.mobile.client.components.base.Page;
 import org.silverpeas.mobile.client.components.base.events.window.OrientationChangeEvent;
 import org.silverpeas.mobile.client.pages.connexion.ConnexionPage;
+import org.silverpeas.mobile.client.pages.cookies.CookiesPage;
 import org.silverpeas.mobile.client.pages.main.HomePage;
 import org.silverpeas.mobile.client.pages.search.SearchResultPage;
 import org.silverpeas.mobile.client.pages.termsofservice.TermsOfServicePage;
@@ -94,6 +97,7 @@
 import org.silverpeas.mobile.shared.dto.authentication.UserProfileDTO;
 import org.silverpeas.mobile.shared.dto.configuration.Config;
 import org.silverpeas.mobile.shared.dto.configuration.IConfig;
+import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO;
 import org.silverpeas.mobile.shared.dto.search.ResultDTO;
 import org.silverpeas.mobile.shared.exceptions.AuthenticationException;
 
@@ -135,6 +139,7 @@ public static UserProfileDTO getUserProfile() {
 
   public static void setUser(final DetailUserDTO user) {
     SpMobil.user = user;
+    displayPersonnalApps();
   }
 
 
@@ -142,9 +147,15 @@ public static void setUser(final DetailUserDTO user) {
    * Init. spmobile.
    */
   public void onModuleLoad() {
+    exportNativeFunctions();
+    checkVersion();
+
     // init connexion supervision
     NetworkHelper.getInstance();
 
+    setFontSize(getConfiguration().getFontSize());
+    setFilter(getConfiguration());
+
     instance = this;
     shortcutAppId = Window.Location.getParameter("shortcutAppId");
     shortcutContentType = Window.Location.getParameter("shortcutContentType");
@@ -177,7 +188,9 @@ public void onModuleLoad() {
     EventBus.getInstance().addHandler(ExceptionEvent.TYPE, new ErrorManager());
     EventBus.getInstance().addHandler(AbstractAuthenticationErrorEvent.TYPE, this);
 
-    loadIds(null);
+    SSO = !ResourcesManager.getSSOPath().isEmpty();
+
+    displayFirstPage();
 
     NodeList<Element> tags = Document.get().getElementsByTagName("meta");
     for (int i = 0; i < tags.getLength(); i++) {
@@ -222,6 +235,27 @@ public void onResize(final ResizeEvent resizeEvent) {
     apps.add(new ResourcesManagerApp());
   }
 
+  private static void checkVersion() {
+    String  buildDate = ResourcesManager.getParam("build.date");
+    String lastBuild = LocalStorageHelper.getInstance().load("build.date");
+    if (lastBuild != null && !buildDate.equals(lastBuild)) {
+      // clear cache
+      AuthentificationManager.getInstance().clearCache();
+    }
+    if (lastBuild == null || lastBuild.isEmpty()) LocalStorageHelper.getInstance().storeBuildDate();
+  }
+
+  public void displayFirstPage() {
+    checkVersion();
+    boolean displayCookiesInformation = Boolean.parseBoolean(ResourcesManager.getParam("displayCookiesInformation"));
+    String cookie = Cookies.getCookie("accept_cookies");
+    if (displayCookiesInformation && (cookie == null || cookie.isEmpty())) {
+      displayCookiesPage();
+    } else {
+      loadIds(null);
+    }
+  }
+
   public static Page getMainPage() {
     if (mainPage == null) {
       mainPage = new Page();
@@ -256,7 +290,7 @@ private static void login(final FullUserDTO user, final String password, Command
   }
 
   public static void displayMainPage() {
-
+    SpMobil.getMainPage().showFooter();
     if (!Window.Location.getHref().contains("?locale=") &&
         !user.getLanguage().equalsIgnoreCase("fr")) {
       Window.Location.replace(Window.Location.getHref() + "?locale=" + user.getLanguage());
@@ -264,20 +298,24 @@ public static void displayMainPage() {
     getMainPage().setUser(user);
     RootPanel.get().clear();
     RootPanel.get().add(getMainPage());
+    PageHistory.getInstance().clear();
     PageHistory.getInstance().goTo(new HomePage());
 
-    if ((shortcutAppId != null && shortcutContentType != null && shortcutContentId != null) ||
-        shortcutContributionId != null ||
-        (shortcutContentType != null && shortcutContentType.equals("Component") &&
-            shortcutAppId != null)) {
+    if ((shortcutContentType != null && shortcutContentId != null) ||
+            (shortcutAppId != null && shortcutContentType != null && shortcutContentId != null) ||
+            shortcutContributionId != null ||
+            (shortcutContentType != null && (shortcutContentType.equals("Component") ||
+                    shortcutContentType.equals("Space")) && shortcutAppId != null)) {
       ShortCutRouter.route(user, shortcutAppId, shortcutContentType, shortcutContentId,
           shortcutContributionId, shortcutRole);
+    } else if (shortcutContentType != null && shortcutContentType.equalsIgnoreCase("Url") && shortcutAppId != null) {
+      LinksManager.openIframePage(shortcutAppId);
     } else {
       MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<HomePageDTO>() {
 
         @Override
         public void attempt() {
-          ServicesLocator.getServiceNavigation().getHomePageData(null, this);
+          ServicesLocator.getServiceNavigation().getHomePageData(null, SpMobil.getContentZoomLevel(), this);
         }
 
         @Override
@@ -296,10 +334,33 @@ public void onSuccess(final Method method, final HomePageDTO result) {
     }
   }
 
+  private static void displayPersonnalApps () {
+    if (getUser() != null && !getMainPage().isPersonalAppsInitialized()) {
+      MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<List<ApplicationInstanceDTO>>() {
+        @Override
+        public void attempt() {
+          ServicesLocator.getServiceNavigation().getPersonnalSpaceContent(getUser().getId(), this);
+        }
+
+        @Override
+        public void onSuccess(Method method, List<ApplicationInstanceDTO> applicationInstanceDTOS) {
+          getMainPage().setPersonalApps(applicationInstanceDTOS);
+        }
+      };
+      action.attempt();
+    }
+  }
+
   public static void displayTermsOfServicePage() {
     RootPanel.get().clear();
     RootPanel.get().add(getMainPage());
-    SpMobil.getMainPage().setContent(new TermsOfServicePage());
+    SpMobil.getMainPage().setContent(new TermsOfServicePage(), true);
+  }
+
+  public static void displayCookiesPage() {
+    RootPanel.get().clear();
+    RootPanel.get().add(getMainPage());
+    SpMobil.getMainPage().setContent(new CookiesPage(), true);
   }
 
   /**
@@ -334,7 +395,7 @@ public void onSuccess(final Method method, final DetailUserDTO detailUserDTO) {
           super.onSuccess(method, detailUserDTO);
           setUser(detailUserDTO);
           setUserProfile(UserProfileDTO.getBean(
-              LocalStorageHelper.load(AuthentificationManager.USER_PROFIL, IUserProfile.class)));
+              LocalStorageHelper.getInstance().load(AuthentificationManager.USER_PROFIL, IUserProfile.class)));
           if (getUserProfile() == null) {
             UserProfileDTO p = new UserProfileDTO();
             p.setFullName(detailUserDTO.getFirstName() + " " + detailUserDTO.getLastName());
@@ -370,7 +431,7 @@ public void onFailure(final Method method, final Throwable t) {
           tryToRelogin(attempt);
         }
       };
-      SSO = true;
+      action.setRelogin(false);
       action.attempt();
     } else {
       //Login
@@ -384,6 +445,7 @@ public static boolean isSSO() {
   }
 
   private void tryToRelogin(final Command attempt) {
+    checkVersion();
     FullUserDTO user = AuthentificationManager.getInstance().loadUser();
     if (user != null) {
       String password = AuthentificationManager.getInstance().decryptPassword(user.getPassword());
@@ -443,9 +505,11 @@ public void onSuccess(final Method method, final Boolean desktopMode) {
   }
 
   public static void displayLoginPage(AuthenticationException error) {
+    checkVersion();
     ConnexionPage connexionPage = new ConnexionPage();
     connexionPage.setAuthenticateError(error);
     RootPanel.get().clear();
+    PageHistory.getInstance().clear();
     RootPanel.get().add(connexionPage);
   }
 
@@ -518,7 +582,7 @@ public static void destroyMainPage() {
   }
 
   public static Config getConfiguration() {
-    AutoBean<IConfig> conf = LocalStorageHelper.load("config", IConfig.class);
+    AutoBean<IConfig> conf = LocalStorageHelper.getInstance().load("config", IConfig.class);
     Config config = null;
     if (conf == null) {
       config = Config.getDefaultConfig();
@@ -529,8 +593,34 @@ public static Config getConfiguration() {
     return config;
   }
 
+  public static String getContentZoomLevel() {
+    double z = getConfiguration().getFontSize() / 10d;
+    return String.valueOf(z);
+  }
+
   @Override
   public void onAuthenticationError(final AbstractAuthenticationErrorEvent event) {
     displayLoginPage(((AuthenticationException) event.getException()));
   }
+
+  public static native void exportNativeFunctions()/*-{
+    $wnd.navigateTo = $entry(@org.silverpeas.mobile.client.common.navigation.LinksManager::navigateToPermalink(*));
+  }-*/;
+
+  public static void setFontSize(int value) {
+    Document.get().getBody().setAttribute("style", "font-size:"+value+"pt;");
+  }
+
+  public static void setFilter(Config configuration) {
+    if (configuration.isStandard()) {
+      Document.get().getElementsByTagName("html").getItem(0).setAttribute("style","");
+    } else if (configuration.isGrayscale()) {
+      Document.get().getElementsByTagName("html").getItem(0).setAttribute("style","filter:grayscale(1);");
+    } else if (configuration.isSepia()) {
+      Document.get().getElementsByTagName("html").getItem(0).setAttribute("style","filter:sepia(1);");
+    } else if (configuration.isInverse()) {
+      Document.get().getElementsByTagName("html").getItem(0).setAttribute("style","filter:invert(1);");
+    }
+  }
+
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/AgendaApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/AgendaApp.java
index fbbe8239e..27709beec 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/AgendaApp.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/AgendaApp.java
@@ -26,28 +26,12 @@
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.i18n.client.DateTimeFormat;
-import com.google.gwt.user.client.Window;
 import com.google.gwt.user.datepicker.client.CalendarUtil;
 import org.fusesource.restygwt.client.Method;
 import org.silverpeas.mobile.client.SpMobil;
 import org.silverpeas.mobile.client.apps.agenda.events.TimeRange;
-import org.silverpeas.mobile.client.apps.agenda.events.app.AbstractAgendaAppEvent;
-import org.silverpeas.mobile.client.apps.agenda.events.app.AgendaAppEventHandler;
-import org.silverpeas.mobile.client.apps.agenda.events.app.AttachmentsLoadEvent;
-import org.silverpeas.mobile.client.apps.agenda.events.app.CalendarLoadEvent;
-import org.silverpeas.mobile.client.apps.agenda.events.app.ParticipationEvent;
-import org.silverpeas.mobile.client.apps.agenda.events.app.ReminderCreateEvent;
-import org.silverpeas.mobile.client.apps.agenda.events.app.ReminderDeleteEvent;
-import org.silverpeas.mobile.client.apps.agenda.events.app.ReminderUpdateEvent;
-import org.silverpeas.mobile.client.apps.agenda.events.app.RemindersLoadEvent;
-import org.silverpeas.mobile.client.apps.agenda.events.pages.AbstractAgendaPagesEvent;
-import org.silverpeas.mobile.client.apps.agenda.events.pages.AgendaPagesEventHandler;
-import org.silverpeas.mobile.client.apps.agenda.events.pages.AttachmentsLoadedEvent;
-import org.silverpeas.mobile.client.apps.agenda.events.pages.CalendarLoadedEvent;
-import org.silverpeas.mobile.client.apps.agenda.events.pages.ParticipationUpdatedEvent;
-import org.silverpeas.mobile.client.apps.agenda.events.pages.ReminderAddedEvent;
-import org.silverpeas.mobile.client.apps.agenda.events.pages.ReminderDeletedEvent;
-import org.silverpeas.mobile.client.apps.agenda.events.pages.RemindersLoadedEvent;
+import org.silverpeas.mobile.client.apps.agenda.events.app.*;
+import org.silverpeas.mobile.client.apps.agenda.events.pages.*;
 import org.silverpeas.mobile.client.apps.agenda.pages.AgendaPage;
 import org.silverpeas.mobile.client.apps.agenda.pages.EventPage;
 import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages;
@@ -60,7 +44,9 @@
 import org.silverpeas.mobile.client.common.ServicesLocator;
 import org.silverpeas.mobile.client.common.app.App;
 import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly;
+import org.silverpeas.mobile.shared.dto.BaseDTO;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
+import org.silverpeas.mobile.shared.dto.UserDTO;
 import org.silverpeas.mobile.shared.dto.almanach.CalendarDTO;
 import org.silverpeas.mobile.shared.dto.almanach.CalendarEventAttendeeDTO;
 import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO;
@@ -140,6 +126,7 @@ public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) {
 
       AgendaPage page = new AgendaPage();
       page.setPageTitle(event.getInstance().getLabel());
+      loadUsersAndGroups(page);
 
       MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<List<CalendarDTO>>() {
         @Override
@@ -438,6 +425,24 @@ public void attempt() {
     action.attempt();
   }
 
+  @Override
+  public void createEvent(EventCreateEvent event) {
+    MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<CalendarEventDTO>() {
+      @Override
+      public void attempt() {
+        super.attempt();
+        ServicesLocator.getServiceAlmanach().createEvent(getApplicationInstance().getId(), event.getEvent().getCalendar().getId(), event.getEvent(), this);
+      }
+
+      @Override
+      public void onSuccess(Method method, CalendarEventDTO event) {
+        super.onSuccess(method, event);
+        EventBus.getInstance().fireEvent(new EventSavedEvent());
+      }
+    };
+    action.attempt();
+  }
+
   private CalendarEventAttendeeDTO getUserAttendee(final List<CalendarEventAttendeeDTO> attendees) {
     CalendarEventAttendeeDTO attendee = null;
     for (CalendarEventAttendeeDTO attendeeDTO : attendees) {
@@ -448,5 +453,33 @@ private CalendarEventAttendeeDTO getUserAttendee(final List<CalendarEventAttende
     }
     return attendee;
   }
+
+  public void loadUsersAndGroups(AgendaPage page) {
+
+    MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<List<BaseDTO>>() {
+      @Override
+      public void attempt() {
+        super.attempt();
+        String appId = getApplicationInstance().getId();
+        if (getApplicationInstance().getPersonnal()) appId = null;
+        ServicesLocator.getServiceNotifications()
+                .getAllowedUsersAndGroups(appId, null, this);
+      }
+
+      @Override
+      public void onSuccess(final Method method, final List<BaseDTO> baseDTOS) {
+        super.onSuccess(method, baseDTOS);
+        List<BaseDTO> users = new ArrayList<>();
+        for (BaseDTO dto : baseDTOS) {
+          if (dto instanceof UserDTO) {
+            users.add(dto);
+          }
+        }
+        page.setAllowedUsersAndGroups(users);
+      }
+    };
+    action.attempt();
+  }
+
 }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/app/AgendaAppEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/app/AgendaAppEventHandler.java
index db193ad9c..88638ee05 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/app/AgendaAppEventHandler.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/app/AgendaAppEventHandler.java
@@ -37,4 +37,6 @@ public interface AgendaAppEventHandler extends EventHandler{
   void loadAttachments(AttachmentsLoadEvent event);
 
   void participation(ParticipationEvent participationEvent);
+
+  void createEvent(EventCreateEvent event);
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/app/EventCreateEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/app/EventCreateEvent.java
new file mode 100644
index 000000000..23e0817f4
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/app/EventCreateEvent.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.apps.agenda.events.app;
+
+import org.silverpeas.mobile.shared.dto.almanach.CalendarEventCreationDTO;
+import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO;
+import org.silverpeas.mobile.shared.dto.reminder.ReminderDTO;
+
+public class EventCreateEvent extends AbstractAgendaAppEvent {
+  private CalendarEventCreationDTO event;
+
+  public EventCreateEvent(CalendarEventCreationDTO event) {
+    super();
+    this.event = event;
+  }
+
+  @Override
+  protected void dispatch(AgendaAppEventHandler handler) {
+    handler.createEvent(this);
+  }
+
+
+  public CalendarEventCreationDTO getEvent() {
+    return event;
+  }
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsResources.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/AbstractEditEventPagesEvent.java
similarity index 66%
rename from mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsResources.java
rename to mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/AbstractEditEventPagesEvent.java
index c3e7f7493..0157c4b01 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsResources.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/AbstractEditEventPagesEvent.java
@@ -22,31 +22,23 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package org.silverpeas.mobile.client.apps.documents.resources;
+package org.silverpeas.mobile.client.apps.agenda.events.pages;
 
-import com.google.gwt.resources.client.ClientBundle;
-import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.event.shared.GwtEvent;
 
-public interface DocumentsResources extends ClientBundle {
-	
-	@Source("documents.css")
-	DocumentsCSS css();
-		
-	@Source("word.gif")
-	ImageResource msword();
-	
-	@Source("excel.gif")	
-	ImageResource msexcel();
-	
-	@Source("powerpoint.gif")	
-	ImageResource mspowerpoint();
+public abstract class AbstractEditEventPagesEvent extends GwtEvent<EditEventPagesEventHandler> {
 
-	@Source("image.gif")
-	ImageResource image();
-	
-	@Source("pdf.gif")
-	ImageResource pdf();
-	
-	@Source("unknown.gif")
-	ImageResource unknown();
+  public static Type<EditEventPagesEventHandler> TYPE = new Type<EditEventPagesEventHandler>();
+
+  public AbstractEditEventPagesEvent() {
+  }
+
+  public static Type<EditEventPagesEventHandler> getTYPE() {
+    return TYPE;
+  }
+
+  @Override
+  public Type<EditEventPagesEventHandler> getAssociatedType() {
+    return TYPE;
+  }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/documents.css b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/EditEventPagesEventHandler.java
similarity index 81%
rename from mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/documents.css
rename to mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/EditEventPagesEventHandler.java
index 0b6e1ac56..cc8918ede 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/documents.css
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/EditEventPagesEventHandler.java
@@ -22,26 +22,11 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-@sprite .msword {
-	gwt-image: "msword";
-}
-
-@sprite .msexcel {
-	gwt-image: "msexcel";	
-}
+package org.silverpeas.mobile.client.apps.agenda.events.pages;
 
-@sprite .mspowerpoint {
-	gwt-image: "mspowerpoint";
-}
+import com.google.gwt.event.shared.EventHandler;
 
-@sprite .pdf {
-	gwt-image: "pdf";	
-}
+public interface EditEventPagesEventHandler extends EventHandler {
+  void onEventSaved(EventSavedEvent event);
 
-@sprite .image {
-	gwt-image: "image";	
 }
-
-@sprite .unknown {
-	gwt-image: "unknown";		
-}
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/EventSavedEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/EventSavedEvent.java
new file mode 100644
index 000000000..a566bc059
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/EventSavedEvent.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.apps.agenda.events.pages;
+
+public class EventSavedEvent extends AbstractEditEventPagesEvent {
+
+  public EventSavedEvent(){
+    super();
+  }
+
+  @Override
+  protected void dispatch(EditEventPagesEventHandler handler) {
+    handler.onEventSaved(this);
+  }
+
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java
index 863c2bc15..595a09367 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java
@@ -32,6 +32,7 @@
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.HTMLPanel;
 import com.google.gwt.user.client.ui.ListBox;
@@ -48,8 +49,9 @@
 import org.silverpeas.mobile.client.common.DateUtil;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.components.base.widgets.AddButton;
+import org.silverpeas.mobile.shared.dto.BaseDTO;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.almanach.CalendarDTO;
 import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO;
@@ -67,9 +69,6 @@ public class AgendaPage extends PageContent implements AgendaPagesEventHandler {
 
   @UiField(provided = true) protected AgendaMessages msg = null;
 
-  @UiField
-  ActionsMenu actionsMenu;
-
   @UiField
   UnorderedList events;
 
@@ -85,9 +84,20 @@ public class AgendaPage extends PageContent implements AgendaPagesEventHandler {
   @UiField
   SpanElement message;
 
-  private AddToFavoritesButton favorite = new AddToFavoritesButton();
+  private AddToFavoritesButton buttonFavorite = new AddToFavoritesButton();
+  private AddButton buttonCreate = new AddButton();
+
+  private List<BaseDTO> allowedUsersAndGroups;
 
-  interface AgendaPageUiBinder extends UiBinder<Widget, AgendaPage> {
+    public void setAllowedUsersAndGroups(List<BaseDTO> baseDTOS) {
+      this.allowedUsersAndGroups = baseDTOS;
+    }
+
+    public List<BaseDTO> getAllowedUsersAndGroups() {
+      return this.allowedUsersAndGroups;
+    }
+
+    interface AgendaPageUiBinder extends UiBinder<Widget, AgendaPage> {
   }
 
   public AgendaPage() {
@@ -98,6 +108,17 @@ public AgendaPage() {
     week.getElement().setId("btn-week");
     mouth.getElement().setId("btn-month");
     EventBus.getInstance().addHandler(AbstractAgendaPagesEvent.TYPE, this);
+    buttonCreate.setCallback(new Command() {
+      @Override
+      public void execute() {
+        EditEventPage edit = new EditEventPage();
+        edit.setData(getApp().getApplicationInstance(), calendars);
+        edit.setAllowedUsersAndGroups(getAllowedUsersAndGroups());
+        edit.setCurrentTimeRange(currentTimeRange);
+        edit.show();
+      }
+    });
+    buttonCreate.setId("create-event");
   }
 
   public void setCalendars(final List<CalendarDTO> cals) {
@@ -152,10 +173,13 @@ public void onCalendarEventsLoaded(final CalendarLoadedEvent event) {
           int endYear = DateUtil.getYear(endDate);
           for (GroupItem groupItem : groups) {
             if ((groupItem.getNumber() >= startWeek && groupItem.getNumber() <= endWeek) || (groupItem.getNumber() >= startWeek && endYear > startYear)) {
-              EventItem item = new EventItem();
-              item.showCalendarName(isMultiCalendar());
-              item.setData(event.getInstance(), dto, getCalendar(dto.getCalendarId()));
-              groupItem.addEvent(item);
+              CalendarDTO cal = getCalendar(dto.getCalendarId());
+              if (cal != null) {
+                EventItem item = new EventItem();
+                item.showCalendarName(isMultiCalendar());
+                item.setData(event.getInstance(), dto, cal);
+                groupItem.addEvent(item);
+              }
             }
           }
         }
@@ -196,10 +220,13 @@ public void onCalendarEventsLoaded(final CalendarLoadedEvent event) {
 
           for (GroupItem groupItem : groups) {
             if ((groupItem.getNumber() >= startMonth && groupItem.getNumber() <= endMonth) && groupItem.getYear() == startYear && groupItem.getYear() == endYear  || (groupItem.getNumber() >= startMonth && endYear > startYear)) {
-              EventItem item = new EventItem();
-              item.showCalendarName(isMultiCalendar());
-              item.setData(event.getInstance(), dto, getCalendar(dto.getCalendarId()));
-              groupItem.addEvent(item);
+              CalendarDTO cal = getCalendar(dto.getCalendarId());
+              if (cal != null) {
+                EventItem item = new EventItem();
+                item.showCalendarName(isMultiCalendar());
+                item.setData(event.getInstance(), dto, cal);
+                groupItem.addEvent(item);
+              }
             }
           }
         }
@@ -215,8 +242,15 @@ public void onCalendarEventsLoaded(final CalendarLoadedEvent event) {
     } else {
       message.setInnerText(msg.noEvent());
     }
-    actionsMenu.addAction(favorite);
-    favorite.init(getApp().getApplicationInstance().getId(), getApp().getApplicationInstance().getId(), ContentsTypes.Component.name(), getPageTitle());
+    if (!event.getInstance().getPersonnal()) {
+      addActionMenu(buttonFavorite);
+      buttonFavorite.init(getApp().getApplicationInstance().getId(), getApp().getApplicationInstance().getId(), ContentsTypes.Component.name(), getPageTitle());
+      if (event.getInstance().getRights().getWriter() || event.getInstance().getRights().getPublisher() || event.getInstance().getRights().getManager()) {
+        addActionShortcut(buttonCreate);
+      }
+    } else {
+      addActionShortcut(buttonCreate);
+    }
   }
 
   private CalendarDTO getCalendar(final String calendarId) {
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.ui.xml
index b07b1954f..3226ad9aa 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.ui.xml
@@ -31,7 +31,6 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <h2 class="appHeader"></h2>
 
     <div class="ui-corner-all ui-control-horizontal">
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java
new file mode 100644
index 000000000..3f59d10c9
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java
@@ -0,0 +1,288 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.apps.agenda.pages;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.DivElement;
+import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.ui.*;
+import org.silverpeas.mobile.client.apps.agenda.events.TimeRange;
+import org.silverpeas.mobile.client.apps.agenda.events.app.CalendarLoadEvent;
+import org.silverpeas.mobile.client.apps.agenda.events.app.EventCreateEvent;
+import org.silverpeas.mobile.client.apps.agenda.events.pages.*;
+import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages;
+import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.components.userselection.UserSelectionPage;
+import org.silverpeas.mobile.client.components.userselection.events.components.AbstractUserSelectionComponentEvent;
+import org.silverpeas.mobile.client.components.userselection.events.components.UserSelectionComponentEventHandler;
+import org.silverpeas.mobile.client.components.userselection.events.components.UsersAndGroupsSelectedEvent;
+import org.silverpeas.mobile.client.components.userselection.events.pages.AllowedUsersAndGroupsLoadedEvent;
+import org.silverpeas.mobile.client.resources.ApplicationResources;
+import org.silverpeas.mobile.shared.dto.BaseDTO;
+import org.silverpeas.mobile.shared.dto.GroupDTO;
+import org.silverpeas.mobile.shared.dto.UserDTO;
+import org.silverpeas.mobile.shared.dto.almanach.*;
+import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author svu
+ */
+public class EditEventPage extends PageContent implements EditEventPagesEventHandler, UserSelectionComponentEventHandler {
+  private static EditEventPageUiBinder uiBinder = GWT.create(EditEventPageUiBinder.class);
+  private ApplicationResources resources = GWT.create(ApplicationResources.class);
+
+  @UiField(provided = true) protected AgendaMessages msg = null;
+
+  @UiField
+  HTMLPanel container;
+
+  @UiField
+  TextBox title, startDate, endDate;
+
+  @UiField
+  TextArea description;
+
+  @UiField
+  CheckBox allDay;
+
+  @UiField
+  RadioButton important, notimportant, publique, prive;
+
+  @UiField
+  ListBox frequency, calendars;
+
+  @UiField
+  Anchor submit, selectionButton;
+
+  @UiField
+  DivElement participantsSelected, icon;
+
+  private List<BaseDTO> allowedUsersAndGroups;
+
+  private List<BaseDTO> selectedUsersAndGroups;
+
+  private TimeRange currentTimeRange;
+
+  public void setAllowedUsersAndGroups(List<BaseDTO> allowedUsersAndGroups) {
+    this.allowedUsersAndGroups = allowedUsersAndGroups;
+  }
+
+  public void setCurrentTimeRange(TimeRange currentTimeRange) {
+    this.currentTimeRange = currentTimeRange;
+  }
+
+  interface EditEventPageUiBinder extends UiBinder<Widget, EditEventPage> {
+  }
+
+  public EditEventPage() {
+    msg = GWT.create(AgendaMessages.class);
+    setPageTitle(msg.newtitleEvent());
+    initWidget(uiBinder.createAndBindUi(this));
+    container.getElement().setId("eventForm");
+    title.getElement().setAttribute("placeholder", msg.titleField());
+    description.getElement().setAttribute("placeholder", msg.descriptionField());
+    description.getElement().setAttribute("rows", "6");
+    startDate.getElement().setAttribute("type", "date");
+    endDate.getElement().setAttribute("type", "date");
+    notimportant.setValue(true);
+    publique.setValue(true);
+    submit.getElement().addClassName("formIncomplete");
+    EventBus.getInstance().addHandler(AbstractEditEventPagesEvent.TYPE, this);
+    EventBus.getInstance().addHandler(AbstractUserSelectionComponentEvent.TYPE, this);
+    allDay.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
+      @Override
+      public void onValueChange(ValueChangeEvent<Boolean> valueChangeEvent) {
+        if (valueChangeEvent.getValue()) {
+          startDate.getElement().setAttribute("type", "date");
+          endDate.getElement().setAttribute("type", "date");
+        } else {
+          startDate.getElement().setAttribute("type", "datetime-local");
+          endDate.getElement().setAttribute("type", "datetime-local");
+        }
+      }
+    });
+
+    frequency.addItem(msg.frequencyNone(), "NONE");
+    frequency.addItem(msg.frequencyDay(), "DAY");
+    frequency.addItem(msg.frequencyWeek(), "WEEK");
+    frequency.addItem(msg.frequencyMouth(), "MONTH");
+    frequency.addItem(msg.frequencyYear(), "YEAR");
+
+    icon.setInnerHTML(resources.peoples().getText());
+  }
+
+  public void setData(ApplicationInstanceDTO instance, List<CalendarDTO> calendarsDTO) {
+    for (CalendarDTO dto : calendarsDTO) {
+      calendars.addItem(dto.getTitle(), dto.getId());
+    }
+  }
+
+  @UiHandler("title")
+  protected void changeTitle(ChangeEvent event) {
+    validateForm();
+  }
+
+  @UiHandler("startDate")
+  protected void changeStartDate(ChangeEvent event) {
+    endDate.getElement().setAttribute("min", startDate.getValue());
+    if (startDate.getText().isEmpty()) {
+      startDate.getElement().addClassName("formMandatoryField");
+    } else {
+      startDate.getElement().removeClassName("formMandatoryField");
+    }
+    validateForm();
+  }
+
+  @UiHandler("endDate")
+  protected void changeEndDate(ChangeEvent event) {
+    startDate.getElement().setAttribute("max", endDate.getValue());
+    if (endDate.getText().isEmpty()) {
+      endDate.getElement().addClassName("formMandatoryField");
+    } else {
+      endDate.getElement().removeClassName("formMandatoryField");
+    }
+    validateForm();
+  }
+
+  private boolean validateForm() {
+    boolean valid = !startDate.getText().isEmpty() && !endDate.getText().isEmpty() && !title.getText().isEmpty();
+    if (valid) {
+      submit.getElement().removeClassName("formIncomplete");
+    } else {
+      submit.getElement().addClassName("formIncomplete");
+    }
+    return valid;
+  }
+
+  @UiHandler("submit")
+  protected void save(ClickEvent event) {
+    if (!submit.getElement().hasClassName("formIncomplete")) {
+      CalendarEventCreationDTO dto = new CalendarEventCreationDTO();
+      dto.setEventType("CalendarEvent");
+      dto.setOccurrenceType("CalendarEventOccurrence");
+      dto.setEventId("volatile-" + new Date().getTime());
+      CalendarDTO calendarDTO = new CalendarDTO();
+      calendarDTO.setId(calendars.getSelectedValue());
+      dto.setCalendar(calendarDTO);
+      dto.setTitle(title.getText());
+      dto.setOnAllDay(allDay.getValue());
+      if (allDay.getValue()) {
+        dto.setStartDate(startDate.getText());
+        dto.setEndDate(endDate.getText());
+      } else {
+        dto.setStartDate(startDate.getText()+":00+01:00");
+        dto.setEndDate(endDate.getText()+":00+01:00");
+      }
+      dto.setDescription(description.getText());
+      if (important.getValue()) dto.setPriority(PriorityDTO.HIGH.name());
+      if (notimportant.getValue()) dto.setPriority(PriorityDTO.NORMAL.name());
+      if (publique.getValue()) dto.setVisibility(VisibilityLevelDTO.PUBLIC.name());
+      if (prive.getValue()) dto.setVisibility(VisibilityLevelDTO.PRIVATE.name());
+      if (!frequency.getSelectedValue().equals("NONE")) {
+        CalendarEventRecurrenceDTO rec = new CalendarEventRecurrenceDTO();
+        CalendarEventRecurrenceDTO.FrequencyDTO freq = new CalendarEventRecurrenceDTO.FrequencyDTO();
+        freq.setTimeUnit(TimeUnitDTO.valueOf(frequency.getSelectedValue()));
+        freq.setInterval(1);
+        rec.setFrequency(freq);
+        dto.setRecurrence(rec);
+      }
+      dto.setAttendees(getAttendees());
+      EventCreateEvent ev = new EventCreateEvent(dto);
+      EventBus.getInstance().fireEvent(ev);
+    }
+  }
+
+  private List<CalendarEventAttendeeDTO> getAttendees() {
+    List<CalendarEventAttendeeDTO> attendees = new ArrayList<>();
+    if (selectedUsersAndGroups != null) {
+      for (BaseDTO sel : selectedUsersAndGroups) {
+        CalendarEventAttendeeDTO a = new CalendarEventAttendeeDTO();
+        a.setId(sel.getId());
+        if (sel instanceof UserDTO) {
+          a.setFullName(((UserDTO) sel).getFirstName() + ((UserDTO) sel).getLastName());
+        }
+        a.setParticipationStatus(ParticipationStatusDTO.AWAITING);
+        a.setPresenceStatus(PresenceStatusDTO.INFORMATIVE);
+        attendees.add(a);
+      }
+    }
+    return attendees;
+  }
+
+  @UiHandler("selectionButton")
+  protected  void onUserSelection(ClickEvent event) {
+    UserSelectionPage page = new UserSelectionPage();
+    if (selectedUsersAndGroups != null) {
+      List<String> ids = new ArrayList<>();
+      for (BaseDTO sel : selectedUsersAndGroups) {
+        if (sel instanceof UserDTO) ids.add(sel.getId());
+      }
+      page.setPreSelectedUsersIds(ids);
+    }
+    page.show();
+    AllowedUsersAndGroupsLoadedEvent ev = new AllowedUsersAndGroupsLoadedEvent(allowedUsersAndGroups, true);
+    EventBus.getInstance().fireEvent(ev);
+  }
+
+  @Override
+  public void onUsersAndGroupSelected(UsersAndGroupsSelectedEvent event) {
+    this.selectedUsersAndGroups = event.getUsersAndGroupsSelected();
+    String selectionNames = "";
+    for (BaseDTO sel : selectedUsersAndGroups) {
+      if (sel instanceof UserDTO) {
+        selectionNames += ((UserDTO) sel).getFirstName() + " " + ((UserDTO) sel).getLastName() + " , ";
+      } else if (sel instanceof GroupDTO) {
+        selectionNames += ((GroupDTO) sel).getName() + " , ";
+      }
+    }
+    selectionNames = selectionNames.substring(0, selectionNames.length() - 2);
+    participantsSelected.setInnerText(selectionNames);
+  }
+
+  @Override
+  public void onEventSaved(EventSavedEvent event) {
+    back();
+    EventBus.getInstance().fireEvent(new CalendarLoadEvent(null, currentTimeRange));
+  }
+
+  @Override
+  public void stop() {
+    EventBus.getInstance().removeHandler(AbstractUserSelectionComponentEvent.TYPE, this);
+    EventBus.getInstance().removeHandler(AbstractEditEventPagesEvent.TYPE, this);
+    super.stop();
+  }
+
+}
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.ui.xml
new file mode 100644
index 000000000..10af8a2c4
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.ui.xml
@@ -0,0 +1,85 @@
+<!--
+  ~ Copyright (C) 2000 - 2022 Silverpeas
+  ~
+  ~ This program is free software: you can redistribute it and/or modify
+  ~ it under the terms of the GNU Affero General Public License as
+  ~ published by the Free Software Foundation, either version 3 of the
+  ~ License, or (at your option) any later version.
+  ~
+  ~ As a special exception to the terms and conditions of version 3.0 of
+  ~ the GPL, you may redistribute this Program in connection with Free/Libre
+  ~ Open Source Software ("FLOSS") applications as described in Silverpeas's
+  ~ FLOSS exception.  You should have received a copy of the text describing
+  ~ the FLOSS exception, and it is also available here:
+  ~ "https://www.silverpeas.org/legal/floss_exception.html"
+  ~
+  ~ This program is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  ~ GNU Affero General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU Affero General Public License
+  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  -->
+
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
+             xmlns:g="urn:import:com.google.gwt.user.client.ui"
+             xmlns:base="urn:import:org.silverpeas.mobile.client.components.base"
+             xmlns:components="urn:import:org.silverpeas.mobile.client.components">
+
+  <ui:with field='msg' type='org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages' />
+
+  <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
+
+    <span class="calendars">
+      <label><ui:text from="{msg.calendarField}" /></label>
+      <g:ListBox ui:field="calendars"></g:ListBox>
+    </span>
+
+    <g:TextBox ui:field="title" styleName="title"/>
+    <g:CheckBox ui:field="allDay" text="{msg.allDay}" styleName="allDay" value="true"/>
+
+    <span class="startDate">
+      <label><ui:text from="{msg.startDate}" /></label>
+      <g:TextBox ui:field="startDate" stylePrimaryName="formMandatoryField"/>
+    </span>
+    <span class="endDate">
+      <label><ui:text from="{msg.endDate}" /></label>
+      <g:TextBox ui:field="endDate" stylePrimaryName="formMandatoryField"/>
+    </span>
+    <g:TextArea ui:field="description" styleName="description"/>
+
+    <span class="priority">
+      <label><ui:text from="{msg.importantField}" /></label>
+      <g:RadioButton ui:field="important" name="priority"><ui:text from="{msg.yes}" /></g:RadioButton>
+      <g:RadioButton ui:field="notimportant" name="priority"><ui:text from="{msg.no}" /></g:RadioButton>
+    </span>
+    <span class="visibility">
+      <label><ui:text from="{msg.visibilityField}" /></label>
+      <g:RadioButton ui:field="publique" name="visibility"><ui:text from="{msg.publicValue}" /></g:RadioButton>
+      <g:RadioButton ui:field="prive" name="visibility"><ui:text from="{msg.privateValue}" /></g:RadioButton>
+    </span>
+
+    <span class="frequency">
+      <label><ui:text from="{msg.frequencyField}" /></label>
+      <g:ListBox ui:field="frequency"></g:ListBox>
+    </span>
+
+    <span class="participants">
+      <label><ui:text from="{msg.attendeesField}" /></label>
+      <g:Anchor ui:field="selectionButton">
+        <div ui:field="icon"></div>
+        <div ui:field="participantsSelected" class="selection"></div>
+      </g:Anchor>
+    </span>
+
+    <div class=" ui-controlgroup ui-controlgroup-horizontal">
+      <div class="ui-controlgroup-controls ">
+        <g:Anchor ui:field="submit" styleName="btn-validate ui-link">
+          <span class="ui-btn-text"><ui:text from="{msg.create}"/></span>
+        </g:Anchor>
+      </div>
+    </div>
+  </g:HTMLPanel>
+</ui:UiBinder>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.java
index f36b0d447..1620de6ba 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.java
@@ -39,10 +39,7 @@
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.Anchor;
-import com.google.gwt.user.client.ui.HTMLPanel;
-import com.google.gwt.user.client.ui.ListBox;
-import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.*;
 import org.silverpeas.mobile.client.SpMobil;
 import org.silverpeas.mobile.client.apps.agenda.events.app.AttachmentsLoadEvent;
 import org.silverpeas.mobile.client.apps.agenda.events.app.ReminderCreateEvent;
@@ -69,8 +66,8 @@
 import org.silverpeas.mobile.client.common.PublicationContentHelper;
 import org.silverpeas.mobile.client.components.UnorderedList;
 import org.silverpeas.mobile.client.components.attachments.Attachment;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.resources.ApplicationResources;
 import org.silverpeas.mobile.shared.dto.almanach.CalendarDTO;
 import org.silverpeas.mobile.shared.dto.almanach.CalendarEventAttendeeDTO;
 import org.silverpeas.mobile.shared.dto.almanach.CalendarEventAttributeDTO;
@@ -90,6 +87,7 @@
  */
 public class EventPage  extends PageContent implements EventPagesEventHandler {
   private static EventPageUiBinder uiBinder = GWT.create(EventPageUiBinder.class);
+  private ApplicationResources resources = GWT.create(ApplicationResources.class);
 
   @UiField(provided = true) protected AgendaMessages msg = null;
 
@@ -115,8 +113,7 @@ public class EventPage  extends PageContent implements EventPagesEventHandler {
   UnorderedList attachments, attendees;
 
   @UiField
-  ActionsMenu actionsMenu;
-
+  InlineHTML iconParticipants;
   private CalendarEventDTO event;
   private CalendarDTO calendar;
   private ReminderDTO reminderDTO;
@@ -144,6 +141,7 @@ public EventPage() {
     container.getElement().setId("event");
     dateEvent.setId("date-event");
     attachments.setId("attachments");
+    iconParticipants.setHTML(resources.peoples().getText());
     EventBus.getInstance().addHandler(AbstractEventPagesEvent.TYPE, this);
   }
 
@@ -237,9 +235,9 @@ public void setData(ApplicationInstanceDTO instance, CalendarEventDTO event, Cal
 
     for (CalendarEventAttendeeDTO attendee : event.getAttendees()) {
       if (attendee.getId().equals(SpMobil.getUser().getId())) {
-        actionsMenu.addAction(participation);
-        actionsMenu.addAction(rejectParticipation);
-        actionsMenu.addAction(tentativeParticipation);
+        addActionMenu(participation);
+        addActionMenu(rejectParticipation);
+        addActionMenu(tentativeParticipation);
         participation.setVisible(!attendee.getParticipationStatus().equals(ParticipationStatusDTO.ACCEPTED));
         rejectParticipation.setVisible(!attendee.getParticipationStatus().equals(ParticipationStatusDTO.DECLINED));
         tentativeParticipation.setVisible(!attendee.getParticipationStatus().equals(ParticipationStatusDTO.TENTATIVE));
@@ -255,15 +253,15 @@ public void setData(ApplicationInstanceDTO instance, CalendarEventDTO event, Cal
     }
 
     // actions
-    actionsMenu.addAction(addReminder);
+    addActionMenu(addReminder);
     notification.init(instance.getId(), event.getEventId(), NotificationDTO.TYPE_EVENT, event.getTitle(), getPageTitle());
-    actionsMenu.addAction(notification);
+    addActionMenu(notification);
   }
 
   @Override
   public void onRemindersLoaded(final RemindersLoadedEvent event) {
     if (event.getDurations().isEmpty()) {
-      actionsMenu.removeAction(addReminder.getId(), true);
+      removeActionMenu(addReminder);
     }
     for (String duration : event.getDurations()) {
       String durationLabel = "";
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml
index 48c55b720..dba972530 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml
@@ -31,12 +31,11 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <h2 ui:field="header" class="appHeader"></h2>
     <p ui:field="description" class="publiDesc"></p>
 
     <div ui:field="reminder" class="rappel-event" style="display:none;">
-      <g:ListBox ui:field="reminderDurations"/>
+      <g:ListBox ui:field="reminderDurations" styleName="filter-list"/>
       <div class="actions-rappel">
         <g:Anchor ui:field="delete" styleName="delete"><ui:text from="{msg.delete}" /></g:Anchor>
       </div>
@@ -59,7 +58,9 @@
 
     <components:UnorderedList ui:field="attachments"/>
 
-    <div id="participation" class=" elts-pub "> <span class="label">Participants :</span>
+    <div id="participation" class=" elts-pub ">
+      <g:InlineHTML ui:field="iconParticipants" styleName="icon-participation"/>
+      <span class="label"><ui:text from="{msg.participants}" /></span>
       <components:UnorderedList ui:field="attendees"/>
     </div>
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AcceptParticipationButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AcceptParticipationButton.java
index ceb69d9ec..c3f651b38 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AcceptParticipationButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AcceptParticipationButton.java
@@ -35,6 +35,7 @@
 import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.base.ActionItem;
+import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO;
 import org.silverpeas.mobile.shared.dto.almanach.ParticipationStatusDTO;
 
@@ -69,7 +70,7 @@ void acceptParticipation(ClickEvent event) {
     EventBus.getInstance().fireEvent(new ParticipationEvent(ParticipationStatusDTO.ACCEPTED, eventDTO));
 
     // hide menu
-    getElement().getParentElement().removeAttribute("style");
+    ActionsMenu.close(getElement());
 
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AddReminderButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AddReminderButton.java
index 37f342dad..708ee12cf 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AddReminderButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AddReminderButton.java
@@ -35,6 +35,7 @@
 import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.base.ActionItem;
+import org.silverpeas.mobile.client.components.base.ActionsMenu;
 
 /**
  * @author svu
@@ -67,7 +68,7 @@ void addReminder(ClickEvent event) {
     EventBus.getInstance().fireEvent(new RemindersAddingEvent());
 
     // hide menu
-    getElement().getParentElement().removeAttribute("style");
+    ActionsMenu.close(getElement());
 
   }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/EventItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/EventItem.java
index 260d0fa19..b004f77d2 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/EventItem.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/EventItem.java
@@ -34,7 +34,6 @@
 import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.HTMLPanel;
 import com.google.gwt.user.client.ui.Widget;
 import org.silverpeas.mobile.client.apps.agenda.pages.EventPage;
 import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages;
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/RejectParticipationButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/RejectParticipationButton.java
index 1d08937d3..3b7653fe8 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/RejectParticipationButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/RejectParticipationButton.java
@@ -35,6 +35,7 @@
 import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.base.ActionItem;
+import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO;
 import org.silverpeas.mobile.shared.dto.almanach.ParticipationStatusDTO;
 
@@ -69,7 +70,7 @@ void reject(ClickEvent event) {
     EventBus.getInstance().fireEvent(new ParticipationEvent(ParticipationStatusDTO.DECLINED, eventDTO));
 
     // hide menu
-    getElement().getParentElement().removeAttribute("style");
+    ActionsMenu.close(getElement());
 
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/TentativeParticipationButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/TentativeParticipationButton.java
index 2d60e75cd..0fb525174 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/TentativeParticipationButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/TentativeParticipationButton.java
@@ -29,13 +29,13 @@
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
-import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.HTMLPanel;
 import org.silverpeas.mobile.client.apps.agenda.events.app.ParticipationEvent;
 import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.base.ActionItem;
+import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO;
 import org.silverpeas.mobile.shared.dto.almanach.ParticipationStatusDTO;
 
@@ -70,7 +70,7 @@ void tentative(ClickEvent event) {
     EventBus.getInstance().fireEvent(new ParticipationEvent(ParticipationStatusDTO.TENTATIVE, eventDTO));
 
     // hide menu
-    getElement().getParentElement().removeAttribute("style");
+    ActionsMenu.close(getElement());
 
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java
index 4df42e804..e850517d2 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java
@@ -62,6 +62,8 @@ public interface AgendaMessages extends Messages {
 
   String addReminder();
   String acceptParticipation();
+
+  String participants();
   String rejectParticipation();
   String tentativeParticipation();
 
@@ -94,4 +96,30 @@ public interface AgendaMessages extends Messages {
   String noEvent();
 
   String the();
+  String create();
+
+  String newtitleEvent();
+
+  String calendarField();
+  String allDay();
+
+  String startDate();
+  String endDate();
+
+  String titleField();
+  String descriptionField();
+  String importantField();
+  String visibilityField();
+  String yes();
+  String no();
+  String publicValue();
+  String privateValue();
+  String frequencyField();
+  String attendeesField();
+
+  String frequencyNone();
+  String frequencyDay();
+  String frequencyWeek();
+  String frequencyMouth();
+  String frequencyYear();
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties
index 390822a9b..d231d19f1 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties
@@ -58,7 +58,7 @@ addReminder=Ajouter rappel
 acceptParticipation=Participer
 rejectParticipation=Ne pas participer
 tentativeParticipation=Participer peut être
-
+participants=Participants :
 
 weekFilter=Semaine
 mouthFilter=Mois
@@ -86,4 +86,27 @@ friday=Vendredi
 saturday=Samedi
 sunday=Dimanche
 
-noEvent=Pas d''événements à venir
\ No newline at end of file
+noEvent=Pas d''événements à venir
+create=Créer
+newtitleEvent= Nouvel événement
+
+calendarField=Calendrier :
+allDay=Toute la journée
+startDate=Début: 
+endDate=Fin: 
+titleField=Titre
+descriptionField=Description
+importantField=Important :
+visibilityField=Visibilité :
+yes=Oui
+no=Non
+publicValue=Publique
+privateValue=Privé
+frequencyField=Récurrence :
+attendeesField=Participants :
+
+frequencyNone=Aucune
+frequencyDay=Tous les jours
+frequencyWeek=Toutes les semaines
+frequencyMouth=Tous les mois
+frequencyYear=Tous les ans
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties
index d32cc9a11..ceb193128 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties
@@ -58,6 +58,7 @@ addReminder=Add reminder
 acceptParticipation=Join in
 rejectParticipation=Not join in
 tentativeParticipation=Join in maybe
+participants=Participants :
 
 weekFilter=Week
 mouthFilter=Mouth
@@ -85,4 +86,27 @@ friday=Friday
 saturday=Saturday
 sunday=Sunday
 
-noEvent=No upcoming events
\ No newline at end of file
+noEvent=No upcoming events
+create=Create
+newtitleEvent= New event
+
+calendarField=Calendar :
+allDay= All day
+startDate=Start: 
+endDate=End: 
+titleField=Title
+descriptionField=Description
+importantField=Important :
+visibilityField=Visibilité :
+yes=Yes
+no=No
+publicValue=Public
+privateValue=Private
+frequencyField=Frequency :
+attendeesField=Attendees
+
+frequencyNone=None
+frequencyDay=Every days
+frequencyWeek=Every weeks
+frequencyMouth=Every mouths
+frequencyYear=Every years
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties
index 9b82b26c5..d231d19f1 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties
@@ -58,6 +58,7 @@ addReminder=Ajouter rappel
 acceptParticipation=Participer
 rejectParticipation=Ne pas participer
 tentativeParticipation=Participer peut être
+participants=Participants :
 
 weekFilter=Semaine
 mouthFilter=Mois
@@ -85,4 +86,27 @@ friday=Vendredi
 saturday=Samedi
 sunday=Dimanche
 
-noEvent=Pas d''événements à venir
\ No newline at end of file
+noEvent=Pas d''événements à venir
+create=Créer
+newtitleEvent= Nouvel événement
+
+calendarField=Calendrier :
+allDay=Toute la journée
+startDate=Début: 
+endDate=Fin: 
+titleField=Titre
+descriptionField=Description
+importantField=Important :
+visibilityField=Visibilité :
+yes=Oui
+no=Non
+publicValue=Publique
+privateValue=Privé
+frequencyField=Récurrence :
+attendeesField=Participants :
+
+frequencyNone=Aucune
+frequencyDay=Tous les jours
+frequencyWeek=Toutes les semaines
+frequencyMouth=Tous les mois
+frequencyYear=Tous les ans
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/BlogApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/BlogApp.java
index cdf39b769..bd971e74e 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/BlogApp.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/BlogApp.java
@@ -25,6 +25,7 @@
 package org.silverpeas.mobile.client.apps.blog;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.Window;
 import org.fusesource.restygwt.client.Method;
 import org.silverpeas.mobile.client.apps.blog.events.app.AbstractBlogAppEvent;
 import org.silverpeas.mobile.client.apps.blog.events.app.BlogAppEventHandler;
@@ -98,8 +99,6 @@ public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) {
 
   @Override
   public void showContent(final NavigationShowContentEvent event) {
-    if (event.getContent().getType().equals("Component") && event.getContent().getInstanceId().startsWith(Apps.blog.name())) {
-      super.showContent(event);
-    }
+    // Managed by Document app
   }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.java
index e710dc25a..53c8b89f4 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.java
@@ -40,9 +40,10 @@
 import org.silverpeas.mobile.client.apps.blog.resources.BlogMessages;
 import org.silverpeas.mobile.client.apps.favorites.pages.widgets.AddToFavoritesButton;
 import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.common.navigation.LinksManager;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.components.base.widgets.ShareButton;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.blog.PostDTO;
 
@@ -62,11 +63,10 @@ public class BlogPage extends PageContent implements BlogPagesEventHandler {
   @UiField
   UnorderedList news;
   @UiField
-  ActionsMenu actionsMenu;
-  @UiField
   ListBox categories;
 
   private AddToFavoritesButton favorite = new AddToFavoritesButton();
+  private ShareButton share = new ShareButton();
   private String instanceId;
 
   interface BlogPageUiBinder extends UiBinder<Widget, BlogPage> {
@@ -129,8 +129,10 @@ public int compare(Map.Entry<String, String> o1,
     }
     categories.setSelectedIndex(oldSelection);
 
-    actionsMenu.addAction(favorite);
+    addActionMenu(favorite);
     favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), getPageTitle());
+    addActionMenu(share);
+    share.init(getPageTitle(), getPageTitle(), LinksManager.createApplicationPermalink(instanceId));
   }
 
   @UiHandler("categories")
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.ui.xml
index f20201cc4..f77f4e3c8 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.ui.xml
@@ -31,8 +31,7 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.blog.resources.BlogMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
-    <base:ActionsMenu ui:field="actionsMenu"/>
-    <div class="content-navigation"><g:ListBox ui:field="categories"/></div>
+    <div class="content-navigation"><g:ListBox ui:field="categories" styleName="filter-list"/></div>
     <components:UnorderedList ui:field="news" styleName="liste-billet"/>
   </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/widgets/BlogItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/widgets/BlogItem.java
index 6c4e162d1..e0bfe3a8b 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/widgets/BlogItem.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/widgets/BlogItem.java
@@ -77,6 +77,7 @@ public void onClick(final ClickEvent event) {
     ContentDTO content = new ContentDTO();
     content.setId(data.getId());
     content.setType(ContentsTypes.Publication.toString());
+    content.setInstanceId(data.getInstanceId());
     EventBus.getInstance().fireEvent(new NavigationShowContentEvent(content));
   }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.java
index 958982422..9a44490fb 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.java
@@ -50,7 +50,6 @@
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.shared.dto.FormFieldDTO;
 import org.silverpeas.mobile.shared.dto.classifieds.ClassifiedDTO;
@@ -66,9 +65,6 @@ public class ClassifiedPage extends PageContent implements ClassifiedsPagesEvent
 
   @UiField(provided = true) protected ClassifiedsMessages msg = null;
 
-  @UiField
-  ActionsMenu actionsMenu;
-
   @UiField
   HTML price, time, author;
 
@@ -148,7 +144,7 @@ public void setData(ClassifiedDTO data) {
     }
 
     notification.init(getApp().getApplicationInstance().getId(), data.getId(), NotificationDTO.TYPE_EVENT, data.getTitle(), getPageTitle());
-    actionsMenu.addAction(notification);
+    addActionMenu(notification);
 
     if (hasComments) {
       String contentType = "Classified";
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.ui.xml
index a9ebcb854..d7ce649fe 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.ui.xml
@@ -32,7 +32,6 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.classifieds.resources.ClassifiedsMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <div id="classified" class="content-navigation">
         <g:HTMLPanel tag="h2" ui:field="title" styleName="title"></g:HTMLPanel>
         <g:FocusPanel ui:field="carroussel" styleName="classified_pictures">
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.java
index 7766ebef0..9483d7c94 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.java
@@ -40,7 +40,6 @@
 import org.silverpeas.mobile.client.apps.favorites.pages.widgets.AddToFavoritesButton;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.classifieds.ClassifiedDTO;
@@ -54,8 +53,6 @@ public class ClassifiedsPage extends PageContent implements ClassifiedsPagesEven
   @UiField
   UnorderedList classifieds;
   @UiField
-  ActionsMenu actionsMenu;
-  @UiField
   ListBox categories, types;
 
 
@@ -94,7 +91,7 @@ public void onClassifiedsLoad(final ClassifiedsLoadedEvent event) {
     }
     displayList();
 
-    actionsMenu.addAction(favorite);
+    addActionMenu(favorite);
     favorite.init(getApp().getApplicationInstance().getId(), getApp().getApplicationInstance().getId(), ContentsTypes.Component.name(), getPageTitle());
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.ui.xml
index 34a928bab..b06a6165d 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.ui.xml
@@ -31,14 +31,13 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.classifieds.resources.ClassifiedsMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
-    <base:ActionsMenu ui:field="actionsMenu"/>
-    <div class="content-navigation">
+    <div class="content-navigation filter-classifield">
       <span class="ui-btn-text"><ui:text from="{msg.category}"/></span>
-      <g:ListBox ui:field="categories"/>
+      <g:ListBox ui:field="categories" styleName="filter-list"/>
     </div>
-    <div class="content-navigation">
+    <div class="content-navigation filter-classifield">
       <span class="ui-btn-text"><ui:text from="{msg.type}"/></span>
-      <g:ListBox ui:field="types"/>
+      <g:ListBox ui:field="types" styleName="filter-list"/>
     </div>
     <components:UnorderedList ui:field="classifieds" styleName="liste-annonces"/>
   </g:HTMLPanel>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/CommentsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/CommentsApp.java
index 4720da6ed..2c03d528f 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/CommentsApp.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/CommentsApp.java
@@ -97,7 +97,6 @@ public void addComment(final AddCommentEvent event) {
       dto.setComponentId(event.getInstanceId());
       dto.setResourceId(event.getContentId());
       dto.setResourceType(event.getContentType());
-      dto.setTextForHtml(event.getMessage());
 
       MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<CommentDTO>() {
         @Override
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/pages/CommentsPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/pages/CommentsPage.java
index ac59ce88c..43ac00157 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/pages/CommentsPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/pages/CommentsPage.java
@@ -78,7 +78,6 @@ public CommentsPage() {
     initWidget(uiBinder.createAndBindUi(this));
     EventBus.getInstance().addHandler(AbstractCommentsPagesEvent.TYPE, this);
     container.getElement().setId("publication");
-    addCommentTitle.setInnerHTML(msg.addComment());
   }
 
   public void setContentInfos(final String contentId, final String instanceId, final String contentType) {
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/ConfigApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/ConfigApp.java
index fba938c3a..b29b8658a 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/ConfigApp.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/ConfigApp.java
@@ -82,4 +82,51 @@ public void loadConfig(LoadConfigEvent event) {
   public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) {
 
   }
+
+    public static class ConfigApp extends App implements ConfigAppEventHandler {
+
+      private static ConfigApp instance = null;
+
+      public ConfigApp() {
+        super();
+        EventBus.getInstance().addHandler(AbstractConfigAppEvent.TYPE, this);
+      }
+
+      public void start() {
+        setMainPage(new ConfigPage());
+        super.start();
+      }
+
+
+      @Override
+      public void stop() {
+        EventBus.getInstance().removeHandler(AbstractConfigAppEvent.TYPE, this);
+        super.stop();
+      }
+
+
+      public static ConfigApp getInstance() {
+        if (instance == null) {
+          instance = new ConfigApp();
+        }
+        return instance;
+      }
+
+      @Override
+      public void updateConfig(UpdateConfigEvent event) {
+        Config conf = event.getConfig();
+        LocalStorageHelper.getInstance().store("config", conf.getAutoBean());
+      }
+
+      @Override
+      public void loadConfig(LoadConfigEvent event) {
+        Config conf = SpMobil.getConfiguration();
+        EventBus.getInstance().fireEvent(new ConfigLoadedEvent(conf));
+      }
+
+      @Override
+      public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) {
+
+      }
+    }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java
index 791bf972e..9ee94312b 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java
@@ -25,20 +25,32 @@
 package org.silverpeas.mobile.client.apps.config.pages;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Document;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.InputElement;
+import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.CheckBox;
 import com.google.gwt.user.client.ui.HTMLPanel;
+import com.google.gwt.user.client.ui.RadioButton;
+import org.silverpeas.mobile.client.SpMobil;
 import org.silverpeas.mobile.client.apps.config.events.app.LoadConfigEvent;
 import org.silverpeas.mobile.client.apps.config.events.app.UpdateConfigEvent;
 import org.silverpeas.mobile.client.apps.config.events.pages.AbstractConfigPagesEvent;
 import org.silverpeas.mobile.client.apps.config.events.pages.ConfigLoadedEvent;
 import org.silverpeas.mobile.client.apps.config.events.pages.ConfigPagesEventHandler;
+import org.silverpeas.mobile.client.apps.config.resources.ConfigMessages;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.components.userselection.widgets.events.ChangeEvent;
 import org.silverpeas.mobile.shared.dto.configuration.Config;
 
+import javax.print.Doc;
+
 /**
  * @author: svu
  */
@@ -53,12 +65,41 @@ public class ConfigPage extends PageContent implements ConfigPagesEventHandler {
   @UiField
   CheckBox lastPublicationsDisplay, lastEventsDisplay;
   @UiField
-  CheckBox favoritesDisplay, shortCutsDisplay;
+  CheckBox favoritesDisplay, shortCutsDisplay, shortCutsToolsDisplay;
+
+  @UiField
+  RadioButton standard, grayscale, sepia, inverse;
+
+  @UiField
+  InputElement fontSize;
+
+  @UiField(provided = true)
+  protected ConfigMessages msg;
+
   private Config config;
   public ConfigPage() {
+    msg = GWT.create(ConfigMessages.class);
     initWidget(uiBinder.createAndBindUi(this));
     EventBus.getInstance().addHandler(AbstractConfigPagesEvent.TYPE, this);
     EventBus.getInstance().fireEvent(new LoadConfigEvent());
+    setPageTitle(msg.title());
+    fontSize.setAttribute("min", "9");
+    fontSize.setAttribute("max", "17");
+    fontSize.setAttribute("step", "1");
+    fontSize.setAttribute("value", String.valueOf(SpMobil.getConfiguration().getFontSize()));
+    addListenerInput(fontSize, this);
+  }
+
+  public native void addListenerInput(Element range, ConfigPage page) /*-{
+    range.addEventListener('input', function () {
+      page.@org.silverpeas.mobile.client.apps.config.pages.ConfigPage::updateFontSize(I)(range.value);
+    }, false);
+  }-*/;
+
+  private void updateFontSize(final int value) {
+    fontSize.setAttribute("value", String.valueOf(value));
+    SpMobil.setFontSize(value);
+    save();
   }
 
   @Override
@@ -73,7 +114,33 @@ public void onPreviewNativeEvent(Event.NativePreviewEvent event) {
   public void stop() {
     super.stop();
     EventBus.getInstance().removeHandler(AbstractConfigPagesEvent.TYPE, this);
+  }
+
+  @UiHandler("standard")
+  protected void standard(ClickEvent event) {
+    Config c = new Config();
+    c.setStandard(true);
+    SpMobil.setFilter(c);
+  }
+  @UiHandler("grayscale")
+  protected void grayscale(ClickEvent event) {
+    Config c = new Config();
+    c.setGrayscale(true);
+    SpMobil.setFilter(c);
+  }
+
+  @UiHandler("sepia")
+  protected void sepia(ClickEvent event) {
+    Config c = new Config();
+    c.setSepia(true);
+    SpMobil.setFilter(c);
+  }
 
+  @UiHandler("inverse")
+  protected void inverse(ClickEvent event) {
+    Config c = new Config();
+    c.setInverse(true);
+    SpMobil.setFilter(c);
   }
 
   @Override
@@ -84,6 +151,11 @@ public void onConfigLoaded(ConfigLoadedEvent event) {
     favoritesDisplay.setValue(config.isFavoritesDisplay());
     lastEventsDisplay.setValue(config.isLastEventsDisplay());
     shortCutsDisplay.setValue(config.isShortCutsDisplay());
+    shortCutsToolsDisplay.setValue(config.isShortCutsToolsDisplay());
+    standard.setValue(config.isStandard());
+    grayscale.setValue(config.isGrayscale());
+    sepia.setValue(config.isSepia());
+    inverse.setValue(config.isInverse());
   }
 
   private void save() {
@@ -92,6 +164,12 @@ private void save() {
     config.setLastPublicationsDisplay(lastPublicationsDisplay.getValue());
     config.setLastEventsDisplay(lastEventsDisplay.getValue());
     config.setShortCutsDisplay(shortCutsDisplay.getValue());
+    config.setShortCutsToolsDisplay(shortCutsToolsDisplay.getValue());
+    config.setFontSize(Integer.parseInt(fontSize.getAttribute("value")));
+    config.setStandard(standard.getValue());
+    config.setGrayscale(grayscale.getValue());
+    config.setSepia(sepia.getValue());
+    config.setInverse(inverse.getValue());
     EventBus.getInstance().fireEvent(new UpdateConfigEvent(config));
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml
index 8924a4fa0..19997fc06 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml
@@ -25,37 +25,56 @@
 <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
              xmlns:g="urn:import:com.google.gwt.user.client.ui">
 
+
+  <ui:with field='msg' type='org.silverpeas.mobile.client.apps.config.resources.ConfigMessages'/>
+
   <g:HTMLPanel ui:field="container" styleName="ui-content ui-body-a">
 
   <g:HTMLPanel stylePrimaryName="last-publication-bloc bloc">
-    <h3 class="title-bloc-part ui-title">Page d'accueil</h3>
+    <h3 class="title-bloc-part ui-title"><ui:text from="{msg.homePage}"/></h3>
     <ul class="ui-listview ui-listview-inset ui-corner-all ui-shadow config">
       <li class="actuality">
         <a class="ui-btn">
-        <g:CheckBox ui:field="newsDisplay" text="Afficher les dernières actualités"></g:CheckBox>
+        <g:CheckBox ui:field="newsDisplay" text="{msg.lastNews}"></g:CheckBox>
         </a>
       </li>
       <li class="publication">
         <a class="ui-btn">
-          <g:CheckBox ui:field="lastPublicationsDisplay" text="Afficher les dernières publications"></g:CheckBox>
+          <g:CheckBox ui:field="lastPublicationsDisplay" text="{msg.lastPublications}"></g:CheckBox>
         </a>
       </li>
       <li class="event">
         <a class="ui-btn">
-          <g:CheckBox ui:field="lastEventsDisplay" text="Afficher les prochains événements"></g:CheckBox>
+          <g:CheckBox ui:field="lastEventsDisplay" text="{msg.events}"></g:CheckBox>
         </a>
       </li>
       <li class="favoris">
         <a class="ui-btn">
-          <g:CheckBox ui:field="favoritesDisplay" text="Afficher les favoris"></g:CheckBox>
+          <g:CheckBox ui:field="favoritesDisplay" text="{msg.favorites}"></g:CheckBox>
         </a>
       </li>
       <li class="shortcut">
         <a class="ui-btn">
-          <g:CheckBox ui:field="shortCutsDisplay" text="Afficher les raccourcis"></g:CheckBox>
+          <g:CheckBox ui:field="shortCutsDisplay" text="{msg.shortcurts}"></g:CheckBox>
+        </a>
+      </li>
+      <li class="shortcutools">
+        <a class="ui-btn">
+          <g:CheckBox ui:field="shortCutsToolsDisplay" text="{msg.tools}"></g:CheckBox>
         </a>
       </li>
     </ul>
+    <h3 class="title-bloc-part ui-title"><ui:text from="{msg.fontSize}"/></h3>
+    <input type="range" ui:field="fontSize" class="font-percent-size"></input>
+
+    <h3 class="title-bloc-part ui-title"><ui:text from="{msg.filters}"/></h3>
+    <span class="filters">
+      <g:RadioButton ui:field="standard" name="filters" stylePrimaryName="filter"><ui:text from="{msg.standard}"/></g:RadioButton>
+      <g:RadioButton ui:field="grayscale" name="filters" stylePrimaryName="filter"><ui:text from="{msg.grayscale}" /></g:RadioButton>
+      <g:RadioButton ui:field="sepia" name="filters" stylePrimaryName="filter"><ui:text from="{msg.sepia}" /></g:RadioButton>
+      <g:RadioButton ui:field="inverse" name="filters" stylePrimaryName="filter"><ui:text from="{msg.inverse}" /></g:RadioButton>
+    </span>
+
   </g:HTMLPanel>
   </g:HTMLPanel>
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.java
new file mode 100644
index 000000000..896f49e10
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.apps.config.resources;
+
+import com.google.gwt.i18n.client.Messages;
+import com.google.gwt.safehtml.shared.SafeHtml;
+
+public interface ConfigMessages extends Messages {
+
+  String title();
+  String homePage();
+  String fontSize();
+  String tools();
+  String shortcurts();
+  String favorites();
+
+  String events();
+  String lastPublications();
+  String lastNews();
+
+  String filters();
+  String grayscale();
+  String sepia();
+  String inverse();
+  String standard();
+
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.properties
new file mode 100644
index 000000000..9ddd28f98
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.properties
@@ -0,0 +1,39 @@
+#
+# Copyright (C) 2000 - 2022 Silverpeas
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# As a special exception to the terms and conditions of version 3.0 of
+# the GPL, you may redistribute this Program in connection with Free/Libre
+# Open Source Software ("FLOSS") applications as described in Silverpeas's
+# FLOSS exception.  You should have received a copy of the text describing
+# the FLOSS exception, and it is also available here:
+# "https://www.silverpeas.org/legal/floss_exception.html"
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+title=Configuration
+fontSize=Taille du texte
+homePage=Page d''accueil
+tools=Afficher les outils
+shortcurts=Afficher les raccourcis
+favorites=Afficher les favoris
+events=Afficher les prochains événements
+lastPublications=Afficher les dernières publications
+lastNews=Afficher les dernières actualités
+
+filters=Filtres
+grayscale=Niveau de gris
+sepia=Sepia
+inverse=Inversé
+standard=Standard
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_en.properties
new file mode 100644
index 000000000..baefd989f
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_en.properties
@@ -0,0 +1,39 @@
+#
+# Copyright (C) 2000 - 2022 Silverpeas
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# As a special exception to the terms and conditions of version 3.0 of
+# the GPL, you may redistribute this Program in connection with Free/Libre
+# Open Source Software ("FLOSS") applications as described in Silverpeas's
+# FLOSS exception.  You should have received a copy of the text describing
+# the FLOSS exception, and it is also available here:
+# "https://www.silverpeas.org/legal/floss_exception.html"
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+title=Settings
+fontSize=Text size
+homePage=Home page
+tools=Display tools
+shortcurts=Display shortcuts
+favorites=Display favorites
+events=Display last events
+lastPublications=Display last publications
+lastNews=Display last news
+
+filters=Filters
+grayscale=Grayscales
+sepia=Sepia
+inverse=Inverse
+standard=Standard
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_fr.properties
new file mode 100644
index 000000000..347a889d1
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_fr.properties
@@ -0,0 +1,39 @@
+#
+# Copyright (C) 2000 - 2022 Silverpeas
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# As a special exception to the terms and conditions of version 3.0 of
+# the GPL, you may redistribute this Program in connection with Free/Libre
+# Open Source Software ("FLOSS") applications as described in Silverpeas's
+# FLOSS exception.  You should have received a copy of the text describing
+# the FLOSS exception, and it is also available here:
+# "https://www.silverpeas.org/legal/floss_exception.html"
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+title=Configuration
+fontSize=Taille du texte
+homePage=Page d''accueil
+tools=Afficher les outils
+shortcurts=Afficher les raccourcis
+favorites=Afficher les favoris
+events=Afficher les prochains événements
+lastPublications=Afficher les dernières publications
+lastNews=Afficher les dernières actualités
+
+filters=Filtres
+grayscale=Niveau de gris
+sepia=Sepia
+inverse=Inversé
+standard=Standard
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/ContactsPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/ContactsPage.java
index eace21815..02c5138d7 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/ContactsPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/ContactsPage.java
@@ -122,9 +122,10 @@ public void init(boolean limited) {
         allcontacts.setVisible(tabs.contains("allcontacts"));
         allextcontacts.setVisible(tabs.contains("allextcontacts"));
 
-      Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
+        //Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
+      Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() {
         @Override
-        public void execute() {
+        public boolean execute() {
           if (defaultTab.equals("mycontacts")) {
             EventBus.getInstance().fireEvent(
                 new ContactsLoadEvent(ContactFilters.MY, filter.getText(), computePageSize(),
@@ -142,6 +143,7 @@ public void execute() {
                     startIndex));
             currentType = ContactFilters.ALL;
             allcontacts.addStyleName("ui-btn-active");
+            allcontacts.removeStyleName("ui-last-child");
             if (!mycontacts.isVisible()) {
               allcontacts.addStyleName("ui-first-child");
             }
@@ -161,8 +163,9 @@ public void execute() {
             allextcontacts.addStyleName("ui-last-child");
             filter.setVisible(true);
           }
+          return false;
         }
-      });
+      }, 500);
     } else {
       mycontacts.setVisible(false);
       allextcontacts.setVisible(false);
@@ -307,7 +310,6 @@ private int computePageSize() {
       item.getElement().getStyle().setVisibility(Style.Visibility.HIDDEN);
       list.add(item);
       int itemHeight = item.getOffsetHeight();
-
       pageSize =  (available / itemHeight) + 1; // add one for scroll
       list.remove(item);
     }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java
index 2bf0d4e7b..5e4cdb659 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java
@@ -25,6 +25,8 @@
 package org.silverpeas.mobile.client.apps.contacts.pages.widgets;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Document;
+import com.google.gwt.dom.client.SpanElement;
 import com.google.gwt.dom.client.Style;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
@@ -36,9 +38,11 @@
 import com.google.gwt.user.client.ui.InlineHTML;
 import com.google.gwt.user.client.ui.Widget;
 import org.silverpeas.mobile.client.apps.contacts.resources.ContactsResources;
+import org.silverpeas.mobile.client.common.network.NetworkHelper;
 import org.silverpeas.mobile.client.common.resources.ResourcesManager;
 import org.silverpeas.mobile.client.resources.ApplicationResources;
 import org.silverpeas.mobile.shared.dto.DetailUserDTO;
+import org.silverpeas.mobile.shared.dto.PropertyDTO;
 
 public class ContactItem extends Composite {
 
@@ -85,72 +89,64 @@ public void setData(DetailUserDTO userData) {
 
     int nbTel = 0;
     if (userData.getPhoneNumber() != null && !userData.getPhoneNumber().isEmpty()) {
-      Anchor tel1 = new Anchor();
-      tel1.setStyleName("tel-link");
-      tel1.setText(userData.getPhoneNumber());
-      tel1.setHref("tel:" + userData.getPhoneNumber());
-      tel.add(tel1);
+      createPhoneFragment(tel, userData.getPhoneNumber());
       nbTel++;
     }
     if (userData.getCellularPhoneNumber() != null && !userData.getCellularPhoneNumber().isEmpty()) {
       if (nbTel == 1) {
         tel.add(new InlineHTML(" | "));
       }
-      Anchor tel2 = new Anchor();
-      tel2.setStyleName("tel-link");
-      tel2.setText(userData.getCellularPhoneNumber());
-      tel2.setHref("tel:" + userData.getCellularPhoneNumber());
-      tel.add(tel2);
-
-      Anchor sms = new Anchor();
-      sms.setHref("sms:" + userData.getCellularPhoneNumber());
-      Image smsImg = new Image(resourcesContact.sms());
-      sms.getElement().appendChild(smsImg.getElement());
-      tel.add(sms);
-
+      createPhoneFragment(tel, userData.getCellularPhoneNumber());
+      createSmsFragment(tel, userData.getCellularPhoneNumber());
       nbTel++;
     }
     if (userData.getFaxPhoneNumber() != null && !userData.getFaxPhoneNumber().isEmpty()) {
       if (nbTel == 2) {
         tel.add(new InlineHTML(" | "));
       }
-      Anchor tel3 = new Anchor();
-      tel3.setStyleName("tel-link");
-      tel3.setText(userData.getFaxPhoneNumber());
-      tel3.setHref("tel:" + userData.getFaxPhoneNumber());
-      tel.add(tel3);
+      createPhoneFragment(tel, userData.getPhoneNumber());
+      createPhoneFragment(tel, userData.getFaxPhoneNumber());
       nbTel++;
     }
     if (nbTel == 0) {
-      tel.add(new InlineHTML("&nbsp;"));
+      tel.setVisible(false);
     }
 
-    for (String prop :userData.getProperties()) {
-
-      String value = userData.getPropertieValue(prop);
-      if (isPhoneNumber(value)) {
-        HTMLPanel field = new HTMLPanel("");
-        Anchor tel = new Anchor();
-        tel.setStyleName("tel-link");
-        tel.setText(value);
-        tel.setHref("tel:" + value);
-        field.add(tel);
-
-        Anchor sms = new Anchor();
-        sms.setHref("sms:" + value);
-        Image smsImg = new Image(resourcesContact.sms());
-        sms.getElement().appendChild(smsImg.getElement());
-        field.add(sms);
-
-        container.add(field);
-      } else {
-        HTML field = new HTML(value);
-        field.setStylePrimaryName(prop);
-        container.add(field);
+    for (PropertyDTO prop :userData.getProperties()) {
+      String value = prop.getValue();
+      if (value != null & !value.isEmpty()) {
+        if (isPhoneNumber(value)) {
+          HTMLPanel field = new HTMLPanel("");
+          createPhoneFragment(field, value);
+          createSmsFragment(field, value);
+          container.add(field);
+        } else {
+          HTML field = new HTML(value);
+          field.setStylePrimaryName(prop.getKey());
+          container.add(field);
+        }
       }
     }
   }
 
+  private void createPhoneFragment(HTMLPanel parent, String value) {
+    Anchor tel = new Anchor();
+    tel.setStyleName("tel-link");
+    tel.setHref("tel:" + value);
+    tel.getElement().setInnerHTML(resources.call().getText());
+    SpanElement text = Document.get().createSpanElement();
+    text.setInnerText(value);
+    tel.getElement().appendChild(text);
+    parent.add(tel);
+  }
+  private void createSmsFragment(HTMLPanel parent, String value) {
+    Anchor sms = new Anchor();
+    sms.setStyleName("sms-link");
+    sms.setHref("sms:" + value);
+    sms.getElement().setInnerHTML(resources.sms().getText());
+    parent.add(sms);
+  }
+
   private boolean isPhoneNumber(String value) {
     if (value == null) return false;
     value = value.replaceAll(" ", "");
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java
index e966ee403..6ee45ca9b 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java
@@ -33,9 +33,11 @@
 import org.fusesource.restygwt.client.MethodCallback;
 import org.silverpeas.mobile.client.SpMobil;
 import org.silverpeas.mobile.client.apps.documents.events.app.*;
+import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedItemPublishedEvent;
 import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedItemsLoadedEvent;
 import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationAttachmentsLoadedEvent;
 import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationLoadedEvent;
+import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationPublishedEvent;
 import org.silverpeas.mobile.client.apps.documents.pages.GedNavigationPage;
 import org.silverpeas.mobile.client.apps.documents.pages.PublicationPage;
 import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages;
@@ -47,11 +49,12 @@
 import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.common.ServicesLocator;
 import org.silverpeas.mobile.client.common.app.App;
+import org.silverpeas.mobile.client.common.event.ErrorEvent;
 import org.silverpeas.mobile.client.common.mobil.MobilUtils;
 import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly;
 import org.silverpeas.mobile.client.components.IframePage;
-import org.silverpeas.mobile.client.components.PopinConfirmation;
 import org.silverpeas.mobile.client.components.PopinInformation;
+import org.silverpeas.mobile.client.components.attachments.AttachmentsManager;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
 import org.silverpeas.mobile.shared.dto.BaseDTO;
 import org.silverpeas.mobile.shared.dto.ContentDTO;
@@ -137,8 +140,6 @@ private void displayContent(final ContentDTO content) {
       NavigationAppInstanceChangedEvent event = new NavigationAppInstanceChangedEvent(data);
       appInstanceChanged(event);
     } else if (content.getType().equals(ContentsTypes.Attachment.toString())) {
-      final DocumentsApp app = this;
-
       MethodCallbackOnlineOnly action =
           new MethodCallbackOnlineOnly<AttachmentDTO>() {
             @Override
@@ -172,6 +173,7 @@ public void onSuccess(final Method method, final AttachmentDTO attachement) {
               }
             }
           };
+      action.attempt();
     }
   }
 
@@ -193,6 +195,7 @@ public void appInstanceChanged(NavigationAppInstanceChangedEvent event) {
       page.setPageTitle(event.getInstance().getLabel());
       page.setInstanceId(event.getInstance().getId());
       page.setTopicId(null);
+      page.setPersonnal(event.getInstance().getPersonnal());
       page.show();
     }
   }
@@ -209,14 +212,15 @@ public void execute() {
       });
     } else if (event.getContent().getType().equals(ContentsTypes.Publication.name()) ||
         event.getContent().getType().equals(ContentsTypes.News.name()) ||
-        event.getContent().getType().equals(ContentsTypes.Attachment.name()) ||
         event.getContent().getType().equals(ContentsTypes.Folder.name())) {
-      loadAppInstance(event.getContent(), new Command() {
-        @Override
-        public void execute() {
-          startWithContent(event.getContent());
-        }
-      });
+        loadAppInstance(event.getContent(), new Command() {
+          @Override
+          public void execute() {
+            startWithContent(event.getContent());
+          }
+        });
+    } else if (event.getContent().getType().equals(ContentsTypes.Attachment.name())) {
+      AttachmentsManager.viewDocument(event.getContent().getId(), event.getContent().getRole());
     }
   }
 
@@ -237,12 +241,22 @@ public void attempt() {
       @Override
       public void onSuccess(final Method method, final List<BaseDTO> result) {
         super.onSuccess(method, result);
-        EventBus.getInstance().fireEvent(new GedItemsLoadedEvent(result, getApplicationInstance().getFolderSharing()));
+
+        EventBus.getInstance().fireEvent(new GedItemsLoadedEvent(result, getApplicationInstance().getFolderSharing(),
+                getCanImport(), event.isForceReload()));
       }
     };
     action.attempt();
   }
 
+  private boolean getCanImport() {
+    if (getApplicationInstance().getRights() == null) return true;
+    //TODO : if writer manage validation and manage topic specific right
+    boolean canImport = getApplicationInstance().getRights().getManager() ||
+            getApplicationInstance().getRights().getPublisher();
+    return canImport;
+  }
+
   /**
    * Get publication infos.
    */
@@ -264,8 +278,8 @@ public void onSuccess(final Method method, final PublicationDTO result) {
         EventBus.getInstance().fireEvent(
             new PublicationLoadedEvent(result, getApplicationInstance().getCommentable(),
                 getApplicationInstance().getAbleToStoreContent(),
-                getApplicationInstance().getNotifiable(), getApplicationInstance().getPublicationSharing(), event.getContent().getType()));
-
+                getApplicationInstance().getNotifiable(), getApplicationInstance().getPublicationSharing(),
+                    event.getContent().getType(), getCanImport(), result.isPublishable()));
       }
     };
     action.attempt();
@@ -310,4 +324,47 @@ public void onSuccess(Method method, TicketDTO dto) {
     };
     action.attempt();
   }
+
+  @Override
+  public void nextPublication(DocumentsNextPublicationEvent event) {
+    ServicesLocator.getServiceDocuments().getNextPublication(event.getPublication().getInstanceId(), event.getPublication().getId(), event.getDirection(), new MethodCallback<PublicationDTO>() {
+      @Override
+      public void onFailure(Method method, Throwable throwable) {
+        EventBus.getInstance().fireEvent(new ErrorEvent(throwable));
+      }
+
+      @Override
+      public void onSuccess(Method method, PublicationDTO publicationDTO) {
+        PublicationPage page = new PublicationPage();
+        page.setPageTitle(msg.publicationTitle());
+        page.show();
+        ContentDTO content = new ContentDTO();
+        content.setId(publicationDTO.getId());
+        content.setType(ContentsTypes.Publication.toString());
+        EventBus.getInstance().fireEvent(new DocumentsLoadPublicationEvent(content));
+      }
+    });
+  }
+
+  @Override
+  public void publish(DocumentsPublishEvent event) {
+
+    MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<PublicationDTO>() {
+      @Override
+      public void attempt() {
+        super.attempt();
+        ServicesLocator.getServiceDocuments().publish(event.getPublication().getInstanceId(),
+                event.getPublication().getId(), this);
+      }
+
+      @Override
+      public void onSuccess(Method method, PublicationDTO publication) {
+        super.onSuccess(method, publication);
+        EventBus.getInstance().fireEvent(new PublicationPublishedEvent(publication));
+        //TODO : update folder
+        EventBus.getInstance().fireEvent(new GedItemPublishedEvent(event.getPublication()));
+      }
+    };
+    action.attempt();
+  }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsAppEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsAppEventHandler.java
index 178516db9..fb30682ce 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsAppEventHandler.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsAppEventHandler.java
@@ -31,4 +31,8 @@ public interface DocumentsAppEventHandler extends EventHandler {
 	void loadPublication(DocumentsLoadPublicationEvent event);
   void loadAttachments(DocumentsLoadAttachmentsEvent event);
   void share(DocumentsSharingEvent event);
+
+  void nextPublication(DocumentsNextPublicationEvent event);
+
+    void publish(DocumentsPublishEvent documentsPublishEvent);
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsLoadGedItemsEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsLoadGedItemsEvent.java
index 143dcd0c1..cafc8efd8 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsLoadGedItemsEvent.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsLoadGedItemsEvent.java
@@ -28,6 +28,7 @@
 public class DocumentsLoadGedItemsEvent extends AbstractDocumentsAppEvent {
 	
 	private String rootTopicId, instanceId;
+	private boolean forceReload = false;
 	
 	public DocumentsLoadGedItemsEvent(String instanceId, String rootTopicId) {
 		super();
@@ -36,6 +37,14 @@ public DocumentsLoadGedItemsEvent(String instanceId, String rootTopicId) {
 		this.instanceId = instanceId;
 	}
 
+	public DocumentsLoadGedItemsEvent(String instanceId, String rootTopicId, boolean forceReload) {
+		super();
+		if (rootTopicId == null) rootTopicId = "0";
+		this.rootTopicId = rootTopicId;
+		this.instanceId = instanceId;
+		this.forceReload = forceReload;
+	}
+
 	@Override
 	protected void dispatch(DocumentsAppEventHandler handler) {
 		handler.loadTopics(this);
@@ -48,4 +57,6 @@ public String getRootTopicId() {
 	public String getInstanceId() {
 		return instanceId;
 	}
+
+	public boolean isForceReload() { return forceReload; }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsNextPublicationEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsNextPublicationEvent.java
new file mode 100644
index 000000000..82c4184e3
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsNextPublicationEvent.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.apps.documents.events.app;
+
+
+import org.silverpeas.mobile.shared.dto.documents.PublicationDTO;
+
+public class DocumentsNextPublicationEvent extends AbstractDocumentsAppEvent {
+
+  private PublicationDTO publication;
+  private String direction;
+
+  public DocumentsNextPublicationEvent(PublicationDTO publication, String direction) {
+    super();
+    this.publication = publication;
+    this.direction = direction;
+  }
+  @Override
+  protected void dispatch(DocumentsAppEventHandler handler) {
+    handler.nextPublication(this);
+  }
+  public PublicationDTO getPublication() {
+    return publication;
+  }
+  public String getDirection() {
+    return direction;
+  }
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsPublishEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsPublishEvent.java
new file mode 100644
index 000000000..ff7fae520
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsPublishEvent.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.apps.documents.events.app;
+
+
+import org.silverpeas.mobile.shared.dto.documents.PublicationDTO;
+import org.silverpeas.mobile.shared.dto.tickets.TicketDTO;
+
+public class DocumentsPublishEvent extends AbstractDocumentsAppEvent {
+
+  private PublicationDTO publication;
+
+  public DocumentsPublishEvent(PublicationDTO publication) {
+    super();
+    this.publication = publication;
+  }
+
+  @Override
+  protected void dispatch(DocumentsAppEventHandler handler) {
+    handler.publish(this);
+  }
+
+  public PublicationDTO getPublication() {
+    return publication;
+  }
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemPublishedEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemPublishedEvent.java
new file mode 100644
index 000000000..4c2d100d3
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemPublishedEvent.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.apps.documents.events.pages.navigation;
+
+import org.silverpeas.mobile.shared.dto.BaseDTO;
+import org.silverpeas.mobile.shared.dto.documents.PublicationDTO;
+
+import java.util.List;
+
+public class GedItemPublishedEvent extends AbstractGedNavigationPagesEvent {
+
+
+	private PublicationDTO publication;
+
+	public GedItemPublishedEvent(PublicationDTO publication) {
+		super();
+		this.publication = publication;
+	}
+
+	@Override
+	protected void dispatch(GedNavigationPagesEventHandler handler) {
+		handler.onPublicationPublished(this);
+	}
+
+	public PublicationDTO getPublication() {
+		return publication;
+	}
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemsLoadedEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemsLoadedEvent.java
index 4e0001af7..1715fd508 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemsLoadedEvent.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemsLoadedEvent.java
@@ -31,13 +31,24 @@
 public class GedItemsLoadedEvent extends AbstractGedNavigationPagesEvent {
 
 	private List<BaseDTO> topicsAndPublications;
+	private boolean forceReload = false;
 
 	private int sharing;
+	private boolean canImport = false;
 	
-	public GedItemsLoadedEvent(List<BaseDTO> topicsAndPublications, int sharing) {
+	public GedItemsLoadedEvent(List<BaseDTO> topicsAndPublications, int sharing, boolean canImport) {
 		super();
 		this.topicsAndPublications = topicsAndPublications;
 		this.sharing = sharing;
+		this.canImport = canImport;
+	}
+
+	public GedItemsLoadedEvent(List<BaseDTO> topicsAndPublications, int sharing, boolean canImport, boolean forceReload) {
+		super();
+		this.topicsAndPublications = topicsAndPublications;
+		this.sharing = sharing;
+		this.canImport = canImport;
+		this.forceReload = forceReload;
 	}
 
 	@Override
@@ -52,4 +63,8 @@ public List<BaseDTO> getTopicsAndPublications() {
 	public int getSharing() {
 		return sharing;
 	}
+
+	public boolean isForceReload() { return forceReload; }
+
+	public boolean isCanImport() { return canImport; }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedNavigationPagesEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedNavigationPagesEventHandler.java
index c7ae2fdc1..4d97b8ec5 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedNavigationPagesEventHandler.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedNavigationPagesEventHandler.java
@@ -29,4 +29,6 @@
 public interface GedNavigationPagesEventHandler extends EventHandler {
 	void onLoadedTopics(GedItemsLoadedEvent event);
 	void onGedItemClicked(GedItemClickEvent event);
+
+    void onPublicationPublished(GedItemPublishedEvent gedItemPublishedEvent);
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationLoadedEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationLoadedEvent.java
index b24522960..963792a8c 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationLoadedEvent.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationLoadedEvent.java
@@ -33,7 +33,12 @@ public class PublicationLoadedEvent extends AbstractPublicationPagesEvent {
   private String type;
   private int sharing;
 
-  public PublicationLoadedEvent(PublicationDTO publication, boolean commentable, boolean ableToStoreContent, boolean notifiable, int sharing, String type) {
+  private boolean canImport = false;
+
+  private boolean canPublish = false;
+
+  public PublicationLoadedEvent(PublicationDTO publication, boolean commentable, boolean ableToStoreContent,
+                                boolean notifiable, int sharing, String type, boolean canImport, boolean canPublish) {
     super();
     this.notifiable = notifiable;
     this.publication = publication;
@@ -41,6 +46,8 @@ public PublicationLoadedEvent(PublicationDTO publication, boolean commentable, b
     this.ableToStoreContent = ableToStoreContent;
     this.sharing = sharing;
     this.type = type;
+    this.canImport = canImport;
+    this.canPublish = canPublish;
   }
 
   @Override
@@ -67,4 +74,10 @@ public boolean isNotifiable() {
   public String getType() { return type; }
 
   public int getSharing() { return sharing; }
+
+  public boolean isCanImport() { return canImport; }
+
+  public boolean isCanPublish() {
+    return canPublish;
+  }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationNavigationPagesEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationNavigationPagesEventHandler.java
index 8994b5a6a..babbd5a0d 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationNavigationPagesEventHandler.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationNavigationPagesEventHandler.java
@@ -27,6 +27,9 @@
 import com.google.gwt.event.shared.EventHandler;
 
 public interface PublicationNavigationPagesEventHandler extends EventHandler {
-	void onLoadedPublication(PublicationLoadedEvent event);
-  void onLoadedPublicationAttachments(PublicationAttachmentsLoadedEvent event);
+    void onLoadedPublication(PublicationLoadedEvent event);
+
+    void onLoadedPublicationAttachments(PublicationAttachmentsLoadedEvent event);
+
+    void publishedPublication(PublicationPublishedEvent publicationPublishedEvent);
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationPublishedEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationPublishedEvent.java
new file mode 100644
index 000000000..83bde6b3f
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationPublishedEvent.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.apps.documents.events.pages.publication;
+
+import org.silverpeas.mobile.shared.dto.documents.PublicationDTO;
+
+public class PublicationPublishedEvent extends AbstractPublicationPagesEvent {
+
+  private PublicationDTO publication;
+
+  public PublicationPublishedEvent(PublicationDTO publication) {
+    super();
+    this.publication = publication;
+  }
+
+  @Override
+  protected void dispatch(PublicationNavigationPagesEventHandler handler) {
+    handler.publishedPublication(this);
+  }
+
+  public PublicationDTO getPublication() {
+    return publication;
+  }
+
+
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java
index 1c359c042..75d8371b6 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java
@@ -27,15 +27,12 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.HTMLPanel;
 import com.google.gwt.user.client.ui.Widget;
 import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadGedItemsEvent;
 import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadPublicationEvent;
-import org.silverpeas.mobile.client.apps.documents.events.pages.navigation
-    .AbstractGedNavigationPagesEvent;
-import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedItemClickEvent;
-import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedItemsLoadedEvent;
-import org.silverpeas.mobile.client.apps.documents.events.pages.navigation
-    .GedNavigationPagesEventHandler;
+import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.*;
+import org.silverpeas.mobile.client.apps.documents.pages.widgets.AddFileButton;
 import org.silverpeas.mobile.client.apps.documents.pages.widgets.GedItem;
 import org.silverpeas.mobile.client.apps.documents.pages.widgets.ShareButton;
 import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages;
@@ -44,8 +41,8 @@
 import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.common.app.View;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.resources.ApplicationMessages;
 import org.silverpeas.mobile.shared.dto.BaseDTO;
 import org.silverpeas.mobile.shared.dto.ContentDTO;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
@@ -58,23 +55,36 @@ public class GedNavigationPage extends PageContent implements View, GedNavigatio
 
   private DocumentsMessages msg;
 
+  @UiField HTMLPanel container;
   @UiField UnorderedList list;
-  @UiField ActionsMenu actionsMenu;
 
   private TopicDTO root;
   private String rootTopicId, instanceId;
   private boolean dataLoaded = false;
-  private AddToFavoritesButton favorite = new AddToFavoritesButton();
+  private AddToFavoritesButton buttonFavorite = new AddToFavoritesButton();
+
+  private AddFileButton buttonImport = new AddFileButton();
   private ShareButton share = new ShareButton();
 
+  private boolean canImport = false;
+  private boolean personnal = false;
+
   private static GedNavigationPageUiBinder uiBinder = GWT.create(GedNavigationPageUiBinder.class);
 
+  private ApplicationMessages globalMsg = GWT.create(ApplicationMessages.class);
+
+  public void setPersonnal(boolean personnal) {
+    this.personnal = personnal;
+  }
+
   interface GedNavigationPageUiBinder extends UiBinder<Widget, GedNavigationPage> {
   }
 
   public GedNavigationPage() {
     msg = GWT.create(DocumentsMessages.class);
     initWidget(uiBinder.createAndBindUi(this));
+    container.getElement().setId("edm");
+    buttonImport.setId("import");
     EventBus.getInstance().addHandler(AbstractGedNavigationPagesEvent.TYPE, this);
   }
 
@@ -90,19 +100,29 @@ public void setTopicId(String rootTopicId) {
     EventBus.getInstance().fireEvent(new DocumentsLoadGedItemsEvent(instanceId, rootTopicId));
   }
 
+  private void setCanImport(boolean canImport) {
+    this.canImport = canImport;
+  }
+
   public void setInstanceId(String instanceId) {
     this.instanceId = instanceId;
   }
 
   @Override
   public void onLoadedTopics(GedItemsLoadedEvent event) {
-    if (isVisible() && dataLoaded == false) {
+    if ((isVisible() && dataLoaded == false) || (isVisible() && event.isForceReload())) {
+      setCanImport(event.isCanImport());
       Notification.activityStart();
       list.clear();
       List<BaseDTO> dataItems = event.getTopicsAndPublications();
       for (Object dataItem : dataItems) {
         if (dataItem instanceof TopicDTO && ((TopicDTO) dataItem).isRoot()) {
-          setPageTitle(((TopicDTO) dataItem).getName());
+          if (personnal) {
+            setPageTitle(globalMsg.myDocuments());
+          } else {
+            setPageTitle(((TopicDTO) dataItem).getName());
+            addActionMenu(buttonFavorite);
+          }
           root = (TopicDTO) dataItem;
         } else {
           GedItem item = new GedItem();
@@ -112,17 +132,21 @@ public void onLoadedTopics(GedItemsLoadedEvent event) {
       }
       dataLoaded = true;
 
-      actionsMenu.addAction(favorite);
-
       if (root.getId() == null) {
-        favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), root.getName());
+        buttonFavorite.init(instanceId, instanceId, ContentsTypes.Component.name(), root.getName());
+        buttonImport.init(instanceId, "0", false);
       } else {
-        favorite.init(instanceId, root.getId(), ContentsTypes.Folder.name(), root.getName());
+        buttonFavorite.init(instanceId, root.getId(), ContentsTypes.Folder.name(), root.getName());
+        buttonImport.init(instanceId, rootTopicId, false);
+      }
+
+      if (canImport) {
+        addActionShortcut(buttonImport);
       }
 
       if (event.getSharing() > 0) {
         share.init(event.getSharing(), instanceId, root.getId(),"Node", "","");
-        actionsMenu.addAction(share);
+        addActionMenu(share);
       }
 
       Notification.activityStop();
@@ -137,6 +161,7 @@ public void onGedItemClicked(GedItemClickEvent event) {
         GedNavigationPage page = new GedNavigationPage();
         page.setInstanceId(instanceId);
         page.setTopicId(((TopicDTO)event.getGedItem()).getId());
+        page.setCanImport(canImport);
         page.show();
       } else if (event.getGedItem() instanceof PublicationDTO) {
         PublicationPage page = new PublicationPage();
@@ -151,6 +176,19 @@ public void onGedItemClicked(GedItemClickEvent event) {
     }
   }
 
+  @Override
+  public void onPublicationPublished(GedItemPublishedEvent event) {
+    for (int i = 0; i < list.getCount(); i++) {
+      GedItem item = (GedItem) list.getWidget(i);
+      Object data = item.getData();
+      if (data instanceof PublicationDTO) {
+        if (event.getPublication().getId().equals(((PublicationDTO) data).getId())) {
+          item.setPublicationName(event.getPublication().getName());
+        }
+      }
+    }
+  }
+
   public String getRootTopicId() {
     return rootTopicId;
   }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.ui.xml
index daa9b4ea4..5fbb6e601 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.ui.xml
@@ -28,8 +28,7 @@
              xmlns:base="urn:import:org.silverpeas.mobile.client.components.base"
              xmlns:components="urn:import:org.silverpeas.mobile.client.components">
 
-  <g:HTMLPanel styleName="content">
-    <base:ActionsMenu ui:field="actionsMenu"/>
+  <g:HTMLPanel ui:field="container" styleName="content">
     <components:UnorderedList ui:field="list" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/>
   </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java
index c7d0264a8..511fe0b3d 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java
@@ -25,40 +25,43 @@
 package org.silverpeas.mobile.client.apps.documents.pages;
 
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.dom.client.DivElement;
-import com.google.gwt.dom.client.Element;
-import com.google.gwt.dom.client.HeadingElement;
-import com.google.gwt.dom.client.ParagraphElement;
-import com.google.gwt.dom.client.Style;
+import com.google.gwt.dom.client.*;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
-import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.Anchor;
+import com.google.gwt.user.client.ui.FocusPanel;
 import com.google.gwt.user.client.ui.HTMLPanel;
 import com.google.gwt.user.client.ui.Widget;
 import org.silverpeas.mobile.client.apps.comments.pages.widgets.CommentsButton;
 import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadAttachmentsEvent;
 import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadPublicationEvent;
-import org.silverpeas.mobile.client.apps.documents.events.pages.publication.AbstractPublicationPagesEvent;
-import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationAttachmentsLoadedEvent;
-import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationLoadedEvent;
-import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationNavigationPagesEventHandler;
+import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsNextPublicationEvent;
+import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsPublishEvent;
+import org.silverpeas.mobile.client.apps.documents.events.pages.publication.*;
+import org.silverpeas.mobile.client.apps.documents.pages.widgets.AddFileButton;
+import org.silverpeas.mobile.client.apps.documents.pages.widgets.DraftOutButton;
 import org.silverpeas.mobile.client.apps.documents.pages.widgets.LinkedPublicationItem;
 import org.silverpeas.mobile.client.apps.documents.pages.widgets.ShareButton;
 import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages;
 import org.silverpeas.mobile.client.apps.favorites.pages.widgets.AddToFavoritesButton;
 import org.silverpeas.mobile.client.apps.notifications.pages.widgets.NotifyButton;
 import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.common.Html5Utils;
 import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.common.PublicationContentHelper;
 import org.silverpeas.mobile.client.common.app.View;
+import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndEvent;
+import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler;
+import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent;
+import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer;
 import org.silverpeas.mobile.client.common.resources.ResourcesManager;
 import org.silverpeas.mobile.client.components.UnorderedList;
 import org.silverpeas.mobile.client.components.attachments.Attachment;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.components.base.widgets.SpeakButton;
 import org.silverpeas.mobile.shared.dto.ContentDTO;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.documents.PublicationDTO;
@@ -66,15 +69,18 @@
 import org.silverpeas.mobile.shared.dto.notifications.NotificationDTO;
 
 public class PublicationPage extends PageContent
-    implements View, PublicationNavigationPagesEventHandler {
+    implements View, PublicationNavigationPagesEventHandler, SwipeEndHandler {
 
   private static PublicationPageUiBinder uiBinder = GWT.create(PublicationPageUiBinder.class);
 
   private PublicationDTO publication;
+  private boolean notifiable;
 
   @UiField
   HeadingElement title;
   @UiField
+  FocusPanel supercontainer;
+  @UiField
   HTMLPanel container;
   @UiField
   UnorderedList attachments, linkedPublications;
@@ -86,8 +92,6 @@ public class PublicationPage extends PageContent
   Anchor contentLink;
   @UiField
   DivElement content;
-  @UiField
-  ActionsMenu actionsMenu;
 
   @UiField(provided = true)
   protected DocumentsMessages msg;
@@ -95,20 +99,47 @@ public class PublicationPage extends PageContent
   private NotifyButton notification = new NotifyButton();
   private AddToFavoritesButton favorite = new AddToFavoritesButton();
 
+  private SpeakButton speak = new SpeakButton();
+
+  private AddFileButton buttonImport = new AddFileButton();
+  private DraftOutButton buttonDraftOut = new DraftOutButton();
   private ShareButton share = new ShareButton();
   private ContentDTO contentDTO = null;
+  private boolean canImport = false;
+
+  private SwipeRecognizer swipeRecognizer;
 
+  @Override
+  public void onSwipeEnd(SwipeEndEvent event) {
+    if (!isVisible()) return;
+    String direction = "";
+    if (event.getDirection() == SwipeEvent.DIRECTION.RIGHT_TO_LEFT) {
+      // next
+      direction = "right";
+    } /*else if (event.getDirection() == SwipeEvent.DIRECTION.LEFT_TO_RIGHT) {
+      // previous
+      direction = "left";
+    }*/
+    if (!direction.isEmpty()) {
+      EventBus.getInstance().fireEvent(new DocumentsNextPublicationEvent(publication, direction));
+    }
+  }
 
   interface PublicationPageUiBinder extends UiBinder<Widget, PublicationPage> {}
 
   public PublicationPage() {
     msg = GWT.create(DocumentsMessages.class);
     initWidget(uiBinder.createAndBindUi(this));
+    supercontainer.getElement().setAttribute("style","min-height:100vh;");
     container.getElement().setId("publication");
     attachments.getElement().setId("attachments");
     linkedPublications.getElement().setId("linkedPublications");
     content.setId("content");
+    buttonImport.setId("import");
+    buttonDraftOut.setId("publish");
+    content.getStyle().setDisplay(Style.Display.NONE);
     EventBus.getInstance().addHandler(AbstractPublicationPagesEvent.TYPE, this);
+    EventBus.getInstance().addHandler(SwipeEndEvent.getType(), this);
   }
 
   @Override
@@ -116,12 +147,17 @@ public void stop() {
     super.stop();
     comments.stop();
     EventBus.getInstance().removeHandler(AbstractPublicationPagesEvent.TYPE, this);
+    EventBus.getInstance().removeHandler(SwipeEndEvent.getType(), this);
   }
 
   public void setContent(final ContentDTO content) {
     this.contentDTO = content;
   }
 
+  private void setCanImport(boolean canImport) {
+    this.canImport = canImport;
+  }
+
   public void setPublicationId(String id, String type) {
     // send event to controler for retrieve pub infos
     Notification.activityStart();
@@ -134,42 +170,103 @@ public void setPublicationId(String id, String type) {
 
   @Override
   public void onLoadedPublication(PublicationLoadedEvent event) {
+    if (!isVisible()) return;
     Notification.activityStop();
+    attachments.clear();
+    setCanImport(event.isCanImport());
     this.publication = event.getPublication();
+    this.notifiable = event.isNotifiable();
     display(event.isCommentable(), event.isAbleToStoreContent(), event.getType());
-    actionsMenu.addAction(favorite);
+    addActionMenu(favorite);
     if (event.isNotifiable()) {
-      actionsMenu.addAction(notification);
+      addActionMenu(notification);
     }
 
     if (event.getSharing() > 0) {
       share.init(event.getSharing(), event.getPublication().getInstanceId(),
               event.getPublication().getId(), "Publication", "", "");
-      actionsMenu.addAction(share);
+      addActionMenu(share);
     }
 
+    addSpeakingCapacity();
     if (Boolean.parseBoolean(ResourcesManager.getParam("content.display.embedded")) && publication.getContent()) {
       PublicationContentHelper.showContent(publication.getId(), publication.getInstanceId(), content);
+      contentLink.setVisible(false);
+    } else {
+      contentLink.setVisible(publication.getContent());
+    }
+    swipeRecognizer = new SwipeRecognizer(supercontainer);
+
+    if (canImport) {
+      buttonImport.init(event.getPublication().getInstanceId(), event.getPublication().getId(), true);
+      addActionShortcut(buttonImport);
+    }
+
+    if (publication.isDraft() && event.isCanPublish()) {
+      buttonDraftOut.setCallback(new Command() {
+        @Override
+        public void execute() {
+          EventBus.getInstance().fireEvent(new DocumentsPublishEvent(publication));
+        }
+      });
+      addActionMenu(buttonDraftOut);
+    }
+  }
+
+  private void addSpeakingCapacity() {
+    if (Boolean.parseBoolean(ResourcesManager.getParam("speaking"))) {
+      speak.setCallback(new Command() {
+        @Override
+        public void execute() {
+          Element el = Document.get().getElementById("htmlContent");
+          String mainText = "";
+          if (el != null) {
+            IFrameElement c = IFrameElement.as(el);
+            mainText = c.getContentDocument().getBody().getInnerText().trim();
+          }
+          String[] text = {publication.getName(), publication.getDescription(), mainText};
+          Html5Utils.readText(text, speak.getEndCallback());
+        }
+      });
+      addActionShortcut(speak);
     }
-    contentLink.setVisible(publication.getContent());
   }
 
   @Override
   public void onLoadedPublicationAttachments(final PublicationAttachmentsLoadedEvent event) {
+    if (!isVisible()) return;
     for (SimpleDocumentDTO attachment : event.getAttachments()) {
+      if (!publication.getNotAllowedDownloads().isEmpty()) {
+        attachment.setDownloadable(true);
+        for (String idNotAllowed : publication.getNotAllowedDownloads()) {
+          if (idNotAllowed.equals(attachment.getId())) {
+            attachment.setDownloadable(false);
+          }
+        }
+      } else {
+        attachment.setDownloadable(true);
+      }
       Attachment a = new Attachment();
+      a.setNotifiable(this.notifiable);
       a.setAttachment(attachment);
       a.setSharing(event.getShare());
       attachments.add(a);
     }
   }
 
+  @Override
+  public void publishedPublication(PublicationPublishedEvent event) {
+    title.setInnerHTML(event.getPublication().getName());
+    publication.setName(event.getPublication().getName());
+  }
+
   /**
-   * Refesh view informations.
+   * Refresh view informations.
    */
   private void display(boolean commentable, boolean ableToStoreContent, String type) {
     if (isVisible()) {
       EventBus.getInstance().fireEvent(new DocumentsLoadAttachmentsEvent(publication.getId(), publication.getInstanceId()));
+      setPageTitle(publication.getName());
       title.setInnerHTML(publication.getName());
       desc.setInnerHTML(publication.getDescription());
 
@@ -227,19 +324,7 @@ protected void showContent(ClickEvent event) {
   public static void showWebPageContent(String pubId, String appId, String title) {
     PublicationContentHelper.showContent(pubId, appId, title);
   }
-
   private static void showPublicationContent(String pubId, String appId, String title) {
     PublicationContentHelper.showContent(pubId, appId, title);
   }
-
-  @Override
-  public void setVisible(final boolean visible) {
-    super.setVisible(visible);
-    Element iframeC = content.getElementsByTagName("iframe").getItem(0);
-    if (iframeC != null) {
-      // need to re display
-      iframeC.removeFromParent();
-      PublicationContentHelper.showContent(publication.getId(), publication.getInstanceId(), content);
-    }
-  }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.ui.xml
index e6a910b4d..313a3065e 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.ui.xml
@@ -30,20 +30,20 @@
              xmlns:widgets="urn:import:org.silverpeas.mobile.client.apps.comments.pages.widgets">
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages'/>
 
-  <g:HTMLPanel ui:field="container" styleName="content">
+  <g:FocusPanel ui:field="supercontainer">
+    <g:HTMLPanel ui:field="container" styleName="content">
 
-    <base:ActionsMenu ui:field="actionsMenu"/>
-
-    <h2 ui:field="title" class="publiName"></h2>
-    <p ui:field="desc" class="publiDesc"></p>
-    <widgets:CommentsButton ui:field="comments" visible="false"/>
-    <div ui:field="content" style="display:none;">
-      <g:Anchor ui:field="contentLink" styleName="ui-btn ui-btn-icon-right" text="{msg.content}"/>
-    </div>
-    <components:UnorderedList ui:field="attachments"/>
-    <components:UnorderedList ui:field="linkedPublications"/>
-    <p ui:field="creator" class="lastUpdate"></p>
-    <p ui:field="lastUpdate" class="lastUpdate"></p>
-    <p ui:field="nbViews" class="nbViews"></p>
-  </g:HTMLPanel>
+      <h2 ui:field="title" class="publiName"></h2>
+      <p ui:field="desc" class="publiDesc"></p>
+      <widgets:CommentsButton ui:field="comments" visible="false"/>
+      <div ui:field="content" style="display:none;">
+        <g:Anchor ui:field="contentLink" styleName="ui-btn ui-btn-icon-right" text="{msg.content}"/>
+      </div>
+      <components:UnorderedList ui:field="attachments"/>
+      <components:UnorderedList ui:field="linkedPublications"/>
+      <p ui:field="creator" class="lastUpdate"></p>
+      <p ui:field="lastUpdate" class="lastUpdate"></p>
+      <p ui:field="nbViews" class="nbViews"></p>
+    </g:HTMLPanel>
+  </g:FocusPanel>
 </ui:UiBinder>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/SharingPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/SharingPage.ui.xml
index 3800a0584..64739b79e 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/SharingPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/SharingPage.ui.xml
@@ -31,8 +31,8 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages'/>
 
   <g:HTMLPanel ui:field="container" styleName="ui-content ui-body-a">
-    <label id="validityLabel" style="label"><ui:safehtml from="{msg.validityLabel}"/></label>
-    <g:ListBox ui:field="validity"></g:ListBox>
+    <label id="validityLabel" class="field-label"><ui:safehtml from="{msg.validityLabel}"/></label>
+    <g:ListBox ui:field="validity" styleName="filter-list"></g:ListBox>
 
     <div id="endValidityLabel"><ui:safehtml from="{msg.endValidityLabel}"/></div>
     <g:TextBox ui:field="endValidity" visible="false"></g:TextBox>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.java
new file mode 100644
index 000000000..4a5be2947
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.apps.documents.pages.widgets;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.Style;
+import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.ui.Anchor;
+import com.google.gwt.user.client.ui.FileUpload;
+import com.google.gwt.user.client.ui.Widget;
+import org.silverpeas.mobile.client.SpMobil;
+import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadGedItemsEvent;
+import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadPublicationEvent;
+import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages;
+import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.common.Notification;
+import org.silverpeas.mobile.client.common.navigation.UrlUtils;
+import org.silverpeas.mobile.client.common.network.NetworkHelper;
+import org.silverpeas.mobile.client.components.base.ActionItem;
+import org.silverpeas.mobile.client.resources.ApplicationMessages;
+import org.silverpeas.mobile.shared.dto.ContentDTO;
+import org.silverpeas.mobile.shared.dto.ContentsTypes;
+
+
+/**
+ * @author: svu
+ */
+public class AddFileButton extends ActionItem {
+    interface AddFileButtonUiBinder extends UiBinder<Widget, AddFileButton> {
+    }
+
+    @UiField FileUpload file;
+    @UiField Anchor link;
+    @UiField(provided = true) protected DocumentsMessages msg = null;
+
+
+    private String instanceIdValue, locationIdValue;
+    private boolean locationIsPublication = false;
+    private ApplicationMessages globalMsg = GWT.create(ApplicationMessages.class);
+
+    private static AddFileButtonUiBinder uiBinder = GWT.create(AddFileButtonUiBinder.class);
+
+    public AddFileButton() {
+        msg = GWT.create(DocumentsMessages.class);
+        initWidget(uiBinder.createAndBindUi(this));
+        file.getElement().setAttribute("accept", "*/*");
+        file.getElement().setAttribute("multiple", "multiple");
+        file.getElement().setAttribute("length", "40");
+        file.getElement().getStyle().setDisplay(Style.Display.NONE);
+    }
+
+    public void init(String instanceId, String locationId, boolean locationIsPublication) {
+        this.instanceIdValue = instanceId;
+        this.locationIdValue = locationId;
+        this.locationIsPublication = locationIsPublication;
+    }
+
+    @UiHandler("file")
+    void upload(ChangeEvent event) {
+      Notification.activityStartImmediately();
+      String url = UrlUtils.getUploadLocation();
+      url +=  "FileAction";
+      upload(this, file.getElement(), instanceIdValue, locationIdValue, locationIsPublication, url, SpMobil.getUserToken());
+    }
+
+    public void fileUploadedSuccessfully() {
+        if (locationIsPublication) {
+            ContentDTO content = new ContentDTO();
+            content.setInstanceId(instanceIdValue);
+            content.setType(ContentsTypes.Publication.name());
+            content.setContributionId(locationIdValue);
+            content.setId(locationIdValue);
+            EventBus.getInstance().fireEvent(new DocumentsLoadPublicationEvent(content));
+        } else {
+            EventBus.getInstance().fireEvent(new DocumentsLoadGedItemsEvent(this.instanceIdValue, this.locationIdValue, true));
+        }
+    }
+
+    public void fileNotUploaded(int codeError) {
+      GWT.log("error " + codeError);
+      if (codeError == 413) {
+        Notification.alert(msg.maxUploadError());
+      } else if (codeError == 415) {
+        Notification.alert(msg.fileNotSupportedError());
+      }
+      Notification.activityStop();
+    }
+
+    @UiHandler("link")
+    void upload(ClickEvent event) {
+        if (NetworkHelper.isOnline()) {
+            clickOnInputFile(file.getElement());
+        } else {
+            Notification.alert(globalMsg.needToBeOnline());
+        }
+    }
+
+    private static native void upload(AddFileButton button, Element input, String componentId, String locationId, boolean locationIsPublication, String url, String token) /*-{
+      var xhr = new XMLHttpRequest();
+      var fd = new FormData();
+      xhr.open("POST", url, false);
+      xhr.setRequestHeader("X-Silverpeas-Session", token);
+      xhr.onreadystatechange = function() {
+        if (xhr.readyState == 4 && xhr.status == 200) {
+          // Every thing ok, file uploaded
+          button.@org.silverpeas.mobile.client.apps.documents.pages.widgets.AddFileButton::fileUploadedSuccessfully()();
+        } else {
+          button.@org.silverpeas.mobile.client.apps.documents.pages.widgets.AddFileButton::fileNotUploaded(I)(xhr.status);
+        }
+      };
+      fd.append("componentId", componentId);
+      if (locationIsPublication) {
+          fd.append("publicationId", locationId);
+      } else {
+          fd.append("folderId", locationId);
+      }
+      for(var i = 0; i < input.files.length ; i++) {
+        fd.append("upload_file"+i, input.files[i]);
+      }
+      xhr.send(fd);
+    }-*/;
+
+    private static native void clickOnInputFile(Element elem) /*-{
+        elem.click();
+    }-*/;
+
+}
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.ui.xml
new file mode 100644
index 000000000..a00b67808
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.ui.xml
@@ -0,0 +1,34 @@
+<!--
+  ~ Copyright (C) 2000 - 2022 Silverpeas
+  ~
+  ~ This program is free software: you can redistribute it and/or modify
+  ~ it under the terms of the GNU Affero General Public License as
+  ~ published by the Free Software Foundation, either version 3 of the
+  ~ License, or (at your option) any later version.
+  ~
+  ~ As a special exception to the terms and conditions of version 3.0 of
+  ~ the GPL, you may redistribute this Program in connection with Free/Libre
+  ~ Open Source Software ("FLOSS") applications as described in Silverpeas's
+  ~ FLOSS exception.  You should have received a copy of the text describing
+  ~ the FLOSS exception, and it is also available here:
+  ~ "https://www.silverpeas.org/legal/floss_exception.html"
+  ~
+  ~ This program is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  ~ GNU Affero General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU Affero General Public License
+  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  -->
+
+<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
+             xmlns:g='urn:import:com.google.gwt.user.client.ui'>
+  
+  <ui:with field='msg' type='org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages'/>
+  
+  <g:HTMLPanel tag="li" styleName="add-file">
+    <g:Anchor ui:field="link"/>
+    <g:FileUpload ui:field="file" title="{msg.importFile}" name="file"/>
+  </g:HTMLPanel>
+</ui:UiBinder>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/DraftOutButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/DraftOutButton.java
new file mode 100644
index 000000000..6edffd784
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/DraftOutButton.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.apps.documents.pages.widgets;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.Style;
+import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.ui.Anchor;
+import com.google.gwt.user.client.ui.FileUpload;
+import com.google.gwt.user.client.ui.Widget;
+import org.silverpeas.mobile.client.SpMobil;
+import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadGedItemsEvent;
+import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadPublicationEvent;
+import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages;
+import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.common.Notification;
+import org.silverpeas.mobile.client.common.navigation.UrlUtils;
+import org.silverpeas.mobile.client.common.network.NetworkHelper;
+import org.silverpeas.mobile.client.components.base.ActionItem;
+import org.silverpeas.mobile.client.components.base.ActionsMenu;
+import org.silverpeas.mobile.client.resources.ApplicationMessages;
+import org.silverpeas.mobile.shared.dto.ContentDTO;
+import org.silverpeas.mobile.shared.dto.ContentsTypes;
+
+
+/**
+ * @author: svu
+ */
+public class DraftOutButton extends ActionItem {
+    interface DraftOutButtonUiBinder extends UiBinder<Widget, DraftOutButton> {
+    }
+
+    @UiField Anchor link;
+    @UiField(provided = true) protected DocumentsMessages msg = null;
+
+    private ApplicationMessages globalMsg = GWT.create(ApplicationMessages.class);
+
+    private static DraftOutButtonUiBinder uiBinder = GWT.create(DraftOutButtonUiBinder.class);
+
+    public DraftOutButton() {
+        msg = GWT.create(DocumentsMessages.class);
+        initWidget(uiBinder.createAndBindUi(this));
+    }
+
+    @UiHandler("link")
+    void upload(ClickEvent event) {
+        getCallback().execute();
+        ActionsMenu.close(getElement());
+    }
+}
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/DraftOutButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/DraftOutButton.ui.xml
new file mode 100644
index 000000000..13a16a33d
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/DraftOutButton.ui.xml
@@ -0,0 +1,33 @@
+<!--
+  ~ Copyright (C) 2000 - 2022 Silverpeas
+  ~
+  ~ This program is free software: you can redistribute it and/or modify
+  ~ it under the terms of the GNU Affero General Public License as
+  ~ published by the Free Software Foundation, either version 3 of the
+  ~ License, or (at your option) any later version.
+  ~
+  ~ As a special exception to the terms and conditions of version 3.0 of
+  ~ the GPL, you may redistribute this Program in connection with Free/Libre
+  ~ Open Source Software ("FLOSS") applications as described in Silverpeas's
+  ~ FLOSS exception.  You should have received a copy of the text describing
+  ~ the FLOSS exception, and it is also available here:
+  ~ "https://www.silverpeas.org/legal/floss_exception.html"
+  ~
+  ~ This program is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  ~ GNU Affero General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU Affero General Public License
+  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  -->
+
+<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
+             xmlns:g='urn:import:com.google.gwt.user.client.ui'>
+
+  <ui:with field='msg' type='org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages'/>
+
+  <g:HTMLPanel tag="li" ui:field="container" styleName="">
+    <g:Anchor styleName="" ui:field="link" text="{msg.draftOut}"/>
+  </g:HTMLPanel>
+</ui:UiBinder>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java
index cfeba6296..f1df845e6 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java
@@ -31,10 +31,12 @@
 import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.InlineHTML;
 import com.google.gwt.user.client.ui.Widget;
 import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedItemClickEvent;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
+import org.silverpeas.mobile.client.resources.ApplicationResources;
 import org.silverpeas.mobile.shared.dto.documents.PublicationDTO;
 import org.silverpeas.mobile.shared.dto.documents.TopicDTO;
 
@@ -45,8 +47,9 @@ public class GedItem extends Composite {
   private PublicationDTO dataPublication;
   private static GedItemUiBinder uiBinder = GWT.create(GedItemUiBinder.class);
   @UiField Anchor link;
+  @UiField InlineHTML icon;
   protected ApplicationMessages msg = null;
-
+  private ApplicationResources resources = GWT.create(ApplicationResources.class);
 
   interface GedItemUiBinder extends UiBinder<Widget, GedItem> {
   }
@@ -56,28 +59,46 @@ public GedItem() {
     msg = GWT.create(ApplicationMessages.class);
   }
 
+  public Object getData() {
+    return data;
+  }
+
   public void setData(Object data) {
     this.data = data;
     if (data instanceof TopicDTO) {
       dataTopic = (TopicDTO) data;
       if (dataTopic.getId().equals("1")) {
         setStyleName("trash");
+        icon.setHTML(resources.trash().getText());
         link.setText(dataTopic.getName());
       } else {
         setStyleName("folder-ged");
-        link.setText(dataTopic.getName() + " (" + dataTopic.getPubCount() + ")");
+        icon.setHTML(resources.folder().getText());
       }
+      link.setText(dataTopic.getName() + " (" + dataTopic.getPubCount() + ")");
+      link.setStyleName("ui-btn ui-btn-icon-right ui-icon-carat-r");
     } else if (data instanceof PublicationDTO) {
       dataPublication = (PublicationDTO) data;
       link.setHTML(dataPublication.getName());
       setStyleName("publication");
+      icon.setHTML(resources.publication().getText());
       if (dataPublication.getVignette() != null) {
-        String style = "background-image:url("+dataPublication.getVignette();
-        style += ");background-position:5px 5px;background-size:20px 20px;";
+        String style = "background:url("+dataPublication.getVignette();
+        style += ") no-repeat;background-position:0.5em;background-size:24px 24px;";
         link.getElement().setAttribute("style", style);
+        icon.setVisible(false);
       }
+      link.setStyleName("ui-btn ui-icon-carat-r");
+    }
+
+  }
+
+  public void setPublicationName(String name) {
+    if (dataPublication != null) {
+      dataPublication.setName(name);
+      ((PublicationDTO) data).setName(name);
+      link.setHTML(name);
     }
-    link.setStyleName("ui-btn ui-btn-icon-right ui-icon-carat-r");
   }
 
   @UiHandler("link")
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.ui.xml
index ee58469a2..6759b89a0 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.ui.xml
@@ -25,8 +25,7 @@
 <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
 <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"	xmlns:g="urn:import:com.google.gwt.user.client.ui">
 	<g:HTMLPanel tag="li">
-	
+		<g:InlineHTML ui:field="icon" styleName="icon-item"></g:InlineHTML>
 		<g:Anchor ui:field="link"></g:Anchor>
-	
 	</g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/ShareButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/ShareButton.java
index 9a90c6296..f19f6517b 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/ShareButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/ShareButton.java
@@ -29,21 +29,13 @@
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
-import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.HTMLPanel;
-import org.fusesource.restygwt.client.Method;
-import org.fusesource.restygwt.client.MethodCallback;
-import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsSharingEvent;
 import org.silverpeas.mobile.client.apps.documents.pages.SharingPage;
 import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages;
-import org.silverpeas.mobile.client.apps.notifications.NotificationsApp;
-import org.silverpeas.mobile.client.apps.notifications.resources.NotificationsMessages;
-import org.silverpeas.mobile.client.common.EventBus;
-import org.silverpeas.mobile.client.common.ServicesLocator;
 import org.silverpeas.mobile.client.components.base.ActionItem;
-import org.silverpeas.mobile.shared.dto.tickets.TicketDTO;
+import org.silverpeas.mobile.client.components.base.ActionsMenu;
+
 
 /**
  * @author: svu
@@ -84,7 +76,7 @@ void displaySharePage(ClickEvent event) {
         page.show();
 
         // hide menu
-        getElement().getParentElement().removeAttribute("style");
+        ActionsMenu.close(getElement());
     }
 
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.java
index c9d9f071c..4cbca0cb0 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.java
@@ -57,4 +57,11 @@ public interface DocumentsMessages extends Messages {
   SafeHtml usersLabel();
   SafeHtml emailsLabel();
   SafeHtml commentsLabel();
+
+  String importFile();
+  String maxUploadError();
+
+  String fileNotSupportedError();
+
+  String draftOut();
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.properties
index f8fa54820..7d958d399 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.properties
@@ -52,3 +52,9 @@ maxAccessLabel=Nombre maximum d acc&egrave;s
 usersLabel=Utilisateurs
 emailsLabel=Emails externes
 commentsLabel=Message compl&eacute;mentaire
+
+importFile=Importer un fichier
+maxUploadError=Média trop volumineux
+fileNotSupportedError=Format non pris en charge
+
+draftOut=Publier
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_en.properties
index 32a2d2d19..5ff952de1 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_en.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_en.properties
@@ -51,4 +51,10 @@ endValidityLabel=End validity date
 maxAccessLabel=Max access number
 usersLabel=Users
 emailsLabel=Externals emails
-commentsLabel=Additional message
\ No newline at end of file
+commentsLabel=Additional message
+
+importFile=File import
+maxUploadError=Media too large
+fileNotSupportedError=Unsupported format
+
+draftOut=Publish
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_fr.properties
index f8fa54820..7d958d399 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_fr.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_fr.properties
@@ -52,3 +52,9 @@ maxAccessLabel=Nombre maximum d acc&egrave;s
 usersLabel=Utilisateurs
 emailsLabel=Emails externes
 commentsLabel=Message compl&eacute;mentaire
+
+importFile=Importer un fichier
+maxUploadError=Média trop volumineux
+fileNotSupportedError=Format non pris en charge
+
+draftOut=Publier
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/excel.gif b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/excel.gif
deleted file mode 100644
index 5065c302d..000000000
Binary files a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/excel.gif and /dev/null differ
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/image.gif b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/image.gif
deleted file mode 100644
index bdb614fce..000000000
Binary files a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/image.gif and /dev/null differ
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/pdf.gif b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/pdf.gif
deleted file mode 100644
index 39449953c..000000000
Binary files a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/pdf.gif and /dev/null differ
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/powerpoint.gif b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/powerpoint.gif
deleted file mode 100644
index 39e625459..000000000
Binary files a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/powerpoint.gif and /dev/null differ
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/unknown.gif b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/unknown.gif
deleted file mode 100644
index c7f5e8222..000000000
Binary files a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/unknown.gif and /dev/null differ
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/word.gif b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/word.gif
deleted file mode 100644
index 73fbc81b6..000000000
Binary files a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/word.gif and /dev/null differ
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.java
index d1ab27edd..9b991f3b1 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.java
@@ -44,7 +44,6 @@
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.common.app.App;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.faq.CategoryDTO;
@@ -57,8 +56,6 @@ public class FaqPage extends PageContent implements FaqPagesEventHandler {
   private static FaqPageUiBinder uiBinder = GWT.create(FaqPageUiBinder.class);
 
   @UiField(provided = true) protected FaqMessages msg = null;
-  @UiField
-  ActionsMenu actionsMenu;
 
   @UiField
   HTMLPanel container;
@@ -95,7 +92,7 @@ public void stop() {
   @Override
   public void setApp(final App app) {
     super.setApp(app);
-    actionsMenu.addAction(favorite);
+    addActionMenu(favorite);
     favorite.init(getApp().getApplicationInstance().getId(), getApp().getApplicationInstance().getId(), ContentsTypes.Component.name(), getPageTitle());
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.ui.xml
index ed5dfc873..333095600 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.ui.xml
@@ -31,8 +31,7 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.faq.resources.FaqMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
-    <base:ActionsMenu ui:field="actionsMenu"/>
-    <div class="content-navigation"><g:ListBox ui:field="categories"/></div>
+    <div class="content-navigation"><g:ListBox ui:field="categories" stylePrimaryName="faq-categories"/></div>
     <components:UnorderedList ui:field="faqs" styleName="forms-list"/>
   </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java
index 15a73d7b5..873fecb0d 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java
@@ -25,13 +25,9 @@
 package org.silverpeas.mobile.client.apps.favorites;
 
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.gwt.user.client.Window;
 import org.fusesource.restygwt.client.Method;
-import org.silverpeas.mobile.client.apps.favorites.events.app.AbstractFavoritesAppEvent;
-import org.silverpeas.mobile.client.apps.favorites.events.app.AddFavoriteEvent;
-import org.silverpeas.mobile.client.apps.favorites.events.app.FavoritesAppEventHandler;
-import org.silverpeas.mobile.client.apps.favorites.events.app.FavoritesLoadEvent;
-import org.silverpeas.mobile.client.apps.favorites.events.app.GotoAppEvent;
+import org.silverpeas.mobile.client.apps.favorites.events.app.*;
 import org.silverpeas.mobile.client.apps.favorites.events.pages.FavoritesLoadedEvent;
 import org.silverpeas.mobile.client.apps.favorites.pages.FavoritesPage;
 import org.silverpeas.mobile.client.apps.navigation.events.app.external.AbstractNavigationEvent;
@@ -39,17 +35,17 @@
 import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationEventHandler;
 import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationShowContentEvent;
 import org.silverpeas.mobile.client.common.EventBus;
-import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.common.ServicesLocator;
 import org.silverpeas.mobile.client.common.app.App;
 import org.silverpeas.mobile.client.common.event.ErrorEvent;
 import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
+import org.silverpeas.mobile.shared.dto.MyLinkCategoryDTO;
 import org.silverpeas.mobile.shared.dto.MyLinkDTO;
 import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO;
 
-import java.util.List;
+import java.util.*;
 
 public class FavoritesApp extends App implements FavoritesAppEventHandler, NavigationEventHandler {
 
@@ -73,23 +69,74 @@ public void stop() {
 
     @Override
     public void loadFavorites(final FavoritesLoadEvent event) {
-      MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<List<MyLinkDTO>>() {
-        @Override
-        public void onSuccess(final Method method, final List<MyLinkDTO> result) {
-          super.onSuccess(method, result);
-          EventBus.getInstance().fireEvent(new FavoritesLoadedEvent(result));
-        }
 
-        @Override
-        public void attempt() {
-          super.attempt();
-          ServicesLocator.getServiceMyLinks().getMyLinks(this);
-        }
-      };
-      action.attempt();
+        MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<List<MyLinkCategoryDTO>>() {
+            @Override
+            public void attempt() {
+                super.attempt();
+                ServicesLocator.getServiceMyLinks().getMyCategories(this);
+            }
+
+            @Override
+            public void onSuccess(Method method, List<MyLinkCategoryDTO> categories) {
+                super.onSuccess(method, categories);
+                loadMyLinks(categories);
+            }
+        };
+        action.attempt();
+    }
+    private void loadMyLinks(List<MyLinkCategoryDTO> categories) {
+        MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<List<MyLinkDTO>>() {
+          @Override
+          public void onSuccess(final Method method, final List<MyLinkDTO> links) {
+            super.onSuccess(method, links);
+            List groupedList = new ArrayList<>();
+            List noCatList = new ArrayList<>();
+            MyLinkCategoryDTO itemNoCat = new MyLinkCategoryDTO();
+            itemNoCat.setName(msg.favoritesWithoutCategory());
+            groupedList.add(itemNoCat);
+            for(MyLinkDTO link : links) {
+                if (link.getCategoryId() == null) {
+                    noCatList.add(link);
+                }
+            }
+              Collections.sort(noCatList, new Comparator<MyLinkDTO>() {
+                  @Override
+                  public int compare(MyLinkDTO o1, MyLinkDTO o2) {
+                      return o1.getPosition() - o2.getPosition();
+                  }
+              });
+            groupedList.addAll(noCatList);
+
+            for (MyLinkCategoryDTO category : categories) {
+                groupedList.add(category);
+                for(MyLinkDTO link : links) {
+                    List catList = new ArrayList<>();
+                    if (link.getCategoryId() != null && link.getCategoryId().equals(category.getCatId())) {
+                        catList.add(link);
+                    }
+                    Collections.sort(catList, new Comparator<MyLinkDTO>() {
+                        @Override
+                        public int compare(MyLinkDTO o1, MyLinkDTO o2) {
+                            return o1.getPosition() - o2.getPosition();
+                        }
+                    });
+                    groupedList.addAll(catList);
+                }
+            }
+            EventBus.getInstance().fireEvent(new FavoritesLoadedEvent(groupedList));
+          }
+
+          @Override
+          public void attempt() {
+            super.attempt();
+            ServicesLocator.getServiceMyLinks().getMyLinks(this);
+          }
+        };
+        action.attempt();
     }
 
-  @Override
+    @Override
   public void addFavorite(final AddFavoriteEvent event) {
     MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<MyLinkDTO>() {
       @Override
@@ -102,7 +149,11 @@ public void attempt() {
         super.attempt();
         MyLinkDTO dto = new MyLinkDTO();
         dto.setName(event.getDescription());
-        dto.setUrl("/" + event.getObjectType() + "/" + event.getObjectId());
+        if (event.getObjectType().equals(ContentsTypes.Folder.name())) {
+            dto.setUrl("/Topic/" + event.getObjectId() + "?ComponentId="+ event.getInstanceId());
+        } else {
+            dto.setUrl("/" + event.getObjectType() + "/" + event.getObjectId());
+        }
         dto.setVisible(true);
         dto.setPopup(false);
         dto.setDescription(event.getDescription());
@@ -139,7 +190,31 @@ public void onSuccess(final Method method,
       action.attempt();
   }
 
-  @Override
+    @Override
+    public void deleteFavorites(FavoritesDeleteEvent favoritesDeleteEvent) {
+        MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<Void>() {
+            private int i = 1;
+            @Override
+            public void attempt() {
+                super.attempt();
+                for (MyLinkDTO dto : favoritesDeleteEvent.getSelection()) {
+                    ServicesLocator.getServiceMyLinks().deleteLink(String.valueOf(dto.getLinkId()), this);
+                }
+            }
+
+            @Override
+            public void onSuccess(Method method, Void unused) {
+                i++;
+                if (i > favoritesDeleteEvent.getSelection().size()) {
+                    super.onSuccess(method, unused);
+                    loadFavorites(new FavoritesLoadEvent());
+                }
+            }
+        };
+        action.attempt();
+    }
+
+    @Override
   public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) { /* only one instance */ }
 
   @Override
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/app/FavoritesAppEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/app/FavoritesAppEventHandler.java
index 115e37785..5220a5b59 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/app/FavoritesAppEventHandler.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/app/FavoritesAppEventHandler.java
@@ -30,4 +30,5 @@ public interface FavoritesAppEventHandler extends EventHandler{
 	void loadFavorites(FavoritesLoadEvent event);
 	void addFavorite(AddFavoriteEvent event);
 	void gotoApp(GotoAppEvent event);
+    void deleteFavorites(FavoritesDeleteEvent favoritesDeleteEvent);
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/app/FavoritesDeleteEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/app/FavoritesDeleteEvent.java
new file mode 100644
index 000000000..01d8e3d5a
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/app/FavoritesDeleteEvent.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.apps.favorites.events.app;
+
+
+import org.silverpeas.mobile.shared.dto.MyLinkDTO;
+
+import java.util.List;
+
+public class FavoritesDeleteEvent extends AbstractFavoritesAppEvent {
+
+  private List<MyLinkDTO> selection;
+  public FavoritesDeleteEvent(){
+    super();
+  }
+  @Override
+  protected void dispatch(FavoritesAppEventHandler handler) {
+    handler.deleteFavorites(this);
+  }
+
+  public void setSelection(List<MyLinkDTO> selection) {
+    this.selection = selection;
+  }
+
+  public List<MyLinkDTO> getSelection() {
+    return selection;
+  }
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/pages/FavoritesLoadedEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/pages/FavoritesLoadedEvent.java
index 79b85fbcd..627db28e3 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/pages/FavoritesLoadedEvent.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/pages/FavoritesLoadedEvent.java
@@ -24,15 +24,13 @@
 
 package org.silverpeas.mobile.client.apps.favorites.events.pages;
 
-import org.silverpeas.mobile.shared.dto.MyLinkDTO;
-
 import java.util.List;
 
 public class FavoritesLoadedEvent extends AbstractFavoritesPagesEvent {
 
-  List<MyLinkDTO> favorites;
+  List favorites;
 
-  public FavoritesLoadedEvent(List<MyLinkDTO> favorites) {
+  public FavoritesLoadedEvent(List favorites) {
     super();
     this.favorites = favorites;
   }
@@ -42,7 +40,7 @@ protected void dispatch(FavoritesPagesEventHandler handler) {
     handler.onFavoritesLoaded(this);
   }
 
-  public List<MyLinkDTO> getFavorites() {
+  public List getFavorites() {
     return favorites;
   }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java
index 413e6ce74..8aeab4e2f 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java
@@ -27,19 +27,27 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Widget;
+import org.silverpeas.mobile.client.apps.favorites.events.app.FavoritesDeleteEvent;
 import org.silverpeas.mobile.client.apps.favorites.events.app.FavoritesLoadEvent;
 import org.silverpeas.mobile.client.apps.favorites.events.pages.AbstractFavoritesPagesEvent;
 import org.silverpeas.mobile.client.apps.favorites.events.pages.FavoritesLoadedEvent;
 import org.silverpeas.mobile.client.apps.favorites.events.pages.FavoritesPagesEventHandler;
+import org.silverpeas.mobile.client.apps.favorites.pages.widgets.CategoryItem;
+import org.silverpeas.mobile.client.apps.favorites.resources.FavoritesMessages;
 import org.silverpeas.mobile.client.apps.navigation.pages.widgets.FavoriteItem;
 import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.components.PopinConfirmation;
 import org.silverpeas.mobile.client.components.UnorderedList;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.components.base.widgets.DeleteButton;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
-import org.silverpeas.mobile.shared.dto.FavoriteDTO;
+import org.silverpeas.mobile.shared.dto.MyLinkCategoryDTO;
 import org.silverpeas.mobile.shared.dto.MyLinkDTO;
 
+import java.util.ArrayList;
 import java.util.List;
 
 public class FavoritesPage extends PageContent implements FavoritesPagesEventHandler {
@@ -50,6 +58,10 @@ public class FavoritesPage extends PageContent implements FavoritesPagesEventHan
   @UiField
   UnorderedList favorites;
 
+  private DeleteButton buttonDelete = new DeleteButton();
+
+  private FavoritesMessages msgApp = GWT.create(FavoritesMessages .class);
+
   interface FavoritesPageUiBinder extends UiBinder<Widget, FavoritesPage> {
   }
 
@@ -69,12 +81,62 @@ public void stop() {
 
   @Override
   public void onFavoritesLoaded(final FavoritesLoadedEvent event) {
+    favorites.clear();
+    List favoritesList = event.getFavorites();
+    CategoryItem currentCategory = null;
+    for (Object it : favoritesList) {
+      if (it instanceof MyLinkDTO) {
+        FavoriteItem item = new FavoriteItem();
+        item.setParent(this);
+        item.setData((MyLinkDTO) it);
+        currentCategory.addFavorite(item);
+        item.getElement().addClassName("item-open");
+        favorites.add(item);
+      } else if (it instanceof MyLinkCategoryDTO) {
+        CategoryItem item = new CategoryItem();
+        item.setData((MyLinkCategoryDTO) it);
+        favorites.add(item);
+        currentCategory = item;
+      }
+    }
+  }
+
+  @Override
+  public void setSelectionMode(boolean selectionMode) {
+    super.setSelectionMode(selectionMode);
+    if (selectionMode) {
+      clearActions();
+      buttonDelete.setCallback(new Command() {@Override public void execute() {deleteSelectedFavoris();}});
+      buttonDelete.setId("delete-favoris");
+      addActionShortcut(buttonDelete);
+    } else {
+      clearActions();
+    }
+  }
+
+  private void deleteSelectedFavoris() {
+    PopinConfirmation popin = new PopinConfirmation(msgApp.deleteConfirmation());
+    popin.setYesCallback(new Command() {
+      @Override
+      public void execute() {
+        List<MyLinkDTO> selection = getSelectedFavorites();
+        FavoritesDeleteEvent deleteEvent = new FavoritesDeleteEvent();
+        deleteEvent.setSelection(selection);
+        if (!selection.isEmpty()) EventBus.getInstance().fireEvent(deleteEvent);
+        clearActions();
+      }
+    });
+    popin.show();
+  }
 
-    List<MyLinkDTO> favoritesList = event.getFavorites();
-    for (MyLinkDTO favoriteDTO : favoritesList) {
-      FavoriteItem item = new FavoriteItem();
-      item.setData(favoriteDTO);
-      favorites.add(item);
+  private List<MyLinkDTO> getSelectedFavorites() {
+    List<MyLinkDTO> selection = new ArrayList<>();
+    for (int i = 0; i < favorites.getCount(); i++) {
+      FavoriteItem item = (FavoriteItem) favorites.getWidget(i);
+      if (item.isSelected()) {
+        selection.add(item.getData());
+      }
     }
+    return selection;
   }
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/AddToFavoritesButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/AddToFavoritesButton.java
index c95b6c201..b2a339141 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/AddToFavoritesButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/AddToFavoritesButton.java
@@ -34,7 +34,9 @@
 import org.silverpeas.mobile.client.apps.favorites.events.app.AddFavoriteEvent;
 import org.silverpeas.mobile.client.apps.favorites.resources.FavoritesMessages;
 import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.components.Popin;
 import org.silverpeas.mobile.client.components.base.ActionItem;
+import org.silverpeas.mobile.client.components.base.ActionsMenu;
 
 /**
  * @author: svu
@@ -75,7 +77,9 @@ void displayNotificationPage(ClickEvent event){
         EventBus.getInstance().fireEvent(addEvent);
 
         // hide menu
-        getElement().getParentElement().removeAttribute("style");
+        ActionsMenu.close(getElement());
+        Popin popin = new Popin(msg.favoriteAdded());
+        popin.show();
     }
 
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.java
new file mode 100644
index 000000000..d2231bbe7
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.apps.favorites.pages.widgets;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.SpanElement;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.Anchor;
+import com.google.gwt.user.client.ui.HTMLPanel;
+import com.google.gwt.user.client.ui.Widget;
+import org.silverpeas.mobile.client.apps.navigation.pages.widgets.FavoriteItem;
+import org.silverpeas.mobile.client.components.base.widgets.SelectableItem;
+import org.silverpeas.mobile.client.resources.ApplicationMessages;
+import org.silverpeas.mobile.client.resources.ApplicationResources;
+import org.silverpeas.mobile.shared.dto.MyLinkCategoryDTO;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CategoryItem extends SelectableItem {
+
+  private MyLinkCategoryDTO data;
+  private boolean expanded = true;
+
+  private List<FavoriteItem> favorites = new ArrayList<>();
+  private static CategoryItemUiBinder uiBinder = GWT.create(CategoryItemUiBinder.class);
+
+  @UiField
+  HTMLPanel container;
+  @UiField Anchor link;
+  protected ApplicationMessages msg = null;
+
+  private ApplicationResources resources = GWT.create(ApplicationResources.class);
+
+  @UiField
+  SpanElement title, desc, icon;
+
+
+  interface CategoryItemUiBinder extends UiBinder<Widget, CategoryItem> {
+  }
+
+  public CategoryItem() {
+    initWidget(uiBinder.createAndBindUi(this));
+    msg = GWT.create(ApplicationMessages.class);
+    setContainer(container);
+    icon.setInnerHTML(resources.less().getText());
+
+  }
+  public void setData(MyLinkCategoryDTO data) {
+    this.data = data;
+    title.setInnerHTML(data.getName());
+    if (!data.getName().equals(data.getDescription())) {
+      desc.setInnerHTML(data.getDescription());
+    }
+  }
+
+  public void addFavorite(FavoriteItem item) {
+    favorites.add(item);
+  }
+
+
+  public MyLinkCategoryDTO getData() {
+    return data;
+  }
+
+    @UiHandler("link")
+    protected void onClick(ClickEvent event) {
+      expanded = !expanded;
+      if (expanded) {
+        icon.setInnerHTML(resources.less().getText());
+      } else {
+        icon.setInnerHTML(resources.more().getText());
+      }
+      for (FavoriteItem item : favorites) {
+        if (expanded) {
+          item.getElement().addClassName("item-open");
+          item.getElement().removeClassName("item-closed");
+
+        } else {
+          item.getElement().addClassName("item-closed");
+          item.getElement().removeClassName("item-open");
+        }
+      }
+    }
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.ui.xml
similarity index 77%
rename from mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskItem.ui.xml
rename to mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.ui.xml
index c9f8f3a0b..d5286d2cf 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskItem.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.ui.xml
@@ -23,10 +23,14 @@
   -->
 
 <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
-<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui">
-  <ui:with field='msg' type='org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages'/>
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"	xmlns:g="urn:import:com.google.gwt.user.client.ui">
+
+	<g:HTMLPanel tag="li" ui:field="container" styleName="category">
+		<g:Anchor ui:field="link" styleName="ui-btn">
+			<span ui:field="icon" class="category-icon"></span>
+			<span ui:field="title" class="category-title"></span>
+			<span ui:field="desc" class="category-desc"></span>
+		</g:Anchor>
+	</g:HTMLPanel>
 
-  <g:HTMLPanel tag="li" ui:field="container" styleName="add-task">
-    <g:Anchor ui:field="link" styleName="ui-btn ui-btn-icon-right ui-icon-carat-more" text="{msg.create}"/>
-  </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.java
index 6ae2fe4a6..721681946 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.java
@@ -28,5 +28,8 @@
 
 public interface FavoritesMessages extends Messages {
   String addToFavoritesContent();
+  String favoriteAdded();
+
+  String deleteConfirmation();
 
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.properties
index c0196da5f..fb99e1826 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.properties
@@ -23,3 +23,5 @@
 #
 
 addToFavoritesContent=Ajouter en favoris
+favoriteAdded=Favoris ajouté !
+deleteConfirmation=Etes-vous sur de supprimer ces favoris ?
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_en.properties
index 3dbce1b1c..b7f87c2e8 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_en.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_en.properties
@@ -23,3 +23,5 @@
 #
 
 addToFavoritesContent=Add to favorites
+favoriteAdded=Favorite added !
+deleteConfirmation=Delete those favortis ?
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_fr.properties
index c0196da5f..fb99e1826 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_fr.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_fr.properties
@@ -23,3 +23,5 @@
 #
 
 addToFavoritesContent=Ajouter en favoris
+favoriteAdded=Favoris ajouté !
+deleteConfirmation=Etes-vous sur de supprimer ces favoris ?
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.java
index 5be0522f6..9a73bef1d 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.java
@@ -50,9 +50,7 @@
 import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.common.resources.ResourcesManager;
 import org.silverpeas.mobile.client.components.Popin;
-import org.silverpeas.mobile.client.components.PopinInformation;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.client.components.forms.FieldEditable;
 import org.silverpeas.mobile.client.components.userselection.UserSelectionPage;
@@ -75,8 +73,6 @@ public class FormOnlineEditPage extends PageContent implements UserSelectionComp
   private static List<FormFieldDTO> data;
 
   @UiField(provided = true) protected FormsOnlineMessages msg = null;
-  @UiField
-  ActionsMenu actionsMenu;
 
   @UiField
   UnorderedList fields;
@@ -276,7 +272,11 @@ public static void showUserSelection(String fieldName, String type) {
     // get users or groups selected before
     TextAreaElement tx = getUserField(fieldName);
     List<String> ids = Arrays.asList(tx.getAttribute("data").split(","));
-    page.setPreSelectedIds(ids);
+    if (type.equalsIgnoreCase("user")) {
+      page.setPreSelectedUsersIds(ids);
+    } else if (type.equalsIgnoreCase("group")) {
+      page.setPreSelectedGroupsIds(ids);
+    }
     sendEventToGetPossibleUsers(fieldName);
     page.show();
   }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.ui.xml
index d3814e9c0..a5bdf69a4 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.ui.xml
@@ -31,7 +31,6 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <components:UnorderedList ui:field="fields" styleName="formOnline-form"/>
     <g:HTML ui:field="layer"/>
     <div class=" ui-controlgroup ui-controlgroup-horizontal">
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.java
index 143e3f277..226105281 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.java
@@ -41,7 +41,6 @@
 import org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.shared.dto.formsonline.FormRequestDTO;
 
@@ -52,8 +51,6 @@ public class FormOnlineRequestsPage extends PageContent implements FormsOnlinePa
   private static FormsOnlineAsReceiverPageUiBinder uiBinder = GWT.create(FormsOnlineAsReceiverPageUiBinder.class);
 
   @UiField(provided = true) protected FormsOnlineMessages msg = null;
-  @UiField
-  ActionsMenu actionsMenu;
 
   @UiField
   UnorderedList requests;
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.ui.xml
index 2c0be6591..5bedecd02 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.ui.xml
@@ -31,7 +31,6 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <components:UnorderedList ui:field="requests" styleName="forms-list"/>
   </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.java
index a7d58c8ed..5dbda25f1 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.java
@@ -46,7 +46,6 @@
 import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.common.resources.ResourcesManager;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.client.components.forms.FieldViewable;
 import org.silverpeas.mobile.shared.dto.FormFieldDTO;
@@ -60,9 +59,6 @@ public class FormOnlineViewPage extends PageContent implements FormsOnlinePagesE
   private boolean hasHtmlLayer;
 
   @UiField(provided = true) protected FormsOnlineMessages msg = null;
-  @UiField
-  ActionsMenu actionsMenu;
-
   @UiField
   UnorderedList fields;
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.ui.xml
index 3e1e2edbc..d928592f2 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.ui.xml
@@ -31,7 +31,6 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a formOnlineRequest">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <components:UnorderedList ui:field="fields" styleName="formOnline-form"/>
     <g:HTML ui:field="layer"/>
     <g:Label ui:field="labelComment" text="{msg.comment}" styleName="label-comment"></g:Label>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.java
index a26eb563d..733c10559 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.java
@@ -40,7 +40,6 @@
 import org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.shared.dto.formsonline.FormDTO;
 
@@ -51,8 +50,6 @@ public class FormsOnlineAsReceiverPage extends PageContent implements FormsOnlin
   private static FormsOnlineAsReceiverPageUiBinder uiBinder = GWT.create(FormsOnlineAsReceiverPageUiBinder.class);
 
   @UiField(provided = true) protected FormsOnlineMessages msg = null;
-  @UiField
-  ActionsMenu actionsMenu;
 
   @UiField
   UnorderedList forms;
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.ui.xml
index af7124bac..0fe366ffa 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.ui.xml
@@ -31,7 +31,6 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <components:UnorderedList ui:field="forms" styleName="forms-list"/>
   </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.java
index 295eedcf7..68cac5991 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.java
@@ -49,7 +49,6 @@
 import org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.formsonline.FormDTO;
@@ -59,8 +58,6 @@ public class FormsOnlinePage extends PageContent implements FormsOnlinePagesEven
   private static FormsOnlinePageUiBinder uiBinder = GWT.create(FormsOnlinePageUiBinder.class);
 
   @UiField(provided = true) protected FormsOnlineMessages msg = null;
-  @UiField
-  ActionsMenu actionsMenu;
 
   @UiField
   HTMLPanel container;
@@ -82,11 +79,11 @@ public void onFormsOnlineLoad(final FormsOnlineLoadedEvent event) {
       if (form.isReceiver()) canReceive = true;
     }
 
-    actionsMenu.addAction(favorite);
+    addActionMenu(favorite);
     favorite.init(getApp().getApplicationInstance().getId(), getApp().getApplicationInstance().getId(), ContentsTypes.Component.name(), getPageTitle());
-    actionsMenu.addAction(myRequests);
+    addActionMenu(myRequests);
     myRequests.init(getApp().getApplicationInstance().getId());
-    if (canReceive) actionsMenu.addAction(requestsToValidate);
+    if (canReceive) addActionMenu(requestsToValidate);
   }
 
   @Override
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.ui.xml
index af7124bac..0fe366ffa 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.ui.xml
@@ -31,7 +31,6 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <components:UnorderedList ui:field="forms" styleName="forms-list"/>
   </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewMyRequestsButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewMyRequestsButton.java
index dd4d8e9fe..872de2f0f 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewMyRequestsButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewMyRequestsButton.java
@@ -31,11 +31,11 @@
 import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.HTMLPanel;
-import org.silverpeas.mobile.client.apps.favorites.events.app.AddFavoriteEvent;
 import org.silverpeas.mobile.client.apps.formsonline.events.app.FormOnlineMyRequestLoadEvent;
 import org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.base.ActionItem;
+import org.silverpeas.mobile.client.components.base.ActionsMenu;
 
 /**
  * @author: svu
@@ -68,7 +68,7 @@ void displayNotificationPage(ClickEvent event){
         EventBus.getInstance().fireEvent(new FormOnlineMyRequestLoadEvent());
 
         // hide menu
-        getElement().getParentElement().removeAttribute("style");
+        ActionsMenu.close(getElement());
     }
 
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewRequestsToValidateButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewRequestsToValidateButton.java
index 0833a512c..51f370b55 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewRequestsToValidateButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewRequestsToValidateButton.java
@@ -35,6 +35,7 @@
 import org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.base.ActionItem;
+import org.silverpeas.mobile.client.components.base.ActionsMenu;
 
 /**
  * @author: svu
@@ -61,7 +62,7 @@ public ViewRequestsToValidateButton() {
     void displayNotificationPage(ClickEvent event){
         EventBus.getInstance().fireEvent(new FormsOnlineAsReceiverLoadEvent());
         // hide menu
-        getElement().getParentElement().removeAttribute("style");
+        ActionsMenu.close(getElement());
     }
 
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/hyperlink/HyperLinkApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/hyperlink/HyperLinkApp.java
index be4f2a28a..d4a061a0a 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/hyperlink/HyperLinkApp.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/hyperlink/HyperLinkApp.java
@@ -25,6 +25,7 @@
 package org.silverpeas.mobile.client.apps.hyperlink;
 
 import org.fusesource.restygwt.client.Method;
+import org.fusesource.restygwt.client.MethodCallback;
 import org.fusesource.restygwt.client.TextCallback;
 import org.silverpeas.mobile.client.apps.navigation.events.app.external.AbstractNavigationEvent;
 import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationAppInstanceChangedEvent;
@@ -37,6 +38,7 @@
 import org.silverpeas.mobile.client.common.event.ErrorEvent;
 import org.silverpeas.mobile.client.common.navigation.LinksManager;
 import org.silverpeas.mobile.client.common.network.NetworkHelper;
+import org.silverpeas.mobile.shared.dto.hyperlink.HyperLinkDTO;
 import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO;
 import org.silverpeas.mobile.shared.dto.navigation.Apps;
 
@@ -64,21 +66,21 @@ public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) {
     if (event.getInstance().getType().equals(Apps.hyperlink.name())) {
       this.instance = event.getInstance();
 
-      ServicesLocator.getServiceHyperLink().getUrl(instance.getId(), new TextCallback() {
+      ServicesLocator.getServiceHyperLink().getUrl(instance.getId(), new MethodCallback<HyperLinkDTO>() {
         @Override
         public void onFailure(final Method method, final Throwable t) {
           EventBus.getInstance().fireEvent(new ErrorEvent(t));
         }
 
         @Override
-        public void onSuccess(final Method method, final String url) {
-          openLink(url);
+        public void onSuccess(Method method, HyperLinkDTO hyperLinkDTO) {
+          openLink(hyperLinkDTO);
         }
       });
     }
   }
 
-  private void openLink(String url) {
+  private void openLink(HyperLinkDTO url) {
     Notification.activityStop();
     NetworkHelper.hideOfflineIndicator();
     LinksManager.processLink(url);
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/MediaApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/MediaApp.java
index c9c280286..d49bc8367 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/MediaApp.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/MediaApp.java
@@ -26,6 +26,7 @@
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.user.client.Window;
 import org.fusesource.restygwt.client.Method;
 import org.silverpeas.mobile.client.apps.media.events.app.AbstractMediaAppEvent;
 import org.silverpeas.mobile.client.apps.media.events.app.MediaAppEventHandler;
@@ -96,35 +97,7 @@ public void start() {
 
   @Override
   public void startWithContent(final ContentDTO content) {
-
-    MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<ApplicationInstanceDTO>() {
-      @Override
-      public void attempt() {
-        super.attempt();
-        ServicesLocator.getServiceNavigation()
-            .getApp(content.getInstanceId(), content.getId(), content.getType(), this);
-      }
-
-      @Override
-      public void onFailure(final Method method, final Throwable t) {
-        super.onFailure(method, t);
-        if (NetworkHelper.needToGoOffine(t)) {
-          Notification.alert(globalMsg.needToBeOnline());
-        } else {
-          EventBus.getInstance().fireEvent(new ErrorEvent(t));
-        }
-      }
-
-      @Override
-      public void onSuccess(final Method method,
-            final ApplicationInstanceDTO app) {
-        super.onSuccess(method, app);
-        commentable = app.getCommentable();
-        notifiable = app.getNotifiable();
-        displayContent(content);
-      }
-    };
-    action.attempt();
+    displayContent(content);
   }
 
   private void displayContent(ContentDTO contentSource) {
@@ -133,13 +106,39 @@ private void displayContent(ContentDTO contentSource) {
 
       @Override
       public void attempt() {
-        ServicesLocator.getServiceMedia().getMedia(contentSource.getId(), this);
+        ServicesLocator.getServiceMedia().getMedia(contentSource.getInstanceId(), contentSource.getId(), this);
       }
 
       @Override
       public void onSuccess(final Method method, final MediaDTO media) {
         super.onSuccess(method, media);
-        displayContent(media);
+        MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<ApplicationInstanceDTO>() {
+          @Override
+          public void attempt() {
+            super.attempt();
+            ServicesLocator.getServiceNavigation()
+                    .getApp(media.getInstance(), media.getId(), contentSource.getType(), this);
+          }
+          @Override
+          public void onFailure(final Method method, final Throwable t) {
+            super.onFailure(method, t);
+            if (NetworkHelper.needToGoOffine(t)) {
+              Notification.alert(globalMsg.needToBeOnline());
+            } else {
+              EventBus.getInstance().fireEvent(new ErrorEvent(t));
+            }
+          }
+
+          @Override
+          public void onSuccess(final Method method,
+                                final ApplicationInstanceDTO app) {
+            super.onSuccess(method, app);
+            commentable = app.getCommentable();
+            notifiable = app.getNotifiable();
+            displayContent(media);
+          }
+        };
+        action.attempt();
       }
     };
     action.attempt();
@@ -215,18 +214,36 @@ public void appInstanceChanged(NavigationAppInstanceChangedEvent event) {
     }
   }
 
+  private void loadAppInstance(final ContentDTO content) {
+    MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<ApplicationInstanceDTO>() {
+      @Override
+      public void attempt() {
+        ServicesLocator.getServiceNavigation()
+                .getApp(content.getInstanceId(), content.getId(), content.getType(), this);
+      }
+      @Override
+      public void onSuccess(final Method method,
+                            final ApplicationInstanceDTO app) {
+        super.onSuccess(method, app);
+        setApplicationInstance(app);
+        appInstanceChanged(new NavigationAppInstanceChangedEvent(app));
+      }
+    };
+    action.attempt();
+  }
+
   @Override
   public void showContent(final NavigationShowContentEvent event) {
     if (event.getContent().getType().equals("Component") && event.getContent().getInstanceId().startsWith(Apps.gallery.name())) {
-      super.showContent(event);
+      loadAppInstance(event.getContent());
     } else if (event.getContent().getType().equals(ContentsTypes.Media.name()) ||
         event.getContent().getType().equals(ContentsTypes.Photo.name()) ||
         event.getContent().getType().equals(ContentsTypes.Sound.name()) ||
         event.getContent().getType().equals(ContentsTypes.Video.name()) ||
         event.getContent().getType().equals(ContentsTypes.Streaming.name())) {
       startWithContent(event.getContent());
-    } else if (event.getContent().getType().equals(ContentsTypes.Album.name())) {
-
+    } else if (event.getContent().getType().equals(ContentsTypes.Album.name()) ||
+            event.getContent().getType().equals(ContentsTypes.Folder.name())) {
       MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<ApplicationInstanceDTO>() {
         @Override
         public void attempt() {
@@ -250,6 +267,7 @@ public void onSuccess(final Method method,
           page.show();
         }
       };
+      action.attempt();
     }
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java
index 11f9d9573..c6bef3e54 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java
@@ -27,7 +27,10 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.SimplePanel;
 import com.google.gwt.user.client.ui.Widget;
+import org.silverpeas.mobile.client.SpMobil;
 import org.silverpeas.mobile.client.apps.favorites.pages.widgets.AddToFavoritesButton;
 import org.silverpeas.mobile.client.apps.media.events.app.MediaViewShowEvent;
 import org.silverpeas.mobile.client.apps.media.events.app.MediasLoadMediaItemsEvent;
@@ -42,19 +45,20 @@
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.common.app.View;
+import org.silverpeas.mobile.client.common.navigation.LinksManager;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
-import org.silverpeas.mobile.client.components.base.LoadingItem;
-import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.components.base.*;
 import org.silverpeas.mobile.client.components.base.events.page.DataLoadedEvent;
 import org.silverpeas.mobile.client.components.base.events.page.LoadingDataFinishEvent;
 import org.silverpeas.mobile.client.components.base.events.page.MoreDataLoadedEvent;
+import org.silverpeas.mobile.client.components.base.widgets.ShareButton;
 import org.silverpeas.mobile.shared.dto.BaseDTO;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.RightDTO;
 import org.silverpeas.mobile.shared.dto.media.AlbumDTO;
 import org.silverpeas.mobile.shared.dto.media.MediaDTO;
 
+import java.util.ArrayList;
 import java.util.List;
 
 public class MediaNavigationPage extends PageContent implements View, MediaNavigationPagesEventHandler {
@@ -63,12 +67,11 @@ public class MediaNavigationPage extends PageContent implements View, MediaNavig
   @UiField UnorderedList list;
   private AddMediaButton buttonImport = new AddMediaButton();
   private LoadingItem endline = new LoadingItem();
-  @UiField ActionsMenu actionsMenu;
-
   private String rootAlbumId, instanceId;
   private RightDTO rights;
   private AlbumDTO root;
   private AddToFavoritesButton favorite = new AddToFavoritesButton();
+  private ShareButton share = new ShareButton();
 
   interface MediaNavigationPageUiBinder extends UiBinder<Widget, MediaNavigationPage> {
   }
@@ -84,6 +87,7 @@ public void init(String instanceId, String rootAlbumId, RightDTO rights) {
     this.rootAlbumId = rootAlbumId;
     this.rights = rights;
     buttonImport.init(instanceId, rootAlbumId);
+    buttonImport.setId("import");
     EventBus.getInstance().fireEvent(new MediasLoadMediaItemsEvent(instanceId, rootAlbumId));
   }
 
@@ -93,18 +97,22 @@ public void loadedDataEvent(final DataLoadedEvent event) {
     if (isVisible() && ((event.getLocationId() == null && rootAlbumId == null) || event.getLocationId().equals(rootAlbumId))) {
       list.clear();
       if (rights.getWriter() || rights.getPublisher() || rights.getManager()) {
-        if (rootAlbumId != null) list.add(buttonImport);
+        if (rootAlbumId != null) {
+          addActionShortcut(buttonImport);
+        }
       }
       List<BaseDTO> dataItems = event.getData();
       populateList(dataItems);
       list.add(endline);
-
-      actionsMenu.addAction(favorite);
       if (root.getId() == null) {
         favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), root.getName());
+        share.init(root.getName(), root.getName(), LinksManager.createApplicationPermalink(instanceId));
       } else {
         favorite.init(instanceId, root.getId(), ContentsTypes.Album.name(), root.getName());
+        share.init(root.getName(), root.getName(),LinksManager.createAlbumPermalink(instanceId, root.getId()));
       }
+      addActionMenu(favorite);
+      addActionMenu(share);
     }
     Notification.activityStop();
   }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml
index daa9b4ea4..0dd747445 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml
@@ -29,7 +29,6 @@
              xmlns:components="urn:import:org.silverpeas.mobile.client.components">
 
   <g:HTMLPanel styleName="content">
-    <base:ActionsMenu ui:field="actionsMenu"/>
-    <components:UnorderedList ui:field="list" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/>
+    <components:UnorderedList ui:field="list" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow medias"/>
   </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java
index bb49a23b8..454b4fee8 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java
@@ -38,10 +38,9 @@
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.client.ui.Anchor;
+import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HTMLPanel;
-import com.google.gwt.user.client.ui.Image;
 import org.silverpeas.mobile.client.apps.comments.pages.widgets.CommentsButton;
-import org.silverpeas.mobile.client.apps.documents.resources.DocumentsResources;
 import org.silverpeas.mobile.client.apps.favorites.pages.widgets.AddToFavoritesButton;
 import org.silverpeas.mobile.client.apps.media.events.app.MediaViewGetNextEvent;
 import org.silverpeas.mobile.client.apps.media.events.app.MediaViewGetPreviousEvent;
@@ -57,12 +56,13 @@
 import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.common.app.View;
 import org.silverpeas.mobile.client.common.navigation.UrlUtils;
+import org.silverpeas.mobile.client.common.network.NetworkHelper;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndEvent;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.components.base.widgets.ShareButton;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.comments.CommentDTO;
 import org.silverpeas.mobile.shared.dto.media.PhotoDTO;
@@ -77,7 +77,7 @@ interface PhotoPageUiBinder extends UiBinder<HTMLPanel, PhotoPage> {
   }
 
   @UiField HeadingElement mediaTitle;
-  @UiField Anchor mediaFullSize, download;
+  @UiField Anchor mediaFullSize, download, link;
   @UiField ParagraphElement lastUpdate, creator;
   @UiField SpanElement mediaFileName, weight, dimensions;
   @UiField ImageElement preview, mediaType;
@@ -85,24 +85,28 @@ interface PhotoPageUiBinder extends UiBinder<HTMLPanel, PhotoPage> {
   CommentsButton comments;
   @UiField DivElement previewContainer;
 
-  @UiField ActionsMenu actionsMenu;
+  @UiField HTML view;
+
+  @UiField HTMLPanel operations;
 
   private NotifyButton notification = new NotifyButton();
   private AddToFavoritesButton favorite = new AddToFavoritesButton();
 
+  private ShareButton share = new ShareButton();
+
   private static PhotoPageUiBinder uiBinder = GWT.create(PhotoPageUiBinder.class);
   private PhotoDTO photo;
-  private DocumentsResources ressources;
   private MediaMessages msg;
   private SwipeRecognizer swipeRecognizer;
 
   public PhotoPage() {
     initWidget(uiBinder.createAndBindUi(this));
-    ressources = GWT.create(DocumentsResources.class);
-    ressources.css().ensureInjected();
     msg = GWT.create(MediaMessages.class);
     EventBus.getInstance().addHandler(AbstractMediaPagesEvent.TYPE, this);
     getElement().setId("a-media");
+    operations.getElement().setId("operations");
+    download.getElement().setId("download");
+    view.getElement().setId("view");
     /*Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
       @Override
       public void execute() {
@@ -139,9 +143,9 @@ public void onMediaViewPrev(final MediaViewPrevEvent mediaViewPrevEvent) {
   public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) {
     if (isVisible()) {
       this.photo = (PhotoDTO) event.getPreview();
+      if (!photo.getDownload()) link.getElement().removeClassName("expand-more");
       preview.setSrc(photo.getDataPhoto());
-      Image img = new Image(ressources.image());
-      mediaType.getParentElement().replaceChild(img.getElement(), mediaType);
+      mediaType.setSrc(NetworkHelper.getContext() + "icons/files/file-type-image.svg");
       mediaTitle.setInnerHTML(photo.getTitle());
       mediaFileName.setInnerHTML(photo.getName());
 
@@ -167,11 +171,13 @@ public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) {
       }
 
       favorite.init(photo.getInstance(), photo.getId(), ContentsTypes.Media.name(), photo.getTitle());
-      actionsMenu.addAction(favorite);
+      addActionMenu(favorite);
       if (event.isNotifiable()) {
         notification.init(photo.getInstance(), photo.getId(), NotificationDTO.TYPE_PHOTO, photo.getName(), getPageTitle());
-        actionsMenu.addAction(notification);
+        addActionMenu(notification);
       }
+      share.init(photo.getTitle(),photo.getTitle(),"/silverpeas/Media/"+photo.getId());
+      addActionMenu(share);
     }
   }
 
@@ -190,6 +196,28 @@ void showFullScreen(ClickEvent event) {
     page.show();
   }
 
+  @UiHandler("link")
+  void link(ClickEvent event) {
+    if (photo.getDownload()) {
+      toogleOperations();
+    }
+  }
+
+  private void toogleOperations() {
+    if (operations.getStylePrimaryName().equalsIgnoreCase("ops-closed")) {
+      operations.setStylePrimaryName("ops-open");
+      link.setStylePrimaryName("expand-less");
+    } else {
+      operations.setStylePrimaryName("ops-closed");
+      link.setStylePrimaryName("expand-more");
+    }
+  }
+
+  @UiHandler("view")
+  void view(ClickEvent event) {
+    showFullScreen(event);
+  }
+
   @UiHandler("download")
   void download(ClickEvent event) {
     if (photo.getDownload()) {
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.ui.xml
index 924a1d9a8..f03e39964 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.ui.xml
@@ -28,8 +28,6 @@
              xmlns:widgets="urn:import:org.silverpeas.mobile.client.apps.comments.pages.widgets">
   <g:HTMLPanel styleName="content">
 
-      <base:ActionsMenu ui:field="actionsMenu"/>
-
       <h2 class="mediaName" ui:field="mediaTitle"></h2>
 
       <div class="cadrePhoto" ui:field="previewContainer">
@@ -40,12 +38,20 @@
       <widgets:CommentsButton ui:field="comments"/>
       <ul id="attachments">
         <li>
-          <g:Anchor ui:field="download" styleName="downloadable">
-            <img ui:field="mediaType"/>
-            <span ui:field="mediaFileName"></span>
-            <span class="weight" ui:field="weight"></span>
-            <span class="dimension" ui:field="dimensions"></span>
+          <g:Anchor ui:field="link" styleName="expand-more" href="javascript:;">
+            <div>
+              <img ui:field="mediaType"/>
+            </div>
+            <div>
+              <span ui:field="mediaFileName"></span>
+              <span class="weight" ui:field="weight"></span>
+              <span class="dimension" ui:field="dimensions"></span>
+            </div>
           </g:Anchor>
+          <g:HTMLPanel ui:field="operations" stylePrimaryName="ops-closed">
+            <g:Anchor ui:field="download" styleName="downloadable"></g:Anchor>
+            <g:HTML ui:field="view"></g:HTML>
+          </g:HTMLPanel>
         </li>
       </ul>
       <p ui:field="creator" class="lastUpdate"></p>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java
index 909c600bf..d34503720 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java
@@ -56,13 +56,15 @@
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.common.app.View;
+import org.silverpeas.mobile.client.common.navigation.LinksManager;
 import org.silverpeas.mobile.client.common.navigation.UrlUtils;
+import org.silverpeas.mobile.client.common.network.NetworkHelper;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndEvent;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.components.base.widgets.ShareButton;
 import org.silverpeas.mobile.client.resources.ApplicationResources;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.comments.CommentDTO;
@@ -79,16 +81,18 @@ interface SoundPageUiBinder extends UiBinder<HTMLPanel, SoundPage> {
   }
 
   @UiField HeadingElement mediaTitle;
-  @UiField Anchor mediaFullSize, download;
+  @UiField Anchor mediaFullSize, download, link;
   @UiField ParagraphElement lastUpdate, creator;
   @UiField SpanElement mediaFileName, weight, dimensions;
   @UiField ImageElement mediaPreview, mediaType;
   @UiField AudioElement player;
   @UiField CommentsButton comments;
   @UiField DivElement previewContainer;
-  @UiField ActionsMenu actionsMenu;
+
+  @UiField HTMLPanel operations;
 
   private NotifyButton notification = new NotifyButton();
+  private ShareButton share = new ShareButton();
   private AddToFavoritesButton favorite = new AddToFavoritesButton();
   private static SoundPageUiBinder uiBinder = GWT.create(SoundPageUiBinder.class);
   private ApplicationResources resources = GWT.create(ApplicationResources.class);
@@ -100,6 +104,8 @@ public SoundPage() {
     initWidget(uiBinder.createAndBindUi(this));
     msg = GWT.create(MediaMessages.class);
     getElement().setId("a-media");
+    operations.getElement().setId("operations");
+    download.getElement().setId("download");
     EventBus.getInstance().addHandler(AbstractMediaPagesEvent.TYPE, this);
     /*Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
       @Override
@@ -113,9 +119,9 @@ public void execute() {
   @Override
   public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) {
     if (isVisible()) {
-      mediaPreview.setSrc(resources.sound().getSafeUri().asString());
       SoundDTO sound = (SoundDTO) event.getPreview();
       this.sound = sound;
+      if (!sound.getDownload()) link.getElement().removeClassName("expand-more");
       String url = UrlUtils.getSilverpeasServicesLocation();
       url += "gallery/" + sound.getInstance() + "/sounds/" + sound.getId() + "/content";
       player.setSrc(url);
@@ -125,8 +131,8 @@ public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) {
       player.setAttribute("controlsList", "nodownload");
       player.setAttribute("type", sound.getMimeType());
 
-      Image img = new Image(resources.sound());
-      mediaType.getParentElement().replaceChild(img.getElement(), mediaType);
+      mediaType.setSrc(NetworkHelper.getContext() + "icons/files/file-type-sound.svg");
+
       mediaTitle.setInnerHTML(sound.getTitle());
       mediaFileName.setInnerHTML(sound.getName());
 
@@ -149,11 +155,30 @@ public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) {
         comments.getElement().getStyle().setDisplay(Style.Display.NONE);
       }
       favorite.init(sound.getInstance(), sound.getId(), ContentsTypes.Media.name(), sound.getTitle());
-      actionsMenu.addAction(favorite);
+      addActionMenu(favorite);
       if (event.isNotifiable()) {
         notification.init(sound.getInstance(), sound.getId(), NotificationDTO.TYPE_SOUND, sound.getName(), getPageTitle());
-        actionsMenu.addAction(notification);
+        addActionMenu(notification);
       }
+      share.init(sound.getTitle(),sound.getTitle(), LinksManager.createMediaPermalink(sound.getId()));
+      addActionMenu(share);
+    }
+  }
+
+  @UiHandler("link")
+  void link(ClickEvent event) {
+    if (sound.getDownload()) {
+      toogleOperations();
+    }
+  }
+
+  private void toogleOperations() {
+    if (operations.getStylePrimaryName().equalsIgnoreCase("ops-closed")) {
+      operations.setStylePrimaryName("ops-open");
+      link.setStylePrimaryName("expand-less");
+    } else {
+      operations.setStylePrimaryName("ops-closed");
+      link.setStylePrimaryName("expand-more");
     }
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.ui.xml
index 1b8932506..31ed372eb 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.ui.xml
@@ -28,24 +28,30 @@
               xmlns:widgets="urn:import:org.silverpeas.mobile.client.apps.comments.pages.widgets">
 
     <g:HTMLPanel styleName="content">
-      <base:ActionsMenu ui:field="actionsMenu"/>
       <h2 class="mediaName" ui:field="mediaTitle"></h2>
 
       <div class="cadrePhoto" ui:field="previewContainer">
         <g:Anchor ui:field="mediaFullSize">
-          <img ui:field="mediaPreview" src=""/>
+          <img ui:field="mediaPreview" src="/silverpeas/spmobile/icons/files/file-type-sound.svg" style="width:100%;"/>
           <audio ui:field="player"></audio>
         </g:Anchor>
       </div>
       <widgets:CommentsButton ui:field="comments"/>
       <ul id="attachments">
         <li>
-          <g:Anchor ui:field="download" styleName="downloadable" href="#">
-            <img ui:field="mediaType" src=""/>
-            <span ui:field="mediaFileName"></span>
-            <span class="weight" ui:field="weight"></span>
-            <span class="dimension" ui:field="dimensions"></span>
+          <g:Anchor ui:field="link" styleName="expand-more" href="javascript:;">
+            <div>
+              <img ui:field="mediaType" src=""/>
+            </div>
+            <div>
+              <span ui:field="mediaFileName"></span>
+              <span class="weight" ui:field="weight"></span>
+              <span class="dimension" ui:field="dimensions"></span>
+          </div>
           </g:Anchor>
+          <g:HTMLPanel ui:field="operations" stylePrimaryName="ops-closed">
+            <g:Anchor ui:field="download" styleName="downloadable"></g:Anchor>
+          </g:HTMLPanel>
         </li>
       </ul>
       <p ui:field="creator" class="lastUpdate"></p>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java
index 54e1dc3b1..588e853d2 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java
@@ -41,6 +41,7 @@
 import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Anchor;
+import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HTMLPanel;
 import com.google.gwt.user.client.ui.Image;
 import org.silverpeas.mobile.client.apps.comments.pages.widgets.CommentsButton;
@@ -59,13 +60,15 @@
 import org.silverpeas.mobile.client.common.Html5Utils;
 import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.common.app.View;
+import org.silverpeas.mobile.client.common.navigation.LinksManager;
 import org.silverpeas.mobile.client.common.navigation.UrlUtils;
+import org.silverpeas.mobile.client.common.network.NetworkHelper;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndEvent;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.components.base.widgets.ShareButton;
 import org.silverpeas.mobile.client.resources.ApplicationResources;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.comments.CommentDTO;
@@ -82,16 +85,19 @@ interface VideoPageUiBinder extends UiBinder<HTMLPanel, VideoPage> {
   }
 
   @UiField HeadingElement mediaTitle;
-  @UiField Anchor mediaFullSize, download;
+  @UiField Anchor mediaFullSize, download, link;
   @UiField ParagraphElement lastUpdate, creator;
   @UiField SpanElement mediaFileName, weight, dimensions;
   @UiField ImageElement mediaType;
   @UiField CommentsButton comments;
   @UiField VideoElement player;
   @UiField DivElement previewContainer;
-  @UiField ActionsMenu actionsMenu;
+
+  @UiField
+  HTMLPanel operations;
 
   private NotifyButton notification = new NotifyButton();
+  private ShareButton shareBtn = new ShareButton();
   private AddToFavoritesButton favorite = new AddToFavoritesButton();
 
   private static VideoPageUiBinder uiBinder = GWT.create(VideoPageUiBinder.class);
@@ -105,6 +111,10 @@ public VideoPage() {
     msg = GWT.create(MediaMessages.class);
     EventBus.getInstance().addHandler(AbstractMediaPagesEvent.TYPE, this);
     getElement().setId("a-media");
+
+    operations.getElement().setId("operations");
+    download.getElement().setId("download");
+
     /*Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
       @Override
       public void execute() {
@@ -118,6 +128,7 @@ public void execute() {
   public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) {
     if (isVisible()) {
       this.video = (VideoDTO) event.getPreview();
+      if (!video.getDownload()) link.getElement().removeClassName("expand-more");
       String url = UrlUtils.getSilverpeasServicesLocation();
       url += "gallery/" + video.getInstance() + "/videos/" + video.getId() + "/content";
       player.setSrc(url);
@@ -141,9 +152,7 @@ public void onClick(final ClickEvent clickEvent) {
           }
         }
       });
-
-      Image img = new Image(resources.video());
-      mediaType.getParentElement().replaceChild(img.getElement(), mediaType);
+      mediaType.setSrc(NetworkHelper.getContext() + "icons/files/file-type-video.svg");
       mediaTitle.setInnerHTML(video.getTitle());
       mediaFileName.setInnerHTML(video.getName());
 
@@ -168,11 +177,30 @@ public void onClick(final ClickEvent clickEvent) {
         comments.getElement().getStyle().setDisplay(Style.Display.NONE);
       }
       favorite.init(video.getInstance(), video.getId(), ContentsTypes.Media.name(), video.getTitle());
-      actionsMenu.addAction(favorite);
+      addActionMenu(favorite);
       if (event.isNotifiable()) {
         notification.init(video.getInstance(), video.getId(), NotificationDTO.TYPE_VIDEO, video.getName(), getPageTitle());
-        actionsMenu.addAction(notification);
+        addActionMenu(notification);
       }
+      shareBtn.init(video.getTitle(),video.getTitle(), LinksManager.createMediaPermalink(video.getId()));
+      addActionMenu(shareBtn);
+    }
+  }
+
+  @UiHandler("link")
+  void actions(ClickEvent event) {
+    if (video.getDownload()) {
+      toogleOperations();
+    }
+  }
+
+  private void toogleOperations() {
+    if (operations.getStylePrimaryName().equalsIgnoreCase("ops-closed")) {
+      operations.setStylePrimaryName("ops-open");
+      link.setStylePrimaryName("expand-less");
+    } else {
+      operations.setStylePrimaryName("ops-closed");
+      link.setStylePrimaryName("expand-more");
     }
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml
index ac68d9a1d..89d92f407 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml
@@ -28,7 +28,6 @@
              xmlns:widgets="urn:import:org.silverpeas.mobile.client.apps.comments.pages.widgets">
 
     <g:HTMLPanel styleName="content">
-      <base:ActionsMenu ui:field="actionsMenu"/>
       <h2 class="mediaName" ui:field="mediaTitle"></h2>
 
       <div class="cadrePhoto" ui:field="previewContainer">
@@ -39,12 +38,19 @@
       <widgets:CommentsButton ui:field="comments"/>
       <ul id="attachments">
         <li>
-          <g:Anchor ui:field="download" styleName="downloadable">
-            <img ui:field="mediaType" src=""/>
-            <span ui:field="mediaFileName"></span>
-            <span class="weight" ui:field="weight"></span>
-            <span class="dimension" ui:field="dimensions"></span>
+          <g:Anchor ui:field="link" styleName="expand-more" href="javascript:;">
+            <div>
+              <img ui:field="mediaType" src=""/>
+            </div>
+            <div>
+              <span ui:field="mediaFileName"></span>
+              <span class="weight" ui:field="weight"></span>
+              <span class="dimension" ui:field="dimensions"></span>
+            </div>
           </g:Anchor>
+          <g:HTMLPanel ui:field="operations" stylePrimaryName="ops-closed">
+            <g:Anchor ui:field="download" styleName="downloadable"></g:Anchor>
+          </g:HTMLPanel>
         </li>
       </ul>
       <p ui:field="creator" class="lastUpdate"></p>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java
index 084074db2..23b9b1d5a 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java
@@ -51,12 +51,14 @@
 import org.silverpeas.mobile.client.apps.notifications.pages.widgets.NotifyButton;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.common.app.View;
+import org.silverpeas.mobile.client.common.navigation.LinksManager;
+import org.silverpeas.mobile.client.common.network.NetworkHelper;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndEvent;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent;
 import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.components.base.widgets.ShareButton;
 import org.silverpeas.mobile.client.resources.ApplicationResources;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.comments.CommentDTO;
@@ -81,10 +83,9 @@ interface VideoStreamingPageUiBinder extends UiBinder<HTMLPanel, VideoStreamingP
   CommentsButton comments;
   @UiField IFrameElement player;
   @UiField DivElement previewContainer;
-  @UiField
-  ActionsMenu actionsMenu;
 
   private NotifyButton notification = new NotifyButton();
+  private ShareButton share = new ShareButton();
   private AddToFavoritesButton favorite = new AddToFavoritesButton();
   private static VideoStreamingPageUiBinder uiBinder = GWT.create(VideoStreamingPageUiBinder.class);
   private VideoStreamingDTO video;
@@ -115,8 +116,7 @@ public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) {
       player.setFrameBorder(0);
       player.setAttribute("allowfullscreen", "");
 
-      Image img = new Image(resources.streaming());
-      mediaType.getParentElement().replaceChild(img.getElement(), mediaType);
+      mediaType.setSrc(NetworkHelper.getContext() + "icons/files/file-type-video-ondemand.svg");
       mediaTitle.setInnerHTML(video.getTitle());
       mediaFileName.setInnerHTML(video.getName());
 
@@ -130,11 +130,13 @@ public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) {
         comments.getElement().getStyle().setDisplay(Style.Display.NONE);
       }
       favorite.init(video.getInstance(), video.getId(), ContentsTypes.Media.name(), video.getTitle());
-      actionsMenu.addAction(favorite);
+      addActionMenu(favorite);
       if (event.isNotifiable()) {
         notification.init(video.getInstance(), video.getId(), NotificationDTO.TYPE_STREAMING, video.getName(), getPageTitle());
-        actionsMenu.addAction(notification);
+        addActionMenu(notification);
       }
+      share.init(video.getTitle(),video.getTitle(), LinksManager.createMediaPermalink(video.getId()));
+      addActionMenu(share);
     }
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.ui.xml
index 3f3b513cc..c5de17aeb 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.ui.xml
@@ -27,7 +27,6 @@
              xmlns:base="urn:import:org.silverpeas.mobile.client.components.base"
              xmlns:widgets="urn:import:org.silverpeas.mobile.client.apps.comments.pages.widgets">
     <g:HTMLPanel styleName="content">
-      <base:ActionsMenu ui:field="actionsMenu"/>
       <h2 class="mediaName" ui:field="mediaTitle"></h2>
 
       <div class="cadrePhoto" ui:field="previewContainer">
@@ -39,10 +38,14 @@
       <ul id="attachments">
         <li>
           <g:Anchor ui:field="download" styleName="downloadable">
-            <img ui:field="mediaType" src=""/>
-            <span ui:field="mediaFileName"></span>
-            <span class="weight" ui:field="weight"></span>
-            <span class="dimension" ui:field="dimensions"></span>
+            <div>
+              <img ui:field="mediaType" src=""/>
+            </div>
+            <div>
+              <span ui:field="mediaFileName"></span>
+              <span class="weight" ui:field="weight"></span>
+              <span class="dimension" ui:field="dimensions"></span>
+            </div>
           </g:Anchor>
         </li>
       </ul>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.java
index 7aa2e16f0..3e6628271 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.java
@@ -32,9 +32,7 @@
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
-import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Anchor;
-import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FileUpload;
 import com.google.gwt.user.client.ui.Widget;
 import org.silverpeas.mobile.client.SpMobil;
@@ -44,14 +42,14 @@
 import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.common.navigation.UrlUtils;
 import org.silverpeas.mobile.client.common.network.NetworkHelper;
-import org.silverpeas.mobile.client.common.network.OfflineHelper;
+import org.silverpeas.mobile.client.components.base.ActionItem;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
 
 
 /**
  * @author: svu
  */
-public class AddMediaButton extends Composite {
+public class AddMediaButton extends ActionItem {
     interface AddMediaButtonUiBinder extends UiBinder<Widget, AddMediaButton> {
     }
 
@@ -103,12 +101,11 @@ public void mediaNotUploaded(int codeError) {
 
     @UiHandler("link")
     void upload(ClickEvent event) {
-        if (!NetworkHelper.isOnline()) {
+        if (NetworkHelper.isOnline()) {
             clickOnInputFile(file.getElement());
         } else {
             Notification.alert(globalMsg.needToBeOnline());
         }
-
     }
 
     private static native void upload(AddMediaButton button, Element input, String componentId, String albumId, String url, String token) /*-{
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.ui.xml
index 6d6292185..827d18d91 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.ui.xml
@@ -28,7 +28,7 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.media.resources.MediaMessages'/>
   
   <g:HTMLPanel tag="li" styleName="add-media">
-    <g:Anchor ui:field="link" styleName="ui-btn ui-btn-icon-right ui-icon-carat-more" text="{msg.importMedia}"/>
-    <g:FileUpload ui:field="file" styleName="ui-btn ui-btn-icon-right ui-icon-carat-more" title="{msg.importMedia}" name="file"/>
+    <g:Anchor ui:field="link"/>
+    <g:FileUpload ui:field="file" title="{msg.importMedia}" name="file"/>
   </g:HTMLPanel>
 </ui:UiBinder>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.java
index ab01703c1..80d323cf0 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.java
@@ -31,17 +31,21 @@
 import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.InlineHTML;
 import com.google.gwt.user.client.ui.Widget;
 import org.silverpeas.mobile.client.apps.media.events.pages.navigation.MediaItemClickEvent;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
+import org.silverpeas.mobile.client.resources.ApplicationResources;
 import org.silverpeas.mobile.shared.dto.media.AlbumDTO;
 
 public class AlbumItem extends Composite {
 
   private AlbumDTO data;
   private static MediaItemUiBinder uiBinder = GWT.create(MediaItemUiBinder.class);
+  private ApplicationResources resources = GWT.create(ApplicationResources.class);
   @UiField Anchor link;
+  @UiField InlineHTML icon;
   protected ApplicationMessages msg = null;
 
 
@@ -51,6 +55,7 @@ interface MediaItemUiBinder extends UiBinder<Widget, AlbumItem> {
   public AlbumItem() {
     initWidget(uiBinder.createAndBindUi(this));
     msg = GWT.create(ApplicationMessages.class);
+    icon.setHTML(resources.mediaLib().getText());
   }
 
   public void setData(AlbumDTO data) {
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.ui.xml
index 73d9cb4d7..89fdce1e3 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.ui.xml
@@ -25,6 +25,7 @@
 <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
 <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"	xmlns:g="urn:import:com.google.gwt.user.client.ui">
   <g:HTMLPanel tag="li" styleName="folder-galery">
+    <g:InlineHTML ui:field="icon" styleName="icon-item"></g:InlineHTML>
     <g:Anchor ui:field="link" styleName="ui-btn ui-btn-icon-right ui-icon-carat-r"></g:Anchor>
   </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/MediaItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/MediaItem.java
index d0dea1c48..b25693017 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/MediaItem.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/MediaItem.java
@@ -37,7 +37,9 @@
 import com.google.gwt.user.client.ui.Widget;
 import org.silverpeas.mobile.client.apps.media.events.pages.navigation.MediaItemClickEvent;
 import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.common.Html5Utils;
 import org.silverpeas.mobile.client.common.navigation.UrlUtils;
+import org.silverpeas.mobile.client.common.network.NetworkHelper;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
 import org.silverpeas.mobile.client.resources.ApplicationResources;
 import org.silverpeas.mobile.shared.dto.media.MediaDTO;
@@ -74,7 +76,8 @@ public void setData(MediaDTO data) {
     if (data instanceof PhotoDTO) {
       thumb.setSrc( ((PhotoDTO)data).getDataPhoto());
     } else if (data instanceof SoundDTO) {
-      thumb.setSrc(resources.sound().getSafeUri().asString());
+      thumb.setSrc(NetworkHelper.getContext() + "icons/files/file-type-sound.svg");
+      thumb.setAttribute("style", "object-fit:unset;");
     } else if (data instanceof VideoDTO) {
       String url = UrlUtils.getSilverpeasServicesLocation();
       url += "gallery/" + ((VideoDTO) data).getInstance() + "/videos/" + ((VideoDTO) data).getId() + "/thumbnail/0";
@@ -82,7 +85,7 @@ public void setData(MediaDTO data) {
     } else if (data instanceof VideoStreamingDTO) {
       String url = ((VideoStreamingDTO) data).getUrlPoster();
       if (url.isEmpty()) {
-        thumb.setSrc(resources.streaming().getSafeUri().asString());
+        thumb.setSrc(NetworkHelper.getContext() + "icons/files/file-type-video-ondemand.svg");
       } else {
         thumb.setSrc(url);
       }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java
index 941fc22b5..9e9bae28e 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java
@@ -26,6 +26,7 @@
 
 import com.google.gwt.core.client.GWT;
 import org.fusesource.restygwt.client.Method;
+import org.silverpeas.mobile.client.SpMobil;
 import org.silverpeas.mobile.client.apps.navigation.events.app.AbstractNavigationAppEvent;
 import org.silverpeas.mobile.client.apps.navigation.events.app.LoadSpacesAndAppsEvent;
 import org.silverpeas.mobile.client.apps.navigation.events.app.NavigationAppEventHandler;
@@ -37,11 +38,14 @@
 import org.silverpeas.mobile.client.apps.navigation.pages.NavigationPage;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.common.ServicesLocator;
+import org.silverpeas.mobile.client.common.ShortCutRouter;
 import org.silverpeas.mobile.client.common.app.App;
 import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.HomePageDTO;
+import org.silverpeas.mobile.shared.dto.navigation.HomePages;
+import org.silverpeas.mobile.shared.dto.navigation.SpaceDTO;
 
 public class NavigationApp extends App implements NavigationAppEventHandler,NavigationEventHandler {
 
@@ -82,7 +86,7 @@ public void loadSpacesAndApps(final LoadSpacesAndAppsEvent event) {
 
         @Override
         public void attempt() {
-          ServicesLocator.getServiceNavigation().getHomePageData(event.getRootSpaceId(), this);
+          ServicesLocator.getServiceNavigation().getHomePageData(event.getRootSpaceId(), SpMobil.getContentZoomLevel(), this);
         }
 
         @Override
@@ -100,10 +104,30 @@ public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) {
 
   @Override
   public void showContent(final NavigationShowContentEvent event) {
-    if (event.getContent().getType().equals(ContentsTypes.Space.name())) {
-      NavigationPage page = new NavigationPage();
-      page.setRootSpaceId(event.getContent().getId());
-      page.show();
-    }
+      if (event.getContent().getType().equals(ContentsTypes.Space.name())) {
+          final String id;
+          if (event.getContent().getInstanceId() == null || event.getContent().getInstanceId().isEmpty()) {
+              id = event.getContent().getId();
+          } else {
+              id = event.getContent().getInstanceId();
+          }
+          MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<SpaceDTO>() {
+              @Override
+              public void attempt() {
+                  ServicesLocator.getServiceNavigation().getSpace(id, this);
+              }
+              @Override
+              public void onSuccess(Method method, SpaceDTO space) {
+                  if (space.getHomePageType() == HomePages.APP.getValue()) {
+                      ShortCutRouter.route(SpMobil.getUser(), space.getHomePageParameter(), "Component", null, null, null);
+                  } else {
+                      NavigationPage page = new NavigationPage();
+                      page.setRootSpaceId(id);
+                      page.show();
+                  }
+              }
+          };
+          action.attempt();
+      }
   }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.java
index 8cc614826..dd5e8a69d 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.java
@@ -39,7 +39,6 @@
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.common.ShortCutRouter;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.client.components.homepage.HomePageContent;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
@@ -50,8 +49,6 @@
 
 public class NavigationPage extends PageContent implements NavigationPagesEventHandler {
 
-  @UiField
-  ActionsMenu actionsMenu;
 
   private AddToFavoritesButton favorite = new AddToFavoritesButton();
 
@@ -87,7 +84,7 @@ public void homePageLoaded(HomePageLoadedEvent event) {
 
       dataLoaded = true;
 
-      actionsMenu.addAction(favorite);
+      addActionMenu(favorite);
       favorite.init(null, event.getData().getId(), ContentsTypes.Space.name(), getPageTitle());
     }
     Notification.activityStop();
@@ -109,6 +106,7 @@ public void stop() {
   @Override
   public void clickItem(ClickItemEvent event) {
     if (isVisible()) {
+      SpMobil.getMainPage().closeMenu();
       if (event.getData() instanceof SpaceDTO) {
         SpaceDTO space = (SpaceDTO) event.getData();
         if (space.getHomePageType() == HomePages.SILVERPEAS.getValue() ||
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.ui.xml
index 336bfe00b..c60d0c9d4 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.ui.xml
@@ -29,7 +29,6 @@
              xmlns:base="urn:import:org.silverpeas.mobile.client.components.base">
 
   <g:HTMLPanel styleName="content">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <homepage:HomePageContent ui:field="content"/>
   </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java
index 098d63234..a9a4d50b5 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java
@@ -25,24 +25,49 @@
 package org.silverpeas.mobile.client.apps.navigation.pages.widgets;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.SpanElement;
+import com.google.gwt.dom.client.Style;
 import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.TouchEndEvent;
+import com.google.gwt.event.dom.client.TouchMoveEvent;
+import com.google.gwt.event.dom.client.TouchStartEvent;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.HTMLPanel;
 import com.google.gwt.user.client.ui.Widget;
+import org.silverpeas.mobile.client.apps.notificationsbox.events.app.NotificationReadenEvent;
+import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.common.navigation.LinksManager;
+import org.silverpeas.mobile.client.components.base.widgets.SelectableItem;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
+import org.silverpeas.mobile.client.resources.ApplicationResources;
+import org.silverpeas.mobile.shared.dto.FavoriteDTO;
 import org.silverpeas.mobile.shared.dto.MyLinkDTO;
+import org.silverpeas.mobile.shared.dto.hyperlink.HyperLinkDTO;
+import org.silverpeas.mobile.shared.dto.notifications.NotificationReceivedDTO;
+import org.silverpeas.mobile.shared.dto.notifications.NotificationSendedDTO;
 
-public class FavoriteItem extends Composite {
+public class FavoriteItem extends SelectableItem {
 
   private MyLinkDTO data;
   private static FavoriteItemUiBinder uiBinder = GWT.create(FavoriteItemUiBinder.class);
+
+  @UiField
+  HTMLPanel container;
   @UiField Anchor link;
   protected ApplicationMessages msg = null;
 
+  private ApplicationResources resources = GWT.create(ApplicationResources.class);
+
+  @UiField
+  SpanElement icon, title, desc;
+
+  private boolean minimalView = true;
 
   interface FavoriteItemUiBinder extends UiBinder<Widget, FavoriteItem> {
   }
@@ -50,11 +75,25 @@ interface FavoriteItemUiBinder extends UiBinder<Widget, FavoriteItem> {
   public FavoriteItem() {
     initWidget(uiBinder.createAndBindUi(this));
     msg = GWT.create(ApplicationMessages.class);
+    icon.setInnerHTML(resources.favorite().getText());
+    setContainer(container);
+  }
+
+  public void setMinimalView(boolean minimalView) {
+    this.minimalView = minimalView;
+    if (minimalView) {
+      desc.getStyle().setDisplay(Style.Display.NONE);
+    } else {
+      desc.getStyle().setDisplay(Style.Display.BLOCK);
+    }
   }
 
   public void setData(MyLinkDTO data) {
     this.data = data;
-    link.setText(data.getName());
+    title.setInnerHTML(data.getName());
+    if (!data.getName().equals(data.getDescription())) {
+      desc.setInnerHTML(data.getDescription());
+    }
 
     if(data.getUrl().startsWith("/")) {
       // internal link
@@ -63,12 +102,32 @@ public void setData(MyLinkDTO data) {
       link.setHref(data.getUrl());
       link.setTarget("_blank");
     }
-    link.setStyleName("ui-btn ui-icon-carat-r");
+  }
+
+  public MyLinkDTO getData() {
+    return data;
+  }
+
+  @UiHandler("link")
+  protected void startTouch(TouchStartEvent event) {
+    startTouch(event, minimalView);
+  }
+
+  @UiHandler("link")
+  protected void moveTouch(TouchMoveEvent event) {
+    super.moveTouch(event);
   }
 
   @UiHandler("link")
-  protected void onClick(ClickEvent event) {
-    LinksManager.processLink(data.getUrl());
+  protected void endTouch(TouchEndEvent event) {
+    endTouch(event, minimalView, new Command() {
+      @Override
+      public void execute() {
+        HyperLinkDTO link = new HyperLinkDTO();
+        link.setUrl(data.getUrl());
+        LinksManager.processLink(link);
+      }
+    });
   }
 
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.ui.xml
index ee58469a2..3a8b7afff 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.ui.xml
@@ -24,9 +24,13 @@
 
 <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
 <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"	xmlns:g="urn:import:com.google.gwt.user.client.ui">
-	<g:HTMLPanel tag="li">
-	
-		<g:Anchor ui:field="link"></g:Anchor>
-	
+
+	<g:HTMLPanel tag="li" ui:field="container" styleName="favorite">
+		<g:Anchor ui:field="link" styleName="ui-btn">
+			<span ui:field="icon" class="icon-app"></span>
+			<span ui:field="title" class="favorite-title"></span>
+			<span ui:field="desc" class="favorite-desc"></span>
+		</g:Anchor>
 	</g:HTMLPanel>
+
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.java
index 5a7f7b79c..43b994ef3 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.java
@@ -31,10 +31,12 @@
 import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.InlineHTML;
 import com.google.gwt.user.client.ui.Widget;
 import org.silverpeas.mobile.client.apps.navigation.events.pages.ClickItemEvent;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
+import org.silverpeas.mobile.client.resources.ApplicationResources;
 import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO;
 import org.silverpeas.mobile.shared.dto.navigation.Apps;
 import org.silverpeas.mobile.shared.dto.navigation.SilverpeasObjectDTO;
@@ -44,9 +46,11 @@ public class NavigationItem extends Composite {
 
   private SilverpeasObjectDTO data;
   private static NavigationItemUiBinder uiBinder = GWT.create(NavigationItemUiBinder.class);
+  private ApplicationResources resources = GWT.create(ApplicationResources.class);
   @UiField Anchor link;
-  protected ApplicationMessages msg = null;
+  @UiField InlineHTML icon;
 
+  protected ApplicationMessages msg = null;
 
   interface NavigationItemUiBinder extends UiBinder<Widget, NavigationItem> {
   }
@@ -63,39 +67,54 @@ public void setData(SilverpeasObjectDTO data) {
       if (((SpaceDTO)data).isPersonal()) {
         link.setText(msg.personalSpace());
       }
+      link.setStyleName("ui-btn ui-btn-icon-right ui-icon-carat-r");
     } else {
       String type = ((ApplicationInstanceDTO) data).getType();
       if (type.equalsIgnoreCase(Apps.kmelia.name())) {
-        setStyleName("folder-ged");
+        setStyleName("app-ged");
+        icon.setHTML(resources.ged().getText());
       } else if (type.equalsIgnoreCase(Apps.gallery.name())) {
-        setStyleName("folder-galery");
+        setStyleName("app-medialib");
+        icon.setHTML(resources.mediaLib().getText());
       } else if (type.equalsIgnoreCase(Apps.quickinfo.name())) {
         setStyleName("app-actuality");
+        icon.setHTML(resources.news().getText());
       } else if (type.equalsIgnoreCase(Apps.webPages.name())) {
         setStyleName("app-pageWeb");
+        icon.setHTML(resources.webpage().getText());
       } else if (type.equalsIgnoreCase(Apps.blog.name())) {
         setStyleName("app-blog");
+        icon.setHTML(resources.blog().getText());
       } else if (((ApplicationInstanceDTO) data).getWorkflow()) {
         setStyleName("app-workflow");
+        icon.setHTML(resources.workflow().getText());
       } else if (type.equalsIgnoreCase(Apps.hyperlink.name())) {
         setStyleName("app-link");
+        icon.setHTML(resources.link().getText());
       } else if (type.equalsIgnoreCase(Apps.almanach.name())) {
         setStyleName("app-almanach");
+        icon.setHTML(resources.calendar().getText());
       } else if (type.equalsIgnoreCase(Apps.formsOnline.name())) {
         setStyleName("app-formsOnline");
+        icon.setHTML(resources.form().getText());
       } else if (type.equalsIgnoreCase(Apps.classifieds.name())) {
         setStyleName("app-classifieds");
+        icon.setHTML(resources.classifieds().getText());
       } else if (type.equalsIgnoreCase(Apps.survey.name())) {
         setStyleName("app-survey");
+        icon.setHTML(resources.quizz().getText());
       } else if (type.equalsIgnoreCase(Apps.pollingStation.name())) {
         setStyleName("app-polling");
+        icon.setHTML(resources.poll().getText());
       } else if (type.equalsIgnoreCase(Apps.questionReply.name())) {
         setStyleName("app-faq");
+        icon.setHTML(resources.faq().getText());
       } else if (type.equalsIgnoreCase(Apps.resourcesManager.name())) {
         setStyleName("app-resourcesManager");
+        icon.setHTML(resources.bookonline().getText());
       }
+      link.setStyleName("ui-btn ui-icon-carat-r");
     }
-    link.setStyleName("ui-btn ui-btn-icon-right ui-icon-carat-r");
   }
 
   @UiHandler("link")
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.ui.xml
index ee58469a2..1c98ed8d2 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.ui.xml
@@ -25,8 +25,7 @@
 <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
 <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"	xmlns:g="urn:import:com.google.gwt.user.client.ui">
 	<g:HTMLPanel tag="li">
-	
+		<g:InlineHTML ui:field="icon" styleName="icon-app"></g:InlineHTML>
 		<g:Anchor ui:field="link"></g:Anchor>
-	
 	</g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.java
index cc255de5f..2c5e6c61f 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.java
@@ -36,6 +36,7 @@
 import org.silverpeas.mobile.client.common.navigation.LinksManager;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
 import org.silverpeas.mobile.shared.dto.ShortCutLinkDTO;
+import org.silverpeas.mobile.shared.dto.hyperlink.HyperLinkDTO;
 
 public class ShortCutItem extends Composite {
 
@@ -71,11 +72,13 @@ public void setData(ShortCutLinkDTO data) {
 
   @UiHandler("link")
   protected void onClick(ClickEvent event) {
-    LinksManager.processLink(data.getUrl());
+    HyperLinkDTO link = new HyperLinkDTO();
+    link.setUrl(data.getUrl());
+    LinksManager.processLink(link);
   }
 
   public void setCssId(String id) {
     this.getElement().setId(id);
   }
 
-}
+}
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.ui.xml
index c8b724e68..dc8d51092 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.ui.xml
@@ -26,7 +26,7 @@
 <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
              xmlns:g="urn:import:com.google.gwt.user.client.ui">
   <g:HTMLPanel tag="li">
-    <g:Image ui:field="icon" styleName="icon"></g:Image>
+    <g:Image ui:field="icon" styleName="icon-item"></g:Image>
     <g:Anchor ui:field="link"></g:Anchor>
   </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/NewsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/NewsApp.java
index bdd87828a..5eafb3130 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/NewsApp.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/NewsApp.java
@@ -40,6 +40,7 @@
 import org.silverpeas.mobile.client.common.ServicesLocator;
 import org.silverpeas.mobile.client.common.app.App;
 import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly;
+import org.silverpeas.mobile.shared.dto.ContentDTO;
 import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO;
 import org.silverpeas.mobile.shared.dto.navigation.Apps;
 import org.silverpeas.mobile.shared.dto.news.NewsDTO;
@@ -99,6 +100,25 @@ public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) {
 
     }
   }
+  private void loadAppInstance(final ContentDTO content) {
+    MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<ApplicationInstanceDTO>() {
+
+      @Override
+      public void attempt() {
+        ServicesLocator.getServiceNavigation()
+                .getApp(content.getInstanceId(), content.getId(), content.getType(), this);
+      }
+
+      @Override
+      public void onSuccess(final Method method,
+                            final ApplicationInstanceDTO app) {
+        super.onSuccess(method, app);
+        setApplicationInstance(app);
+        appInstanceChanged(new NavigationAppInstanceChangedEvent(app));
+      }
+    };
+    action.attempt();
+  }
 
   @Override
   public void showContent(final NavigationShowContentEvent event) {
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.java
index 8f795ff4f..aaef82434 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.java
@@ -36,9 +36,10 @@
 import org.silverpeas.mobile.client.apps.news.pages.widgets.NewsItem;
 import org.silverpeas.mobile.client.apps.news.resources.NewsMessages;
 import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.common.navigation.LinksManager;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.components.base.widgets.ShareButton;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.news.NewsDTO;
 
@@ -50,9 +51,9 @@ public class NewsPage extends PageContent implements NewsPagesEventHandler {
 
   @UiField(provided = true) protected NewsMessages msg = null;
   @UiField UnorderedList news;
-  @UiField ActionsMenu actionsMenu;
 
   private AddToFavoritesButton favorite = new AddToFavoritesButton();
+  private ShareButton share = new ShareButton();
   private String instanceId;
 
   interface NewsPageUiBinder extends UiBinder<Widget, NewsPage> {
@@ -85,8 +86,10 @@ public void onNewsLoad(final NewsLoadedEvent event) {
       instanceId = newsDTO.getInstanceId();
       i++;
     }
-    actionsMenu.addAction(favorite);
+    addActionMenu(favorite);
     favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), getPageTitle());
+    addActionMenu(share);
+    share.init(getPageTitle(), getPageTitle(), LinksManager.createApplicationPermalink(instanceId));
   }
 
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.ui.xml
index df899cbef..bef70e6a6 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.ui.xml
@@ -31,7 +31,6 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.news.resources.NewsMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <h2 class="appHeader"></h2>
     <components:UnorderedList ui:field="news" styleName="liste-news"/>
   </g:HTMLPanel>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.java
index f82df83de..2fd00cac4 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.java
@@ -32,10 +32,7 @@
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
-import com.google.gwt.user.client.ui.Anchor;
-import com.google.gwt.user.client.ui.HTMLPanel;
-import com.google.gwt.user.client.ui.TextArea;
-import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.*;
 import org.silverpeas.mobile.client.apps.notifications.events.app.SendNotificationEvent;
 import org.silverpeas.mobile.client.apps.notifications.events.pages.AbstractNotificationPagesEvent;
 import org.silverpeas.mobile.client.apps.notifications.events.pages.NotificationPagesEventHandler;
@@ -45,6 +42,7 @@
 import org.silverpeas.mobile.client.common.app.View;
 import org.silverpeas.mobile.client.components.Popin;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.resources.ApplicationResources;
 import org.silverpeas.mobile.shared.dto.BaseDTO;
 import org.silverpeas.mobile.shared.dto.GroupDTO;
 import org.silverpeas.mobile.shared.dto.UserDTO;
@@ -61,12 +59,15 @@ public class NotificationSenderPage extends PageContent implements View, Notific
     interface NotificationSenderPageUiBinder extends UiBinder<HTMLPanel, NotificationSenderPage> {}
 
     private static NotificationSenderPageUiBinder uiBinder = GWT.create(NotificationSenderPageUiBinder.class);
+    private ApplicationResources resources = GWT.create(ApplicationResources.class);
 
     @UiField protected HTMLPanel container;
     @UiField(provided = true) protected NotificationsMessages msg = null;
-    @UiField protected Anchor modify, send;
+    @UiField protected Anchor send;
     @UiField TextArea message;
     @UiField TextBox subject;
+    @UiField InlineHTML iconFile, iconSelection;
+    @UiField HTML destinataires;
 
     List<BaseDTO> selection = new ArrayList<BaseDTO>();
 
@@ -78,12 +79,13 @@ public NotificationSenderPage() {
         container.getElement().setId("edit-notification");
         message.getElement().setId("message");
         subject.getElement().setId("subject");
+        iconFile.setHTML(resources.publication().getText());
 
         Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
              @Override
              public void execute() {
 
-                 Element destinataires = Document.get().getElementById("destinataires");
+                 //Element destinataires = Document.get().getElementById("destinataires");
 
 
                  String dest = "";
@@ -97,8 +99,8 @@ public void execute() {
                  dest = dest.substring(0, dest.length() - 2);
                  dest += "<div id=\"nb-user-sectionne\" class=\"nb-user-sectionne\">"+"(" + selection.size() + ")"+"</div>";
 
-                 destinataires.setInnerHTML(dest);
-
+                 destinataires.setHTML(dest);
+                 iconSelection.setHTML(resources.peoples().getText());
                  subject.setText(getTitle());
              }
          }
@@ -109,11 +111,6 @@ public void setSelection(List<BaseDTO> selection) {
         this.selection = selection;
     }
 
-    @UiHandler("modify")
-    protected void modify(ClickEvent event) {
-        back();
-    }
-
     @UiHandler("send")
     protected void sendNotification(ClickEvent event) {
         NotificationDTO notification = new NotificationDTO(message.getText());
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml
index b844c2d80..9c2e1a3ee 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml
@@ -33,13 +33,13 @@
 
         <label for="subject"><ui:safehtml from="{msg.subject}"/></label>
         <div class="ui-input-text publication">
+            <g:InlineHTML ui:field="iconFile" styleName="iconFile"/>
             <g:TextBox ui:field="subject"/>
         </div>
         <label for="subject"><ui:safehtml from="{msg.notifiedContacts}"/></label>
         <div id="destinataires" class="ui-input-text destinataires">
-            <g:Anchor ui:field="modify" styleName="btn-modif">
-                <ui:safehtml from="{msg.modify}"/>
-            </g:Anchor>
+            <g:InlineHTML ui:field="iconSelection"/>
+            <g:HTML ui:field="destinataires" />
         </div>
         <label for="message"><ui:safehtml from="{msg.message}"/></label>
         <div id="champs-message">
@@ -48,8 +48,7 @@
         </div>
         <div class=" ui-controlgroup ui-controlgroup-horizontal" >
             <div class="ui-controlgroup-controls ">
-
-                <g:Anchor ui:field="send" styleName="btn-validate ui-link smaller">
+                <g:Anchor ui:field="send" styleName="btn-validate ui-link">
                     <span class="ui-btn-text"><ui:safehtml from="{msg.send}"/></span>
                 </g:Anchor>
             </div>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/widgets/NotifyButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/widgets/NotifyButton.java
index 0c9a60d65..0de549556 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/widgets/NotifyButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/widgets/NotifyButton.java
@@ -34,6 +34,7 @@
 import org.silverpeas.mobile.client.apps.notifications.NotificationsApp;
 import org.silverpeas.mobile.client.apps.notifications.resources.NotificationsMessages;
 import org.silverpeas.mobile.client.components.base.ActionItem;
+import org.silverpeas.mobile.client.components.base.ActionsMenu;
 
 /**
  * @author: svu
@@ -71,7 +72,7 @@ void displayNotificationPage(ClickEvent event){
         app.start();
 
         // hide menu
-        getElement().getParentElement().removeAttribute("style");
+        ActionsMenu.close(getElement());
 
     }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/NotificationsBoxApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/NotificationsBoxApp.java
index 0f9b400a0..d7c28981e 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/NotificationsBoxApp.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/NotificationsBoxApp.java
@@ -25,6 +25,7 @@
 package org.silverpeas.mobile.client.apps.notificationsbox;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.Window;
 import org.fusesource.restygwt.client.Method;
 import org.silverpeas.mobile.client.apps.navigation.events.app.external.AbstractNavigationEvent;
 import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationAppInstanceChangedEvent;
@@ -133,7 +134,7 @@ public void attempt() {
       public void onSuccess(final Method method, final Void unused) {
         super.onSuccess(method, unused);
         if (event.getSelection().get(0) instanceof NotificationSendedDTO) {
-          loadNotificationsSended(new NotificationsSendedLoadEvent());
+          loadNotificationsSended(new NotificationsSendedLoadEvent(), 0);
         } else {
           loadNotifications(new NotificationsLoadEvent(), 0);
         }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java
index f28d115b6..426b9df10 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java
@@ -29,21 +29,25 @@
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.Widget;
+import org.silverpeas.mobile.client.apps.notificationsbox.events.app.DeleteNotificationsEvent;
+import org.silverpeas.mobile.client.apps.notificationsbox.events.app.MarkAsReadNotificationsEvent;
 import org.silverpeas.mobile.client.apps.notificationsbox.events.app.NotificationsLoadEvent;
 import org.silverpeas.mobile.client.apps.notificationsbox.events.app.NotificationsSendedLoadEvent;
 import org.silverpeas.mobile.client.apps.notificationsbox.events.pages.AbstractNotificationsBoxPagesEvent;
 import org.silverpeas.mobile.client.apps.notificationsbox.events.pages.NotificationsBoxPagesEventHandler;
 import org.silverpeas.mobile.client.apps.notificationsbox.events.pages.NotificationsLoadedEvent;
 import org.silverpeas.mobile.client.apps.notificationsbox.events.pages.NotificationsSendedLoadedEvent;
-import org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets.DeleteButton;
 import org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets.MarkAsReadButton;
 import org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets.NotificationItem;
+import org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages;
 import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.components.PopinConfirmation;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.components.base.widgets.DeleteButton;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
 import org.silverpeas.mobile.shared.dto.notifications.NotificationBoxDTO;
 import org.silverpeas.mobile.shared.dto.notifications.NotificationReceivedDTO;
@@ -63,11 +67,9 @@ public class NotificationsBoxPage extends PageContent implements NotificationsBo
   @UiField
   Anchor notificationReceived, notificationSended;
 
-  @UiField
-  ActionsMenu actionsMenu;
-
-  private DeleteButton delete = new DeleteButton();
-  private MarkAsReadButton notRead = new MarkAsReadButton();
+  private NotificationsMessages msgApp = GWT.create(NotificationsMessages .class);
+  private DeleteButton buttonDelete = new DeleteButton();
+  private MarkAsReadButton buttonNotRead = new MarkAsReadButton();
 
   interface NotificationsBoxPageUiBinder extends UiBinder<Widget, NotificationsBoxPage> {
   }
@@ -78,10 +80,8 @@ public NotificationsBoxPage() {
     initWidget(uiBinder.createAndBindUi(this));
     EventBus.getInstance().addHandler(AbstractNotificationsBoxPagesEvent.TYPE, this);
     EventBus.getInstance().fireEvent(new NotificationsLoadEvent());
-    delete.setParentPage(this);
-    notRead.setParentPage(this);
-    actionsMenu.addAction(delete);
-    actionsMenu.addAction(notRead);
+    buttonNotRead.setParentPage(this);
+    buttonDelete.setId("delete-notifications");
   }
 
   @Override
@@ -99,6 +99,7 @@ public void onNotificationsLoaded(final NotificationsLoadedEvent event) {
     for (NotificationReceivedDTO notif : notifs) {
       NotificationItem item = new NotificationItem();
       item.setData(notif);
+      item.setParent(this);
       notifications.add(item);
     }
   }
@@ -113,6 +114,7 @@ public void onNotificationsSendedLoaded(
     for (NotificationSendedDTO notif : notifs) {
       NotificationItem item = new NotificationItem();
       item.setData(notif);
+      item.setParent(this);
       notifications.add(item);
     }
   }
@@ -130,19 +132,57 @@ public List<NotificationBoxDTO> getSelectedNotification() {
 
   @UiHandler("notificationSended")
   protected void showSendedNotifications(ClickEvent event) {
+    setSelectionMode(false);
     notificationReceived.removeStyleName("ui-btn-active");
     notificationSended.addStyleName("ui-btn-active");
-
-    notRead.setVisible(false);
-
+    buttonNotRead.setVisible(false);
     EventBus.getInstance().fireEvent(new NotificationsSendedLoadEvent());
   }
 
   @UiHandler("notificationReceived")
   protected void showReceivedNotifications(ClickEvent event) {
+    setSelectionMode(false);
     notificationSended.removeStyleName("ui-btn-active");
     notificationReceived.addStyleName("ui-btn-active");
-    notRead.setVisible(true);
+    buttonNotRead.setVisible(true);
     EventBus.getInstance().fireEvent(new NotificationsLoadEvent());
   }
+
+  @Override
+  public void setSelectionMode(boolean selectionMode) {
+    super.setSelectionMode(selectionMode);
+    if (selectionMode) {
+      clearActions();
+      buttonDelete.setCallback(new Command() {@Override public void execute() {deleteSelectedNotifications();}});
+      buttonNotRead.setCallback(new Command() {@Override public void execute() {markAsReadNotifications();}});
+      addActionShortcut(buttonNotRead);
+      addActionShortcut(buttonDelete);
+
+    } else {
+      clearActions();
+    }
+  }
+
+  private void markAsReadNotifications() {
+    List<NotificationBoxDTO> selection = getSelectedNotification();
+    MarkAsReadNotificationsEvent notReadEvent = new MarkAsReadNotificationsEvent();
+    notReadEvent.setSelection(selection);
+    EventBus.getInstance().fireEvent(notReadEvent);
+    clearActions();
+  }
+
+  private void deleteSelectedNotifications() {
+    PopinConfirmation popin = new PopinConfirmation(msgApp.deleteConfirmation());
+    popin.setYesCallback(new Command() {
+      @Override
+      public void execute() {
+        List<NotificationBoxDTO> selection = getSelectedNotification();
+        DeleteNotificationsEvent deleteEvent = new DeleteNotificationsEvent();
+        deleteEvent.setSelection(selection);
+        if (!selection.isEmpty()) EventBus.getInstance().fireEvent(deleteEvent);
+        clearActions();
+      }
+    });
+    popin.show();
+  }
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.ui.xml
index aae1d72b4..5a37c404e 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.ui.xml
@@ -31,7 +31,6 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.resources.ApplicationMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-body-a notificationBox">
-    <base:ActionsMenu ui:field="actionsMenu"/>
 
     <div class="ui-corner-all ui-controlgroup ui-controlgroup-horizontal">
       <div class="ui-controlgroup-controls ">
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.java
index cb75aadfa..b6fcdf8d1 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.java
@@ -36,6 +36,7 @@
 import org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.base.ActionItem;
+import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.shared.dto.notifications.NotificationBoxDTO;
 
 import java.util.List;
@@ -54,7 +55,7 @@ interface NotReadButtonUiBinder extends UiBinder<HTMLPanel, MarkAsReadButton> {}
   @UiField
   HTMLPanel container;
   @UiField
-  Anchor read;
+  Anchor link;
 
   @UiField(provided = true)
   protected NotificationsMessages msg = null;
@@ -66,16 +67,9 @@ public MarkAsReadButton() {
     setId("markAsRead");
   }
 
-  @UiHandler("read")
+  @UiHandler("link")
   void read(ClickEvent event) {
-    List<NotificationBoxDTO> selection = parentPage.getSelectedNotification();
-
-    MarkAsReadNotificationsEvent notReadEvent = new MarkAsReadNotificationsEvent();
-    notReadEvent.setSelection(selection);
-    EventBus.getInstance().fireEvent(notReadEvent);
-
-    // hide menu
-    getElement().getParentElement().removeAttribute("style");
+    getCallback().execute();
   }
 
   public void setParentPage(final NotificationsBoxPage parentPage) {
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.ui.xml
index a02e581fc..abcfc45c5 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.ui.xml
@@ -27,7 +27,7 @@
 
     <ui:with field='msg' type='org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages'/>
 
-    <g:HTMLPanel tag="li" ui:field="container" styleName="">
-        <g:Anchor styleName="" ui:field="read" text="{msg.markAsRead}"/>
+    <g:HTMLPanel tag="li" ui:field="container" styleName="markAsRead-notification">
+        <g:Anchor ui:field="link"/>
     </g:HTMLPanel>
 </ui:UiBinder>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java
index 0006fcfb6..2987d4376 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java
@@ -25,82 +25,92 @@
 package org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets;
 
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.dom.client.Style;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.dom.client.SpanElement;
+import com.google.gwt.event.dom.client.TouchEndEvent;
+import com.google.gwt.event.dom.client.TouchMoveEvent;
+import com.google.gwt.event.dom.client.TouchStartEvent;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.CheckBox;
-import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.HTMLPanel;
-import com.google.gwt.user.client.ui.InlineHTML;
 import com.google.gwt.user.client.ui.Widget;
 import org.silverpeas.mobile.client.apps.notificationsbox.events.app.NotificationReadenEvent;
 import org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages;
 import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.components.base.widgets.SelectableItem;
 import org.silverpeas.mobile.shared.dto.notifications.NotificationBoxDTO;
 import org.silverpeas.mobile.shared.dto.notifications.NotificationReceivedDTO;
 import org.silverpeas.mobile.shared.dto.notifications.NotificationSendedDTO;
 
-public class NotificationItem extends Composite implements ClickHandler {
+public class NotificationItem extends SelectableItem {
 
-  private static ContactItemUiBinder uiBinder = GWT.create(ContactItemUiBinder.class);
+  private static NotificationItemUiBinder uiBinder = GWT.create(NotificationItemUiBinder.class);
 
   @UiField HTMLPanel container;
 
   @UiField
-  InlineHTML date, title, source, author;
+  SpanElement date, title, source, author;
 
   @UiField
-  CheckBox select;
+  Anchor link;
 
   @UiField(provided = true) protected NotificationsMessages msg = null;
 
   private NotificationBoxDTO data;
 
-  @Override
-  public void onClick(final ClickEvent clickEvent) {
-    if (data instanceof NotificationSendedDTO) {
-      Window.Location.assign(((NotificationSendedDTO)data).getLink());
-    } else {
-      Window.Location.assign(((NotificationReceivedDTO)data).getLink());
-      NotificationReadenEvent event = new NotificationReadenEvent((NotificationReceivedDTO) data);
-      EventBus.getInstance().fireEvent(event);
-    }
-  }
-
-  interface ContactItemUiBinder extends UiBinder<Widget, NotificationItem> {
+  interface NotificationItemUiBinder extends UiBinder<Widget, NotificationItem> {
   }
 
   public NotificationItem() {
     msg = GWT.create(NotificationsMessages.class);
     initWidget(uiBinder.createAndBindUi(this));
-    date.addClickHandler(this);
-    author.addClickHandler(this);
-    source.addClickHandler(this);
-    title.addClickHandler(this);
+    setContainer(container);
+  }
+
+  @UiHandler("link")
+  protected void startTouch(TouchStartEvent event) {
+    startTouch(event, true);
+  }
+
+  @UiHandler("link")
+  protected void moveTouch(TouchMoveEvent event) {
+    super.moveTouch(event);
   }
 
-  public boolean isSelected() {
-    return select.getValue();
+  @UiHandler("link")
+  protected void endTouch(TouchEndEvent event) {
+    endTouch(event, true, new Command() {
+      @Override
+      public void execute() {
+        if (data instanceof NotificationSendedDTO) {
+          Window.Location.assign(((NotificationSendedDTO)data).getLink());
+        } else {
+          Window.Location.assign(((NotificationReceivedDTO)data).getLink());
+          NotificationReadenEvent event = new NotificationReadenEvent((NotificationReceivedDTO) data);
+          EventBus.getInstance().fireEvent(event);
+        }
+      }
+    });
   }
 
   public void setData(NotificationSendedDTO data) {
     this.data = data;
-    date.setText(data.getDate());
-    source.setText(data.getSource());
-    title.setText(data.getTitle());
+    date.setInnerText(data.getDate());
+    source.setInnerHTML(data.getSource());
+    title.setInnerHTML(data.getTitle());
   }
 
   public void setData(NotificationReceivedDTO data) {
     this.data = data;
-    date.setText(data.getDate());
-    author.setText(data.getAuthor());
-    source.setText(data.getSource());
-    title.setText(data.getTitle());
+    date.setInnerText(data.getDate());
+    author.setInnerText(data.getAuthor());
+    source.setInnerText(data.getSource());
+    title.setInnerHTML(data.getTitle());
     if (data.getReaden() == 0) {
-      getElement().getStyle().setFontWeight(Style.FontWeight.BOLD);
+      getElement().addClassName("not-read");
     }
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.ui.xml
index 5b99b9a8a..5d9c6f737 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.ui.xml
@@ -27,11 +27,12 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages'/>
 
   <g:HTMLPanel tag="li" ui:field="container" styleName="notification">
-    <g:CheckBox ui:field="select"  styleName="notification-checkbox"></g:CheckBox>
-    <g:InlineHTML ui:field="title" styleName="notification-title"></g:InlineHTML>
-    <g:InlineHTML ui:field="date" styleName="notification-date"></g:InlineHTML>
-    <g:InlineHTML ui:field="author" styleName="notification-author"></g:InlineHTML>
-    <g:InlineHTML ui:field="source" styleName="notification-source"></g:InlineHTML>
+    <g:Anchor ui:field="link" styleName="">
+    <span ui:field="title" class="notification-title"></span>
+    <span ui:field="date" class="notification-date"></span>
+    <span ui:field="author" class="notification-author"></span>
+    <span ui:field="source" class="notification-source"></span>
+    </g:Anchor>
   </g:HTMLPanel>
 
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.java
index 4a94b9a81..2788052c3 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.java
@@ -31,4 +31,6 @@ public interface NotificationsMessages extends Messages {
   String delete();
   String markAsRead();
 
+  String deleteConfirmation();
+
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.properties
index c5880dea7..6efdad047 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.properties
@@ -25,3 +25,5 @@
 delete=Supprimer la selection
 markAsRead=Marquer la selection comme lue
 
+deleteConfirmation=Etes-vous sur de supprimer ces notifications ?
+
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_en.properties
index 7475e799f..e8a909713 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_en.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_en.properties
@@ -23,4 +23,6 @@
 #
 
 delete=Delete selection
-markAsRead=Mark selection as read
\ No newline at end of file
+markAsRead=Mark selection as read
+
+deleteConfirmation=Delete those notifications ?
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_fr.properties
index 46c35e9cc..23a79d757 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_fr.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_fr.properties
@@ -23,4 +23,6 @@
 #
 
 delete=Supprimer la selection
-markAsRead=Marquer la selection comme lue
\ No newline at end of file
+markAsRead=Marquer la selection comme lue
+
+deleteConfirmation=Etes-vous sur de supprimer ces notifications ?
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.java
index 3ae04efd4..9a83b82fe 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.java
@@ -25,15 +25,15 @@
 package org.silverpeas.mobile.client.apps.profile.pages;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.DivElement;
+import com.google.gwt.dom.client.Style;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
-import com.google.gwt.user.client.ui.Anchor;
-import com.google.gwt.user.client.ui.HTMLPanel;
-import com.google.gwt.user.client.ui.PasswordTextBox;
-import com.google.gwt.user.client.ui.TextArea;
-import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.*;
+import org.apache.ecs.html.Div;
+import org.silverpeas.mobile.client.SpMobil;
 import org.silverpeas.mobile.client.apps.profile.ProfileApp;
 import org.silverpeas.mobile.client.apps.profile.events.ProfileEvents;
 import org.silverpeas.mobile.client.apps.profile.resources.ProfileMessages;
@@ -53,6 +53,8 @@ public class ProfilePage extends PageContent {
   @UiField protected Anchor publish, changePwd;
   @UiField protected PasswordTextBox pwd1, pwd2;
 
+  @UiField protected DivElement changePwdArea;
+
   interface StatusPageUiBinder extends UiBinder<Widget, ProfilePage> {
   }
 
@@ -63,8 +65,11 @@ public ProfilePage() {
     container.getElement().setId("update-statut");
     status.getElement().setAttribute("x-webkit-speech", "x-webkit-speech");
     status.getElement().setAttribute("speech", "speech");
-    pwd1.getElement().setAttribute("autocomplete", "off");
-    pwd2.getElement().setAttribute("autocomplete", "off");
+    pwd1.getElement().setAttribute("autocomplete", "new-password");
+    pwd2.getElement().setAttribute("autocomplete", "new-password");
+    if (!SpMobil.getUser().isLdap()) {
+      changePwdArea.getStyle().setDisplay(Style.Display.NONE);
+    }
   }
 
   @UiHandler("publish")
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.ui.xml
index 4fdb4efbf..53b7b7ba4 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.ui.xml
@@ -30,22 +30,6 @@
 
   <g:HTMLPanel ui:field="container" styleName="ui-content ui-body-a">
 
-    <h2><ui:safehtml from="{msg.titlePwd}"/></h2>
-    <div id="champs-password">
-      <span class="ui-btn-text"><ui:text from="{msg.newPwd}"/></span>
-      <g:PasswordTextBox ui:field="pwd1" styleName="ui-input-text ui-body-inherit"/>
-      <br/>
-      <span class="ui-btn-text"><ui:text from="{msg.repeatNewPwd}"/></span>
-      <g:PasswordTextBox ui:field="pwd2" styleName="ui-input-text ui-body-inherit"/>
-    </div>
-    <div class=" ui-controlgroup ui-controlgroup-horizontal">
-      <div class="ui-controlgroup-controls ">
-        <g:Anchor ui:field="changePwd" styleName="btn-validate ui-link">
-          <span class="ui-btn-text"><ui:text from="{msg.changePwd}"/></span>
-        </g:Anchor>
-      </div>
-    </div>
-
     <h2><ui:safehtml from="{msg.titleStatus}"/></h2>
     <div id="champs-statut">
       <div class="ouverture-bulle"></div>
@@ -58,6 +42,25 @@
         </g:Anchor>
       </div>
     </div>
+
+    <div ui:field="changePwdArea">
+      <h2><ui:safehtml from="{msg.titlePwd}"/></h2>
+      <div id="champs-password">
+        <span class="ui-btn-text"><ui:text from="{msg.newPwd}"/></span>
+        <g:PasswordTextBox ui:field="pwd1" styleName="ui-input-text ui-body-inherit"/>
+        <br/>
+        <span class="ui-btn-text"><ui:text from="{msg.repeatNewPwd}"/></span>
+        <g:PasswordTextBox ui:field="pwd2" styleName="ui-input-text ui-body-inherit"/>
+      </div>
+      <div class=" ui-controlgroup ui-controlgroup-horizontal">
+        <div class="ui-controlgroup-controls ">
+          <g:Anchor ui:field="changePwd" styleName="btn-validate ui-link">
+            <span class="ui-btn-text"><ui:text from="{msg.changePwd}"/></span>
+          </g:Anchor>
+        </div>
+      </div>
+    </div>
+
   </g:HTMLPanel>
 
 </ui:UiBinder>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.java
index c1604aeed..30e5dec56 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.java
@@ -25,26 +25,18 @@
 package org.silverpeas.mobile.client.apps.resourcesManager.pages;
 
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
-import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.Label;
-import com.google.gwt.user.client.ui.TextArea;
-import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.Widget;
-import org.silverpeas.mobile.client.apps.resourcesManager.events.app.AddReservationEvent;
 import org.silverpeas.mobile.client.apps.resourcesManager.events.pages.AbstractResourcesManagerPagesEvent;
 import org.silverpeas.mobile.client.apps.resourcesManager.events.pages.DeletedReservationEvent;
 import org.silverpeas.mobile.client.apps.resourcesManager.events.pages.ResourcesManagerPagesEventHandler;
 import org.silverpeas.mobile.client.apps.resourcesManager.events.pages.SavedReservationEvent;
-import org.silverpeas.mobile.client.apps.resourcesManager.pages.widgets.AddReservationButton;
 import org.silverpeas.mobile.client.apps.resourcesManager.pages.widgets.DeleteReservationButton;
 import org.silverpeas.mobile.client.apps.resourcesManager.resources.ResourcesManagerMessages;
 import org.silverpeas.mobile.client.common.EventBus;
-import org.silverpeas.mobile.client.components.Popin;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.shared.dto.reservations.ReservationDTO;
 import org.silverpeas.mobile.shared.dto.reservations.ReservationStatus;
@@ -59,9 +51,6 @@ public class ReservationDetailPage extends PageContent implements ResourcesManag
 
   private DeleteReservationButton deleteReservation = new DeleteReservationButton();
 
-  @UiField
-  ActionsMenu actionsMenu;
-
   @UiField(provided = true) protected ResourcesManagerMessages msg = null;
 
   @UiField
@@ -86,7 +75,7 @@ public void setData(final ReservationDTO data) {
     html += "</ul>";
     resources.setHTML(html);
     deleteReservation.setData(data);
-    actionsMenu.addAction(deleteReservation);
+    addActionMenu(deleteReservation);
   }
 
   @Override
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.ui.xml
index 3beffd2f8..c18067c82 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.ui.xml
@@ -30,7 +30,6 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.resourcesManager.resources.ResourcesManagerMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <div id="reservationDetail" class="content-navigation">
       <div class="section">
         <g:Label ui:field="labelTitle" stylePrimaryName="field"><ui:text from="{msg.event}"/></g:Label>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.java
index a50960584..bf40f3ee1 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.java
@@ -38,7 +38,6 @@
 import org.silverpeas.mobile.client.apps.resourcesManager.resources.ResourcesManagerMessages;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.reservations.ReservationDTO;
@@ -51,9 +50,6 @@ public class ResourcesManagerPage extends PageContent implements ResourcesManage
 
   @UiField(provided = true) protected ResourcesManagerMessages msg = null;
 
-  @UiField
-  ActionsMenu actionsMenu;
-
   @UiField
   UnorderedList reservations;
 
@@ -94,9 +90,9 @@ public void setData(final List<ReservationDTO> reservationsDTO) {
     this.data = reservationsDTO;
     displayList();
 
-    actionsMenu.addAction(favorite);
+    addActionMenu(favorite);
     favorite.init(getApp().getApplicationInstance().getId(), getApp().getApplicationInstance().getId(), ContentsTypes.Component.name(), getPageTitle());
-    actionsMenu.addAction(addReservation);
+    addActionMenu(addReservation);
   }
 
   private void displayList() {
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.ui.xml
index 3a952b2d7..35925bf24 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.ui.xml
@@ -31,7 +31,6 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.resourcesManager.resources.ResourcesManagerMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <div id="resourcesManager" class="content-navigation" style="min-height:100vh;">
       <components:UnorderedList ui:field="reservations" styleName="list-reservations ui-listview ui-listview-inset ui-corner-all ui-shadow"/>
     </div>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/AddReservationButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/AddReservationButton.java
index 4dcb29c96..ee457bdd8 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/AddReservationButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/AddReservationButton.java
@@ -7,12 +7,10 @@
 import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.HTMLPanel;
-import org.silverpeas.mobile.client.apps.resourcesManager.events.app.AddReservationEvent;
 import org.silverpeas.mobile.client.apps.resourcesManager.pages.ReservationPage;
-import org.silverpeas.mobile.client.apps.resourcesManager.pages.ResourcesManagerPage;
 import org.silverpeas.mobile.client.apps.resourcesManager.resources.ResourcesManagerMessages;
-import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.base.ActionItem;
+import org.silverpeas.mobile.client.components.base.ActionsMenu;
 
 /**
  * @author svu
@@ -47,6 +45,6 @@ void displayReservationPage(ClickEvent event){
     page.show();
 
     // hide menu
-    getElement().getParentElement().removeAttribute("style");
+    ActionsMenu.close(getElement());
   }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/DeleteReservationButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/DeleteReservationButton.java
index 3a99c7ce7..fb5900942 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/DeleteReservationButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/DeleteReservationButton.java
@@ -9,12 +9,11 @@
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.HTMLPanel;
 import org.silverpeas.mobile.client.apps.resourcesManager.events.app.DeleteReservationEvent;
-import org.silverpeas.mobile.client.apps.resourcesManager.pages.ReservationPage;
 import org.silverpeas.mobile.client.apps.resourcesManager.resources.ResourcesManagerMessages;
 import org.silverpeas.mobile.client.common.EventBus;
-import org.silverpeas.mobile.client.components.Popin;
 import org.silverpeas.mobile.client.components.PopinConfirmation;
 import org.silverpeas.mobile.client.components.base.ActionItem;
+import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.shared.dto.reservations.ReservationDTO;
 
 /**
@@ -61,6 +60,6 @@ public void execute() {
     conf.show();
 
     // hide menu
-    getElement().getParentElement().removeAttribute("style");
+    ActionsMenu.close(getElement());
   }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/SharesBoxApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/SharesBoxApp.java
index dfd53842e..7c8f87b58 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/SharesBoxApp.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/SharesBoxApp.java
@@ -25,6 +25,7 @@
 package org.silverpeas.mobile.client.apps.sharesbox;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.Window;
 import org.fusesource.restygwt.client.Method;
 import org.silverpeas.mobile.client.apps.navigation.events.app.external.AbstractNavigationEvent;
 import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationAppInstanceChangedEvent;
@@ -36,6 +37,7 @@
 import org.silverpeas.mobile.client.apps.sharesbox.events.pages.SharesDeletedEvent;
 import org.silverpeas.mobile.client.apps.sharesbox.pages.SharesBoxPage;
 import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.common.ServicesLocator;
 import org.silverpeas.mobile.client.common.app.App;
 import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly;
@@ -73,7 +75,7 @@ public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) {
 
   @Override
   public void showContent(final NavigationShowContentEvent event) {
-    if (event.getContent().getType().equals(ContentsTypes.SharesBox.toString())) {
+    if (event.getContent().getType().equals(ContentsTypes.  SharesBox.toString())) {
       MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<List<TicketDTO>>() {
         @Override
         public void attempt() {
@@ -81,6 +83,14 @@ public void attempt() {
           ServicesLocator.getRestServiceTickets().getMyTickets("", this);
         }
 
+        @Override
+        public void onFailure(Method method, Throwable t) {
+          SharesBoxPage page = new SharesBoxPage();
+          setMainPage(page);
+          page.show();
+          Notification.activityStop();
+        }
+
         @Override
         public void onSuccess(Method method, List<TicketDTO> ticketDTOS) {
           super.onSuccess(method, ticketDTOS);
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java
index 4b44a5ba0..cbec0f486 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java
@@ -27,17 +27,19 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.Widget;
+import org.silverpeas.mobile.client.apps.sharesbox.events.app.DeleteSharesEvent;
 import org.silverpeas.mobile.client.apps.sharesbox.events.pages.AbstractSharesBoxPagesEvent;
 import org.silverpeas.mobile.client.apps.sharesbox.events.pages.SharesBoxPagesEventHandler;
 import org.silverpeas.mobile.client.apps.sharesbox.events.pages.SharesDeletedEvent;
-import org.silverpeas.mobile.client.apps.sharesbox.pages.widgets.DeleteButton;
 import org.silverpeas.mobile.client.apps.sharesbox.pages.widgets.ShareItem;
 import org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages;
 import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.components.PopinConfirmation;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.components.base.widgets.DeleteButton;
 import org.silverpeas.mobile.shared.dto.tickets.TicketDTO;
 
 import java.util.ArrayList;
@@ -51,18 +53,16 @@ public class SharesBoxPage extends PageContent implements SharesBoxPagesEventHan
   @UiField(provided = true) protected ShareMessages msg = null;
   @UiField
   UnorderedList shares;
-
-  @UiField
-  ActionsMenu actionsMenu;
   private List<TicketDTO> data;
 
-  private DeleteButton delete = new DeleteButton();
+  private DeleteButton buttonDelete = new DeleteButton();
 
   public void setData(List<TicketDTO> data) {
     this.data = data;
     for (TicketDTO d : data) {
       ShareItem item = new ShareItem();
       item.setData(d);
+      item.setParent(this);
       shares.add(item);
     }
   }
@@ -98,10 +98,35 @@ public SharesBoxPage() {
     msg = GWT.create(ShareMessages.class);
     setPageTitle(msg.title());
     initWidget(uiBinder.createAndBindUi(this));
-    shares.getElement().setId("shares");
     EventBus.getInstance().addHandler(AbstractSharesBoxPagesEvent.TYPE, this);
-    delete.setParentPage(this);
-    actionsMenu.addAction(delete);
+    buttonDelete.setId("delete-share");
+  }
+
+  @Override
+  public void setSelectionMode(boolean selectionMode) {
+    super.setSelectionMode(selectionMode);
+    if (selectionMode) {
+      clearActions();
+      buttonDelete.setCallback(new Command() {@Override public void execute() {deleteSelectedShares();}});
+      addActionShortcut(buttonDelete);
+
+    } else {
+      clearActions();
+    }
+  }
+
+  private void deleteSelectedShares() {
+    PopinConfirmation popin = new PopinConfirmation(msg.deleteConfirmation()); //TODO
+    popin.setYesCallback(new Command() {
+      @Override
+      public void execute() {
+        List<TicketDTO> selection = getSelectedShares();
+        DeleteSharesEvent deleteEvent = new DeleteSharesEvent();
+        deleteEvent.setSelection(selection);
+        if (!selection.isEmpty()) EventBus.getInstance().fireEvent(deleteEvent);
+      }
+    });
+    popin.show();
   }
 
   @Override
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.ui.xml
index 3e569dc80..892bd70af 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.ui.xml
@@ -30,9 +30,8 @@
 
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages' />
 
-  <g:HTMLPanel ui:field="container" styleName="content ui-body-a notificationBox">
-    <base:ActionsMenu ui:field="actionsMenu"/>
+  <g:HTMLPanel ui:field="container" styleName="content ui-body-a sharesbox">
 
-    <components:UnorderedList ui:field="shares" stylePrimaryName="ui-listview ui-listview-inset ui-corner-all ui-shadow"></components:UnorderedList>
+    <components:UnorderedList ui:field="shares" stylePrimaryName="ui-listview ui-listview-inset ui-corner-all ui-shadow shares"></components:UnorderedList>
   </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.java
index 254038a31..9a265b9d9 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.java
@@ -25,52 +25,75 @@
 package org.silverpeas.mobile.client.apps.sharesbox.pages.widgets;
 
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.dom.client.AnchorElement;
+import com.google.gwt.dom.client.SpanElement;
+import com.google.gwt.event.dom.client.TouchEndEvent;
+import com.google.gwt.event.dom.client.TouchMoveEvent;
+import com.google.gwt.event.dom.client.TouchStartEvent;
 import com.google.gwt.i18n.client.DateTimeFormat;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
-import com.google.gwt.user.client.ui.*;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.Anchor;
+import com.google.gwt.user.client.ui.HTMLPanel;
+import com.google.gwt.user.client.ui.Widget;
+import org.silverpeas.mobile.client.apps.notificationsbox.events.app.NotificationReadenEvent;
 import org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages;
+import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.components.base.widgets.SelectableItem;
+import org.silverpeas.mobile.shared.dto.notifications.NotificationReceivedDTO;
+import org.silverpeas.mobile.shared.dto.notifications.NotificationSendedDTO;
 import org.silverpeas.mobile.shared.dto.tickets.TicketDTO;
 
 import java.util.Date;
 
-public class ShareItem extends Composite implements ClickHandler {
+public class ShareItem extends SelectableItem {
 
   private static ShareItemUiBinder uiBinder = GWT.create(ShareItemUiBinder.class);
 
   @UiField HTMLPanel container;
 
   @UiField
-  InlineHTML date, name;
+  SpanElement date, name;
 
   @UiField
   Anchor link;
 
   @UiField
-  CheckBox select;
+  AnchorElement shareLink;
 
   @UiField(provided = true) protected ShareMessages msg = null;
   private TicketDTO data;
 
-  @Override
-  public void onClick(final ClickEvent clickEvent) {
-    //TODO
-  }
-
   interface ShareItemUiBinder extends UiBinder<Widget, ShareItem> {
   }
 
   public ShareItem() {
     msg = GWT.create(ShareMessages.class);
     initWidget(uiBinder.createAndBindUi(this));
-    date.addClickHandler(this);
-    name.addClickHandler(this);
+    setContainer(container);
+  }
+
+  @UiHandler("link")
+  protected void startTouch(TouchStartEvent event) {
+    startTouch(event, true);
+  }
+
+  @UiHandler("link")
+  protected void moveTouch(TouchMoveEvent event) {
+    super.moveTouch(event);
   }
 
-  public boolean isSelected() {
-    return select.getValue();
+  @UiHandler("link")
+  protected void endTouch(TouchEndEvent event) {
+    endTouch(event, true, new Command() {
+      @Override
+      public void execute() {
+        //TODO : display share informations
+      }
+    });
   }
 
   public void setData(TicketDTO data) {
@@ -78,14 +101,14 @@ public void setData(TicketDTO data) {
     Date dt = new Date();
     dt.setTime(Long.parseLong(data.getCreationDate()));
     DateTimeFormat fmt = DateTimeFormat.getFormat("dd/MM/yyyy");
-    date.setText(fmt.format(dt));
-    name.setText(data.getName());
+    date.setInnerText(fmt.format(dt));
+    name.setInnerText(data.getName());
 
-    link.setHref("/silverpeas/Ticket?Key=" + data.getToken());
+    shareLink.setHref("/silverpeas/Ticket?Key=" + data.getToken());
     if (data.getSharedObjectType().equalsIgnoreCase("Attachment")) {
-      link.getElement().setAttribute("download", data.getName());
+      shareLink.setAttribute("download", data.getName());
     } else {
-      link.setTarget("_blank");
+      shareLink.setTarget("_blank");
     }
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.ui.xml
index 60eecc36c..715d07d10 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.ui.xml
@@ -26,11 +26,12 @@
 <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui">
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages'/>
 
-  <g:HTMLPanel tag="li" ui:field="container">
-    <g:CheckBox ui:field="select"  styleName="share-checkbox"></g:CheckBox>
-    <g:InlineHTML ui:field="date" styleName="share-date"></g:InlineHTML>
-    <g:Anchor ui:field="link" styleName="share-link" target="_self"></g:Anchor>
-    <g:InlineHTML ui:field="name" styleName="share-name"></g:InlineHTML>
+  <g:HTMLPanel tag="li" ui:field="container" styleName="share">
+    <g:Anchor ui:field="link" styleName="">
+      <a ui:field="shareLink" class="share-link" target="_self"></a>
+      <span ui:field="date" class="share-date"></span>
+      <span ui:field="name" class="share-name"></span>
+    </g:Anchor>
   </g:HTMLPanel>
 
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.java
index 9a4263e68..18407a046 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.java
@@ -32,4 +32,5 @@ public interface ShareMessages extends Messages {
     String delete();
 
 
+    String deleteConfirmation();
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.properties
index d7f1d64d4..c314b3bfa 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.properties
@@ -24,3 +24,4 @@
 
 title=Mes partages
 delete=Supprimer
+deleteConfirmation=Etes-vous sur de supprimer ces partages ?
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_en.properties
index 67d7d6c68..a3624f7aa 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_en.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_en.properties
@@ -23,4 +23,5 @@
 #
 
 title=My tickets
-delete=Delete
\ No newline at end of file
+delete=Delete
+deleteConfirmation=Etes-vous sur de supprimer ces partages ?
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_fr.properties
index ce32461bd..a6b62a606 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_fr.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_fr.properties
@@ -23,4 +23,5 @@
 #
 
 title=Mes partages
-delete=Supprimer
\ No newline at end of file
+delete=Supprimer
+deleteConfirmation=Delete those shares ?
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.java
index 2a85b53e2..4276774df 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.java
@@ -48,7 +48,6 @@
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
 import org.silverpeas.mobile.shared.dto.survey.QuestionDTO;
@@ -63,9 +62,6 @@ public class SurveyPage extends PageContent implements SurveyPagesEventHandler {
   @UiField(provided = true) protected SurveyMessages msg = null;
   @UiField(provided = true) protected ApplicationMessages msgApp = null;
 
-  @UiField
-  ActionsMenu actionsMenu;
-
   @UiField
   UnorderedList questions;
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.ui.xml
index d84e1f1c1..63a47e140 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.ui.xml
@@ -33,7 +33,6 @@
            type='org.silverpeas.mobile.client.resources.ApplicationMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-body-a survey">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <components:UnorderedList ui:field="questions" styleName="liste-questions forms-list"/>
     <g:HTMLPanel ui:field="secondPart" styleName="comment-area">
       <g:InlineHTML><ui:text from="{msg.comments}"/></g:InlineHTML>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.java
index aa1cc7728..79ca9e818 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.java
@@ -39,7 +39,6 @@
 import org.silverpeas.mobile.client.apps.survey.resources.SurveyMessages;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.survey.SurveyDTO;
@@ -55,8 +54,6 @@ public class SurveysPage extends PageContent implements SurveyPagesEventHandler
 
   @UiField
   UnorderedList surveys;
-  @UiField
-  ActionsMenu actionsMenu;
 
   private AddToFavoritesButton favorite = new AddToFavoritesButton();
   private String instanceId;
@@ -98,7 +95,7 @@ public void onSurveysLoad(final SurveysLoadedEvent event) {
       surveys.add(item);
     }
 
-    actionsMenu.addAction(favorite);
+    addActionMenu(favorite);
     favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), getPageTitle());
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.ui.xml
index abe4126e1..730fab862 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.ui.xml
@@ -31,7 +31,6 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.survey.resources.SurveyMessages' />
 
   <g:HTMLPanel ui:field="container" styleName="content ui-body-a survey">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <components:UnorderedList ui:field="surveys" styleName="liste-enquete"/>
   </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksApp.java
index 467b5f614..2ac564ebf 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksApp.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksApp.java
@@ -25,16 +25,13 @@
 package org.silverpeas.mobile.client.apps.tasks;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.Window;
 import org.fusesource.restygwt.client.Method;
 import org.silverpeas.mobile.client.apps.navigation.events.app.external.AbstractNavigationEvent;
 import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationAppInstanceChangedEvent;
 import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationEventHandler;
 import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationShowContentEvent;
-import org.silverpeas.mobile.client.apps.tasks.events.app.AbstractTasksAppEvent;
-import org.silverpeas.mobile.client.apps.tasks.events.app.TaskCreateEvent;
-import org.silverpeas.mobile.client.apps.tasks.events.app.TaskUpdateEvent;
-import org.silverpeas.mobile.client.apps.tasks.events.app.TasksAppEventHandler;
-import org.silverpeas.mobile.client.apps.tasks.events.app.TasksLoadEvent;
+import org.silverpeas.mobile.client.apps.tasks.events.app.*;
 import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskCreatedEvent;
 import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskUpdatedEvent;
 import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksLoadedEvent;
@@ -128,6 +125,24 @@ public void onSuccess(final Method method, final TaskDTO taskDTO) {
     action.attempt();
   }
 
+  @Override
+  public void deleteTask(TasksDeleteEvent event) {
+    MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<Void>() {
+      @Override
+      public void attempt() {
+        super.attempt();
+        ServicesLocator.getServiceTasks().deleteTasks(event.getTasks(), this);
+      }
+      @Override
+      public void onSuccess(Method method, Void unused) {
+        super.onSuccess(method, unused);
+        loadTasks(new TasksLoadEvent());
+      }
+    };
+    action.attempt();
+
+  }
+
   @Override
   public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) {
   }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/events/app/TasksAppEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/events/app/TasksAppEventHandler.java
index fd2987f03..c44a82995 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/events/app/TasksAppEventHandler.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/events/app/TasksAppEventHandler.java
@@ -30,4 +30,6 @@ public interface TasksAppEventHandler extends EventHandler{
   void loadTasks(TasksLoadEvent event);
   void updateTask(TaskUpdateEvent event);
   void createTask(TaskCreateEvent event);
+
+  void deleteTask(TasksDeleteEvent event);
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/events/app/TasksDeleteEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/events/app/TasksDeleteEvent.java
new file mode 100644
index 000000000..fd74cfdbb
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/events/app/TasksDeleteEvent.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.apps.tasks.events.app;
+
+import org.silverpeas.mobile.shared.dto.TaskDTO;
+
+import java.util.List;
+
+public class TasksDeleteEvent extends AbstractTasksAppEvent {
+
+  private List<TaskDTO> tasks;
+
+  public TasksDeleteEvent(List<TaskDTO> tasks){
+    super();
+    this.tasks = tasks;
+  }
+
+  @Override
+  protected void dispatch(TasksAppEventHandler handler) {
+    handler.deleteTask(this);
+  }
+
+  public List<TaskDTO> getTasks() {
+    return tasks;
+  }
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java
index e5b816c4b..ec70025d4 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java
@@ -27,21 +27,27 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.HTMLPanel;
+import org.silverpeas.mobile.client.apps.tasks.events.app.TasksDeleteEvent;
 import org.silverpeas.mobile.client.apps.tasks.events.app.TasksLoadEvent;
 import org.silverpeas.mobile.client.apps.tasks.events.pages.AbstractTasksPagesEvent;
 import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskCreatedEvent;
 import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskUpdatedEvent;
 import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksLoadedEvent;
 import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksPagesEventHandler;
-import org.silverpeas.mobile.client.apps.tasks.pages.widgets.AddTaskItem;
 import org.silverpeas.mobile.client.apps.tasks.pages.widgets.TaskItem;
+import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.common.Notification;
+import org.silverpeas.mobile.client.components.PopinConfirmation;
 import org.silverpeas.mobile.client.components.UnorderedList;
 import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.components.base.widgets.AddButton;
+import org.silverpeas.mobile.client.components.base.widgets.DeleteButton;
 import org.silverpeas.mobile.shared.dto.TaskDTO;
 
+import java.util.ArrayList;
 import java.util.Iterator;
 
 /**
@@ -49,32 +55,47 @@
  */
 public class TasksPage extends PageContent implements TasksPagesEventHandler {
 
-
   interface TasksPageUiBinder extends UiBinder<HTMLPanel, TasksPage> { }
   private static TasksPageUiBinder uiBinder = GWT.create(TasksPageUiBinder.class);
+  private AddButton buttonCreate = new AddButton();
 
+  private DeleteButton buttonDelete = new DeleteButton();
   @UiField HTMLPanel container;
   @UiField
   UnorderedList list;
 
+  private TasksMessages msg = GWT.create(TasksMessages .class);
+
   public TasksPage() {
     initWidget(uiBinder.createAndBindUi(this));
+    setPageTitle(msg.title());
+    list.getElement().setId("tasks");
     EventBus.getInstance().fireEvent(new TasksLoadEvent());
     EventBus.getInstance().addHandler(AbstractTasksPagesEvent.TYPE, this);
+    buttonDelete.setId("delete-task");
+    buttonCreate.setId("add-task");
+    buttonCreate.setCallback(new Command() {
+      @Override
+      public void execute() {
+        TaskPage page = new TaskPage();
+        page.setPageTitle(msg.create());
+        page.show();
+      }
+    });
   }
 
   @Override
   public void onTaskLoad(final TasksLoadedEvent event) {
     Notification.activityStop();
-
-
-    list.add(new AddTaskItem());
-
+    list.clear();
+    clearActions();
+    addActionShortcut(buttonCreate);
     Iterator<TaskDTO> i = event.getTasks().iterator();
     while (i.hasNext()) {
       TaskDTO task = i.next();
       if (task != null) {
         TaskItem item = new TaskItem();
+        item.setParent(this);
         item.setData(task);
         list.add(item);
       }
@@ -84,6 +105,7 @@ public void onTaskLoad(final TasksLoadedEvent event) {
   @Override
   public void onTaskCreated(final TaskCreatedEvent taskCreatedEvent) {
     TaskItem item = new TaskItem();
+    item.setParent(this);
     item.setData(taskCreatedEvent.getTask());
     list.add(item);
   }
@@ -95,10 +117,8 @@ public void onTaskUpdated(TaskUpdatedEvent taskUpdatedEvent) {
       if (list.getWidget(i) instanceof TaskItem) {
         TaskItem t = (TaskItem) list.getWidget(i);
         if (t.getData().getId() == taskUpdatedEvent.getTask().getId()) {
-          list.remove(t);
-          TaskItem item = new TaskItem();
+          TaskItem item = (TaskItem) list.getWidget(i);
           item.setData(taskUpdatedEvent.getTask());
-          list.add(item);
           break;
         }
       }
@@ -111,4 +131,36 @@ public void stop() {
     super.stop();
     EventBus.getInstance().removeHandler(AbstractTasksPagesEvent.TYPE, this);
   }
+
+  private void deleteSelectedTasks() {
+    PopinConfirmation popin = new PopinConfirmation(msg.deleteConfirmation());
+    popin.setYesCallback(new Command() {
+      @Override
+      public void execute() {
+        ArrayList<TaskDTO> selection = new ArrayList<>();
+        for (int i = 0; i < list.getCount(); i++) {
+          TaskItem item = (TaskItem) list.getWidget(i);
+          if (item.isSelected()) {
+            selection.add(item.getData());
+          }
+        }
+        EventBus.getInstance().fireEvent(new TasksDeleteEvent(selection));
+      }
+    });
+    popin.show();
+  }
+
+  @Override
+  public void setSelectionMode(boolean selectionMode) {
+    super.setSelectionMode(selectionMode);
+
+    if (selectionMode) {
+      clearActions();
+      buttonDelete.setCallback(new Command() {@Override public void execute() {deleteSelectedTasks();}});
+      addActionShortcut(buttonDelete);
+    } else {
+      clearActions();
+      addActionShortcut(buttonCreate);
+    }
+  }
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.ui.xml
index 738ed1472..0ffbcba8c 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.ui.xml
@@ -24,9 +24,10 @@
 
 <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
              xmlns:g="urn:import:com.google.gwt.user.client.ui"
+             xmlns:base="urn:import:org.silverpeas.mobile.client.components.base"
              xmlns:components="urn:import:org.silverpeas.mobile.client.components">
 
-  <g:HTMLPanel ui:field="container" styleName="ui-content ui-body-a">
+  <g:HTMLPanel ui:field="container" styleName="ui-content ui-body-a tasks">
     <components:UnorderedList ui:field="list" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"></components:UnorderedList>
   </g:HTMLPanel>
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java
index 515026ba9..9a9652a34 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java
@@ -25,23 +25,24 @@
 package org.silverpeas.mobile.client.apps.tasks.pages.widgets;
 
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.InputElement;
 import com.google.gwt.dom.client.SpanElement;
 import com.google.gwt.dom.client.Style;
-import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.TouchEndEvent;
+import com.google.gwt.event.dom.client.TouchStartEvent;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.Anchor;
-import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.HTMLPanel;
 import com.google.gwt.user.client.ui.Widget;
 import org.silverpeas.mobile.client.apps.tasks.pages.TaskPage;
 import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages;
+import org.silverpeas.mobile.client.components.base.widgets.SelectableItem;
 import org.silverpeas.mobile.shared.dto.TaskDTO;
 
-public class TaskItem extends Composite {
+public class TaskItem extends SelectableItem {
 
   private static ContactItemUiBinder uiBinder = GWT.create(ContactItemUiBinder.class);
 
@@ -53,13 +54,13 @@ public class TaskItem extends Composite {
   @UiField(provided = true) protected TasksMessages msg = null;
 
   private TaskDTO task;
-
   interface ContactItemUiBinder extends UiBinder<Widget, TaskItem> {
   }
 
   public TaskItem() {
     msg = GWT.create(TasksMessages.class);
     initWidget(uiBinder.createAndBindUi(this));
+    setContainer(container);
   }
 
   public void setData(TaskDTO data) {
@@ -82,27 +83,30 @@ public void setData(TaskDTO data) {
     range.setDisabled(true);
     updateRange(data.getPercentCompleted());
   }
-
   public TaskDTO getData() {
     return task;
   }
 
-  public native void addListenerInput(Element range, TaskItem item) /*-{
-    range.addEventListener('input', function () {
-      item.@org.silverpeas.mobile.client.apps.tasks.pages.widgets.TaskItem::updateRange(I)(range.value);
-    }, false);
-  }-*/;
+  @UiHandler("link")
+  protected void startTouch(TouchStartEvent event) {
+    startTouch(event, task.getExternalId().isEmpty());
+  }
 
   @UiHandler("link")
-  protected void edit(ClickEvent event) {
-    if (task.getExternalId().isEmpty()) {
-      TaskPage page = new TaskPage();
-      page.setPageTitle(msg.edit());
-      page.setData(task);
-      page.show();
-    } else {
-      //TODO : redirect on content
-    }
+  protected void endTouch(TouchEndEvent event) {
+    endTouch(event, task.getExternalId().isEmpty(), new Command() {
+      @Override
+      public void execute() {
+        if (task.getExternalId().isEmpty()) {
+          TaskPage page = new TaskPage();
+          page.setPageTitle(msg.edit());
+          page.setData(task);
+          page.show();
+        } else {
+          //TODO : redirect on content
+        }
+      }
+    });
   }
 
   private void updateRange(final int value) {
@@ -110,6 +114,4 @@ private void updateRange(final int value) {
     String css = "background-image: -webkit-gradient(linear, 0% 0%, 100% 0%, color-stop(" + val + ", rgb(114, 171, 14)), color-stop(" + val + ", rgb(197, 197, 197)));";
     range.setAttribute("style", css);
   }
-
-
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.ui.xml
index ac5cee19a..54814a39d 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.ui.xml
@@ -26,7 +26,7 @@
 <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui">
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages'/>
 
-  <g:HTMLPanel tag="li" ui:field="container" styleName="task">
+  <g:HTMLPanel tag="li" ui:field="container" styleName="task readonly">
     <g:Anchor styleName="ui-btn ui-icon-carat-r" ui:field="link">
       <span ui:field="name"></span>&nbsp;(<span ui:field="priority" class="task-priority"></span>)
       <br/><span ui:field="delegator"></span><span ui:field="endDate" class="endDate"></span>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.java
index 63560ebab..977ad62f5 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.java
@@ -27,9 +27,12 @@
 import com.google.gwt.i18n.client.Messages;
 
 public interface TasksMessages extends Messages {
+  String title();
   String create();
   String actionCreate();
   String actionEdit();
   String nameField();
   String edit();
+
+  String deleteConfirmation();
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.properties
index 72091d1d3..74ee876e3 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.properties
@@ -22,9 +22,11 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
+title=Mes tâches
 create=Créer une tâche
 actionCreate=Créer
 actionEdit=Modifier
 nameField=Nom de la tâche
 edit=Modifier
+deleteConfirmation=Etes-vous sur de supprimer ces tâches ?
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_en.properties
index 07eab09b9..f65635c01 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_en.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_en.properties
@@ -22,9 +22,10 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
+title=My tasks
 create=Create task
 actionCreate=Create
 actionEdit=Modify
 nameField=Task name
 edit=Edit
-
+deleteConfirmation=Delete those tasks ?
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_fr.properties
index 72091d1d3..932455040 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_fr.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_fr.properties
@@ -22,9 +22,10 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
+title=Mes tâches
 create=Créer une tâche
 actionCreate=Créer
 actionEdit=Modifier
 nameField=Nom de la tâche
 edit=Modifier
-
+deleteConfirmation=Etes-vous sur de supprimer ces tâches ?
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.java
index 53798427d..2f9232f70 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.java
@@ -46,7 +46,6 @@
 import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.components.Popin;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO;
 import org.silverpeas.mobile.shared.dto.workflow.WorkflowFieldDTO;
@@ -65,8 +64,6 @@ public class WorkflowActionFormPage extends PageContent implements WorkflowPages
 
   @UiField
   UnorderedList fields;
-  @UiField
-  ActionsMenu actionsMenu;
   @UiField HeadingElement header;
   @UiField Anchor validate, cancel;
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.ui.xml
index 7421fb9b6..573b0d807 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.ui.xml
@@ -31,7 +31,6 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.apps.workflow.resources.WorkflowMessages'/>
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <h2 class="appHeader" ui:field="header"></h2>
     <components:UnorderedList ui:field="fields" styleName="workflow-form"/>
     <div class=" ui-controlgroup ui-controlgroup-horizontal">
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.java
index 0f7952a63..375abe9d8 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.java
@@ -46,7 +46,6 @@
 import org.silverpeas.mobile.client.apps.workflow.pages.widgets.ActionButton;
 import org.silverpeas.mobile.client.apps.workflow.resources.WorkflowMessages;
 import org.silverpeas.mobile.client.common.EventBus;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.shared.StreamingList;
 import org.silverpeas.mobile.shared.dto.workflow.WorkflowDataDTO;
@@ -62,8 +61,6 @@ public class WorkflowPage extends PageContent implements WorkflowPagesEventHandl
   @UiField
   FlexTable instances;
   @UiField
-  ActionsMenu actionsMenu;
-  @UiField
   ListBox roles;
 
   private String instanceId;
@@ -94,8 +91,7 @@ public void loadDataInstances(final WorkflowLoadedDataEvent event) {
     for (Map.Entry<String, String> role : metaData.getRoles().entrySet()) {
       roles.addItem(role.getValue(), role.getKey());
     }
-    roles.setVisible(true);
-
+    roles.setVisible(roles.getItemCount()>1);
     EventBus.getInstance().fireEvent(new WorkflowRoleChangeEvent(roles.getSelectedValue()));
   }
 
@@ -107,6 +103,7 @@ public void loadInstances(final WorkflowLoadedInstancesEvent event) {
       this.data.getList().addAll(event.getData().getList());
     }
 
+    instances.removeAllRows();
     int c = 0;
     for (String label : metaData.getHeaderLabels().get(roles.getSelectedValue())) {
       instances.setHTML(0, c, label);
@@ -144,9 +141,11 @@ private void creationGesture() {
       ActionButton act = new ActionButton();
       act.setId(ACTION_CREATE);
       act.init(instanceId, "create", msg.create(), null);
-      actionsMenu.addAction(act);
+      addActionMenu(act);
     } else {
-      actionsMenu.removeAction(ACTION_CREATE, false);
+      ActionButton act = new ActionButton();
+      act.setId(ACTION_CREATE);
+      removeActionMenu(act);
     }
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.ui.xml
index 3b3c31aa3..4b77016e5 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.ui.xml
@@ -28,7 +28,6 @@
              xmlns:base="urn:import:org.silverpeas.mobile.client.components.base">
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <h2 class="appHeader"></h2>
     <g:ListBox ui:field="roles" styleName="workflow-roles" visible="false"/>
     <g:FlexTable ui:field="instances" styleName="workflow-list"/>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.java
index c80287774..87f810f13 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.java
@@ -32,7 +32,6 @@
 import org.silverpeas.mobile.client.apps.workflow.pages.widgets.ActionButton;
 import org.silverpeas.mobile.client.apps.workflow.pages.widgets.Field;
 import org.silverpeas.mobile.client.components.UnorderedList;
-import org.silverpeas.mobile.client.components.base.ActionsMenu;
 import org.silverpeas.mobile.client.components.base.PageContent;
 import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO;
 import org.silverpeas.mobile.shared.dto.workflow.FieldPresentationDTO;
@@ -49,8 +48,6 @@ public class WorkflowPresentationPage extends PageContent {
 
   @UiField
   UnorderedList fields;
-  @UiField
-  ActionsMenu actionsMenu;
   @UiField HeadingElement header;
 
   public void setData(final WorkflowInstancePresentationFormDTO data) {
@@ -74,7 +71,7 @@ public void setData(final WorkflowInstancePresentationFormDTO data, final Applic
       ActionButton act = new ActionButton();
       act.setId(action.getKey());
       act.init(data.getId(), action.getKey(), action.getValue(), data.getState());
-      actionsMenu.addAction(act);
+      addActionMenu(act);
     }
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.ui.xml
index b09d82651..405402a30 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.ui.xml
@@ -29,7 +29,6 @@
              xmlns:components="urn:import:org.silverpeas.mobile.client.components">
 
   <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a">
-    <base:ActionsMenu ui:field="actionsMenu"/>
     <h2 class="appHeader" ui:field="header"></h2>
     <components:UnorderedList ui:field="fields" styleName="workflow-form"/>
   </g:HTMLPanel>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/widgets/ActionButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/widgets/ActionButton.java
index 013f3a1ff..ff925bc12 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/widgets/ActionButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/widgets/ActionButton.java
@@ -35,6 +35,7 @@
 import org.silverpeas.mobile.client.apps.workflow.resources.WorkflowMessages;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.base.ActionItem;
+import org.silverpeas.mobile.client.components.base.ActionsMenu;
 
 /**
  * @author: svu
@@ -72,7 +73,7 @@ void executeAction(ClickEvent event){
       ev.setState(state);
       EventBus.getInstance().fireEvent(ev);
         // hide menu
-        getElement().getParentElement().removeAttribute("style");
+        ActionsMenu.close(getElement());
     }
 
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java
index ddbb8b8f1..7a83af672 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java
@@ -24,6 +24,7 @@
 
 package org.silverpeas.mobile.client.common;
 
+import com.google.gwt.core.client.GWT;
 import com.google.gwt.http.client.Request;
 import com.google.gwt.http.client.RequestBuilder;
 import com.google.gwt.http.client.RequestCallback;
@@ -31,7 +32,6 @@
 import com.google.gwt.http.client.Response;
 import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.RootPanel;
 import com.googlecode.gwt.crypto.bouncycastle.InvalidCipherTextException;
 import com.googlecode.gwt.crypto.client.TripleDesCipher;
 import org.fusesource.restygwt.client.Method;
@@ -44,7 +44,6 @@
 import org.silverpeas.mobile.client.common.network.NetworkHelper;
 import org.silverpeas.mobile.client.common.resources.ResourcesManager;
 import org.silverpeas.mobile.client.common.storage.LocalStorageHelper;
-import org.silverpeas.mobile.client.pages.connexion.ConnexionPage;
 import org.silverpeas.mobile.shared.dto.DetailUserDTO;
 import org.silverpeas.mobile.shared.dto.FullUserDTO;
 import org.silverpeas.mobile.shared.dto.IFullUser;
@@ -76,11 +75,11 @@ public static AuthentificationManager getInstance() {
   }
 
   public void addHeader(String key, String value) {
-    LocalStorageHelper.store(key, value);
+    LocalStorageHelper.getInstance().store(key, value);
   }
 
   public String getHeader(String key) {
-    return LocalStorageHelper.load(key);
+    return LocalStorageHelper.getInstance().load(key);
   }
 
   public void storeUser(final DetailUserDTO user, final UserProfileDTO profil, String login,
@@ -97,20 +96,20 @@ public void storeUser(final DetailUserDTO user, final UserProfileDTO profil, Str
 
     String maintainSession = ResourcesManager.getParam("maintain.session");
     if (maintainSession.equalsIgnoreCase("true")) {
-      LocalStorageHelper.store(USER_CONNECTED_KEY, u.getAutoBean());
-      LocalStorageHelper.store(USER_PROFIL, profil.getAutoBean());
+      LocalStorageHelper.getInstance().store(USER_CONNECTED_KEY, u.getAutoBean());
+      LocalStorageHelper.getInstance().store(USER_PROFIL, profil.getAutoBean());
     }
   }
 
   public void updateAvatarInCache(final String avatarData) {
     SpMobil.getUser().setAvatar(avatarData);
     SpMobil.getUserProfile().setAvatar(avatarData);
-    FullUserDTO user = FullUserDTO.getBean(LocalStorageHelper.load(USER_CONNECTED_KEY, IFullUser.class));
+    FullUserDTO user = FullUserDTO.getBean(LocalStorageHelper.getInstance().load(USER_CONNECTED_KEY, IFullUser.class));
     user.setAvatar(avatarData);
     String maintainSession = ResourcesManager.getParam("maintain.session");
     if (maintainSession.equalsIgnoreCase("true")) {
-      LocalStorageHelper.store(USER_CONNECTED_KEY, user.getAutoBean());
-      LocalStorageHelper.store(USER_PROFIL, SpMobil.getUserProfile().getAutoBean());
+      LocalStorageHelper.getInstance().store(USER_CONNECTED_KEY, user.getAutoBean());
+      LocalStorageHelper.getInstance().store(USER_PROFIL, SpMobil.getUserProfile().getAutoBean());
     }
   }
 
@@ -118,14 +117,14 @@ public void updateAvatarInCache(final String avatarData) {
    * Clean data in local storage.
    */
   public void clearLocalStorage() {
-    LocalStorageHelper.clear();
+    LocalStorageHelper.getInstance().clear();
   }
 
   public FullUserDTO loadUser() {
-    FullUserDTO user = FullUserDTO.getBean(LocalStorageHelper.load(USER_CONNECTED_KEY, IFullUser.class));
+    FullUserDTO user = FullUserDTO.getBean(LocalStorageHelper.getInstance().load(USER_CONNECTED_KEY, IFullUser.class));
     SpMobil.setUser(user);
     UserProfileDTO profil =
-        UserProfileDTO.getBean(LocalStorageHelper.load(USER_PROFIL, IUserProfile.class));
+        UserProfileDTO.getBean(LocalStorageHelper.getInstance().load(USER_PROFIL, IUserProfile.class));
     SpMobil.setUserProfile(profil);
     return user;
   }
@@ -264,9 +263,7 @@ public void onSuccess(final Method method, final Boolean showTermsOfServices) {
                 @Override
                 public void onFailure(final Method method, final Throwable t) {
                   //super.onFailure(method, t);
-                  Window.alert(
-                      "Normaly never happen !!! " + t.getClass().getName() + " " + t.getMessage());
-
+                  GWT.log("Normaly never happen !!! " + t.getClass().getName() + " " + t.getMessage());
                   if (t instanceof AuthenticationException) {
                     EventBus.getInstance().fireEvent(new AuthenticationErrorEvent(t));
                   } else {
@@ -278,7 +275,7 @@ public void onFailure(final Method method, final Throwable t) {
             }
           });
     } else {
-      //TODO : terms of service ?
+      //TODO : terms of service in offline mode ?
       Notification.activityStop();
       loadUser();
       SpMobil.displayMainPage();
@@ -307,16 +304,12 @@ public void onResponseReceived(final Request request, final Response response) {
           AuthentificationManager.getInstance().clearLocalStorage();
           PageHistory.getInstance().clear();
           Notification.activityStop();
-          ConnexionPage connexionPage = new ConnexionPage();
-          RootPanel.get().clear();
-          RootPanel.get().add(connexionPage);
+          SpMobil.getInstance().displayFirstPage();
           SpMobil.destroyMainPage();
-
         }
-
         @Override
         public void onError(final Request request, final Throwable throwable) {
-
+          LocalStorageHelper.getInstance().storeBuildDate();
         }
       });
     } catch (RequestException e) {
@@ -324,7 +317,7 @@ public void onError(final Request request, final Throwable throwable) {
     }
   }
 
-  private void clearCache() {
+  public void clearCache() {
     // clear app cache
     MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<Void>() {
       @Override
@@ -344,7 +337,5 @@ public void onSuccess(final Method method, final Void unused) {
       }
     };
     action.attempt();
-
-
   }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java
index a72e17c59..6d843d4b6 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java
@@ -24,13 +24,31 @@
 
 package org.silverpeas.mobile.client.common;
 
+import com.google.gwt.core.client.JsArray;
 import com.google.gwt.dom.client.Element;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.Anchor;
+import org.silverpeas.mobile.client.common.event.speech.SpeechErrorEvent;
+import org.silverpeas.mobile.client.common.event.speech.SpeechResultEvent;
+import org.silverpeas.mobile.client.common.event.speech.SpeechStartEvent;
+import org.silverpeas.mobile.client.common.event.speech.SpeechStopEvent;
 
 /**
  * @author: svu
  */
 public class Html5Utils {
 
+  public static void disableAnchor(Anchor a) {
+    String style = a.getElement().getAttribute("style");
+    a.getElement().setAttribute("style",style + "pointer-events: none;");
+  }
+
+  public static void enableAnchor(Anchor a) {
+    String style = a.getElement().getAttribute("style");
+    style = style.replace("pointer-events: none;","");
+    a.getElement().setAttribute("style",style);
+  }
+
   public static native void setVideoFullScreen(Element element) /*-{
       if (element.requestFullscreen) {
           element.requestFullscreen();
@@ -65,4 +83,145 @@ public static void vibrate() {
   public static native void vibrate(int duration) /*-{
     $wnd.navigator.vibrate(duration);
   }-*/;
+  public static native boolean isSpeechSupported() /*-{
+    return ('SpeechRecognition' in window || 'webkitSpeechRecognition' in window);
+  }-*/;
+
+  public static native boolean isSpeechSynthesisSupported() /*-{
+    return ('speechSynthesis' in window);
+  }-*/;
+
+  public static native void startListening() /*-{
+    window.recognition.start();
+  }-*/;
+
+  public static native void stopListening() /*-{
+    window.recognition.stop();
+  }-*/;
+
+  public static native boolean initSpeech(boolean continuous, String language) /*-{
+    window.recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
+    recognition.lang = language;
+    recognition.continuous = continuous;
+
+    recognition.onresult = function (event) {
+      // Récupère le texte reconnu
+      var text = event.results[0][0].transcript;
+      @org.silverpeas.mobile.client.common.Html5Utils::onSpeechResult(Ljava/lang/String;)(text);
+    }
+
+    recognition.onstart = function () {
+      // envoie d'un evenement sur le bus pour mise à jour GUI selon le contexte
+      @org.silverpeas.mobile.client.common.Html5Utils::onSpeechStart(*)();
+    };
+
+    // Événement déclenché lorsqu'une reconnaissance vocale s'arrête
+    recognition.onend = function () {
+      // envoie d'un evenement sur le bus pour mise à jour GUI selon le contexte
+      @org.silverpeas.mobile.client.common.Html5Utils::onSpeechStop(*)();
+    };
+
+    recognition.onerror = function(event) {
+      @org.silverpeas.mobile.client.common.Html5Utils::onSpeechError(*)();
+    };
+
+  }-*/;
+  public static native JsArray<Voice> getVoices() /*-{
+    return window.speechSynthesis.getVoices();
+  }-*/;
+
+  public static void readText(String[] text, Command endCallback) {
+    Html5Utils.cancelSpeaking();
+    for (int i = 0; i < text.length; i++) {
+      boolean last = (i == text.length -1);
+      String [] sentences = text[i].split("\\.");
+      if (sentences.length==0) {
+        if (last) {
+          speak(text[i], endCallback);
+        } else {
+          speak(text[i], null);
+        }
+      }
+      for (int j = 0; j < sentences.length; j++) {
+        if (last && j == sentences.length -1) {
+          speak(sentences[j], endCallback);
+        } else {
+          speak(sentences[j], null);
+        }
+      }
+    }
+  }
+
+  private static native void speak(String text, Command endCallback) /*-{
+    var msg = new SpeechSynthesisUtterance();
+    msg.text = text;
+    msg.addEventListener("end", function (event) {
+        if (endCallback != null) endCallback.@com.google.gwt.user.client.Command::execute(*)();
+    });
+    speechSynthesis.speak(msg);
+
+  }-*/;
+
+  public static native void cancelSpeaking() /*-{
+    speechSynthesis.cancel();
+  }-*/;
+  private static native void speak(String text, double volume, double rate, double pitch, String language) /*-{
+        var msg = new SpeechSynthesisUtterance();
+        msg.volume = volume; // From 0 to 1
+        msg.rate = rate; // From 0.1 to 10
+        msg.pitch = pitch; // From 0 to 2
+        msg.text = text;
+        msg.lang = language;
+        speechSynthesis.speak(msg);
+    }-*/;
+
+  private static native void speak(String text, double volume, double rate, double pitch, String language, String desiredVoice) /*-{
+    var msg = new SpeechSynthesisUtterance();
+    for (var i = 0; i < speechSynthesis.getVoices().length; i++) {
+        if (speechSynthesis.getVoices()[i].name === desiredVoice) {
+        msg.voice = speechSynthesis.getVoices()[i];
+      }
+    }
+    msg.volume = volume; // From 0 to 1
+    msg.rate = rate; // From 0.1 to 10
+    msg.pitch = pitch; // From 0 to 2
+    msg.text = text;
+    msg.lang = language;
+    speechSynthesis.speak(msg);
+  }-*/;
+
+  public static void onSpeechResult(String result) {
+    EventBus.getInstance().fireEvent(new SpeechResultEvent(result));
+  }
+
+  public static void onSpeechStart() {
+    EventBus.getInstance().fireEvent(new SpeechStartEvent());
+  }
+
+  public static void onSpeechStop() {
+    EventBus.getInstance().fireEvent(new SpeechStopEvent());
+  }
+
+  public static void onSpeechError() {
+    EventBus.getInstance().fireEvent(new SpeechErrorEvent());
+  }
+
+  public static native boolean canShare(String title, String text, String url) /*-{
+    var shareData = {
+      title: title,
+      text: text,
+      url: url
+    };
+    return $wnd.navigator.canShare(shareData);
+  }-*/;
+
+  public static native void share(String title, String text, String url) /*-{
+    var shareData = {
+      title: title,
+      text: text,
+      url: url
+    };
+    $wnd.navigator.share(shareData);
+  }-*/;
+
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java
index b06bf7803..16a899af9 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java
@@ -77,29 +77,20 @@ public void onError(final Request request, final Throwable throwable) {
 
   public static void showContent(String pubId, String appId, Element basement) {
     final String url = UrlUtils.getServicesLocation() + "PublicationContent" + "?id=" + pubId + "&componentId=" + appId;
+    String zoom = SpMobil.getContentZoomLevel();
     IFrameElement iframeC = Document.get().createIFrameElement();
-    try {
-      new RequestBuilder(RequestBuilder.GET, url).sendRequest(null, new RequestCallback() {
-        @Override
-        public void onResponseReceived(final Request request, final Response response) {
-          iframeC.setSrc("javascript:;");
-          iframeC.getStyle().setBorderStyle(Style.BorderStyle.NONE);
-          iframeC.getStyle().setWidth(100, Style.Unit.PCT);
-          iframeC.getStyle().setOverflow(Style.Overflow.HIDDEN);
-          iframeC.setAttribute("onload", "javascript:(function(o){o.style.height=o.contentWindow.document.body.scrollHeight+'px';}(this));");
-          basement.appendChild(iframeC);
-          write(iframeC.getContentDocument(), response.getText());
-        }
+    iframeC.setId("htmlContent");
+    iframeC.setAttribute("scrolling", "no");
+    iframeC.setSrc(url);
 
-        @Override
-        public void onError(final Request request, final Throwable throwable) {
-          EventBus.getInstance().fireEvent(new ErrorEvent(throwable));
-        }
-      });
+    String script = "o.contentWindow.document.body.style='zoom:" + zoom + "'; ";
+    script += "var h = o.contentWindow.document.body.scrollHeight;";
+    script += "o.style.height=h+'px'; ";
 
-    } catch (RequestException e) {
-      EventBus.getInstance().fireEvent(new ErrorEvent(e));
-    }
+    iframeC.setAttribute("onload", "javascript:(function(o){" + script + "}(this));");
+    String s = "border-style: none; width: 100%; overflow: hidden;";
+    iframeC.setAttribute("style", s);
+    basement.appendChild(iframeC);
   }
 
   private static native void write(Document doc, String newHTML) /*-{
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Voice.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Voice.java
new file mode 100644
index 000000000..1801ea684
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Voice.java
@@ -0,0 +1,16 @@
+package org.silverpeas.mobile.client.common;
+
+import com.google.gwt.core.client.JavaScriptObject;
+
+public class Voice extends JavaScriptObject  {
+    protected Voice() {
+    }
+
+    public final native String getLang() /*-{ return this.lang; }-*/;
+    public final native String getName() /*-{ return this.name; }-*/;
+    public final native String getvoiceURI() /*-{ return this.voiceURI; }-*/;
+
+
+    public final native boolean getLocalService() /*-{ return this.localService; }-*/;
+
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/animation/RippleAnimation.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/animation/RippleAnimation.java
new file mode 100644
index 000000000..521122813
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/animation/RippleAnimation.java
@@ -0,0 +1,34 @@
+package org.silverpeas.mobile.client.common.animation;
+
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.dom.client.Document;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.SpanElement;
+import com.google.gwt.dom.client.Style;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.Widget;
+
+public class RippleAnimation {
+
+    public static void play(ClickEvent event, int duration) {
+        Element element = ((Widget) event.getSource()).getElement();
+        SpanElement ripple = Document.get().createSpanElement();
+        ripple.addClassName("ripple");
+        element.appendChild(ripple);
+
+        int x = event.getClientX() - element.getOffsetLeft();
+        int y = event.getClientY() - element.getOffsetTop();
+        ripple.getStyle().setLeft(x, Style.Unit.PX);
+        ripple.getStyle().setRight(y, Style.Unit.PX);
+
+        Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() {
+            @Override
+            public boolean execute() {
+                ripple.removeFromParent();
+                return false;
+            }
+        }, duration);
+    }
+
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/AbstractSpeechEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/AbstractSpeechEvent.java
new file mode 100644
index 000000000..fc2d30483
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/AbstractSpeechEvent.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.common.event.speech;
+
+import com.google.gwt.event.shared.GwtEvent;
+
+public abstract class AbstractSpeechEvent extends GwtEvent<SpeechEventHandler>{
+
+	public static Type<SpeechEventHandler> TYPE = new Type<SpeechEventHandler>();
+
+	public AbstractSpeechEvent(){
+	}
+
+	@Override
+	public Type<SpeechEventHandler> getAssociatedType() {
+		return TYPE;
+	}
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsCSS.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechErrorEvent.java
similarity index 80%
rename from mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsCSS.java
rename to mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechErrorEvent.java
index 87a021969..283125702 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsCSS.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechErrorEvent.java
@@ -22,15 +22,17 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package org.silverpeas.mobile.client.apps.documents.resources;
+package org.silverpeas.mobile.client.common.event.speech;
 
-import com.google.gwt.resources.client.CssResource;
+public class SpeechErrorEvent extends AbstractSpeechEvent {
 
-public interface DocumentsCSS extends CssResource {
-	String msword();
-	String msexcel();
-	String mspowerpoint();
-	String pdf();
-	String image();
-	String unknown();
+
+  public SpeechErrorEvent(){
+    super();
+  }
+
+  @Override
+  protected void dispatch(SpeechEventHandler handler) {
+    handler.onSpeechError(this);
+  }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechEventHandler.java
new file mode 100644
index 000000000..4b685dc10
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechEventHandler.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.common.event.speech;
+
+import com.google.gwt.event.shared.EventHandler;
+
+public interface SpeechEventHandler extends EventHandler {
+
+  void onSpeechResult(SpeechResultEvent event);
+
+  void onSpeechStart(SpeechStartEvent event);
+
+  void onSpeechStop(SpeechStopEvent event);
+
+  void onSpeechError(SpeechErrorEvent event);
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechResultEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechResultEvent.java
new file mode 100644
index 000000000..638d3199d
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechResultEvent.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.common.event.speech;
+
+public class SpeechResultEvent extends AbstractSpeechEvent {
+
+  private String result;
+
+  public SpeechResultEvent(String result){
+    super();
+    this.result = result;
+  }
+
+  @Override
+  protected void dispatch(SpeechEventHandler handler) {
+    handler.onSpeechResult(this);
+  }
+
+  public String getResult() {
+    return result;
+  }
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechStartEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechStartEvent.java
new file mode 100644
index 000000000..4ead47a59
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechStartEvent.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.common.event.speech;
+
+public class SpeechStartEvent extends AbstractSpeechEvent {
+
+
+  public SpeechStartEvent(){
+    super();
+  }
+
+  @Override
+  protected void dispatch(SpeechEventHandler handler) {
+    handler.onSpeechStart(this);
+  }
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechStopEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechStopEvent.java
new file mode 100644
index 000000000..9c0bcb27c
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechStopEvent.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.common.event.speech;
+
+public class SpeechStopEvent extends AbstractSpeechEvent {
+
+
+  public SpeechStopEvent(){
+    super();
+  }
+
+  @Override
+  protected void dispatch(SpeechEventHandler handler) {
+    handler.onSpeechStop(this);
+  }
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java
index 6de2ed037..3719cdaad 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java
@@ -35,6 +35,7 @@
 import org.silverpeas.mobile.client.components.IframePage;
 import org.silverpeas.mobile.shared.dto.ContentsTypes;
 import org.silverpeas.mobile.shared.dto.contact.ContactScope;
+import org.silverpeas.mobile.shared.dto.hyperlink.HyperLinkDTO;
 
 /**
  * @author svu
@@ -43,13 +44,41 @@ public class LinksManager {
 
   private static Boolean iosShowIframe = Boolean.parseBoolean(ResourcesManager.getParam("ios.link.open.in.iframe"));
 
-  public static void processLink(String url) {
+  public static void navigateToPermalink(String url) {
+    HyperLinkDTO dto = new HyperLinkDTO();
+    dto.setUrl(url);
+    dto.setInternalLink(true);
+    dto.setOpenNewWindow(false);
+    processLink(dto);
+  }
+
+  public static String createApplicationPermalink(String instanceId) {
+    return "/silverpeas/Component/" + instanceId;
+  }
+
+  public static String createAlbumPermalink(String instanceId, String id) {
+    return "/silverpeas/Topic/"+id+"?ComponentId=" + instanceId;
+  }
+
+  public static String createMediaPermalink(String id) {
+    return "/silverpeas/Media/"+id;
+  }
+  public static void processLink(HyperLinkDTO hyperLinkDTO) {
+    String url = hyperLinkDTO.getUrl();
     if(sameContext(url)) {
       String shortcutContentType = "";
+      String shortcutContentRole = null;
       String shortcutAppId = null;
       String shortcutContentId = url.substring(url.lastIndexOf("/") + 1);
       if (url.contains("/Publication/")) {
         shortcutContentType = ContentsTypes.Publication.name();
+      } else if (url.contains("/File/")) {
+        shortcutContentType = ContentsTypes.Attachment.name();
+        if (shortcutContentId.contains("?ContentLanguage")) {
+          String[] params = shortcutContentId.split("\\?");
+          shortcutContentId = params[0];
+          shortcutContentRole = params[1].replace("ContentLanguage=","");
+        }
       } else if (url.contains("/Media/")) {
         shortcutContentType = ContentsTypes.Media.name();
       } else if (url.contains("/Topic/")) {
@@ -91,15 +120,15 @@ public static void processLink(String url) {
         }
         EventBus.getInstance().fireEvent(new ContactsFilteredLoadEvent(type, filter));
       } else {
-        openExternalLink(url);
+        openExternalLink(url, hyperLinkDTO.getOpenNewWindow(), hyperLinkDTO.getInternalLink());
         return;
       }
 
       ShortCutRouter
-          .route(SpMobil.getUser(), shortcutAppId, shortcutContentType, shortcutContentId, null, null);
+              .route(SpMobil.getUser(), shortcutAppId, shortcutContentType, shortcutContentId, null, shortcutContentRole);
       return;
     }
-    openExternalLink(url);
+    openExternalLink(url, hyperLinkDTO.getOpenNewWindow(), hyperLinkDTO.getInternalLink());
   }
 
   private static boolean sameContext(String url) {
@@ -113,18 +142,33 @@ private static boolean sameContext(String url) {
     return ((url.startsWith("/") || url.startsWith(context)));
   }
 
-  public static void openExternalLink(String url) {
+  public static void openExternalLink(String url, boolean openNewWindow, boolean internalLink) {
     if (MobilUtils.isIOS()) {
       if (iosShowIframe) {
-        IframePage page = new IframePage(url);
-        page.setPageTitle("");
-        page.show();
+        openIframePage(url);
       } else {
-        //Window.Location.assign(url);
-        Window.open(url, "_self", "");
+        openExternalLinkStandard(url, openNewWindow, internalLink);
       }
     } else {
-      Window.open(url, "_blank", "");
+      openExternalLinkStandard(url, openNewWindow, internalLink);
+    }
+  }
+
+  public static void openIframePage(String url) {
+    IframePage page = new IframePage(url);
+    page.setPageTitle("");
+    page.show();
+  }
+
+  private static void openExternalLinkStandard(String url, boolean openNewWindow, boolean internalLink) {
+    if (internalLink) {
+      openIframePage(url);
+    } else {
+      if (openNewWindow) {
+        Window.open(url, "_blank", "");
+      } else {
+        Window.open(url, "_self", "");
+      }
     }
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/PageHistory.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/PageHistory.java
index 22481a005..a08bb282a 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/PageHistory.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/PageHistory.java
@@ -61,11 +61,10 @@ public void goTo(PageContent page) {
     hideCallback();
     if (pages.isEmpty()) firstToken = "" + page.hashCode();
     pages.push(page);
-    SpMobil.getMainPage().setContent(page);
+    SpMobil.getMainPage().setContent(page, true);
     page.setVisible(true);
     Window.scrollTo(0,0);
     browserGoto(""+page.hashCode());
-    //TODO : TODO : css3 transition
   }
 
   private void hideCallback() {
@@ -86,10 +85,9 @@ public PageContent back() {
       PageContent page = pages.pop();
       page.stop();
       page = pages.peek();
-      SpMobil.getMainPage().setContent(page);
+      SpMobil.getMainPage().setContent(page, false);
       page.setVisible(true);
       browserBack();
-      //TODO : css3 transition
       return page;
     }
   }
@@ -108,7 +106,7 @@ public void goBackToFirst() {
       PageContent currentPage = pages.pop();
       if (pages.isEmpty()) {
         pages.push(currentPage);
-        SpMobil.getMainPage().setContent(currentPage);
+        SpMobil.getMainPage().setContent(currentPage, false);
         browserGoto(""+currentPage.hashCode());
         break;
       } else {
@@ -146,7 +144,8 @@ private void back(String token) {
           if (page != null) {
             page.stop();
             page = pages.peek();
-            SpMobil.getMainPage().setContent(page);
+            SpMobil.getMainPage().setContent(page, false);
+            page.setVisible(true);
           } else {
             SpMobil.restoreMainPage();
           }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/MethodCallbackOnlineOnly.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/MethodCallbackOnlineOnly.java
index 02dc28f59..b38871867 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/MethodCallbackOnlineOnly.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/MethodCallbackOnlineOnly.java
@@ -43,12 +43,17 @@
 public abstract class MethodCallbackOnlineOnly<T> implements MethodCallback<T> {
 
   private static ApplicationMessages msg = GWT.create(ApplicationMessages.class);
+  private boolean relogin = true;
 
   public void attempt() {
     Notification.activityStart();
     NetworkHelper.updateConnexionIndicator();
   }
 
+  public void setRelogin(boolean relogin) {
+    this.relogin = relogin;
+  }
+
   @Override
   public void onFailure(final Method method, final Throwable t) {
     Notification.activityStop();
@@ -57,12 +62,14 @@ public void onFailure(final Method method, final Throwable t) {
       if (SpMobil.isSSO()) {
         Window.Location.assign(ResourcesManager.getSSOPath());
       } else {
-        SpMobil.getInstance().loadIds(new Command() {
-          @Override
-          public void execute() {
-            attempt();
-          }
-        });
+        if (relogin) {
+          SpMobil.getInstance().loadIds(new Command() {
+            @Override
+            public void execute() {
+              attempt();
+            }
+          });
+        }
       }
     } else if (method.getResponse().getStatusCode() == 404) {
       new Popin(msg.notfoundError()).show();
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/NetworkHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/NetworkHelper.java
index 21279b67b..984775028 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/NetworkHelper.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/NetworkHelper.java
@@ -49,6 +49,10 @@ public NetworkHelper() {
       watchConnectionType(this);
     }
 
+    public static String getContext() {
+        return "/silverpeas/spmobile/";
+    }
+
     private static native void watchConnectionType(NetworkHelper i) /*-{
         var connection = window.navigator.connection || window.navigator.mozConnection || null;
         if (connection != null) {
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/storage/LocalStorageHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/storage/LocalStorageHelper.java
index 0b8be9451..9274cbc81 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/storage/LocalStorageHelper.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/storage/LocalStorageHelper.java
@@ -28,6 +28,7 @@
 import com.google.gwt.storage.client.Storage;
 import com.google.web.bindery.autobean.shared.AutoBean;
 import com.google.web.bindery.autobean.shared.AutoBeanCodex;
+import org.silverpeas.mobile.client.common.resources.ResourcesManager;
 
 
 /**
@@ -36,9 +37,16 @@
 public class LocalStorageHelper {
 
   public static AutoBeanFactory factory = GWT.create(AutoBeanFactory.class);
+  public static LocalStorageHelper instance;
 
+  public static LocalStorageHelper getInstance() {
+    if (instance == null) {
+      instance = new LocalStorageHelper();
+    }
+    return instance;
+  }
 
-  public static <T> void store(String key, AutoBean<T> autobean) {
+  public <T> void store(String key, AutoBean<T> autobean) {
     Storage storage = Storage.getLocalStorageIfSupported();
 
     if (storage != null) {
@@ -51,7 +59,7 @@ public static <T> void store(String key, AutoBean<T> autobean) {
     }
   }
 
-  public static void store(String key, String data) {
+  public void store(String key, String data) {
     Storage storage = Storage.getLocalStorageIfSupported();
     if (storage != null) {
       try {
@@ -60,7 +68,7 @@ public static void store(String key, String data) {
 
     }
   }
-  public static String load(String key) {
+  public String load(String key) {
     Storage storage = Storage.getLocalStorageIfSupported();
     if (storage != null) {
       String dataItem = storage.getItem(key);
@@ -68,7 +76,7 @@ public static String load(String key) {
     }
     return  null;
   }
-  public static <T> AutoBean<T> load(String key, Class<T> beanClass) {
+  public <T> AutoBean<T> load(String key, Class<T> beanClass) {
     Storage storage = Storage.getLocalStorageIfSupported();
     if (storage != null) {
       String dataItem = storage.getItem(key);
@@ -85,15 +93,20 @@ public static <T> AutoBean<T> load(String key, Class<T> beanClass) {
     return  null;
   }
 
-  public static void clear() {
+  public void clear() {
     Storage storage = Storage.getLocalStorageIfSupported();
     if (storage != null) storage.clear();
   }
 
-  public static void remove(String key) {
+  public void remove(String key) {
     Storage storage = Storage.getLocalStorageIfSupported();
     if (storage != null) {
       storage.removeItem(key);
     }
   }
+
+  public void storeBuildDate() {
+    String  buildDate = ResourcesManager.getParam("build.date");
+    store("build.date", buildDate);
+  }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/IframePage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/IframePage.java
index 8acefe203..f27f1a095 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/IframePage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/IframePage.java
@@ -55,6 +55,7 @@ private void init() {
     frame.getElement().getStyle().setTop(SpMobil.getMainPage().getHeaderHeight(), Style.Unit.PX);
     setViewport();
     initWidget(frame);
+    setSize("100vw", "100vh");
     EventBus.getInstance().addHandler(AbstractWindowEvent.TYPE, this);
   }
 
@@ -115,4 +116,4 @@ public void onOrientationChange(final OrientationChangeEvent event) {
 
     }
   }
-}
+}
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/PopinConfirmation.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/PopinConfirmation.java
index 3140a2d23..961bf627e 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/PopinConfirmation.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/PopinConfirmation.java
@@ -24,9 +24,11 @@
 
 package org.silverpeas.mobile.client.components;
 
+import com.google.gwt.dom.client.Style;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Label;
@@ -65,9 +67,21 @@ public void onClick(final ClickEvent clickEvent) {
 
     buttons.add(no);
     content.add(buttons);
-
     setWidget(content);
-    center();
+    recenter();
+    getElement().setAttribute("style", getElement().getAttribute("style") + " height: -webkit-fill-available;");
+  }
+
+  @Override
+  public void show() {
+    super.show();
+    int popupHeight = getElement().getFirstChildElement().getOffsetHeight();
+    int popupPaddingTop = Integer.parseInt(getElement().getStyle().getPaddingTop().replace("px",""));
+    getElement().getStyle().setPaddingTop(popupPaddingTop - (popupHeight/2) , Style.Unit.PX);
+  }
+
+  public void recenter() {
+    getElement().getStyle().setPaddingTop(getElement().getAbsoluteTop() + (Window.getClientHeight() /2), Style.Unit.PX);
   }
 
   public void setYesCallback(Command callback) {
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java
index 5a20f1bd1..5b6c85457 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java
@@ -35,48 +35,54 @@
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.Anchor;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.Image;
-import com.google.gwt.user.client.ui.Widget;
-import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsSharingEvent;
+import com.google.gwt.user.client.ui.*;
 import org.silverpeas.mobile.client.apps.documents.pages.SharingPage;
 import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages;
-import org.silverpeas.mobile.client.apps.documents.resources.DocumentsResources;
-import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.apps.notifications.NotificationsApp;
 import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.common.mobil.MobilUtils;
 import org.silverpeas.mobile.client.common.navigation.UrlUtils;
 import org.silverpeas.mobile.client.common.network.NetworkHelper;
 import org.silverpeas.mobile.client.common.storage.CacheStorageHelper;
+import org.silverpeas.mobile.client.components.IframePage;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
 import org.silverpeas.mobile.shared.dto.documents.SimpleDocumentDTO;
-import org.silverpeas.mobile.shared.dto.tickets.TicketDTO;
+import org.silverpeas.mobile.shared.dto.notifications.NotificationDTO;
 
 public class Attachment extends Composite {
 
   private static AttachmentUiBinder uiBinder = GWT.create(AttachmentUiBinder.class);
   @UiField
-  Anchor link, share;
+  Anchor link, download;
   @UiField
   SpanElement size, name, description;
   @UiField
   ImageElement icon;
 
-  protected DocumentsResources ressources = null;
+  @UiField
+  HTMLPanel operations;
+
+  @UiField
+  HTML share, view, notify;
   private DocumentsMessages msg = null;
   private ApplicationMessages globalMsg = null;
   private SimpleDocumentDTO data = null;
 
   private int sharing;
+  private boolean notifiable;
+
+  public void setNotifiable(boolean notifiable) {
+    this.notifiable = notifiable;
+    if (!notifiable) {
+      notify.setVisible(false);
+    }
+  }
 
   interface AttachmentUiBinder extends UiBinder<Widget, Attachment> {}
 
   public Attachment() {
     msg = GWT.create(DocumentsMessages.class);
     globalMsg = GWT.create(ApplicationMessages.class);
-    ressources = GWT.create(DocumentsResources.class);
-    ressources.css().ensureInjected();
     initWidget(uiBinder.createAndBindUi(this));
   }
 
@@ -86,18 +92,34 @@ public void setSharing(int sharing) {
       share.setVisible(false);
     }
   }
-
   public void setAttachment(SimpleDocumentDTO data) {
     this.data = data;
     render();
   }
 
+  private boolean isViewable() {
+    boolean v = (data.getContentType().contains("msword") || data.getContentType().contains("word"));
+    v = v || data.getContentType().contains("excel");
+    v = v || data.getContentType().contains("pdf");
+    v = v || data.getContentType().contains("presentationml");
+    v = v || data.getContentType().contains("opendocument.text");
+    v = v || data.getContentType().contains("opendocument.spreadsheet");
+    v = v || data.getContentType().contains("opendocument.presentation");
+    return v;
+  }
+
   private void render() {
+    operations.getElement().setId("operations");
+    view.getElement().setId("view");
+    share.getElement().setId("share");
+    download.getElement().setId("download");
+    notify.getElement().setId("notify");
+
     Image img = null;
     String sizeValue;
-      /*if (!data..isDownloadAllowed()) {
-        link.setStylePrimaryName("not-downloadable");
-      }*/
+    if (!data.isDownloadable()) {
+      download.setVisible(false);
+    }
     if (data.getSize() < 1024 * 1024) {
       sizeValue = String.valueOf(data.getSize() / 1024);
       size.setInnerHTML(msg.sizeK(sizeValue));
@@ -116,69 +138,123 @@ private void render() {
       description.getStyle().setDisplay(Style.Display.NONE);
     }
 
-    if (data.getContentType().contains("msword")) {
-      img = new Image(ressources.msword());
-    } else if (data.getContentType().contains("sheet")) {
-      img = new Image(ressources.msexcel());
+    if (data.getContentType().contains("msword") || data.getContentType().contains("word")) {
+      icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-word.svg");
+    } else if (data.getContentType().contains("excel")) {
+      icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-excel.svg");
     } else if (data.getContentType().contains("pdf")) {
-      img = new Image(ressources.pdf());
+      icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-pdf.svg");
     } else if (data.getContentType().contains("image")) {
-      img = new Image(ressources.image());
-    } else if (data.getContentType().contains("presentation")) {
-      img = new Image(ressources.mspowerpoint());
+      icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-image.svg");
+    } else if (data.getContentType().contains("presentationml")) {
+      icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-powerpoint.svg");
+    } else if (data.getContentType().contains("zip")) {
+      icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-zip.svg");
+    } else if (data.getContentType().contains("opendocument.text")) {
+      icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-writer.svg");
+    } else if (data.getContentType().contains("opendocument.spreadsheet")) {
+      icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-calc.svg");
+    } else if (data.getContentType().contains("opendocument.presentation")) {
+      icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-presentation.svg");
     } else {
-      img = new Image(ressources.unknown());
+      icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-unknown.svg");
     }
-    icon.getParentElement().replaceChild(img.getElement(), icon);
-
 
     // link generation
     try {
       String url = UrlUtils.getAttachedFileLocation();
-      url += "componentId/";
-      url += data.getInstanceId();
-      url += "/attachmentId/";
-      url += data.getId();
-      url += "/lang/";
-      url += data.getLang();
-      url += "/name/";
-      url += data.getFileName();
-
-      link.setHref(url);
-      if (MobilUtils.isIOS()) {
-        //link.setTarget("_blank");
-        link.addClickHandler(new ClickHandler() {
-          @Override
-          public void onClick(final ClickEvent clickEvent) {
-            String u = ((Anchor) clickEvent.getSource()).getHref();
-            if (NetworkHelper.isOnline()) {
-              CacheStorageHelper.store(u);
-            }
-            Window.open(u, "_blank", "fullscreen=yes");
-          }
-        });
+      if (data.isDownloadable()) {
+        url += "componentId/";
+        url += data.getInstanceId();
+        url += "/attachmentId/";
+        url += data.getId();
+        url += "/lang/";
+        url += data.getLang();
+        url += "/name/";
+        url += data.getFileName();
       } else {
-        link.setTarget("_self");
-        link.getElement().setAttribute("download", data.getFileName());
-        link.addClickHandler(new ClickHandler() {
-          @Override
-          public void onClick(final ClickEvent clickEvent) {
-            if (NetworkHelper.isOnline()) {
-              CacheStorageHelper.store(((Anchor) clickEvent.getSource()).getHref());
-            }
-          }
-        });
+        url = "#";
       }
+      download.setHref(url);
+      link.addClickHandler(new ClickHandler() {
+        @Override
+        public void onClick(ClickEvent clickEvent) {
+          toogleOperations();
+        }
+      });
+
+      if (!isViewable()) view.setVisible(false);
+
     } catch (JavaScriptException e) {
       Notification.alert(e.getMessage());
     }
 
   }
+
+  private void toogleOperations() {
+    if (operations.getStylePrimaryName().equalsIgnoreCase("ops-closed")) {
+      operations.setStylePrimaryName("ops-open");
+      link.setStylePrimaryName("expand-less");
+    } else {
+      operations.setStylePrimaryName("ops-closed");
+      link.setStylePrimaryName("expand-more");
+    }
+  }
+
+  private boolean isVisibleOperations() {
+    return operations.getStylePrimaryName().equals("ops-open");
+  }
+
+  private void viewDocument() {
+    AttachmentsManager.viewDocument(data.getId(), data.getLang());
+  }
+
   @UiHandler("share")
   protected void share(ClickEvent event) {
-    SharingPage page = new SharingPage();
-    page.setData("Attachment", data.getSpId(), data.getInstanceId());
-    page.show();
+    if (isVisibleOperations()) {
+      SharingPage page = new SharingPage();
+      page.setData("Attachment", data.getSpId(), data.getInstanceId());
+      page.show();
+    }
+  }
 
+  @UiHandler("download")
+  protected void download(ClickEvent event) {
+    if (isVisibleOperations()) {
+      if (MobilUtils.isIOS()) {
+        if (data.isDownloadable()) {
+          String u = link.getHref();
+          if (NetworkHelper.isOnline()) {
+            CacheStorageHelper.store(u);
+          }
+          Window.open(u, "_blank", "fullscreen=yes");
+        } else {
+          viewDocument();
+        }
+      } else {
+        if (data.isDownloadable()) {
+          link.setTarget("_self");
+          link.getElement().setAttribute("download", data.getFileName());
+          if (NetworkHelper.isOnline()) {
+            CacheStorageHelper.store(((Anchor) event.getSource()).getHref());
+          }
+        } else {
+          viewDocument();
+        }
+      }
+    }
+  }
+
+  @UiHandler("view")
+  protected void view(ClickEvent event) {
+    if (isVisibleOperations()) viewDocument();
+  }
+
+  @UiHandler("notify")
+  protected void notify(ClickEvent event) {
+    if (isVisibleOperations()) {
+      NotificationsApp app = new NotificationsApp(data.getInstanceId(), data.getId(), NotificationDTO.TYPE_DOCUMENT, data.getFileName(), data.getFileName());
+      app.start();
+    }
   }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml
index e1c48499a..6a100a3e7 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml
@@ -26,13 +26,21 @@
 <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
              xmlns:g="urn:import:com.google.gwt.user.client.ui">
   <g:HTMLPanel tag="li">
-    <g:Anchor ui:field="link" styleName="downloadable">
-      <img ui:field="icon" src=""/>
-      <span ui:field="name"></span><span ui:field="size" class="weight"></span>
-      <span ui:field="description"></span>
+    <g:Anchor ui:field="link" styleName="expand-more" href="javascript:;">
+      <div>
+        <img ui:field="icon" src=""/>
+      </div>
+      <div>
+        <span ui:field="name"></span><span ui:field="size" class="weight"></span>
+        <span ui:field="description"></span>
+      </div>
     </g:Anchor>
-    <g:Anchor ui:field="share" styleName="share">
+    <g:HTMLPanel ui:field="operations" stylePrimaryName="ops-closed">
+      <g:HTML ui:field="notify"></g:HTML>
+      <g:HTML ui:field="share"></g:HTML>
+      <g:Anchor ui:field="download"></g:Anchor>
+      <g:HTML ui:field="view"></g:HTML>
+    </g:HTMLPanel>
 
-    </g:Anchor>
   </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/AttachmentsManager.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/AttachmentsManager.java
index ab5a9d7eb..6cf2c5646 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/AttachmentsManager.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/AttachmentsManager.java
@@ -32,12 +32,19 @@
 import org.silverpeas.mobile.client.common.Notification;
 import org.silverpeas.mobile.client.common.mobil.MobilUtils;
 import org.silverpeas.mobile.client.common.navigation.UrlUtils;
+import org.silverpeas.mobile.client.components.IframePage;
 
 /**
  * @author svu
  */
 public class AttachmentsManager {
 
+  public static void viewDocument(String id, String lang) {
+    IframePage page = new IframePage("/silverpeas/services/media/viewer/embed/pdf?documentId=" + id + "" +
+            "&documentType=attachment&language=" + lang + "&embedPlayer=true");
+    page.show();
+  }
+
   public static void generateLink(String id, String instanceId, String lang, String title, Anchor link) {
     try {
       String url = UrlUtils.getAttachedFileLocation();
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionItem.java
index f5c78f02a..41e30193f 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionItem.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionItem.java
@@ -24,6 +24,7 @@
 
 package org.silverpeas.mobile.client.components.base;
 
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.Composite;
 
 /**
@@ -32,6 +33,7 @@
 public class ActionItem extends Composite {
 
   private String id;
+  private Command callback;
 
 
   public String getId() {
@@ -41,4 +43,12 @@ public String getId() {
   public void setId(final String id) {
     this.id = id;
   }
+
+  public void setCallback(Command callback) {
+    this.callback = callback;
+  }
+
+  protected Command getCallback() {
+    return this.callback;
+  }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.java
new file mode 100644
index 000000000..4e775e429
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.components.base;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Style;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.HTMLPanel;
+import com.google.gwt.user.client.ui.Widget;
+import org.silverpeas.mobile.client.components.UnorderedList;
+
+/**
+ * @author: svu
+ */
+public class ActionsList extends Composite {
+
+    interface ActionsMenuUiBinder extends UiBinder<Widget, ActionsList> {
+    }
+
+    private static ActionsMenuUiBinder uiBinder = GWT.create(ActionsMenuUiBinder.class);
+
+    @UiField HTMLPanel container;
+    @UiField
+    UnorderedList listActions;
+
+    public ActionsList() {
+        initWidget(uiBinder.createAndBindUi(this));
+        listActions.setId("actionList-bloc");
+        container.getElement().setId("actionsList");
+        container.getElement().addClassName("empty");
+    }
+    public boolean isEmpty() {
+        return (listActions.getWidgetCount() == 0);
+    }
+
+    public void addAction(ActionItem action) {
+        for (int i = 0; i < listActions.getWidgetCount(); i++) {
+          ActionItem act = (ActionItem) listActions.getWidget(i);
+          if (act.getId().equals(action.getId())) return;
+        }
+        listActions.add(action);
+        container.getElement().removeClassName("empty");
+    }
+
+    public void clear() {
+        listActions.clear();
+        container.getElement().addClassName("empty");
+    }
+
+    public void removeAction(String id, boolean silently) {
+      for (int i = 0; i < listActions.getWidgetCount(); i++) {
+        ActionItem act = (ActionItem) listActions.getWidget(i);
+        if (act.getId().equals(id)) {
+          listActions.remove(act);
+          break;
+        }
+      }
+      if (isEmpty()) {
+          container.getElement().addClassName("empty");
+      }
+    }
+}
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.ui.xml
new file mode 100644
index 000000000..68e24eaab
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.ui.xml
@@ -0,0 +1,32 @@
+<!--
+  ~ Copyright (C) 2000 - 2022 Silverpeas
+  ~
+  ~ This program is free software: you can redistribute it and/or modify
+  ~ it under the terms of the GNU Affero General Public License as
+  ~ published by the Free Software Foundation, either version 3 of the
+  ~ License, or (at your option) any later version.
+  ~
+  ~ As a special exception to the terms and conditions of version 3.0 of
+  ~ the GPL, you may redistribute this Program in connection with Free/Libre
+  ~ Open Source Software ("FLOSS") applications as described in Silverpeas's
+  ~ FLOSS exception.  You should have received a copy of the text describing
+  ~ the FLOSS exception, and it is also available here:
+  ~ "https://www.silverpeas.org/legal/floss_exception.html"
+  ~
+  ~ This program is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  ~ GNU Affero General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU Affero General Public License
+  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  -->
+
+<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
+             xmlns:g='urn:import:com.google.gwt.user.client.ui'
+             xmlns:components="urn:import:org.silverpeas.mobile.client.components">
+    <g:HTMLPanel ui:field="container">
+        <components:UnorderedList ui:field="listActions" />
+    </g:HTMLPanel>
+
+</ui:UiBinder>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java
index e3c755e2c..cdbcfacd4 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java
@@ -25,7 +25,7 @@
 package org.silverpeas.mobile.client.components.base;
 
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.dom.client.Style;
+import com.google.gwt.dom.client.Element;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
@@ -34,6 +34,7 @@
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.HTMLPanel;
 import com.google.gwt.user.client.ui.Widget;
+import org.silverpeas.mobile.client.SpMobil;
 import org.silverpeas.mobile.client.components.UnorderedList;
 
 /**
@@ -46,6 +47,7 @@ interface ActionsMenuUiBinder extends UiBinder<Widget, ActionsMenu> {
 
     private static ActionsMenuUiBinder uiBinder = GWT.create(ActionsMenuUiBinder.class);
 
+    private ActionsList actionsShortcuts;
     @UiField HTMLPanel container;
     @UiField
     UnorderedList listActions;
@@ -56,15 +58,39 @@ public ActionsMenu() {
         listActions.setId("action-bloc");
         actions.getElement().setId("action-button");
         container.getElement().setId("actions");
-        container.getElement().getStyle().setDisplay(Style.Display.NONE);
+        listActions.getElement().addClassName("closed-qvf-menu");
+    }
+
+    public void setActionsShortcuts(ActionsList actionsShortcuts) {
+        this.actionsShortcuts = actionsShortcuts;
+        hide();
     }
 
     @UiHandler("actions")
     protected void showActions(ClickEvent event) {
-        if (listActions.getStyleDisplay().equalsIgnoreCase("none") || listActions.getStyleDisplay().isEmpty()) {
-            listActions.setStyledisplay(Style.Display.BLOCK);
+        if (listActions.getElement().getClassName().equals("closed-qvf-menu")) {
+            listActions.getElement().addClassName("open-qvf-menu");
+            listActions.getElement().removeClassName("closed-qvf-menu");
+            enableAllItem(true);
         } else {
-            listActions.setStyledisplay(Style.Display.NONE);
+            close();
+        }
+    }
+
+    public static void close(Element action) {
+        SpMobil.getMainPage().getHeader().actionsMenu.close();
+    }
+
+    public void close() {
+        listActions.getElement().removeClassName("open-qvf-menu");
+        listActions.getElement().addClassName("closed-qvf-menu");
+        enableAllItem(false);
+    }
+
+    private void enableAllItem(boolean enable) {
+        for (int i = 0; i < listActions.getCount(); i++) {
+            ActionItem item = (ActionItem) listActions.getWidget(i);
+            item.setVisible(enable);
         }
     }
 
@@ -78,7 +104,13 @@ public void addAction(ActionItem action) {
           if (act.getId().equals(action.getId())) return;
         }
         listActions.add(action);
-        container.getElement().getStyle().setDisplay(Style.Display.BLOCK);
+        action.setVisible(false);
+        show();
+    }
+
+    public void clear() {
+        listActions.clear();
+        hide();
     }
 
     public void removeAction(String id, boolean silently) {
@@ -91,7 +123,17 @@ public void removeAction(String id, boolean silently) {
         }
       }
       if (isEmpty()) {
-        container.getElement().getStyle().setDisplay(Style.Display.NONE);
+          hide();
       }
     }
+
+    private void show() {
+        container.getElement().removeClassName("empty");
+        this.actionsShortcuts.getElement().removeClassName("menu-empty");
+    }
+
+    private void hide() {
+        container.getElement().addClassName("empty");
+        this.actionsShortcuts.getElement().addClassName("menu-empty");
+    }
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java
index c65fdaf27..d4f82c379 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java
@@ -25,7 +25,10 @@
 package org.silverpeas.mobile.client.components.base;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.dom.client.AnchorElement;
 import com.google.gwt.dom.client.SpanElement;
+import com.google.gwt.dom.client.Style;
 import com.google.gwt.dom.client.Style.Unit;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.KeyCodes;
@@ -45,6 +48,7 @@
 import org.silverpeas.mobile.client.apps.navigation.events.app.external
     .NavigationAppInstanceChangedEvent;
 import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationShowContentEvent;
+import org.silverpeas.mobile.client.apps.navigation.pages.widgets.NavigationItem;
 import org.silverpeas.mobile.client.apps.profile.ProfileApp;
 import org.silverpeas.mobile.client.apps.profile.events.ProfileEvents;
 import org.silverpeas.mobile.client.common.AuthentificationManager;
@@ -52,6 +56,7 @@
 import org.silverpeas.mobile.client.common.app.App;
 import org.silverpeas.mobile.client.common.navigation.PageHistory;
 import org.silverpeas.mobile.client.common.resources.ResourcesManager;
+import org.silverpeas.mobile.client.components.UnorderedList;
 import org.silverpeas.mobile.client.components.base.events.page.AbstractPageEvent;
 import org.silverpeas.mobile.client.components.base.events.page.DataLoadedEvent;
 import org.silverpeas.mobile.client.components.base.events.page.LoadingDataFinishEvent;
@@ -67,21 +72,35 @@
 import org.silverpeas.mobile.shared.dto.StatusDTO;
 import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO;
 import org.silverpeas.mobile.shared.dto.navigation.Apps;
+import org.silverpeas.mobile.shared.helpers.ApplicationsHelper;
+
+import java.util.List;
 
 public class NavigationMenu extends Composite implements PageEventHandler {
 
   private static NavigationMenuUiBinder uiBinder = GWT.create(NavigationMenuUiBinder.class);
 
   @UiField HTMLPanel container, user;
-  @UiField Anchor home, disconnect, updateStatus, searchButton, help, config, calendar, notifications, shares;
-  @UiField SpanElement status;
+  @UiField Anchor home, disconnect, updateStatus, help, config, calendar, notifications, shares;
+  @UiField SpanElement status, iconHelp, iconSettings, iconHome, iconLogout, iconUserCalendar, iconInbox, iconShareBox;
   @UiField TextBox search;
   @UiField AvatarUpload avatar;
 
+  @UiField
+  AnchorElement searchButton;
+
   @UiField(provided = true) protected ApplicationMessages msg = null;
 
+  @UiField UnorderedList listApplications;
+
+  private boolean personalAppsInitialized = false;
+
   private ApplicationResources resources = GWT.create(ApplicationResources.class);
 
+  public boolean isPersonalAppsInitialized() {
+    return personalAppsInitialized;
+  }
+
   interface NavigationMenuUiBinder extends UiBinder<Widget, NavigationMenu> {
   }
 
@@ -89,7 +108,7 @@ public NavigationMenu() {
     msg = GWT.create(ApplicationMessages.class);
     initWidget(uiBinder.createAndBindUi(this));
     container.getElement().setId("silverpeas-navmenu-panel");
-    container.getElement().getStyle().setHeight(Window.getClientHeight(), Unit.PX);
+    listApplications.getElement().setId("personals-apps");
     user.getElement().setId("user");
     String url = ResourcesManager.getParam("help.url");
     if (url != null && !url.isEmpty()) {
@@ -101,9 +120,33 @@ public NavigationMenu() {
         help.setTarget("_blank");
       }
     }
+    iconSettings.setInnerHTML(resources.settings().getText());
+    iconHelp.setInnerHTML(resources.help().getText());
+    iconLogout.setInnerHTML(resources.logout().getText());
+    iconHome.setInnerHTML(resources.home().getText());
+    iconUserCalendar.setInnerHTML(resources.usercalendar().getText());
+    iconInbox.setInnerHTML(resources.inbox().getText());
+    iconShareBox.setInnerHTML(resources.sharebox().getText());
+    searchButton.setInnerHTML(resources.search().getText());
     EventBus.getInstance().addHandler(AbstractPageEvent.TYPE, this);
   }
 
+  public void setPersonalApps(List<ApplicationInstanceDTO> applicationInstanceDTOS) {
+    listApplications.clear();
+    for (ApplicationInstanceDTO app : applicationInstanceDTOS) {
+      if (ApplicationsHelper.isSupportedApp(app)) {
+        if (app.getType().equals(Apps.kmelia.name())) {
+          app.setLabel(msg.myDocuments());
+        }
+        NavigationItem item = new NavigationItem();
+        item.getElement().getFirstChildElement().removeClassName("icon-app");
+        item.setData(app);
+        listApplications.add(item);
+      }
+    }
+    personalAppsInitialized = true;
+  }
+
   @Override
   public void receiveEvent(PageEvent event) {
     if (event.getSender() instanceof ProfileApp && event.getName().equals(ProfileEvents.POSTED.toString())) {
@@ -128,8 +171,10 @@ public void loadedMoreDataEvent(final MoreDataLoadedEvent moreDataLoadedEvent) {
 
   public void toogleMenu() {
     if (container.getStyleName().contains("ui-panel-close")) {
+      container.getElement().getStyle().setVisibility(Style.Visibility.VISIBLE);
       container.removeStyleName("ui-panel-close");
       container.addStyleName("ui-panel-open");
+
     } else {
       closeMenu();
     }
@@ -138,6 +183,14 @@ public void toogleMenu() {
   public void closeMenu() {
     container.removeStyleName("ui-panel-open");
     container.addStyleName("ui-panel-close");
+    Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() {
+      @Override
+      public boolean execute() {
+        container.getElement().getStyle().setVisibility(Style.Visibility.HIDDEN);
+        return false;
+      }
+    }, 400);
+
   }
 
   public void resetSearchField() {
@@ -152,19 +205,20 @@ protected void search(KeyDownEvent event) {
     }
   }
 
-  @UiHandler("searchButton")
+  /*@UiHandler("searchButton")
   protected void searchIos(ClickEvent event) {
     SpMobil.search(search.getText());
-  }
+  }*/
 
   @UiHandler("home")
   protected void goHome(ClickEvent event) {
     goHome();
-    closeMenu();
+    SpMobil.getMainPage().closeMenu();
   }
 
   static void goHome() {
     String url = Window.Location.getHref();
+    SpMobil.getMainPage().getHeader().clearActions();
     if (url.contains("shortcutContentType")) {
       String homeUrl = url.substring(0,url.indexOf("?"));
       Window.Location.replace(homeUrl);
@@ -178,7 +232,7 @@ protected void goSharesBox(ClickEvent event) {
     ContentDTO content = new ContentDTO();
     content.setType(ContentsTypes.SharesBox.toString());
     EventBus.getInstance().fireEvent(new NavigationShowContentEvent(content));
-    closeMenu();
+    SpMobil.getMainPage().closeMenu();
   }
 
   @UiHandler("notifications")
@@ -186,41 +240,42 @@ protected void goNotificationsBox(ClickEvent event) {
     ContentDTO content = new ContentDTO();
     content.setType(ContentsTypes.NotificationsBox.toString());
     EventBus.getInstance().fireEvent(new NavigationShowContentEvent(content));
-    closeMenu();
+    SpMobil.getMainPage().closeMenu();
   }
 
   @UiHandler("help")
   protected void goHelp(ClickEvent event) {
-    closeMenu();
+    SpMobil.getMainPage().closeMenu();
   }
 
   @UiHandler("config")
   protected void goConfig(ClickEvent event) {
     App app = new ConfigApp();
     app.start();
-    closeMenu();
+    SpMobil.getMainPage().closeMenu();
   }
 
   @UiHandler("updateStatus")
   protected void updateStatus(ClickEvent event) {
     App app = new ProfileApp();
     app.start();
-    closeMenu();
+    SpMobil.getMainPage().closeMenu();
   }
 
   @UiHandler("disconnect")
   protected void disconnect(ClickEvent event) {
-    closeMenu();
+    SpMobil.getMainPage().closeMenu();
     AuthentificationManager.getInstance().logout();
   }
 
   @UiHandler("calendar")
   protected void calendar(ClickEvent event) {
     ApplicationInstanceDTO app = new ApplicationInstanceDTO();
+    app.setPersonnal(true);
     app.setId("userCalendar" + SpMobil.getUser().getId() + "_PCI");
     app.setType(Apps.userCalendar.name());
     EventBus.getInstance().fireEvent(new NavigationAppInstanceChangedEvent(app));
-    closeMenu();
+    SpMobil.getMainPage().closeMenu();
   }
 
   public void setUser(DetailUserDTO currentUser) {
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml
index 051e8b3a5..062d07205 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml
@@ -23,7 +23,9 @@
   -->
 
 <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
-<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:w="urn:import:org.silverpeas.mobile.client.components.base.widgets">
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"
+             xmlns:components="urn:import:org.silverpeas.mobile.client.components"
+             xmlns:w="urn:import:org.silverpeas.mobile.client.components.base.widgets">
 
   <ui:with field='msg' type='org.silverpeas.mobile.client.resources.ApplicationMessages'/>
 
@@ -37,17 +39,43 @@
 
       <div id="menu-search">
         <g:TextBox ui:field="search" styleName="searchBox"/>
-        <g:Anchor ui:field="searchButton" styleName="searchButton" text="{msg.search}"/>
+        <a ui:field="searchButton" class="searchButton"></a>
       </div>
 
       <ul id="navmenu-panel">
-        <li id="menu-home"><g:Anchor ui:field="home" styleName="ui-link" text="{msg.home}"/></li>
-        <li id="menu-usercalendar"><g:Anchor ui:field="calendar" styleName="ui-link" text="{msg.usercalendar}"/></li>
-        <li id="menu-notificationsbox"><g:Anchor ui:field="notifications" styleName="ui-link" text="{msg.notifications}"/></li>
-        <li id="menu-sharesbox"><g:Anchor ui:field="shares" styleName="ui-link" text="{msg.shares}"/></li>
-        <li id="menu-parameter"><g:Anchor ui:field="config" styleName="ui-link" text="{msg.config}"/></li>
-        <li id="menu-help"><g:Anchor ui:field="help" styleName="ui-link" text="{msg.help}"/></li>
-        <li id="menu-logout"><g:Anchor ui:field="disconnect" styleName="ui-link" text="{msg.disconnect}"/></li>
+        <li id="menu-usercalendar">
+          <span ui:field="iconUserCalendar"></span>
+          <g:Anchor ui:field="calendar" styleName="ui-link" text="{msg.usercalendar}"/>
+        </li>
+        <li id="menu-notificationsbox">
+          <span ui:field="iconInbox"></span>
+          <g:Anchor ui:field="notifications" styleName="ui-link" text="{msg.notifications}"/>
+        </li>
+        <li id="menu-sharesbox">
+          <span ui:field="iconShareBox"></span>
+          <g:Anchor ui:field="shares" styleName="ui-link" text="{msg.shares}"/>
+        </li>
+      </ul>
+
+      <components:UnorderedList ui:field="listApplications" />
+
+      <ul id="actions-menu">
+        <li id="menu-home">
+          <span ui:field="iconHome"></span>
+          <g:Anchor ui:field="home" styleName="ui-link" text="{msg.home}"/>
+        </li>
+        <li id="menu-parameter">
+          <span ui:field="iconSettings"></span>
+          <g:Anchor ui:field="config" styleName="ui-link" text="{msg.config}"/>
+        </li>
+        <li id="menu-help">
+          <span ui:field="iconHelp"></span>
+          <g:Anchor ui:field="help" styleName="ui-link" text="{msg.help}"/>
+        </li>
+        <li id="menu-logout">
+          <span ui:field="iconLogout"></span>
+          <g:Anchor ui:field="disconnect" styleName="ui-link" text="{msg.disconnect}"/>
+        </li>
       </ul>
     </div>
   </g:HTMLPanel>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java
index c6f6312ca..166421d35 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java
@@ -25,6 +25,7 @@
 package org.silverpeas.mobile.client.components.base;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.dom.client.DivElement;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.uibinder.client.UiBinder;
@@ -41,6 +42,9 @@
 import org.silverpeas.mobile.client.components.homepage.HomePageNewsSlider;
 import org.silverpeas.mobile.client.pages.main.HomePage;
 import org.silverpeas.mobile.shared.dto.DetailUserDTO;
+import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO;
+
+import java.util.List;
 
 public class Page extends Composite implements Window.ScrollHandler {
 
@@ -49,7 +53,7 @@ public class Page extends Composite implements Window.ScrollHandler {
   interface PageUiBinder extends UiBinder<Widget, Page> {
   }
 
-  @UiField protected SimplePanel contentPlace;
+  @UiField protected SimplePanel contentPlace, contentPlaceTmp;
   @UiField protected PageHeader header;
   @UiField protected NavigationMenu menu;
   @UiField protected DivElement contentContainer;
@@ -64,8 +68,34 @@ public Page() {
     container.getElement().setId("home");
   }
 
-  public void setContent(PageContent content) {
+  public DivElement getContentContainer() {
+    return contentContainer;
+  }
+
+  public void setContent(PageContent content, boolean newContent) {
+    if (this.content != null && this.content.hashCode() == content.hashCode()) return;
+    String transitionClass;
+    if (newContent) {
+      transitionClass = "opening-page";
+    } else {
+      transitionClass = "closing-page";
+    }
+
+    getContentContainer().addClassName(transitionClass);
+    contentPlaceTmp.setWidget(content);
+    Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() {
+      @Override
+      public boolean execute() {
+        displayContent(content);
+        getContentContainer().removeClassName(transitionClass);
+        return false;
+      }
+    }, 300);
+  }
+
+  private void displayContent(PageContent content) {
     this.content = content;
+    //contentPlaceTmp.remove(content);
     contentPlace.setWidget(content);
     header.setPageTitle(content.getPageTitle());
     header.setVisibleBackButton(PageHistory.getInstance().size() > 1);
@@ -83,6 +113,7 @@ public void toogleMenu() {
 
   public void closeMenu() {
     menu.closeMenu();
+    header.closeMenuButton();
   }
 
   public void setUser(DetailUserDTO user) {
@@ -113,6 +144,9 @@ public int getHeaderHeight() {
   }
   public int getFooterHeight() { return footer.getOffsetHeight() ; }
 
+  public PageHeader getHeader() {
+    return header;
+  }
   public void showOfflineIndicator() {
     header.showOfflineIndicator();
   }
@@ -121,4 +155,12 @@ public void hideOfflineIndicator() {
     header.hideOfflineIndicator();
   }
 
+  public void setPersonalApps(List<ApplicationInstanceDTO> applicationInstanceDTOS) {
+    menu.setPersonalApps(applicationInstanceDTOS);
+  }
+
+  public boolean isPersonalAppsInitialized() {
+    return menu.isPersonalAppsInitialized();
+  }
+
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.ui.xml
index 081ab2c00..4e59d9894 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.ui.xml
@@ -41,6 +41,7 @@
 
       <!-- Content -->
       <g:SimplePanel ui:field="contentPlace"/>
+      <g:SimplePanel ui:field="contentPlaceTmp" visible="false"/>
 
     </div>
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java
index b43e4c1e5..39a336178 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java
@@ -49,13 +49,22 @@
 import org.silverpeas.mobile.client.components.base.events.page.PageEvent;
 import org.silverpeas.mobile.client.components.base.events.page.PageEventHandler;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public abstract class PageContent extends Composite implements View, NativePreviewHandler, PageEventHandler {
 
   private App app;
   protected boolean clicked = false;
+
+  private boolean selectionMode = false;
   protected String pageTitle;
   private HandlerRegistration registration;
   private SwipeRecognizer swipeRecognizer;
+  private List<ActionItem> actionsMenu = new ArrayList<>();
+  private List<ActionItem> actionsShortcuts = new ArrayList<>();
+
+  private int changeSelectionNumber = 0;
 
   public PageContent() {
     super();
@@ -87,6 +96,31 @@ public void show() {
     PageHistory.getInstance().goTo(this);
   }
 
+  public void addActionShortcut(ActionItem action) {
+    actionsShortcuts.add(action);
+    SpMobil.getMainPage().getHeader().addActionShortcut(action);
+  }
+
+  public void removeActionShortcut(ActionItem action) {
+    actionsShortcuts.remove(action);
+    SpMobil.getMainPage().getHeader().removeActionShortcut(action);
+  }
+
+  public void clearActions() {
+    actionsShortcuts.clear();
+    SpMobil.getMainPage().getHeader().clearActions();
+  }
+
+  public void addActionMenu(ActionItem action) {
+    actionsMenu.add(action);
+    SpMobil.getMainPage().getHeader().addActionMenu(action);
+  }
+
+  public void removeActionMenu(ActionItem action) {
+    actionsMenu.remove(action);
+    SpMobil.getMainPage().getHeader().removeActionMenu(action);
+  }
+
   public boolean isVisible() {
     return PageHistory.getInstance().isVisible(this);
   }
@@ -114,6 +148,18 @@ public boolean execute() {
     }
   }
 
+  @Override
+  public void setVisible(boolean visible) {
+    super.setVisible(visible);
+    SpMobil.getMainPage().getHeader().closeMenuQVF();
+    SpMobil.getMainPage().getHeader().clearActions();
+    for (ActionItem action : actionsShortcuts) {
+      SpMobil.getMainPage().getHeader().addActionShortcut(action);
+    }
+    for (ActionItem action : actionsMenu) {
+      SpMobil.getMainPage().getHeader().addActionMenu(action);
+    }
+  }
   @Override
   public void stop() {
     EventBus.getInstance().removeHandler(AbstractPageEvent.TYPE, this);
@@ -157,9 +203,27 @@ public void finishLoadingData(final LoadingDataFinishEvent loadingDataFinishEven
   public void loadedDataEvent(final DataLoadedEvent dataLoadedEvent) {
     // to be override if necessary
   }
-
   @Override
   public void loadedMoreDataEvent(final MoreDataLoadedEvent moreDataLoadedEvent) {
     // to be override if necessary
   }
+
+  public boolean isSelectionMode() {
+    return selectionMode;
+  }
+  public void setSelectionMode(boolean selectionMode) {
+    this.selectionMode = selectionMode;
+    resetSelectionNumber();
+  }
+
+  public void changeSelectionNumber(int i) {
+    changeSelectionNumber = changeSelectionNumber + i;
+    if (changeSelectionNumber == 0) {
+      setSelectionMode(false);
+    }
+  }
+
+  private void resetSelectionNumber() {
+    changeSelectionNumber = 0;
+  }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.java
index 29d839ec2..a630ce626 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.java
@@ -36,7 +36,10 @@
 import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationShowContentEvent;
 import org.silverpeas.mobile.client.apps.profile.ProfileApp;
 import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.common.Html5Utils;
+import org.silverpeas.mobile.client.common.animation.RippleAnimation;
 import org.silverpeas.mobile.client.common.app.App;
+import org.silverpeas.mobile.client.common.navigation.PageHistory;
 import org.silverpeas.mobile.client.common.resources.ResourcesManager;
 import org.silverpeas.mobile.client.resources.ApplicationMessages;
 import org.silverpeas.mobile.client.resources.ApplicationResources;
@@ -64,6 +67,13 @@ public PageFooter() {
     ressources.css().ensureInjected();
 
     tchat.setVisible(Boolean.parseBoolean(ResourcesManager.getParam("chat.enable")));
+
+    browse.setHTML(ressources.homeShortcut().getText());
+    favoris.setHTML(ressources.favoritesShortcut().getText());
+    tasks.setHTML(ressources.tasksShortcut().getText());
+    tchat.setHTML(ressources.chatShortcut().getText());
+    contact.setHTML(ressources.contactsShortcut().getText());
+
     addCustomButtons();
   }
 
@@ -83,27 +93,34 @@ private void addCustomButtons() {
   @UiHandler("browse")
   protected void browse(ClickEvent event) {
     NavigationMenu.goHome();
+    RippleAnimation.play(event, 150);
   }
 
   @UiHandler("favoris")
   protected void goFavoris(ClickEvent event) {
+    PageHistory.getInstance().goBackToFirst();
     ContentDTO content = new ContentDTO();
     content.setType(ContentsTypes.Favortis.toString());
     EventBus.getInstance().fireEvent(new NavigationShowContentEvent(content));
+    RippleAnimation.play(event, 150);
   }
 
   @UiHandler("tasks")
   protected void goTasks(ClickEvent event) {
+    PageHistory.getInstance().goBackToFirst();
     ContentDTO content = new ContentDTO();
     content.setType(ContentsTypes.Tasks.toString());
     EventBus.getInstance().fireEvent(new NavigationShowContentEvent(content));
+    RippleAnimation.play(event, 150);
   }
 
   @UiHandler("contact")
-  void contacts(ClickEvent e) {
+  void contacts(ClickEvent event) {
+    PageHistory.getInstance().goBackToFirst();
     ContentDTO content = new ContentDTO();
     content.setType(ContentsTypes.Contacts.toString());
     EventBus.getInstance().fireEvent(new NavigationShowContentEvent(content));
+    RippleAnimation.play(event, 150);
   }
 
   public int getHeight() {
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.ui.xml
index 46adab722..3908be5a8 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.ui.xml
@@ -28,10 +28,10 @@
   <ui:with field='msg' type='org.silverpeas.mobile.client.resources.ApplicationMessages'/>
 
   <g:HTMLPanel ui:field="footer">
-    <g:Anchor stylePrimaryName="btn-list-navigation" ui:field="browse"><ui:safehtml from="{msg.browser}"/></g:Anchor>
-    <g:Anchor stylePrimaryName="btn-list-favoris" ui:field="favoris"><ui:safehtml from="{msg.appFavortis}"/></g:Anchor>
-    <g:Anchor stylePrimaryName="btn-find-contact" ui:field="contact"><ui:safehtml from="{msg.appContact}"/></g:Anchor>
-    <g:Anchor stylePrimaryName="btn-list-task" ui:field="tasks">{msg.tasks}/></g:Anchor>
-    <g:Anchor stylePrimaryName="btn-update-tchat" ui:field="tchat" href="chat.jsp" target="_blank"><ui:safehtml from="{msg.tchat}"/></g:Anchor>
+    <g:Anchor stylePrimaryName="btn-list-navigation" ui:field="browse"></g:Anchor>
+    <g:Anchor stylePrimaryName="btn-list-favoris" ui:field="favoris"></g:Anchor>
+    <g:Anchor stylePrimaryName="btn-find-contact" ui:field="contact"></g:Anchor>
+    <g:Anchor stylePrimaryName="btn-list-task" ui:field="tasks"></g:Anchor>
+    <g:Anchor stylePrimaryName="btn-update-tchat" ui:field="tchat" href="chat.jsp" target="_blank"></g:Anchor>
   </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java
index 8a1f7cb77..6dadcb6d1 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java
@@ -30,10 +30,7 @@
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
-import com.google.gwt.user.client.ui.Anchor;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.HTMLPanel;
-import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.*;
 import org.silverpeas.mobile.client.SpMobil;
 import org.silverpeas.mobile.client.common.navigation.PageHistory;
 import org.silverpeas.mobile.client.common.resources.ResourcesManager;
@@ -44,12 +41,19 @@ public class PageHeader extends Composite {
 
   private static PageHeaderUiBinder uiBinder = GWT.create(PageHeaderUiBinder.class);
 
+  public void closeMenuQVF() {
+    actionsMenu.close();
+  }
+
   interface PageHeaderUiBinder extends UiBinder<Widget, PageHeader> {
   }
 
   @UiField protected HTMLPanel header;
-  @UiField protected Anchor menu, back;
+  @UiField protected Anchor back;
   @UiField protected HeadingElement title;
+  @UiField protected HTML menu;
+  @UiField protected ActionsList actionsShortcuts;
+  @UiField protected ActionsMenu actionsMenu;
   @UiField(provided = true) protected ApplicationMessages msg = null;
   protected ApplicationResources ressources = null;
 
@@ -60,30 +64,74 @@ public PageHeader() {
     header.getElement().setId("header");
     menu.getElement().setId("menu");
     ressources.css().ensureInjected();
-
     title.setInnerText(ResourcesManager.getLabel("mainpage.title"));
+    actionsMenu.setActionsShortcuts(actionsShortcuts);
+  }
+
+  public void addActionShortcut(ActionItem action) {
+    actionsShortcuts.addAction(action);
+    adjustTitle();
+  }
+
+  private void adjustTitle() {
+    float offset = actionsShortcuts.listActions.getCount() * 2.5f;
+    title.setAttribute("style", "width : calc(100vw - 50px - 2.5em - "+offset+"em);");
+  }
+
+  public void removeActionShortcut(ActionItem action) {
+    actionsShortcuts.removeAction(action.getId(), true);
+    adjustTitle();
   }
 
+  public void addActionMenu(ActionItem action) {
+    actionsMenu.addAction(action);
+  }
+
+  public void removeActionMenu(ActionItem action) {
+    actionsMenu.removeAction(action.getId(), true);
+  }
+
+  public void clearActions() {
+    actionsShortcuts.clear();
+    actionsMenu.clear();
+  }
 
   @UiHandler("menu")
   void onMenu(ClickEvent event) {
+    toogleMenuButton();
     SpMobil.getMainPage().toogleMenu();
   }
 
   @UiHandler("back")
   void onBack(ClickEvent event) {
-    PageHistory.getInstance().back();
+    if (PageHistory.getInstance().size() > 1) {
+      PageHistory.getInstance().back();
+    }
+  }
+
+  public void toogleMenuButton() {
+    if (menu.getStylePrimaryName().equals("active")) {
+      closeMenuButton();
+    } else {
+      menu.setStylePrimaryName("active");
+    }
+  }
+
+  public void closeMenuButton() {
+    menu.setStylePrimaryName("not-active");
   }
 
   public void showOfflineIndicator() {
-    menu.addStyleName(ressources.css().offline());
+    header.addStyleName(ressources.css().offline());
   }
 
   public void hideOfflineIndicator() {
-    menu.removeStyleName(ressources.css().offline());
+    header.removeStyleName(ressources.css().offline());
   }
 
   public void setVisibleBackButton(boolean visible) {
+    // hide menu if not home page
+    menu.setVisible(!visible);
     // remove active state
     header.remove(back);
     header.add(back);
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml
index 350b2ce31..504b4c51a 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml
@@ -23,13 +23,23 @@
   -->
 
 <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
-<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui">
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
+             xmlns:g="urn:import:com.google.gwt.user.client.ui"
+             xmlns:base="urn:import:org.silverpeas.mobile.client.components.base">
 
   <ui:with field='msg' type='org.silverpeas.mobile.client.resources.ApplicationMessages'/>
 
   <g:HTMLPanel ui:field="header">
-    <g:Anchor ui:field="menu" styleName="ui-icon-bars"></g:Anchor>
+    <div class="box">
+      <g:HTML ui:field="menu" stylePrimaryName="not-active">
+        <span></span>
+        <span></span>
+        <span></span>
+      </g:HTML>
+    </div>
+    <g:Anchor ui:field="back" styleName="ui-btn-right back" text=""/>
     <h1 ui:field="title" class="ui-title">Silverpeas</h1>
-    <g:Anchor ui:field="back" styleName="ui-btn-right ui-btn-corner-all ui-btn ui-icon-grid ui-shadow back" text="{msg.back}"/>
+    <base:ActionsList ui:field="actionsShortcuts"/>
+    <base:ActionsMenu ui:field="actionsMenu"/>
   </g:HTMLPanel>
 </ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/AddButton.java
similarity index 66%
rename from mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskItem.java
rename to mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/AddButton.java
index b13e6e846..2448b67f0 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskItem.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/AddButton.java
@@ -22,7 +22,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package org.silverpeas.mobile.client.apps.tasks.pages.widgets;
+package org.silverpeas.mobile.client.components.base.widgets;
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.ClickEvent;
@@ -30,33 +30,29 @@
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.client.ui.Anchor;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.Widget;
-import org.silverpeas.mobile.client.apps.tasks.pages.TaskPage;
-import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages;
+import com.google.gwt.user.client.ui.HTMLPanel;
+import org.silverpeas.mobile.client.components.base.ActionItem;
 
 /**
  * @author: svu
  */
-public class AddTaskItem  extends Composite {
+public class AddButton extends ActionItem {
 
-  interface AddTaskItemUiBinder extends UiBinder<Widget, AddTaskItem> {
-  }
+  interface AddButtonUiBinder extends UiBinder<HTMLPanel, AddButton> {}
 
-  @UiField Anchor link;
-  @UiField(provided = true) protected TasksMessages msg = null;
+  private static AddButtonUiBinder uiBinder = GWT.create(AddButtonUiBinder.class);
 
-  private static AddTaskItemUiBinder uiBinder = GWT.create(AddTaskItemUiBinder.class);
+  @UiField
+  HTMLPanel container;
+  @UiField
+  Anchor link;
 
-  public AddTaskItem() {
-    msg = GWT.create(TasksMessages.class);
+  public AddButton() {
     initWidget(uiBinder.createAndBindUi(this));
   }
 
   @UiHandler("link")
-  void createTask(ClickEvent event) {
-    TaskPage page = new TaskPage();
-    page.setPageTitle(msg.create());
-    page.show();
+  void delete(ClickEvent event) {
+    getCallback().execute();
   }
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/AddButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/AddButton.ui.xml
new file mode 100644
index 000000000..8e183de3b
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/AddButton.ui.xml
@@ -0,0 +1,31 @@
+<!--
+  ~ Copyright (C) 2000 - 2022 Silverpeas
+  ~
+  ~ This program is free software: you can redistribute it and/or modify
+  ~ it under the terms of the GNU Affero General Public License as
+  ~ published by the Free Software Foundation, either version 3 of the
+  ~ License, or (at your option) any later version.
+  ~
+  ~ As a special exception to the terms and conditions of version 3.0 of
+  ~ the GPL, you may redistribute this Program in connection with Free/Libre
+  ~ Open Source Software ("FLOSS") applications as described in Silverpeas's
+  ~ FLOSS exception.  You should have received a copy of the text describing
+  ~ the FLOSS exception, and it is also available here:
+  ~ "https://www.silverpeas.org/legal/floss_exception.html"
+  ~
+  ~ This program is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  ~ GNU Affero General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU Affero General Public License
+  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  -->
+
+<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
+             xmlns:g='urn:import:com.google.gwt.user.client.ui'>
+
+    <g:HTMLPanel tag="li" ui:field="container" styleName="add-action">
+        <g:Anchor ui:field="link"/>
+    </g:HTMLPanel>
+</ui:UiBinder>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/DeleteButton.java
similarity index 64%
rename from mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.java
rename to mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/DeleteButton.java
index bcdc71893..dc177911b 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/DeleteButton.java
@@ -22,7 +22,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package org.silverpeas.mobile.client.apps.sharesbox.pages.widgets;
+package org.silverpeas.mobile.client.components.base.widgets;
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.ClickEvent;
@@ -31,14 +31,7 @@
 import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.HTMLPanel;
-import org.silverpeas.mobile.client.apps.sharesbox.events.app.DeleteSharesEvent;
-import org.silverpeas.mobile.client.apps.sharesbox.pages.SharesBoxPage;
-import org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages;
-import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.components.base.ActionItem;
-import org.silverpeas.mobile.shared.dto.tickets.TicketDTO;
-
-import java.util.List;
 
 /**
  * @author: svu
@@ -49,35 +42,17 @@ interface DeleteButtonUiBinder extends UiBinder<HTMLPanel, DeleteButton> {}
 
   private static DeleteButtonUiBinder uiBinder = GWT.create(DeleteButtonUiBinder.class);
 
-  private SharesBoxPage parentPage;
-
   @UiField
   HTMLPanel container;
   @UiField
-  Anchor delete;
-
-  @UiField(provided = true)
-  protected ShareMessages msg = null;
-
+  Anchor link;
 
   public DeleteButton() {
-    msg = GWT.create(ShareMessages.class);
     initWidget(uiBinder.createAndBindUi(this));
-    setId("delete");
   }
 
-  @UiHandler("delete")
+  @UiHandler("link")
   void delete(ClickEvent event) {
-    List<TicketDTO> selection = parentPage.getSelectedShares();
-    DeleteSharesEvent deleteEvent = new DeleteSharesEvent();
-    deleteEvent.setSelection(selection);
-    if (!selection.isEmpty()) EventBus.getInstance().fireEvent(deleteEvent);
-
-    // hide menu
-    getElement().getParentElement().removeAttribute("style");
-  }
-
-  public void setParentPage(final SharesBoxPage parentPage) {
-    this.parentPage = parentPage;
+    getCallback().execute();
   }
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/DeleteButton.ui.xml
similarity index 84%
rename from mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.ui.xml
rename to mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/DeleteButton.ui.xml
index 72d0b4821..e4cc3f063 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/DeleteButton.ui.xml
@@ -25,9 +25,7 @@
 <ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
              xmlns:g='urn:import:com.google.gwt.user.client.ui'>
 
-    <ui:with field='msg' type='org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages'/>
-
-    <g:HTMLPanel tag="li" ui:field="container" styleName="">
-        <g:Anchor styleName="" ui:field="delete" text="{msg.delete}"/>
+    <g:HTMLPanel tag="li" ui:field="container" styleName="delete-action">
+        <g:Anchor ui:field="link"/>
     </g:HTMLPanel>
 </ui:UiBinder>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java
new file mode 100644
index 000000000..c8a6a6579
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java
@@ -0,0 +1,89 @@
+package org.silverpeas.mobile.client.components.base.widgets;
+
+import com.google.gwt.event.dom.client.TouchEndEvent;
+import com.google.gwt.event.dom.client.TouchMoveEvent;
+import com.google.gwt.event.dom.client.TouchStartEvent;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.HTMLPanel;
+import org.silverpeas.mobile.client.components.base.PageContent;
+
+public class SelectableItem extends Composite {
+
+    private PageContent parent;
+    private HTMLPanel container;
+    private boolean onMove = false;
+    private boolean unSelected = false;
+
+    private Timer timerSelection = null;
+    private Timer timerScroll = null;
+
+    public void setParent(PageContent page) {
+        this.parent = page;
+    }
+
+    public void setContainer(HTMLPanel container) {
+        this.container = container;
+    }
+
+    public boolean isSelected() {
+        return container.getElement().hasClassName("selected");
+    }
+
+    protected void startTouch(TouchStartEvent event, boolean selectable) {
+        if (!parent.isSelectionMode() && selectable) {
+            timerSelection = new Timer() {
+                @Override
+                public void run() {
+                    parent.setSelectionMode(true);
+                    container.getElement().addClassName("selected");
+                    parent.changeSelectionNumber(1);
+                }
+            };
+            timerSelection.schedule(400);
+        } else if (parent.isSelectionMode() && selectable) {
+            timerScroll = new Timer() {
+                @Override
+                public void run() {
+                    if (!onMove) {
+                        if (container.getElement().hasClassName("selected")) {
+                            container.getElement().removeClassName("selected");
+                            parent.changeSelectionNumber(-1);
+                            unSelected = true;
+                        } else {
+                            container.getElement().addClassName("selected");
+                            parent.changeSelectionNumber(1);
+                        }
+                    } else {
+                        onMove = false;
+                    }
+                }
+            };
+            timerScroll.schedule(100);
+        }
+    }
+
+    protected void moveTouch(TouchMoveEvent event) {
+        if (timerSelection != null) timerSelection.cancel();
+        if (timerScroll != null) timerScroll.cancel();
+        onMove = true;
+    }
+
+    protected void endTouch(TouchEndEvent event, boolean selectable, Command onClickAction) {
+        if (timerSelection != null) timerSelection.cancel();
+        if (!onMove) {
+            if (selectable) {
+                if (!parent.isSelectionMode() && !unSelected) {
+                    onClickAction.execute();
+                }
+            } else {
+                onClickAction.execute();
+            }
+        } else {
+            onMove = false;
+        }
+        unSelected = false;
+    }
+
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.java
new file mode 100644
index 000000000..3681836fc
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.components.base.widgets;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.ui.Anchor;
+import com.google.gwt.user.client.ui.HTMLPanel;
+import org.silverpeas.mobile.client.common.Html5Utils;
+import org.silverpeas.mobile.client.components.base.ActionItem;
+import org.silverpeas.mobile.client.components.base.ActionsMenu;
+import org.silverpeas.mobile.client.resources.ApplicationMessages;
+
+/**
+ * @author: svu
+ */
+public class ShareButton extends ActionItem {
+    interface ShareButtonUiBinder extends UiBinder<HTMLPanel, ShareButton> {
+    }
+
+    private static ShareButtonUiBinder uiBinder = GWT.create(ShareButtonUiBinder.class);
+
+    @UiField  HTMLPanel container;
+    @UiField  Anchor share;
+
+    @UiField(provided = true) protected ApplicationMessages msg = null;
+    private String title, text, url;
+
+    public ShareButton() {
+        msg = GWT.create(ApplicationMessages.class);
+        initWidget(uiBinder.createAndBindUi(this));
+        setId("share");
+    }
+    public void init(String title, String text, String url) {
+        this.title = title;
+        this.text = text;
+        this.url = url;
+        try {
+            if (!Html5Utils.canShare(title, text, url)) {
+                setVisible(false);
+            }
+        } catch(Throwable t) {
+            setVisible(false);
+        }
+    }
+    @UiHandler("share")
+    void share(ClickEvent event) {
+        Html5Utils.share(title, text, url);
+
+        // hide menu
+        ActionsMenu.close(getElement());
+    }
+
+
+
+}
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.ui.xml
similarity index 88%
rename from mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.ui.xml
rename to mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.ui.xml
index 472786168..74291968a 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.ui.xml
@@ -25,9 +25,9 @@
 <ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
              xmlns:g='urn:import:com.google.gwt.user.client.ui'>
 
-    <ui:with field='msg' type='org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages'/>
+    <ui:with field='msg' type='org.silverpeas.mobile.client.resources.ApplicationMessages'/>
 
     <g:HTMLPanel tag="li" ui:field="container" styleName="">
-        <g:Anchor styleName="" ui:field="delete" text="{msg.delete}"/>
+        <g:Anchor styleName="" ui:field="share" text="{msg.share}"/>
     </g:HTMLPanel>
 </ui:UiBinder>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.java
similarity index 53%
rename from mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java
rename to mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.java
index 6a1b69793..71755d81e 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.java
@@ -22,63 +22,61 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets;
+package org.silverpeas.mobile.client.components.base.widgets;
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.HTMLPanel;
-import org.silverpeas.mobile.client.apps.notificationsbox.events.app.DeleteNotificationsEvent;
-import org.silverpeas.mobile.client.apps.notificationsbox.pages.NotificationsBoxPage;
-import org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages;
-import org.silverpeas.mobile.client.common.EventBus;
+import org.silverpeas.mobile.client.common.Html5Utils;
 import org.silverpeas.mobile.client.components.base.ActionItem;
-import org.silverpeas.mobile.shared.dto.notifications.NotificationBoxDTO;
-
-import java.util.List;
 
 /**
  * @author: svu
  */
-public class DeleteButton extends ActionItem {
+public class SpeakButton extends ActionItem {
+
 
-  interface DeleteButtonUiBinder extends UiBinder<HTMLPanel, DeleteButton> {}
 
-  private static DeleteButtonUiBinder uiBinder = GWT.create(DeleteButtonUiBinder.class);
+  interface SpeakButtonUiBinder extends UiBinder<HTMLPanel, SpeakButton> {}
 
-  private NotificationsBoxPage parentPage;
+  private static SpeakButtonUiBinder uiBinder = GWT.create(SpeakButtonUiBinder.class);
+
+  private Command onEndSpeaking;
 
   @UiField
   HTMLPanel container;
   @UiField
-  Anchor delete;
-
-  @UiField(provided = true)
-  protected NotificationsMessages msg = null;
+  Anchor link;
 
-
-  public DeleteButton() {
-    msg = GWT.create(NotificationsMessages.class);
+  public SpeakButton() {
     initWidget(uiBinder.createAndBindUi(this));
-    setId("delete");
-  }
+    setId("speak");
 
-  @UiHandler("delete")
-  void delete(ClickEvent event) {
-    List<NotificationBoxDTO> selection = parentPage.getSelectedNotification();
-
-    DeleteNotificationsEvent deleteEvent = new DeleteNotificationsEvent();
-    deleteEvent.setSelection(selection);
-    if (!selection.isEmpty()) EventBus.getInstance().fireEvent(deleteEvent);
+    onEndSpeaking = new Command() {
+      @Override
+      public void execute() {
+        onClick(null);
+      }
+    };
+  }
 
-    // hide menu
-    getElement().getParentElement().removeAttribute("style");
+  public Command getEndCallback() {
+    return onEndSpeaking;
   }
 
-  public void setParentPage(final NotificationsBoxPage parentPage) {
-    this.parentPage = parentPage;
+  @UiHandler("link")
+  void onClick(ClickEvent event) {
+    if (container.getElement().hasClassName("running")) {
+      container.getElement().removeClassName("running");
+      Html5Utils.cancelSpeaking();
+    } else {
+      container.getElement().addClassName("running");
+      getCallback().execute();
+    }
   }
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.ui.xml
new file mode 100644
index 000000000..1ffa7c4cd
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.ui.xml
@@ -0,0 +1,31 @@
+<!--
+  ~ Copyright (C) 2000 - 2022 Silverpeas
+  ~
+  ~ This program is free software: you can redistribute it and/or modify
+  ~ it under the terms of the GNU Affero General Public License as
+  ~ published by the Free Software Foundation, either version 3 of the
+  ~ License, or (at your option) any later version.
+  ~
+  ~ As a special exception to the terms and conditions of version 3.0 of
+  ~ the GPL, you may redistribute this Program in connection with Free/Libre
+  ~ Open Source Software ("FLOSS") applications as described in Silverpeas's
+  ~ FLOSS exception.  You should have received a copy of the text describing
+  ~ the FLOSS exception, and it is also available here:
+  ~ "https://www.silverpeas.org/legal/floss_exception.html"
+  ~
+  ~ This program is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  ~ GNU Affero General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU Affero General Public License
+  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  -->
+
+<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
+             xmlns:g='urn:import:com.google.gwt.user.client.ui'>
+
+    <g:HTMLPanel tag="li" ui:field="container" styleName="speak-action">
+        <g:Anchor ui:field="link"/>
+    </g:HTMLPanel>
+</ui:UiBinder>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/forms/FieldEditable.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/forms/FieldEditable.java
index 8feccd262..bda28421a 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/forms/FieldEditable.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/forms/FieldEditable.java
@@ -292,7 +292,12 @@ public void onClick(final ClickEvent clickEvent) {
                     // get users or groups selected before
                     TextArea tx = ((TextArea) clickEvent.getSource());
                     List<String> ids = Arrays.asList(tx.getElement().getAttribute("data").split(","));
-                    page.setPreSelectedIds(ids);
+                    if (type.equalsIgnoreCase("user")) {
+                        page.setPreSelectedUsersIds(ids);
+                    } else if (type.equalsIgnoreCase("group")) {
+                        page.setPreSelectedGroupsIds(ids);
+                    }
+
                     sendEventToGetPossibleUsers();
                     page.show();
                 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.java
index 2aa5a5e5e..6f774e6b7 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.java
@@ -27,6 +27,7 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FocusPanel;
 import com.google.gwt.user.client.ui.HTML;
@@ -103,6 +104,9 @@ public void setConfig(final Config config) {
     news.setVisible(config.isNewsDisplay());
     freeZoneSection.setVisible(config.isFreeZoneDisplay());
     freeZoneThinSection.setVisible(config.isFreeZoneThinDisplay());
+    shortCutsSection.setVisible(config.isShortCutsDisplay());
+    lastEventsSection.setVisible(config.isLastEventsDisplay());
+    shortCutsToolsSection.setVisible(config.isShortCutsToolsDisplay());
   }
 
   public void setData(HomePageDTO data) {
@@ -141,9 +145,12 @@ public void setData(HomePageDTO data) {
     List<MyLinkDTO> favoritesList = data.getFavorites();
     favorisSection.setVisible(!favoritesList.isEmpty() && config.isFavoritesDisplay());
     for (MyLinkDTO favoriteDTO : favoritesList) {
-      FavoriteItem item = new FavoriteItem();
-      item.setData(favoriteDTO);
-      favoris.add(item);
+      if (favoriteDTO.getVisible()) {
+        FavoriteItem item = new FavoriteItem();
+        item.setMinimalView(true);
+        item.setData(favoriteDTO);
+        favoris.add(item);
+      }
     }
 
     shortcutstools.clear();
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.ui.xml
index 2012e3bfb..9ce29683a 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.ui.xml
@@ -39,27 +39,27 @@
       <div id="spaces">
         <components:UnorderedList ui:field="spaces" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/>
       </div>
-      <g:HTMLPanel stylePrimaryName="favoris-bloc bloc" ui:field="favorisSection">
+      <g:HTMLPanel stylePrimaryName="favoris-bloc bloc" ui:field="favorisSection" visible="false">
         <h3 class="title-bloc-part ui-title"><ui:safehtml from="{msg.favorites}"/></h3>
         <components:UnorderedList ui:field="favoris" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/>
       </g:HTMLPanel>
 
-    <g:HTMLPanel stylePrimaryName="tools-bloc bloc" ui:field="shortCutsToolsSection">
+    <g:HTMLPanel stylePrimaryName="tools-bloc bloc" ui:field="shortCutsToolsSection" visible="false">
       <h3 class="title-bloc-part ui-title"><ui:safehtml from="{msg.shortcutstools}"/></h3>
       <components:UnorderedList ui:field="shortcutstools" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/>
     </g:HTMLPanel>
 
-      <g:HTMLPanel stylePrimaryName="racourcis-bloc bloc" ui:field="shortCutsSection">
+      <g:HTMLPanel stylePrimaryName="racourcis-bloc bloc" ui:field="shortCutsSection" visible="false">
         <h3 class="title-bloc-part ui-title"><ui:safehtml from="{msg.shortcuts}"/></h3>
         <components:UnorderedList ui:field="shortcuts" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/>
       </g:HTMLPanel>
 
-      <g:HTMLPanel stylePrimaryName="last-publication-bloc bloc" ui:field="lastPublicationsSection">
+      <g:HTMLPanel stylePrimaryName="last-publication-bloc bloc" ui:field="lastPublicationsSection" visible="false">
         <h3 class="title-bloc-part ui-title"><ui:safehtml from="{msg.lastPublications}"/></h3>
         <components:UnorderedList ui:field="lastPublications" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/>
       </g:HTMLPanel>
 
-      <g:HTMLPanel stylePrimaryName="last-event-bloc bloc" ui:field="lastEventsSection">
+      <g:HTMLPanel stylePrimaryName="last-event-bloc bloc" ui:field="lastEventsSection" visible="false">
         <h3 class="title-bloc-part ui-title"><ui:safehtml from="{msg.lastEvents}"/></h3>
         <components:UnorderedList ui:field="lastEvents" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/>
       </g:HTMLPanel>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/UserSelectionPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/UserSelectionPage.java
index 52be92ce0..266dfc4b2 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/UserSelectionPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/UserSelectionPage.java
@@ -35,6 +35,7 @@
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.HTMLPanel;
 import com.google.gwt.user.client.ui.TextBox;
+import org.silverpeas.core.admin.user.model.User;
 import org.silverpeas.mobile.client.common.EventBus;
 import org.silverpeas.mobile.client.common.app.View;
 import org.silverpeas.mobile.client.components.UnorderedList;
@@ -68,14 +69,21 @@ public class UserSelectionPage extends PageContent
 
   private static UserSelectionPageUiBinder uiBinder = GWT.create(UserSelectionPageUiBinder.class);
   private String contentId;
-  private List<String> preSelectedIds = new ArrayList<String>();
+  private List<String> preSelectedUsersIds = new ArrayList<String>();
+  private List<String> preSelectedGroupsIds = new ArrayList<String>();
 
   public void setMaxSelection(final int maxSelection) {
     this.maxSelection = maxSelection;
   }
 
-  public void setPreSelectedIds(final List<String> preSelectedIds) {
-    this.preSelectedIds = preSelectedIds;
+  public void setPreSelectedUsersIds(final List<String> preSelectedUsersIds) {
+    this.preSelectedUsersIds = preSelectedUsersIds;
+    if (preSelectedUsersIds != null && !preSelectedUsersIds.isEmpty()) continu.setVisible(true);
+  }
+
+  public void setPreSelectedGroupsIds(final List<String> preSelectedGroupsIds) {
+    this.preSelectedGroupsIds = preSelectedGroupsIds;
+    if (preSelectedGroupsIds != null && !preSelectedGroupsIds.isEmpty()) continu.setVisible(true);
   }
 
   interface UserSelectionPageUiBinder extends UiBinder<HTMLPanel, UserSelectionPage> {
@@ -111,10 +119,17 @@ public void onAllowedUsersAndGroupsLoaded(AllowedUsersAndGroupsLoadedEvent allow
     for (BaseDTO data : allowedUsersAndGroupsLoadedEvent.getListAllowedUsersAndGroups()) {
       UserGroupItem item = new UserGroupItem();
       item.setData(data);
-      if (preSelectedIds.contains(data.getId())) {
-        item.select();
+      if (data instanceof UserDTO) {
+        if (preSelectedUsersIds.contains(data.getId())) {
+          item.select();
+        }
+        list.add(item);
+      } else if (data instanceof GroupDTO) {
+        if (preSelectedGroupsIds.contains(data.getId())) {
+          item.select();
+        }
+        list.add(item);
       }
-      list.add(item);
     }
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/widgets/UserGroupItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/widgets/UserGroupItem.java
index 971c376e7..85101c4af 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/widgets/UserGroupItem.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/widgets/UserGroupItem.java
@@ -94,7 +94,11 @@ public void setData(BaseDTO data) {
     } else if (data instanceof GroupDTO) {
       content.setStylePrimaryName("group-name");
       GroupDTO dataGroup = (GroupDTO) data;
-      content.add(new HTML(dataGroup.getName()));
+      HTML icon = new HTML(resources.peoples().getText());
+      icon.setStylePrimaryName("icon-group");
+      content.add(icon);
+      content.add(new HTML(dataGroup.getName() + " (" + dataGroup.getNbMembers() + ")"));
+      mail.setVisible(false);
     }
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.java
index 40ff92761..f31631326 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.java
@@ -26,18 +26,13 @@
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.dom.client.DivElement;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.ui.Anchor;
-import com.google.gwt.user.client.ui.CheckBox;
-import com.google.gwt.user.client.ui.FormPanel;
-import com.google.gwt.user.client.ui.ListBox;
-import com.google.gwt.user.client.ui.PasswordTextBox;
-import com.google.gwt.user.client.ui.TextBox;
-import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.*;
 import org.fusesource.restygwt.client.Method;
 import org.silverpeas.mobile.client.common.AuthentificationManager;
 import org.silverpeas.mobile.client.common.Notification;
@@ -72,6 +67,12 @@ public class ConnexionPage extends PageContent {
   @UiField
   CheckBox tooglePasswordView;
 
+  @UiField
+  InlineHTML labelTooglePasswordView;
+
+  @UiField
+  DivElement version;
+
   public void setAuthenticateError(final AuthenticationException authenticateError) {
     if (authenticateError == null) {
       checkCredentials("init","init");
@@ -108,7 +109,8 @@ public ConnexionPage() {
     form.getElement().setId("formLogin");
     form.getElement().setAttribute("autocomplete","off");
 
-
+    version.setId("version");
+    version.setInnerText(msg.version() + " " + ResourcesManager.getVersion());
 
     Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
       @Override
@@ -140,10 +142,8 @@ void connexion(ClickEvent e) {
   void changePasswordVisibity(ClickEvent e) {
     if (passwordField.getElement().getAttribute("type").equals("password")) {
       passwordField.getElement().setAttribute("type", "text");
-      tooglePasswordView.setText(msg.hidePwd());
     } else {
       passwordField.getElement().setAttribute("type", "password");
-      tooglePasswordView.setText(msg.showPwd());
     }
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.ui.xml
index 213d99955..0a2d8c8d6 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.ui.xml
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.ui.xml
@@ -44,7 +44,8 @@
           <g:PasswordTextBox ui:field="passwordField" name="Password"/>
         </div>
         <div id="password-visibility">
-          <g:CheckBox ui:field="tooglePasswordView" text="{msg.showPwd}"/>
+          <g:InlineHTML ui:field="labelTooglePasswordView" text="{msg.showPwd}"/>
+          <g:CheckBox ui:field="tooglePasswordView" stylePrimaryName="checkbox-wrapper"/>
         </div>
 
         <div id="domain-formLogin">
@@ -60,6 +61,7 @@
         <div id="copyright">
           <ui:safehtml from="{msg.copyright}"/>
         </div>
+        <div ui:field="version"></div>
         </g:HTMLPanel>
       </g:FormPanel>
     </div>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.java
new file mode 100644
index 000000000..f5e7c8d2c
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.client.pages.cookies;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.Cookies;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.Anchor;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.Widget;
+import org.silverpeas.mobile.client.SpMobil;
+import org.silverpeas.mobile.client.common.Notification;
+import org.silverpeas.mobile.client.common.resources.ResourcesManager;
+import org.silverpeas.mobile.client.components.base.PageContent;
+import org.silverpeas.mobile.client.resources.ApplicationMessages;
+
+import java.util.Date;
+
+
+public class CookiesPage extends PageContent {
+
+  interface CookiesPageUiBinder extends UiBinder<Widget, CookiesPage> {}
+
+  private static CookiesPageUiBinder uiBinder = GWT.create(CookiesPageUiBinder.class);
+
+  @UiField
+  Anchor accept;
+
+  @UiField
+  HTML text;
+
+  @UiField(provided = true)
+  protected ApplicationMessages msg = null;
+
+  public CookiesPage() {
+    msg = GWT.create(ApplicationMessages.class);
+    initWidget(uiBinder.createAndBindUi(this));
+    SpMobil.getMainPage().hideFooter();
+    text.setHTML(msg.cookiesInformation());
+    Notification.activityStop();
+  }
+
+  @UiHandler("accept")
+  void accept(ClickEvent e) {
+    String cookie = Cookies.getCookie("accept_cookies");
+    if (cookie == null || cookie.isEmpty()) {
+      long duration = Long.parseLong(ResourcesManager.getParam("displayCookiesInformationFrequency"));
+      final long DURATION = 1000 * 60 * 60 * 24 * duration;
+      Date expires = new Date(System.currentTimeMillis() + DURATION);
+      Cookies.setCookie("accept_cookies", "accepted", expires);
+    }
+    SpMobil.getInstance().loadIds(null);
+  }
+
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.ui.xml
new file mode 100644
index 000000000..5287bacae
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.ui.xml
@@ -0,0 +1,47 @@
+<!--
+  ~ Copyright (C) 2000 - 2022 Silverpeas
+  ~
+  ~ This program is free software: you can redistribute it and/or modify
+  ~ it under the terms of the GNU Affero General Public License as
+  ~ published by the Free Software Foundation, either version 3 of the
+  ~ License, or (at your option) any later version.
+  ~
+  ~ As a special exception to the terms and conditions of version 3.0 of
+  ~ the GPL, you may redistribute this Program in connection with Free/Libre
+  ~ Open Source Software ("FLOSS") applications as described in Silverpeas's
+  ~ FLOSS exception.  You should have received a copy of the text describing
+  ~ the FLOSS exception, and it is also available here:
+  ~ "https://www.silverpeas.org/legal/floss_exception.html"
+  ~
+  ~ This program is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  ~ GNU Affero General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU Affero General Public License
+  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  -->
+
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
+             xmlns:g="urn:import:com.google.gwt.user.client.ui">
+
+  <ui:with field='msg'
+           type='org.silverpeas.mobile.client.resources.ApplicationMessages' />
+
+  <g:HTMLPanel>
+    <div id="header">
+      <h1 id="page-infos-title"><ui:safehtml from="{msg.informationTitle}"/></h1>
+    </div>
+
+    <div id="page-infos" class="ui-content ui-body-a">
+      <div class="infosTextContainer">
+        <g:HTML ui:field="text" styleName="infosText"></g:HTML>
+        <div class="infosTextActions">
+          <g:Anchor ui:field="accept" styleName="btn-validate ui-link smaller multiple"><ui:safehtml from="{msg.accept}"/></g:Anchor>
+        </div>
+      </div>
+    </div>
+  </g:HTMLPanel>
+
+</ui:UiBinder> 
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/main/HomePage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/main/HomePage.java
index be4370d62..d45617c8a 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/main/HomePage.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/main/HomePage.java
@@ -92,6 +92,7 @@ public HomePageContent getContent() {
   @Override
   public void clickItem(final ClickItemEvent event) {
     if (isVisible()) {
+      SpMobil.getMainPage().closeMenu();
       if (event.getData() instanceof SpaceDTO) {
         SpaceDTO space = (SpaceDTO) event.getData();
         if (space.getHomePageType() == HomePages.SILVERPEAS.getValue() ||
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java
index ad8912eb8..f1d1b85f1 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java
@@ -29,6 +29,10 @@
 
 
 public interface ApplicationMessages extends Messages {
+
+  @DefaultMessage("Pour son fonctionnement, cette application utilise des Cookies. Les informations stockées sont uniquement techniques et ne contiennent pas de données personnelles, ou de suivi.")
+  SafeHtml cookiesInformation();
+
   @DefaultMessage("Login")
   SafeHtml loginLabel();
 
@@ -38,6 +42,9 @@ public interface ApplicationMessages extends Messages {
   @DefaultMessage("Silverpeas &gt; Ecran de connexion")
   SafeHtml loginTitle();
 
+  @DefaultMessage("Information")
+  SafeHtml informationTitle();
+
   @DefaultMessage("Confirmer")
   String confirmBtnLabel();
   @DefaultMessage("Annuler")
@@ -45,7 +52,7 @@ public interface ApplicationMessages extends Messages {
   @DefaultMessage("Corriger")
   String correctBtnLabel();
 
-  @DefaultMessage("© 2001-2020 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a>	- Tous droits réservés")
+  @DefaultMessage("© 2001-2024 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a>	- Tous droits réservés")
   SafeHtml copyright();
 
   @DefaultMessage("Parcourir la plateforme")
@@ -92,7 +99,10 @@ public interface ApplicationMessages extends Messages {
   @DefaultMessage("Espace personnel")
   String personalSpace();
 
-  @Messages.DefaultMessage("Modifier mon statut")
+  @DefaultMessage("Mes documents")
+  String myDocuments();
+
+  @DefaultMessage("Modifier mon statut")
   String editStatus();
 
   @DefaultMessage("Contenus trouvés")
@@ -179,10 +189,6 @@ public interface ApplicationMessages extends Messages {
 
   @DefaultMessage("Afficher le mot de passe")
   String showPwd();
-
-  @DefaultMessage("Masquer le mot de passe")
-  String hidePwd();
-
   @DefaultMessage("Reçues")
   SafeHtml received();
 
@@ -191,4 +197,13 @@ public interface ApplicationMessages extends Messages {
 
   @DefaultMessage("Mes partages")
   String shares();
+
+  @DefaultMessage("Partager")
+  String share();
+
+  @DefaultMessage("Autres favoris")
+  String favoritesWithoutCategory();
+
+  @DefaultMessage("Version")
+  String version();
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties
index a767e209a..aa125a752 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties
@@ -22,15 +22,16 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
+cookiesInformation=For its operation, this application uses cookies. The stored information is solely technical and does not contain personal data or tracking information.
 loginLabel=Login
 passwordLabel=Password
 loginTitle=Silverpeas &gt; Login screen
-
+informationTitle=Information
 confirmBtnLabel=Confirm
 cancelBtnLabel=Cancel
 correctBtnLabel=Correct
 
-copyright=© 2001-2016 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a>	- All rights reserved
+copyright=© 2001-2024 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a>	- All rights reserved
 infoTitle=Information
 ok=OK
 
@@ -44,6 +45,7 @@ tasks=My tasks
 disconnect=Log out
 
 personalSpace=Personal space
+myDocuments=My documents
 
 editStatus=Edit my status
 
@@ -77,9 +79,14 @@ notifications=My notifications
 pwdNotValid=Password is not valid
 
 showPwd=Show password
-hidePwd=Hide password
 
 received=Received
 sended=Sended
 
-notfoundError=Ressource not found
\ No newline at end of file
+notfoundError=Ressource not found
+
+share=Share
+
+favoritesWithoutCategory=Others favorites
+
+version=Version
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties
index f996678fa..2f3c417fe 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties
@@ -22,14 +22,17 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
+cookiesInformation=Pour son fonctionnement, cette application utilise des Cookies. Les informations stockées sont uniquement techniques et ne contiennent pas de données personnelles, ou de suivi.
+
 loginLabel=Login
 passwordLabel=Mot de passe
 loginTitle=Silverpeas &gt; Ecran de connexion
+informationTitle=Information
 confirmBtnLabel=Confirmer
 cancelBtnLabel=Annuler
 correctBtnLabel=Corriger
 
-copyright=© 2001-2016 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a>	- Tous droits réservés
+copyright=© 2001-2024 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a>	- Tous droits réservés
 
 infoTitle=Information
 ok=OK
@@ -45,6 +48,7 @@ tasks=Mes tâches
 
 disconnect=Déconnexion
 personalSpace=Espace personnel
+myDocuments=Mes documents
 
 editStatus=Modifier mon statut
 results=Contenus trouvés
@@ -80,9 +84,14 @@ notifications=Mes notifications
 pwdNotValid=Le mot de passe ne respecte pas les consignes de sécurité
 
 showPwd=Afficher le mot de passe
-hidePwd=Masquer le mot de passe
 
 received=Reçues
 sended=Envoyées
 
-notfoundError=Ressource non trouv�e
\ No newline at end of file
+notfoundError=Ressource non trouv�e
+
+share=Partager
+
+favoritesWithoutCategory=Autres favoris
+
+version=Version
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java
index b38268825..5e1d8c4fe 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java
@@ -25,7 +25,9 @@
 package org.silverpeas.mobile.client.resources;
 
 import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.DataResource;
 import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.resources.client.TextResource;
 
 /**
  * @author: svu
@@ -35,18 +37,158 @@ public interface ApplicationResources extends ClientBundle {
   @Source("application.css")
   ApplicationCSS css();
 
-  @Source("avatar.png")
+  @Source("icons/avatar.png")
   ImageResource avatar();
 
-  @Source("sound.png")
-  ImageResource sound();
+  @Source("icons/offline.png")
+  ImageResource offline();
 
-  @Source("video.png")
-  ImageResource video();
+  @Source("icons/star.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource favorite();
 
-  @Source("streaming.png")
-  ImageResource streaming();
+  @Source("icons/expand_more.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource more();
 
-  @Source("offline.png")
-  ImageResource offline();
+  @Source("icons/expand_less.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource less();
+
+  @Source("icons/call.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource call();
+
+  @Source("icons/sms.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource sms();
+
+  @Source("icons/peoples.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource peoples();
+
+
+  /** Applications icons **/
+
+  @Source("icons/apps/blog.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource blog();
+
+  @Source("icons/apps/news.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource news();
+
+  @Source("icons/apps/calendar.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource calendar();
+
+  @Source("icons/apps/webpage.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource webpage();
+
+  @Source("icons/apps/ged.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource ged();
+
+  @Source("icons/apps/media_library.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource mediaLib();
+
+  @Source("icons/apps/link.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource link();
+
+  @Source("icons/apps/classifieds.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource classifieds();
+
+  @Source("icons/apps/faq.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource faq();
+
+  @Source("icons/apps/form.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource form();
+
+  @Source("icons/apps/book_online.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource bookonline();
+
+  @Source("icons/apps/poll.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource poll();
+
+  @Source("icons/apps/quiz.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource quizz();
+
+  @Source("icons/apps/workflow.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource workflow();
+
+  /** Applications images ressources **/
+
+  @Source("icons/apps/ged/folder.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource folder();
+
+  @Source("icons/apps/ged/trash.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource trash();
+
+  @Source("icons/apps/ged/publication.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource publication();
+
+  @Source("icons/shortcuts/home_shortcut.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource homeShortcut();
+
+  @Source("icons/shortcuts/favorites_shortcut.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource favoritesShortcut();
+
+  @Source("icons/shortcuts/contacts_shortcut.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource contactsShortcut();
+
+  @Source("icons/shortcuts/tasks_shortcut.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource tasksShortcut();
+
+  @Source("icons/shortcuts/chat_shortcut.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource chatShortcut();
+  @Source("icons/menu/help.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource help();
+
+  @Source("icons/menu/settings.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource settings();
+
+  @Source("icons/menu/home.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource home();
+
+  @Source("icons/menu/logout.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource logout();
+
+  @Source("icons/menu/usercalendar.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource usercalendar();
+
+  @Source("icons/menu/sharebox.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource sharebox();
+
+  @Source("icons/menu/inbox.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource inbox();
+
+  @Source("icons/menu/search.svg")
+  @DataResource.MimeType("image/svg+xml")
+  TextResource search();
 }
+
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/application.css b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/application.css
index 86551fd1e..e06fd4c29 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/application.css
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/application.css
@@ -27,4 +27,6 @@
 	overflow: inherit;
 	height: inherit;
 	width: inherit;
+	background-position-x: -5px;
+	background-position-y: -5px;
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/blog.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/blog.svg
new file mode 100644
index 000000000..b3be43d4a
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/blog.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M560-564v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-600q-38 0-73 9.5T560-564Zm0 220v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-380q-38 0-73 9t-67 27Zm0-110v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-490q-38 0-73 9.5T560-454ZM260-320q47 0 91.5 10.5T440-278v-394q-41-24-87-36t-93-12q-36 0-71.5 7T120-692v396q35-12 69.5-18t70.5-6Zm260 42q44-21 88.5-31.5T700-320q36 0 70.5 6t69.5 18v-396q-33-14-68.5-21t-71.5-7q-47 0-93 12t-87 36v394Zm-40 118q-48-38-104-59t-116-21q-42 0-82.5 11T100-198q-21 11-40.5-1T40-234v-482q0-11 5.5-21T62-752q46-24 96-36t102-12q58 0 113.5 15T480-740q51-30 106.5-45T700-800q52 0 102 12t96 36q11 5 16.5 15t5.5 21v482q0 23-19.5 35t-40.5 1q-37-20-77.5-31T700-240q-60 0-116 21t-104 59ZM280-494Z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/book_online.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/book_online.svg
new file mode 100644
index 000000000..19fca0725
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/book_online.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><rect fill="none" height="24" width="24"/><g><path d="M17,1H7C5.9,1,5,1.9,5,3v18c0,1.1,0.9,2,2,2h10c1.1,0,2-0.9,2-2V3C19,1.9,18.1,1,17,1z M7,18V6h10v12H7z M16,11V9.14 C16,8.51,15.55,8,15,8H9C8.45,8,8,8.51,8,9.14l0,1.96c0.55,0,1,0.45,1,1c0,0.55-0.45,1-1,1l0,1.76C8,15.49,8.45,16,9,16h6 c0.55,0,1-0.51,1-1.14V13c-0.55,0-1-0.45-1-1C15,11.45,15.45,11,16,11z M12.5,14.5h-1v-1h1V14.5z M12.5,12.5h-1v-1h1V12.5z M12.5,10.5h-1v-1h1V10.5z"/></g></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/calendar.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/calendar.svg
new file mode 100644
index 000000000..d628db86d
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/calendar.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Zm0 0v-80 80Zm280 240q-17 0-28.5-11.5T440-440q0-17 11.5-28.5T480-480q17 0 28.5 11.5T520-440q0 17-11.5 28.5T480-400Zm-160 0q-17 0-28.5-11.5T280-440q0-17 11.5-28.5T320-480q17 0 28.5 11.5T360-440q0 17-11.5 28.5T320-400Zm320 0q-17 0-28.5-11.5T600-440q0-17 11.5-28.5T640-480q17 0 28.5 11.5T680-440q0 17-11.5 28.5T640-400ZM480-240q-17 0-28.5-11.5T440-280q0-17 11.5-28.5T480-320q17 0 28.5 11.5T520-280q0 17-11.5 28.5T480-240Zm-160 0q-17 0-28.5-11.5T280-280q0-17 11.5-28.5T320-320q17 0 28.5 11.5T360-280q0 17-11.5 28.5T320-240Zm320 0q-17 0-28.5-11.5T600-280q0-17 11.5-28.5T640-320q17 0 28.5 11.5T680-280q0 17-11.5 28.5T640-240Z"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/classifieds.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/classifieds.svg
new file mode 100644
index 000000000..c7605a5e8
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/classifieds.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M280-80q-33 0-56.5-23.5T200-160q0-33 23.5-56.5T280-240q33 0 56.5 23.5T360-160q0 33-23.5 56.5T280-80Zm400 0q-33 0-56.5-23.5T600-160q0-33 23.5-56.5T680-240q33 0 56.5 23.5T760-160q0 33-23.5 56.5T680-80ZM246-720l96 200h280l110-200H246Zm-38-80h590q23 0 35 20.5t1 41.5L692-482q-11 20-29.5 31T622-440H324l-44 80h480v80H280q-45 0-68-39.5t-2-78.5l54-98-144-304H40v-80h130l38 80Zm134 280h280-280Z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/faq.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/faq.svg
new file mode 100644
index 000000000..10b5689af
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/faq.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/form.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/form.svg
new file mode 100644
index 000000000..8ce6b0557
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/form.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 5v14H5V5h14m1.1-2H3.9c-.5 0-.9.4-.9.9v16.2c0 .4.4.9.9.9h16.2c.4 0 .9-.5.9-.9V3.9c0-.5-.5-.9-.9-.9zM11 7h6v2h-6V7zm0 4h6v2h-6v-2zm0 4h6v2h-6zM7 7h2v2H7zm0 4h2v2H7zm0 4h2v2H7z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged.svg
new file mode 100644
index 000000000..72a671828
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/folder.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/folder.svg
new file mode 100644
index 000000000..72a671828
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/folder.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/publication.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/publication.svg
new file mode 100644
index 000000000..f720a0c46
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/publication.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h360l200 200v520q0 33-23.5 56.5T720-80H240Zm0-80h480v-480H560v-160H240v640Zm240-40q67 0 113.5-47T640-360v-160h-80v160q0 33-23 56.5T480-280q-33 0-56.5-23.5T400-360v-220q0-9 6-14.5t14-5.5q9 0 14.5 5.5T440-580v220h80v-220q0-42-29-71t-71-29q-42 0-71 29t-29 71v220q0 66 47 113t113 47ZM240-800v160-160 640-640Z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/trash.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/trash.svg
new file mode 100644
index 000000000..560d174b9
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/trash.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/link.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/link.svg
new file mode 100644
index 000000000..50ce54c18
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/link.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/media_library.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/media_library.svg
new file mode 100644
index 000000000..f8b20debe
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/media_library.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M22 16V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2zm-11-4l2.03 2.71L16 11l4 5H8l3-4zM2 6v14c0 1.1.9 2 2 2h14v-2H4V6H2z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/news.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/news.svg
new file mode 100644
index 000000000..e6ecbc14e
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/news.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M280-280q17 0 28.5-11.5T320-320q0-17-11.5-28.5T280-360q-17 0-28.5 11.5T240-320q0 17 11.5 28.5T280-280Zm-40-160h80v-240h-80v240Zm200 160h280v-80H440v80Zm0-160h280v-80H440v80Zm0-160h280v-80H440v80ZM160-120q-33 0-56.5-23.5T80-200v-560q0-33 23.5-56.5T160-840h640q33 0 56.5 23.5T880-760v560q0 33-23.5 56.5T800-120H160Zm0-80h640v-560H160v560Zm0 0v-560 560Z"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/poll.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/poll.svg
new file mode 100644
index 000000000..68dc07849
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/poll.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/quiz.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/quiz.svg
new file mode 100644
index 000000000..ca289cb99
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/quiz.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><path d="M0,0h24v24H0V0z" fill="none"/></g><g><g><path d="M4,6H2v14c0,1.1,0.9,2,2,2h14v-2H4V6z"/><path d="M20,2H8C6.9,2,6,2.9,6,4v12c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V4C22,2.9,21.1,2,20,2z M14.01,15 c-0.59,0-1.05-0.47-1.05-1.05c0-0.59,0.47-1.04,1.05-1.04c0.59,0,1.04,0.45,1.04,1.04C15.04,14.53,14.6,15,14.01,15z M16.51,8.83 c-0.63,0.93-1.23,1.21-1.56,1.81c-0.13,0.24-0.18,0.4-0.18,1.18h-1.52c0-0.41-0.06-1.08,0.26-1.65c0.41-0.73,1.18-1.16,1.63-1.8 c0.48-0.68,0.21-1.94-1.14-1.94c-0.88,0-1.32,0.67-1.5,1.23l-1.37-0.57C11.51,5.96,12.52,5,13.99,5c1.23,0,2.08,0.56,2.51,1.26 C16.87,6.87,17.08,7.99,16.51,8.83z"/></g></g></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/webpage.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/webpage.svg
new file mode 100644
index 000000000..1265c26da
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/webpage.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M280-280h280v-80H280v80Zm0-160h400v-80H280v80Zm0-160h400v-80H280v80Zm-80 480q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/workflow.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/workflow.svg
new file mode 100644
index 000000000..3c0669d29
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/workflow.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M400-80v-164l294-292q12-12 26.5-18t30.5-6q16 0 30.5 6t26.5 18l49 50q11 12 17 26.5t6 29.5q0 15-6.5 29.5T856-374L564-80H400Zm397-348-50-49 50 49ZM480-160h50l162-162-25-25-25-25-162 162v50Zm187-187-25-25 25 25 25 25-25-25ZM430-590l-56-57 73-73H313q-9 26-28 45t-45 28v334q35 13 57.5 43.5T320-200q0 50-35 85t-85 35q-50 0-85-35t-35-85q0-39 22.5-69t57.5-43v-335q-35-13-57.5-43.5T80-760q0-50 35-85t85-35q39 0 69.5 22.5T313-800h134l-73-73 56-57 170 170-170 170Zm330-290q50 0 85 35t35 85q0 50-35 85t-85 35q-50 0-85-35t-35-85q0-50 35-85t85-35ZM200-160q17 0 28.5-11.5T240-200q0-17-11.5-28.5T200-240q-17 0-28.5 11.5T160-200q0 17 11.5 28.5T200-160Zm0-560q17 0 28.5-11.5T240-760q0-17-11.5-28.5T200-800q-17 0-28.5 11.5T160-760q0 17 11.5 28.5T200-720Zm560 0q17 0 28.5-11.5T800-760q0-17-11.5-28.5T760-800q-17 0-28.5 11.5T720-760q0 17 11.5 28.5T760-720ZM200-200Zm0-560Zm560 0Z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/avatar.png b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/avatar.png
similarity index 100%
rename from mobile-war/src/main/java/org/silverpeas/mobile/client/resources/avatar.png
rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/avatar.png
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/call.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/call.svg
new file mode 100644
index 000000000..08df7f11e
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/call.svg
@@ -0,0 +1 @@
+<svg height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20.01 15.38c-1.23 0-2.42-.2-3.53-.56-.35-.12-.74-.03-1.01.24l-1.57 1.97c-2.83-1.35-5.48-3.9-6.89-6.83l1.95-1.66c.27-.28.35-.67.24-1.02-.37-1.11-.56-2.3-.56-3.53 0-.54-.45-.99-.99-.99H4.19C3.65 3 3 3.24 3 3.99 3 13.28 10.73 21 20.01 21c.71 0 .99-.63.99-1.18v-3.45c0-.54-.45-.99-.99-.99z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/expand_less.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/expand_less.svg
new file mode 100644
index 000000000..2d2595701
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/expand_less.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/expand_more.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/expand_more.svg
new file mode 100644
index 000000000..c55bd7ff5
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/expand_more.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/help.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/help.svg
new file mode 100644
index 000000000..3c5cd4aae
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/help.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/home.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/home.svg
new file mode 100644
index 000000000..b7e227a3e
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/home.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0z" fill="none"/><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/inbox.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/inbox.svg
new file mode 100644
index 000000000..ed6363627
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/inbox.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M19 3H4.99c-1.11 0-1.98.89-1.98 2L3 19c0 1.1.88 2 1.99 2H19c1.1 0 2-.9 2-2V5c0-1.11-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3H4.99V5H19v10z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/logout.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/logout.svg
new file mode 100644
index 000000000..fe0a49072
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/logout.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0z" fill="none"/><path d="M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4V5z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/search.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/search.svg
new file mode 100644
index 000000000..7c2111eb7
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/search.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/settings.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/settings.svg
new file mode 100644
index 000000000..e40c8496e
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/settings.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><path d="M0,0h24v24H0V0z" fill="none"/><path d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z"/></g></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/sharebox.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/sharebox.svg
new file mode 100644
index 000000000..07fc6639e
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/sharebox.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/usercalendar.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/usercalendar.svg
new file mode 100644
index 000000000..c482b90b9
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/usercalendar.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/offline.png b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/offline.png
similarity index 100%
rename from mobile-war/src/main/java/org/silverpeas/mobile/client/resources/offline.png
rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/offline.png
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/peoples.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/peoples.svg
new file mode 100644
index 000000000..0d0dbf821
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/peoples.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><rect fill="none" height="24" width="24"/></g><g><g/><g><g><path d="M16.67,13.13C18.04,14.06,19,15.32,19,17v3h4v-3 C23,14.82,19.43,13.53,16.67,13.13z" fill-rule="evenodd" fill="#7eb73b"/></g><g><circle cx="9" cy="8" fill-rule="evenodd" fill="#7eb73b" r="4"/></g><g><path d="M15,12c2.21,0,4-1.79,4-4c0-2.21-1.79-4-4-4c-0.47,0-0.91,0.1-1.33,0.24 C14.5,5.27,15,6.58,15,8s-0.5,2.73-1.33,3.76C14.09,11.9,14.53,12,15,12z" fill-rule="evenodd" fill="#7eb73b"/></g><g><path d="M9,13c-2.67,0-8,1.34-8,4v3h16v-3C17,14.34,11.67,13,9,13z" fill-rule="evenodd" fill="#7eb73b"/></g></g></g></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/chat_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/chat_shortcut.svg
new file mode 100644
index 000000000..b4af4b1bf
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/chat_shortcut.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 9h12v2H6V9zm8 5H6v-2h8v2zm4-6H6V6h12v2z"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/contacts_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/contacts_shortcut.svg
new file mode 100644
index 000000000..83277867a
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/contacts_shortcut.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z" fill="none"/><path d="M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/favorites_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/favorites_shortcut.svg
new file mode 100644
index 000000000..d090bc060
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/favorites_shortcut.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/home_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/home_shortcut.svg
new file mode 100644
index 000000000..341070110
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/home_shortcut.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0z" fill="none"/><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/tasks_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/tasks_shortcut.svg
new file mode 100644
index 000000000..704516259
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/tasks_shortcut.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px"><rect fill="none" height="24" width="24"/><path d="M11,7H2v2h9V7z M11,15H2v2h9V15z M16.34,11l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,5.34L16.34,11z M16.34,19 l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,13.34L16.34,19z"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/sms.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/sms.svg
new file mode 100644
index 000000000..c9f8ac0be
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/sms.svg
@@ -0,0 +1 @@
+<svg height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM9 11H7V9h2v2zm4 0h-2V9h2v2zm4 0h-2V9h2v2z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/star.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/star.svg
new file mode 100644
index 000000000..dcd73881f
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/star.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M0 0h24v24H0z" fill="none"/><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" fill="#a9a9a9"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/sound.png b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/sound.png
deleted file mode 100644
index 53069e667..000000000
Binary files a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/sound.png and /dev/null differ
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/streaming.png b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/streaming.png
deleted file mode 100644
index 0b09eb084..000000000
Binary files a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/streaming.png and /dev/null differ
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/video.png b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/video.png
deleted file mode 100644
index c18a57fde..000000000
Binary files a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/video.png and /dev/null differ
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/animations.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/animations.css
new file mode 100644
index 000000000..c81d45d74
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/animations.css
@@ -0,0 +1,48 @@
+.closing-page {
+    transition: transform 300ms;
+    transform: translateX(+100%);
+}
+
+.opening-page {
+    transition: transform 300ms;
+    transform: translateX(-100%);
+}
+
+.open-qvf-menu {
+    opacity: 1.0;
+    transition: opacity 250ms linear;
+}
+
+.closed-qvf-menu {
+    opacity: 0.0;
+    transition: opacity 250ms linear;
+}
+
+.ripple {
+    position: absolute;
+    border-radius: 50%;
+    /* To make it round */
+    background-color: rgba(0, 0, 0, 0.3);
+
+    width: 100px;
+    height: 100px;
+    margin-top: -50px;
+    /* for positioning */
+    margin-left: -50px;
+
+    animation: ripple 1s;
+    opacity: 0;
+}
+
+/* Add animation */
+@keyframes ripple {
+    from {
+        opacity: 1;
+        transform: scale(0);
+    }
+
+    to {
+        opacity: 0;
+        transform: scale(10);
+    }
+}
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css
new file mode 100644
index 000000000..b4627bf57
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css
@@ -0,0 +1,211 @@
+
+/** Checkbox **********************************************************************************************************/
+
+.checkbox-wrapper {
+    display : inline-grid;
+    vertical-align : middle;
+}
+
+.checkbox-wrapper input[type=checkbox] {
+    height: 0;
+    width: 0;
+    display: none;
+}
+
+.checkbox-wrapper label {
+    --size: 4em;
+
+    cursor: pointer;
+    width: var(--size);
+    height: calc(var(--size) / 2);
+    background: black;
+    display: block;
+    border-radius: 0.25em;
+    position: relative;
+}
+
+.checkbox-wrapper label:after {
+    content: '';
+    position: absolute;
+    top: 6%;
+    left: 2.5%;
+    width: calc(50% - 5%);
+    height: calc(100% - 10%);
+    background: #fff;
+    border-radius: 0.25em;
+    transition: 0.3s;
+}
+
+.checkbox-wrapper input:checked + label {
+    /*background: #bada55;*/
+    background: linear-gradient(#7eb73a, #6fa800) repeat scroll 0 0 #6fa800;
+}
+
+.checkbox-wrapper input:checked + label:after {
+    left: calc(100% - 2.5%);
+    transform: translateX(-100%);
+}
+
+.checkbox-wrapper label:active:after {
+    width: 55%;
+}
+
+/** Menu **************************************************************************************************************/
+
+#header > .box {
+    border-radius: 2px;
+    position: absolute;
+    left:12px;
+    top:12px;
+    width: 30px;
+    height: 30px;
+}
+
+
+#header > div > div > span {
+    display: block;
+    width: 100%;
+        box-shadow: 0 2px 10px 0 rgba(0,0,0,0.3);
+    border-radius: 1px;
+    height: 4px;
+    background: #fff;
+    transition: all .3s;
+    position: relative;
+}
+
+#header > div > div > span + span {
+    margin-top: 5px;
+}
+
+.active span:nth-child(1) {
+    animation: ease .7s top forwards;
+}
+
+.not-active span:nth-child(1) {
+    animation: ease .7s top-2 forwards;
+}
+
+.active span:nth-child(2) {
+    animation: ease .7s scaled forwards;
+}
+
+.not-active span:nth-child(2) {
+    animation: ease .7s scaled-2 forwards;
+}
+
+.active span:nth-child(3) {
+    animation: ease .7s bottom forwards;
+}
+
+.not-active span:nth-child(3) {
+    animation: ease .7s bottom-2 forwards;
+}
+
+@keyframes top {
+    0% {
+        top: 0;
+        transform: rotate(0);
+    }
+    50% {
+        top: 9px;;
+        transform: rotate(0);
+    }
+    100% {
+        top: 9px;;
+        transform: rotate(45deg);
+    }
+}
+
+@keyframes top-2 {
+    0% {
+        top: 9px;;
+        transform: rotate(45deg);
+    }
+    50% {
+        top: 9px;;
+        transform: rotate(0deg);
+    }
+    100% {
+        top: 0;
+        transform: rotate(0deg);
+    }
+}
+
+@keyframes bottom {
+    0% {
+        bottom: 0;
+        transform: rotate(0);
+    }
+    50% {
+        bottom: 9px;;
+        transform: rotate(0);
+    }
+    100% {
+        bottom: 9px;;
+        transform: rotate(135deg);
+    }
+}
+
+@keyframes bottom-2 {
+    0% {
+        bottom: 9px;;
+        transform: rotate(135deg);
+    }
+    50% {
+        bottom: 9px;;
+        transform: rotate(0);
+    }
+    100% {
+        bottom: 0;
+        transform: rotate(0);
+    }
+}
+
+@keyframes scaled {
+    50% {
+        transform: scale(0);
+    }
+    100% {
+        transform: scale(0);
+    }
+}
+
+@keyframes scaled-2 {
+    0% {
+        transform: scale(0);
+    }
+    50% {
+        transform: scale(0);
+    }
+    100% {
+        transform: scale(1);
+    }
+}
+
+/***** Range input ***************/
+
+input[type="range"] {
+    height: 5px;
+    -webkit-appearance: none;
+    background: rgb(197, 197, 197);
+    outline: none;
+    color: rgb(197, 197, 197);
+
+}
+input[type="range"]::-webkit-slider-thumb {
+    -webkit-appearance: none;
+    width: 25px;
+    height: 25px;
+    border-radius: 50%;
+    background: #6fa800;
+    cursor: pointer;
+}
+
+.readonly input[type="range"] {
+    height: 1em;
+}
+
+.readonly input[type="range"]::-webkit-slider-thumb {
+    width: 0px;
+    height: 0px;
+}
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/download.png b/mobile-war/src/main/java/org/silverpeas/mobile/public/download.png
deleted file mode 100644
index 5b3c0cf54..000000000
Binary files a/mobile-war/src/main/java/org/silverpeas/mobile/public/download.png and /dev/null differ
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/forbidden-download.png b/mobile-war/src/main/java/org/silverpeas/mobile/public/forbidden-download.png
deleted file mode 100644
index 08b80dd3d..000000000
Binary files a/mobile-war/src/main/java/org/silverpeas/mobile/public/forbidden-download.png and /dev/null differ
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/account.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/account.svg
new file mode 100644
index 000000000..c984876f5
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/account.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M3 5v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2H5c-1.11 0-2 .9-2 2zm12 4c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34 3 3zm-9 8c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1H6v-1z" fill="black"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/add.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/add.svg
new file mode 100644
index 000000000..62c119a4f
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/add.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/arrow_back.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/arrow_back.svg
new file mode 100644
index 000000000..a7d784dfd
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/arrow_back.svg
@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36">
+    <path d="M0 0h36v36h-36z" fill="none"/>
+    <path d="M30 16.5h-18.26l8.38-8.38-2.12-2.12-12 12 12 12 2.12-2.12-8.38-8.38h18.26v-3z" fill="#fff"/>
+</svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/arrow_forward.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/arrow_forward.svg
new file mode 100644
index 000000000..97e1aaff4
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/arrow_forward.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   height="24"
+   viewBox="0 0 24 24"
+   width="24"
+   version="1.1"
+   id="svg2"
+   sodipodi:docname="expand_less.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <defs
+     id="defs2" />
+  <sodipodi:namedview
+     id="namedview2"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1" />
+  <path
+     d="M 0,0 H 24 V 24 H 0 Z"
+     fill="none"
+     id="path1" />
+  <path
+     d="m 15.705,11.705 -6,-6 -1.41,1.41 4.58,4.59 -4.58,4.59 1.41,1.41 z"
+     id="path2" />
+</svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/calendar_today.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/calendar_today.svg
new file mode 100644
index 000000000..5bbe6a941
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/calendar_today.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/comment.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/comment.svg
new file mode 100644
index 000000000..21792818f
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/comment.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M21.99 4c0-1.1-.89-2-1.99-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h14l4 4-.01-18zM18 14H6v-2h12v2zm0-3H6V9h12v2zm0-3H6V6h12v2z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/contacts.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/contacts.svg
new file mode 100644
index 000000000..3bd94fcdc
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/contacts.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z" fill="none"/><path d="M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z" fill="back"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/delete.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/delete.svg
new file mode 100644
index 000000000..560d174b9
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/delete.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/download.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/download.svg
new file mode 100644
index 000000000..c4ec1c354
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/download.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><rect fill="none" height="24" width="24"/></g><g><path d="M5,20h14v-2H5V20z M19,9h-4V3H9v6H5l7,7L19,9z"/></g></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/edit.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/edit.svg
new file mode 100644
index 000000000..13586f290
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/edit.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/event.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/event.svg
new file mode 100644
index 000000000..5bbe6a941
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/event.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/expand_less.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/expand_less.svg
new file mode 100644
index 000000000..2d2595701
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/expand_less.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/expand_more.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/expand_more.svg
new file mode 100644
index 000000000..c55bd7ff5
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/expand_more.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-calc.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-calc.svg
new file mode 100644
index 000000000..0eaca9f52
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-calc.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 32 32"><path fill="#107c41" d="M21.818 0a.795.795 0 0 0-.74.469a.78.78 0 0 0 .172.849l6.646 6.661a.811.811 0 0 0 .849.177a.792.792 0 0 0 .484-.708V.771A.807.807 0 0 0 28.448 0zM3.547 0a.787.787 0 0 0-.776.786v30.427c0 .432.349.781.776.786h24.896a.789.789 0 0 0 .786-.786V11.619a.792.792 0 0 0-.229-.557L18.234.244a.799.799 0 0 0-.563-.245zm.786 1.578h13.005l10.313 10.359v18.484H4.333z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-excel.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-excel.svg
new file mode 100644
index 000000000..0249b58c8
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-excel.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24"><path fill="#107c41" d="M21.17 3.25q.33 0 .59.25q.24.24.24.58v15.84q0 .34-.24.58q-.26.25-.59.25H7.83q-.33 0-.59-.25q-.24-.24-.24-.58V17H2.83q-.33 0-.59-.24Q2 16.5 2 16.17V7.83q0-.33.24-.59Q2.5 7 2.83 7H7V4.08q0-.34.24-.58q.26-.25.59-.25M7 13.06l1.18 2.22h1.79L8 12.06l1.93-3.17H8.22L7.13 10.9l-.04.06l-.03.07q-.26-.53-.56-1.07q-.25-.53-.53-1.07H4.16l1.89 3.19L4 15.28h1.78m8.1 4.22V17H8.25v2.5m5.63-3.75v-3.12H12v3.12m1.88-4.37V8.25H12v3.13M13.88 7V4.5H8.25V7m12.5 12.5V17h-5.62v2.5m5.62-3.75v-3.12h-5.62v3.12m5.62-4.37V8.25h-5.62v3.13M20.75 7V4.5h-5.62V7Z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-image.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-image.svg
new file mode 100644
index 000000000..8a02d8ab5
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-image.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="#eb6a05" d="m5 11.1l2-2l5.5 5.5l3.5-3.5l3 3V5H5zM4 3h16a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1m11.5 7a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-pdf.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-pdf.svg
new file mode 100644
index 000000000..01c65b553
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-pdf.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" d="M4.998 9V1H19.5L23 4.5V23H4M18 1v5h5M3 12h1.5c2 0 2.25 1.25 2.25 2s-.25 2-2.25 2H3.25v2H3zm6.5 6v-6h1.705c1.137 0 2.295.5 2.295 3s-1.158 3-2.295 3zm7 1v-7h4m-4 3.5h3"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-powerpoint.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-powerpoint.svg
new file mode 100644
index 000000000..aa9ee2d3a
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-powerpoint.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24"><path fill="#d35230" d="M13.5 1.5q1.453 0 2.795.375q1.342.375 2.508 1.06q1.166.686 2.12 1.641q.956.955 1.641 2.121q.686 1.166 1.061 2.508Q24 10.547 24 12q0 1.453-.375 2.795q-.375 1.342-1.06 2.508q-.686 1.166-1.641 2.12q-.955.956-2.121 1.641q-1.166.686-2.508 1.061q-1.342.375-2.795.375q-1.29 0-2.52-.305q-1.23-.304-2.337-.884q-1.108-.58-2.063-1.418q-.955-.838-1.693-1.893H.997q-.411 0-.704-.293T0 17.004V6.996q0-.41.293-.703T.996 6h3.89q.739-1.055 1.694-1.893q.955-.837 2.063-1.418q1.107-.58 2.337-.884Q12.21 1.5 13.5 1.5m.75 1.535v8.215h8.215q-.14-1.64-.826-3.076q-.686-1.436-1.782-2.531q-1.095-1.096-2.537-1.782q-1.441-.685-3.07-.826m-5.262 7.57q0-.68-.228-1.166q-.229-.486-.627-.79q-.399-.305-.938-.446q-.539-.14-1.172-.14H2.848v7.863h1.84v-2.742H5.93q.574 0 1.119-.17t.978-.493q.434-.322.698-.802q.263-.48.263-1.114M13.5 21q1.172 0 2.262-.287t2.056-.82q.967-.534 1.776-1.278q.808-.744 1.418-1.664q.61-.92.984-1.986q.375-1.067.469-2.227h-9.703V3.035q-1.735.14-3.27.908T6.797 6h4.207q.41 0 .703.293t.293.703v10.008q0 .41-.293.703t-.703.293H6.797q.644.715 1.412 1.271q.768.557 1.623.944q.855.387 1.781.586Q12.54 21 13.5 21M5.812 9.598q.575 0 .915.228q.34.229.34.838q0 .27-.124.44q-.123.17-.31.275q-.188.105-.422.146q-.234.041-.445.041H4.687V9.598Z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-presentation.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-presentation.svg
new file mode 100644
index 000000000..c5d4879e1
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-presentation.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="#d35230" d="M16.365 0a.597.597 0 0 0-.555.352a.582.582 0 0 0 .128.635l4.985 4.996a.605.605 0 0 0 .635.133a.59.59 0 0 0 .363-.53V.577A.605.605 0 0 0 21.335 0zM2.661 0a.59.59 0 0 0-.582.59v22.82a.59.59 0 0 0 .582.59h18.67a.59.59 0 0 0 .59-.59V8.716a.59.59 0 0 0-.17-.42L13.674.182a.59.59 0 0 0-.42-.181zm.59 1.184h9.754l7.733 7.77v13.863H3.251z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-sound.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-sound.svg
new file mode 100644
index 000000000..ead42df06
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-sound.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="#7eb73b"/><path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z" fill="white"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-unknown.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-unknown.svg
new file mode 100644
index 000000000..a33b32dff
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-unknown.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="black" d="M9 2.003V2h10.998C20.55 2 21 2.455 21 2.992v18.016a.993.993 0 0 1-.993.992H3.993A1 1 0 0 1 3 20.993V8zM5.83 8H9V4.83zM11 4v5a1 1 0 0 1-1 1H5v10h14V4z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-video-ondemand.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-video-ondemand.svg
new file mode 100644
index 000000000..7ca91146d
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-video-ondemand.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M21 3H3c-1.11 0-2 .89-2 2v12c0 1.1.89 2 2 2h5v2h8v-2h5c1.1 0 1.99-.9 1.99-2L23 5c0-1.11-.9-2-2-2zm0 14H3V5h18v12zm-5-6l-7 4V7z" fill="#eb6a05"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-video.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-video.svg
new file mode 100644
index 000000000..7792b62b9
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-video.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M21 3H3c-1.11 0-2 .89-2 2v12c0 1.1.89 2 2 2h5v2h8v-2h5c1.1 0 1.99-.9 1.99-2L23 5c0-1.11-.9-2-2-2zm0 14H3V5h18v12z" fill="#eb6a05"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-word.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-word.svg
new file mode 100644
index 000000000..6228ea19b
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-word.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24"><path fill="#026c9c" d="M21.17 3.25q.33 0 .59.25q.24.24.24.58v15.84q0 .34-.24.58q-.26.25-.59.25H7.83q-.33 0-.59-.25q-.24-.24-.24-.58V17H2.83q-.33 0-.59-.24Q2 16.5 2 16.17V7.83q0-.33.24-.59Q2.5 7 2.83 7H7V4.08q0-.34.24-.58q.26-.25.59-.25m-.8 8.09l1.2 3.94H9.6l1.31-6.56H9.53l-.78 3.88l-1.11-3.75H6.5l-1.19 3.77l-.78-3.9H3.09l1.31 6.56h1.37m14.98 4.22V17H8.25v2.5m12.5-3.75v-3.12H12v3.12m8.75-4.37V8.25H12v3.13M20.75 7V4.5H8.25V7Z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-writer.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-writer.svg
new file mode 100644
index 000000000..068fd94a1
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-writer.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 32 32"><path fill="#026c9c" d="M21.818 0a.795.795 0 0 0-.74.469a.78.78 0 0 0 .172.849l6.646 6.661a.811.811 0 0 0 .849.177a.792.792 0 0 0 .484-.708V.771A.807.807 0 0 0 28.448 0zM3.547 0a.787.787 0 0 0-.776.786v30.427c0 .432.349.781.776.786h24.896a.789.789 0 0 0 .786-.786V11.619a.792.792 0 0 0-.229-.557L18.234.244a.799.799 0 0 0-.563-.245zm.786 1.578h13.005l10.313 10.359v18.484H4.333z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-zip.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-zip.svg
new file mode 100644
index 000000000..007419361
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-zip.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 1024 1024"><path fill="#ffd100" d="M854.6 288.7c6 6 9.4 14.1 9.4 22.6V928c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V96c0-17.7 14.3-32 32-32h424.7c8.5 0 16.7 3.4 22.7 9.4zM790.2 326L602 137.8V326zM296 136v64h64v-64zm64 64v64h64v-64zm-64 64v64h64v-64zm64 64v64h64v-64zm-64 64v64h64v-64zm64 64v64h64v-64zm-64 64v64h64v-64zm0 64v160h128V584zm48 48h32v64h-32z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/help.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/help.svg
new file mode 100644
index 000000000..8c2e93dcc
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/help.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z" fill="#7eb73b"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home.svg
new file mode 100644
index 000000000..e8d717eae
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#7eb73b"><path d="M0 0h24v24H0z" fill="none"/><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/link.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/link.svg
new file mode 100644
index 000000000..50ce54c18
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/link.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/logout.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/logout.svg
new file mode 100644
index 000000000..7ec1ee20c
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/logout.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4V5z" fill="#7eb73b"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/mark_read.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/mark_read.svg
new file mode 100644
index 000000000..e09dd4c43
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/mark_read.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><rect fill="none" height="24" width="24" x="0"/><path d="M12,19c0-3.87,3.13-7,7-7c1.08,0,2.09,0.25,3,0.68V6c0-1.1-0.9-2-2-2H4C2.9,4,2,4.9,2,6v12c0,1.1,0.9,2,2,2h8.08 C12.03,19.67,12,19.34,12,19z M4,6l8,5l8-5v2l-8,5L4,8V6z M17.34,22l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L23,16.34L17.34,22z"/></g></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/media.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/media.svg
new file mode 100644
index 000000000..5d4bac103
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/media.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/remove_circle.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/remove_circle.svg
new file mode 100644
index 000000000..2a1ab5f24
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/remove_circle.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11H7v-2h10v2z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/search.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/search.svg
new file mode 100644
index 000000000..7c2111eb7
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/search.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/send.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/send.svg
new file mode 100644
index 000000000..033ab7a11
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/send.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/settings.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/settings.svg
new file mode 100644
index 000000000..155b7d7a1
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/settings.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><path d="M0,0h24v24H0V0z" fill="none"/><path d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z" fill="#7eb73b"/></g></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/share.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/share.svg
new file mode 100644
index 000000000..07fc6639e
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/share.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/chat_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/chat_shortcut.svg
new file mode 100644
index 000000000..b4af4b1bf
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/chat_shortcut.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 9h12v2H6V9zm8 5H6v-2h8v2zm4-6H6V6h12v2z"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/contacts_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/contacts_shortcut.svg
new file mode 100644
index 000000000..83277867a
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/contacts_shortcut.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z" fill="none"/><path d="M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/favorites_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/favorites_shortcut.svg
new file mode 100644
index 000000000..d090bc060
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/favorites_shortcut.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/home_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/home_shortcut.svg
new file mode 100644
index 000000000..341070110
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/home_shortcut.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0z" fill="none"/><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/tasks_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/tasks_shortcut.svg
new file mode 100644
index 000000000..704516259
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/tasks_shortcut.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px"><rect fill="none" height="24" width="24"/><path d="M11,7H2v2h9V7z M11,15H2v2h9V15z M16.34,11l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,5.34L16.34,11z M16.34,19 l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,13.34L16.34,19z"/></svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/speaker_phone.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/speaker_phone.svg
new file mode 100644
index 000000000..a8e09c349
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/speaker_phone.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0zm0 0h24v24H0V0z" fill="none"/><path d="M7 7.07L8.43 8.5c.91-.91 2.18-1.48 3.57-1.48s2.66.57 3.57 1.48L17 7.07C15.72 5.79 13.95 5 12 5s-3.72.79-5 2.07zM12 1C8.98 1 6.24 2.23 4.25 4.21l1.41 1.41C7.28 4 9.53 3 12 3s4.72 1 6.34 2.62l1.41-1.41C17.76 2.23 15.02 1 12 1zm2.86 9.01L9.14 10C8.51 10 8 10.51 8 11.14v9.71c0 .63.51 1.14 1.14 1.14h5.71c.63 0 1.14-.51 1.14-1.14v-9.71c.01-.63-.5-1.13-1.13-1.13zM15 20H9v-8h6v8z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/stop.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/stop.svg
new file mode 100644
index 000000000..f6976ad79
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/stop.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M6 6h12v12H6z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/view.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/view.svg
new file mode 100644
index 000000000..37e45c117
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/view.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M21 3H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h5v2h8v-2h5c1.1 0 1.99-.9 1.99-2L23 5c0-1.1-.9-2-2-2zm0 14H3V5h18v12z"/></svg>
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/qvf.png b/mobile-war/src/main/java/org/silverpeas/mobile/public/qvf.png
deleted file mode 100644
index 112b1c040..000000000
Binary files a/mobile-war/src/main/java/org/silverpeas/mobile/public/qvf.png and /dev/null differ
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/qvf.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/qvf.svg
new file mode 100644
index 000000000..4e7617356
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/qvf.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   height="24"
+   viewBox="0 0 24 24"
+   width="24"
+   version="1.1"
+   id="svg2"
+   sodipodi:docname="more_verti.svg"
+   inkscape:version="1.3.1 (9b9bdc1480, 2023-11-25, custom)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <defs
+     id="defs2" />
+  <sodipodi:namedview
+     id="namedview2"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:zoom="31.541667"
+     inkscape:cx="12.015852"
+     inkscape:cy="12"
+     inkscape:window-width="1920"
+     inkscape:window-height="957"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2" />
+  <path
+     d="M0 0h24v24H0z"
+     fill="none"
+     id="path1" />
+  <path
+     d="M 15,3 C 15,1.35 13.65,0 12,0 10.349999,0 9,1.35 9,3 c 0,1.65 1.349999,3 3,3 1.65,0 3,-1.35 3,-3 z m 0,17.999999 c 0,-1.65 -1.35,-3 -3,-3 -1.650001,0 -3,1.35 -3,3 0,1.65 1.349999,3 3,3 1.65,0 3,-1.35 3,-3 z m 0,-9 C 15,10.349999 13.65,9 12,9 c -1.650001,0 -3,1.349999 -3,2.999999 0,1.65 1.349999,3 3,3 1.65,0 3,-1.35 3,-3 z"
+     id="path2"
+     style="stroke-width:1.49999" />
+</svg>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobil.jsp b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobil.jsp
new file mode 100644
index 000000000..3f6e2c4ad
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobil.jsp
@@ -0,0 +1,176 @@
+<%@ page import="com.fasterxml.jackson.databind.ObjectMapper" %>
+<%@ page import="org.silverpeas.core.admin.domain.DomainType" %>
+<%@ page import="org.silverpeas.core.admin.domain.DomainTypeRegistry" %>
+<%@ page import="org.silverpeas.core.security.session.SessionInfo" %>
+<%@ page import="org.silverpeas.core.security.session.SessionManagement" %>
+<%@ page import="org.silverpeas.core.security.session.SessionManagementProvider" %>
+<%@ page import="org.silverpeas.core.security.token.synchronizer.SynchronizerToken" %>
+<%@ page import="org.silverpeas.core.util.LocalizationBundle" %>
+<%@ page import="org.silverpeas.core.util.ResourceLocator" %>
+<%@ page import="org.silverpeas.core.util.URLUtil" %>
+<%@ page import="org.silverpeas.mobile.server.helpers.ResourceBundleHelper" %>
+<%@ page import="java.util.Map" %>
+<%@ page import="org.silverpeas.core.util.SettingBundle" %>
+<%@ page import="org.silverpeas.bridge.MobilFilter" %>
+
+<%--
+  ~ Copyright (C) 2000 - 2022 Silverpeas
+  ~ This program is free software: you can redistribute it and/or modify
+  ~ it under the terms of the GNU Affero General Public License as
+  ~ published by the Free Software Foundation, either version 3 of the
+  ~ License, or (at your option) any later version.
+  ~
+  ~ As a special exception to the terms and conditions of version 3.0 of
+  ~ the GPL, you may redistribute this Program in connection with Free/Libre
+  ~ Open Source Software ("FLOSS") applications as described in Silverpeas's
+  ~ FLOSS exception.  You should have received a copy of the text describing
+  ~ the FLOSS exception, and it is also available here:
+  ~ "http://www.silverpeas.org/docs/core/legal/floss_exception.html"
+  ~
+  ~ This program is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  ~ GNU Affero General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU Affero General Public License
+  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  --%>
+
+<!doctype html>
+<html>
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
+  <meta name="robots" content="noindex">
+  <meta name="viewport"
+        content="width=device-width, target-densitydpi=device-dpi, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
+
+  <meta name="mobile-web-app-capable" content="yes">
+  <meta name="HandheldFriendly" content="true">
+  <meta name="apple-mobile-web-app-capable" content="yes"/>
+  <meta name="apple-mobile-web-app-status-bar-style" content="default"/>
+  <link rel="manifest" href="manifest.json">
+
+  <%
+    String l = request.getHeader("Accept-Language");
+    String appUrl = URLUtil.getApplicationURL();
+    if (l != null && !l.isEmpty()) {
+
+      l = l.substring(0, 2);
+      if (!l.equalsIgnoreCase("fr")) {
+        l = "en";
+      }
+    } else {
+      l = "en";
+    }
+
+    String loginPage = request.getParameter("forceLoginPage");
+    boolean displayLoginPage = false;
+    if (loginPage != null && loginPage.equalsIgnoreCase("true")) {
+      displayLoginPage = true;
+    }
+
+    // SSO case
+    SynchronizerToken token =
+        (SynchronizerToken) ((HttpServletRequest) request).getSession().getAttribute("X-STKN");
+    LocalizationBundle resourceGeneralLook =
+        ResourceLocator.getLocalizationBundle("org.silverpeas.lookAndFeel.generalLook", l);
+    String ssoPath = resourceGeneralLook.getString("login.sso.path");
+    if (!displayLoginPage && token == null && (DomainTypeRegistry.get().exists(DomainType.GOOGLE) ||
+        DomainTypeRegistry.get().exists(DomainType.SCIM)) &&
+        (ssoPath != null && !ssoPath.isEmpty())) {
+      if (!ssoPath.startsWith("/")) {
+        ssoPath = "/" + ssoPath;
+      }
+      ssoPath = appUrl + ssoPath;
+      response.sendRedirect(ssoPath);
+    } else {
+      session.removeAttribute(MobilFilter.SESSION_PARAMS_KEY);
+    }
+
+    if (token != null) {
+      out.print("<meta name='sp_token' content='" + token.getValue() + "'/>");
+
+      SessionManagement sessionManagement = SessionManagementProvider.getSessionManagement();
+      SessionInfo sessionInfo = sessionManagement.validateSession(session.getId());
+      out.print("<meta name='sp_session' content='" + sessionInfo.getSessionId() + "'/>");
+
+    }
+
+    LocalizationBundle resourceLabels =
+        ResourceLocator.getLocalizationBundle("org.silverpeas.mobile.multilang.mobileBundle", l);
+    Map<String, String> map = ResourceBundleHelper.convertResourceBundleToMap(resourceLabels);
+    String jsonLabels = new ObjectMapper().writeValueAsString(map);
+
+    LocalizationBundle resource =
+        ResourceLocator.getLocalizationBundle("org.silverpeas.mobile.mobileSettings", l);
+    Map<String, String> mapConfig = ResourceBundleHelper.convertResourceBundleToMap(resource);
+    String jsonParams = new ObjectMapper().writeValueAsString(mapConfig);
+    
+    String nocache = resource.getString("nocache");
+    if (nocache.equalsIgnoreCase("true")) {
+      response.setHeader("Clear-Site-Data", "\"cache\", \"storage\"");
+    }
+  %>
+
+  <meta name="gwt:property" content="locale=<%=l%>">
+
+  <link rel="apple-touch-icon" href="<%= resource.getString("apple-touch-icon")%>"/>
+  <link rel="apple-touch-icon" sizes="72x72"
+        href="<%= resource.getString("apple-touch-icon72x72")%>"/>
+  <link rel="apple-touch-icon" sizes="114x114"
+        href="<%= resource.getString("apple-touch-icon114x114")%>"/>
+  <link rel="shortcut icon" sizes="196x196"
+        href="<%= resource.getString("shortcut_icon196x196")%>"/>
+  <link rel="shortcut icon" sizes="128x128"
+        href="<%= resource.getString("shortcut_icon128x128")%>"/>
+
+  <title><%= resourceLabels.getString("shortcut_title")%>
+  </title>
+  <%
+    SettingBundle settings = ResourceLocator.getSettingBundle("org.silverpeas.mobile.mobileSettings");
+    String jsonFireBaseConfig = settings.getString("push.notification.clientConfig", "null");
+    if (!jsonFireBaseConfig.equals("null")) {
+      out.println("<script src='"+ appUrl + "/spmobile/firebasejs/7.12.0/firebase-app.js'></script>");
+      out.println("<script src='" + appUrl + "/spmobile/firebasejs/7.12.0/firebase-messaging.js'></script>");
+    }
+  %>
+
+  <script type="text/javascript" src="<%=appUrl%>/spmobile/spmobile.nocache.js"></script>
+  <script>
+    var labels = <% out.println(jsonLabels); %>;
+    var params = <% out.println(jsonParams); %>;
+
+    function resize() {
+      var windowHeight = window.innerHeight;
+      document.body.style.height = windowHeight + "px";
+    }
+    function navigate(url) {
+      window.navigateTo(url);
+    }
+  </script>
+
+  <%
+    String css = resource.getString("styleSheet");
+    if (css != null && !css.isEmpty()) {
+      out.println("<link rel='stylesheet' type='text/css' href='" + css + "'>");
+    }
+  %>
+
+
+</head>
+<body class="ui-panel-wrapper ui-page-theme-a csspinner traditional" onload="resize();">
+<%
+  String fullSsoPath = "";
+  if (!ssoPath.trim().isEmpty()) {
+    fullSsoPath = request.getRequestURL().toString();
+    fullSsoPath = fullSsoPath.replace("/spmobile/spmobil.jsp", "");
+    fullSsoPath = fullSsoPath + ssoPath;
+  }
+%>
+<input type="hidden" id="ssoPath" value="<%=fullSsoPath%>">
+<div id="oneinch"
+     style="position: absolute;padding: 0;visibility: hidden;width: 1in;height: 1in;"></div>
+
+</body>
+
+</html>
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css
index cd3d0d5df..917e75da6 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css
@@ -22,12 +22,16 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+@import "components.css";
+@import "animations.css";
+
 /* Globals */
 /* Font
 -----------------------------------------------------------------------------------------------------------*/
 html {
   font-size: 100%;
   height: 100%;
+  scrollbar-width: none;
 }
 
 body.ui-panel-wrapper {
@@ -36,10 +40,15 @@ body.ui-panel-wrapper {
   background-color: #ececec;
 }
 
-body, input, select, textarea, button, .ui-btn {
+body {
   font-size: 10pt;
   line-height: 1em;
-  font-family: Open Sans, sans-serif
+  font-family: Open Sans, sans-serif;
+  overscroll-behavior-y: contain;
+}
+
+input, select, textarea, button, .ui-btn {
+  font-size: 1em;
 }
 
 legend, .ui-input-text input, .ui-input-search input {
@@ -49,7 +58,7 @@ legend, .ui-input-text input, .ui-input-search input {
 /* Form labels (overrides font-weight bold in bars, and mini font-size) */
 .ui-mobile label, div.ui-controlgroup-label {
   font-weight: normal;
-  font-size: 16px;
+  font-size: 1.2em;
 }
 
 /* Separators
@@ -160,7 +169,7 @@ legend, .ui-input-text input, .ui-input-search input {
 /* Icons
 -----------------------------------------------------------------------------------------------------------*/
 .ui-btn-icon-left:after, .ui-btn-icon-right:after, .ui-btn-icon-top:after, .ui-btn-icon-bottom:after, .ui-btn-icon-notext:after {
-  background: transparent url(packImagesNavigation.png) right -963px;
+  background: transparent url('icons/arrow_forward.svg') right;
   content: " ";
 }
 
@@ -253,11 +262,8 @@ legend, .ui-input-text input, .ui-input-search input {
 
 .ui-page-theme-a .ui-body-inherit.filter-contacts {
   background-color: #FFF;
-  background-image: url(packPictos.png);
-  background-position: 5px -577px;
+  background-image: url('icons/search.svg');
   background-repeat: no-repeat;
-  width: 92%;
-  padding-left: 2em;
 }
 
 .ui-page-theme-a textarea.ui-body-inherit {
@@ -376,18 +382,6 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 .last-event-bloc h3.title-bloc-part{
 	position:relative;
 }
-.last-event-bloc h3.title-bloc-part::after{
-	content:'';
-	display:block;
-	width:16px;
-	height:16px;
-	background-image: url(packImagesNavigation.png);
-	background-position:-28px -2174px;
-    background-repeat: no-repeat;
-	position:absolute;
-	top:0;
-	right:1.25em;
-}
 
 .last-event-bloc .ui-listview .date {
 	float:right;
@@ -425,9 +419,13 @@ html .ui-controlgroup-controls .ui-btn-up-c {
   font-weight: normal;
 }
 
+#header {
+  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
+}
+
 #header,
 #navigation-footer {
-  background-color: #333;
+  background-color: black;
   height: 46px;
   border-bottom: 2px solid #151515;
   position: fixed;
@@ -443,84 +441,59 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 }
 
 #navigation-footer a {
-  bottom: 0;
-  top: auto;
+  margin: 12px;
+  text-align: center;
   flex: 1;
-  text-indent: -300em;
-  border-left: 1px solid #151515;
-  border-right: 1px solid #444444;
+  transform: scale(1.5);
+  fill: #7eb73b;
 }
 
 #navigation-footer .btn-list-navigation {
-  background: transparent url(packImagesNavigation.png) center -640px no-repeat;
+
 }
 
 #navigation-footer .btn-find-contact {
-  background: transparent url(packImagesNavigation.png) center -709px no-repeat;
+  transform: scale(1.2);
 }
 
 #navigation-footer .btn-update-tchat {
-  background: transparent url(packImagesNavigation.png) center -771px no-repeat;
+  transform: scale(1.2);
 }
 
 #navigation-footer .btn-list-task {
-  background: transparent url(packImagesNavigation.png) center -835px no-repeat;
+
 }
 
 #navigation-footer .btn-list-favoris {
-  background: transparent url(packImagesNavigation.png) center -892px no-repeat;
+  transform: scale(1.4);
 }
 
 #header h1 {
   color: #fff;
-  font-size: 0.8em;
+  font-size: 1.1em;
   font-weight: normal;
-  left: 60px;
+  left: 50px;
   line-height: 44px;
   margin: 0;
   overflow: hidden;
   padding: 0;
   position: absolute;
-  right: 94px;
   top: 1px;
   height: 44px;
-  text-shadow: 0 1px 0 #000;
-}
-
-.ui-icon-bars:after {
-  width: 18px;
-  height: 18px;
-  content: "";
-  display: block;
-  position: absolute;
-  top: 14px;
-  left: 14px;
-  background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M1%2C4h12c0.553%2C0%2C1-0.447%2C1-1s-0.447-1-1-1H1C0.447%2C2%2C0%2C2.447%2C0%2C3S0.447%2C4%2C1%2C4z%20M13%2C6H1%20C0.447%2C6%2C0%2C6.447%2C0%2C7c0%2C0.553%2C0.447%2C1%2C1%2C1h12c0.553%2C0%2C1-0.447%2C1-1C14%2C6.447%2C13.553%2C6%2C13%2C6z%20M13%2C10H1c-0.553%2C0-1%2C0.447-1%2C1%20s0.447%2C1%2C1%2C1h12c0.553%2C0%2C1-0.447%2C1-1S13.553%2C10%2C13%2C10z%22%2F%3E%3C%2Fsvg%3E");
-  background-position: center center;
-  background-repeat: no-repeat;
-  background-size: 100%;
-  z-index: -1;
-}
-
-.ui-icon-bars {
-  border-right: 2px solid #151515;
-  width: 44px;
-  height: 44px;
-  padding: 0;
-  text-indent: -9999px;
-  display: block;
-  position: relative;
+  width: calc(100vw - 50px - 2.5em);
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  overflow: hidden;
 }
 
 .ui-btn-right.back {
-  background: #4c4c4c url(bg-degrade.png) bottom center repeat-x;
-  color: #FFF;
-  text-shadow: 0 1px 0 #000;
-  border: 1px solid #000;
-  height: 28px;
-  line-height: 28px;
-  padding: 0 1em;
-  font-size: 0.8em;
+  background: url('icons/arrow_back.svg') no-repeat;
+  border: none;
+  height: 36px;
+  width: 36px;
+  margin: 0 0 0 0;
+  padding: 0 0 0 0;
+  left:0;
 }
 
 /* HOME */
@@ -530,6 +503,7 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 
 .ui-page-content {
   padding: 0;
+  min-height: calc(100vh - 92px);
 }
 
 #menu-principal {
@@ -569,10 +543,13 @@ html .ui-controlgroup-controls .ui-btn-up-c {
   font-size: 0.8em;
 }
 
+.favoris-bloc span {
+  fill : #a9a9a9;
+  white-space: normal;
+}
+
 .favoris-bloc a {
   padding-left: 2.5em;
-  font-size: 0.95em;
-  background: transparent url(packImagesNavigation.png) 0.5em -1186px no-repeat;
 }
 
 .racourcis-bloc a {
@@ -599,8 +576,8 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 }
 
 .last-publication-bloc .ui-listview li .ui-btn {
-  text-overflow: initial;
-  overflow: auto;
+  text-overflow: ellipsis;
+  overflow: hidden;
   white-space: inherit;
 }
 
@@ -620,6 +597,7 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 .carroussel-news li {
   height: 90px;
   position: relative;
+  overflow: hidden;
 }
 
 .carroussel-news img {
@@ -648,7 +626,7 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 
 .carroussel-news p {
   font-size: 0.75em;
-  line-height: 1em;
+  line-height: inherit;
   color: #666666;
   padding: 0;
   margin: 0;
@@ -656,7 +634,7 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 
 .carroussel-news .nbIndication {
   position: absolute;
-  bottom: -0.7em;
+  bottom: 0em;
   right: 0.5em;
   font-size: 0.85em;
 }
@@ -665,6 +643,15 @@ html .ui-controlgroup-controls .ui-btn-up-c {
   color: #1c94d4
 }
 
+#shortCuts ul li {
+  display: flex;
+  align-items: center;
+}
+
+#shortCuts ul li a {
+  width: 100%;
+}
+
 /***** MENU****/
 #silverpeas-navmenu-panel {
   padding: 0;
@@ -672,6 +659,7 @@ html .ui-controlgroup-controls .ui-btn-up-c {
   background-color: #f4f4f4;
   position: fixed;
   font-size: 0.8em;
+  height: 100vh;
 }
 
 #silverpeas-navmenu-panel .ui-panel-inner {
@@ -685,10 +673,10 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 
 #silverpeas-navmenu-panel #user img {
   float: left;
-  width: 30px;
+  width: 2.5em;
   vertical-align: middle;
   margin-right: 0.25em;
-  border-radius: 30px;
+  border-radius: 100%;
   margin-right: 0.5em;
   border: 1px solid #9d9c9c;
 }
@@ -701,72 +689,115 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 #silverpeas-navmenu-panel #user .edit-my-statut {
   display: inline-block;
   text-indent: -3000px;
-  background: transparent url(packPictos.png) 4px 0 no-repeat;
-  width: 20px;
+  background: transparent url('icons/edit.svg') no-repeat;
+  width: 18px;
+  height: 18px;
 }
 
 #silverpeas-navmenu-panel #navmenu-panel {
   border-top: 1px solid #d3d3d3;
-  border-bottom: 1px solid #d3d3d3;
-  list-style-type: none;
-  padding: 0;
   margin: 0;
+  padding: 0;
 }
 
 #silverpeas-navmenu-panel #navmenu-panel li {
-  padding: 0;
-  margin: 0;
+  list-style-type: none;
+  display: flex;
+  align-items: center;
+}
+
+#silverpeas-navmenu-panel #navmenu-panel li span {
+  position: relative;
+  display: inline;
+  margin-left: 0.5em;
+  font-size: 1.25em;
+}
+
+#silverpeas-navmenu-panel #navmenu-panel li span svg {
+  height: 1.5em;
+  width: 1.5em;
 }
 
 #silverpeas-navmenu-panel #navmenu-panel li a {
-  text-decoration: none;
+  position: relative;
+  display: inline;
+  border: none;
+  font-size: 1.25em;
+  padding-left: 0.5em;
   color: #333333;
-  display: block;
-  padding: 0.5em 0 0.5em 32px;
-  font-size: 0.9em;
-  line-height: 1.6em;
 }
 
-#silverpeas-navmenu-panel #navmenu-panel li#menu-config a {
-  background: transparent url(packPictos.png) 8px -520px no-repeat;
+#actions-menu > :first-child, #navmenu-panel > :first-child, #personals-apps > :first-child {
+  padding-top: 1em;
 }
 
-#silverpeas-navmenu-panel #navmenu-panel li#menu-tasks a {
-  background: transparent url(packPictos.png) 8px -394px no-repeat;
+#actions-menu > :last-child, #navmenu-panel > :last-child, #personals-apps > :last-child {
+  padding-bottom: 1em;
 }
 
-#silverpeas-navmenu-panel #navmenu-panel li#menu-help a {
-  background: transparent url(packPictos.png) 8px -134px no-repeat;
+#personals-apps {
+  border-top: 1px solid #d3d3d3;
+  margin: 0;
+  padding: 0;
 }
 
-#silverpeas-navmenu-panel #navmenu-panel li#menu-notificationsbox a {
-  background: transparent url(packPictos.png) 8px -515px no-repeat;
+#personals-apps li {
+  list-style-type: none;
+  display: flex;
+  align-items: center;
 }
 
-#silverpeas-navmenu-panel #navmenu-panel li#menu-sharesbox a {
-  background: transparent url(packPictos.png) 8px -539px no-repeat;
+#personals-apps li span {
+  position: relative;
+  display: inline;
+  margin-left: 0.5em;
+  font-size: 1.25em;
+}
+#personals-apps li span svg {
+  height: 1.5em;
+  width: 1.5em;
 }
 
-#silverpeas-navmenu-panel #navmenu-panel li#menu-parameter a {
-  background: transparent url(packPictos.png) 8px -98px no-repeat;
+#personals-apps li a {
+  position: relative;
+  display: inline;
+  border: none;
+  font-size: 1.25em;
+  padding : 0 0 0 0.5em;
 }
 
-#silverpeas-navmenu-panel #navmenu-panel li#menu-home a {
-  background: transparent url(packPictos.png) 8px -25px no-repeat;
+#actions-menu {
+  border-top: 1px solid #d3d3d3 !important;
+  position: absolute;
+  bottom: 48px;
+  width: 100%;
+  border: 0;
+  padding-left: 0.5em;
 }
 
-#silverpeas-navmenu-panel #navmenu-panel li#menu-logout a {
-  background: transparent url(packPictos.png) 8px -63px no-repeat;
+#actions-menu li {
+  list-style-type: none;
+  display: flex;
+  align-items: center;
+  fill: #7eb73b;
 }
 
-#silverpeas-navmenu-panel #navmenu-panel li#menu-tchat a {
-  background: transparent url(packPictos.png) 8px -276px no-repeat;
+#actions-menu li span svg {
+  height: 1.5em;
+  width: 1.5em;
 }
 
-#silverpeas-navmenu-panel #navmenu-panel li#menu-usercalendar a {
-  background: transparent url(packImagesNavigation.png) -20px -2171px no-repeat;
+#actions-menu li a {
+  text-decoration: none;
+  color: #333333;
+  display: block;
+  padding-bottom: 0.5em;
+  padding-top: 0.5em;
+  font-size: 1.25em;
+  margin-left: 0.5em;
 }
 
+
 #menu-principal li a strong {
   color: #333333;
 }
@@ -791,31 +822,48 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 
 /***** NAVIGATION ****/
 
-.folder-ged a, .folder-galery a, .publication a, .media a, .trash a, .add-media a, .app-actuality a,
+#spaces ul li, #favoris ul li, #edm li {
+  display: flex;
+  align-items: center;
+}
+
+#spaces ul li a, #favoris ul li a, #edm li a {
+  width: 100%;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.icon-app, .icon-item {
+  position: absolute;
+  left: 0.5em;
+  z-index: 2;
+}
+
+.folder-ged a, .folder-galery a, .publication a, .media a, .trash a, .app-actuality a, .app-ged a, .app-medialib a,
 .publication.ui-input-text, .app-blog a, .app-pageWeb a, .app-workflow a, .app-link a, .app-almanach a, .app-formsOnline a, .app-classifieds a, .app-survey a, .app-faq a, .app-polling a, .app-resourcesManager a {
-  background-image: url(packImagesNavigation.png);
-  background-position: 0.5625em 0.5625em;
-  background-repeat: no-repeat;
-  padding-left: 2.056em
+  padding-left: 2.5em;
 }
 
-.add-media,
-.add-task {
-  background-color: #FDF4EF;
-  border-bottom: 1px solid #EDBCBB;
-  border-top: 1px solid #EDBCBB;
+#actionList-bloc > li {
+  display: inline-block;
+  padding-left: 0.5em;
 }
 
-.ui-listview > li.add-media a,
-.ui-listview > li.add-task a {
-  background: #FDF4EF none;
-  padding-left: 1em
+#actionList-bloc > li:last-child {
+  padding-left: 0em;
 }
 
-.ui-listview > li.add-media a::after,
-.ui-listview > li.add-task a::after {
-  background-position: right -599px;
-  width: 3em;
+.add-task {
+  height: 24px;
+  width: 24px;
+  filter: invert(1);
+  background: url('icons/add.svg') no-repeat;
+}
+
+.add-task a {
+  height: 24px;
+  width: 24px;
+  display: block;
 }
 
 .publication.ui-input-text {
@@ -823,71 +871,90 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 }
 
 .app-formsOnline a {
-  background-position: 0.65em -2208px;
+
 }
 
 .app-almanach a {
-  background-position: -20px -2167px;
+
 }
 
 .app-link a {
-  background-position: 0.65em -1684px;
+
 }
 
 .app-actuality a {
-  background-position: 0.5em -1026px;
+
 }
 
 .folder-ged a {
-  background-position: 0.5em 0.5em;
+
+}
+
+.app-ged a {
+
 }
 
 .app-pageWeb a {
-  background-position: 0.7em -1395px;
+
 }
 
 .app-blog a {
-  background-position: 0.65em -1509px;
+
 }
 
 .app-classifieds a {
-  background-position: 0.65em -2240px;
+
 }
 
 .app-survey a {
-  background-position: 0.65em -2270px;
+
 }
 
 .app-polling a {
-  background-position: 0.65em -2330px;
+
 }
 
 .app-faq a {
-  background-position: 0.65em -2300px;
+
 }
 
 .app-workflow a {
-  background-position: 0.65em -1595px;
+
 }
 
 .app-resourcesManager a {
-  background-position: 0.65em -2360px;
+
 }
 
 .folder-galery a {
-  background-position: 0.5em -95px;
+
 }
 
 .publication a {
-  background-position: 0.5em -190px;
+
 }
 
 .trash a {
-  background-position: 0.5em -495px;
+
 }
 
 .media a {
-  background-position: 0.5em -287px;
+  background: transparent url('icons/media.svg') no-repeat;
+  background-position-y: center;
+  background-position-x: 0.5em;
+}
+
+.add-media, .add-file {
+  height: 24px;
+  width: 24px;
+  filter: invert(1);
+  background: url('icons/add.svg') no-repeat;
+}
+
+.add-media a, .add-file a {
+  height: 24px;
+  width: 24px;
+  display: block;
 }
 
 .media-thumb:first-child {
@@ -895,33 +962,39 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 }
 
 .ui-listview .media-thumb {
-  width: 70px;
-  border: 1px solid #ccc;
+  width: 20vw;
   float: left;
-  margin: 8px 0 0 8px;
+  margin-left: 4vw;
+  margin-top: 4vw;
 }
 
 .media-thumb .ui-thumb {
-  width: 64px;
-  height: 94px;
   overflow: hidden;
   display: block;
   border: 3px solid #FFF;
+  background-color: white !important;
+  box-shadow: 0 2px 10px 0 rgba(0,0,0,0.3);
 }
 
 .media-thumb .ui-thumb img {
-  min-width: 64px;
-  max-height: 75px;
-  max-width: 75px;
-  min-height: 64px;
-  height: auto;
+  width: 100%;
+  height: 75px;
+  object-fit: scale-down;
 }
 
 .media-thumb .ui-thumb span {
-  font-size: 0.6em;
-  height: 2.4em;
+  font-size: 0.8em;
+  height: 2em;
   display: inline-block;
   overflow: hidden;
+  line-height: 1em;
+  background-color: #f6f6f6;
+  width: 100%;
+  color: black;
+}
+
+audio::-webkit-media-controls-enclosure {
+  border-radius: 0;;
 }
 
 .info-nb-sous-elmt {
@@ -961,7 +1034,6 @@ html .ui-controlgroup-controls .ui-btn-up-c {
   color: #848484;
   padding: 1em;
   margin: 0;
-  font-size: 10pt;
 }
 
 .lastUpdate {
@@ -969,7 +1041,6 @@ html .ui-controlgroup-controls .ui-btn-up-c {
   padding-top: 1em;
   padding-left: 1em;
   margin: 0;
-  font-size: 10pt;
 }
 
 .nbViews {
@@ -977,7 +1048,6 @@ html .ui-controlgroup-controls .ui-btn-up-c {
   padding-top: 1em;
   padding-left: 1em;
   margin: 0;
-  font-size: 10pt;
   font-style: italic;
 }
 
@@ -997,7 +1067,7 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 .appHeader {
   padding: 0 1em;
   margin: 0;
-  font-size: 12pt;
+  font-size: 1.2em;
   font-weight: normal;
   height: 3em;
   line-height: 3em;
@@ -1005,7 +1075,7 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 
 .comments .publiName, .comments .mediaName {
   margin-right: 1em;
-  background: transparent url(packImagesNavigation.png) right -400px no-repeat;
+  background: transparent url('icons/comment.svg') no-repeat right;
 }
 
 .cadrePhoto {
@@ -1049,6 +1119,7 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 .list-reservations li > *,
 .list-detail-event  > * {
   padding:1em;
+  padding-left: 0.5em;
 }
 
 #linkedPublications li {
@@ -1080,8 +1151,10 @@ html .ui-controlgroup-controls .ui-btn-up-c {
   border: 0 none;
   margin: 0;
   text-align: left;
-  background: #fff url(packImagesNavigation.png) 0.5625em -390px no-repeat;
-  padding-left: 2.5625em;
+  background: url('icons/comment.svg') no-repeat;
+  padding-left: 3em;
+  background-position-y: center;
+  background-position-x: 0.5em;
 }
 
 #info-event, .elts-pub {
@@ -1121,12 +1194,14 @@ html .ui-controlgroup-controls .ui-btn-up-c {
   line-height: 1.25em;
 }
 
+.icon-participation {
+  position: absolute;
+}
+
 #event #participation .label {
-  background: #fff url(packImagesNavigation.png) 0.15em -1870px no-repeat;
-  padding-left: 1.5625em;
-  line-height: 1.15em;
+  line-height: 2em;
   padding-bottom: 0.5em;
-  display: block;
+  padding-left: 2em;
 }
 
 #event #participation ul {
@@ -1162,15 +1237,16 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 
 #event .actions-rappel {
   display: inline-block;
+  vertical-align: middle;
 }
 
 #event .actions-rappel .delete {
   text-indent: -300em;
   display: inline-block;
-  width: 20px;
-  height: 20px;
+  width: 24px;
+  height: 24px;
   padding: 0 !important;
-  background: transparent url(packImagesNavigation.png) 0em -2054px no-repeat;
+  background: transparent url('icons/remove_circle.svg') no-repeat;
 }
 
 #comments .link-add-comment {
@@ -1178,15 +1254,19 @@ html .ui-controlgroup-controls .ui-btn-up-c {
   text-decoration: underline;
 }
 
+#add-comment {
+  margin-left: 1em;
+  margin-right: 1em;
+}
+
 #add-comment,
 .introduction {
-  padding: 0 1em;
   position: relative;
   margin-bottom: 1em
 }
 
 #add-comment h3 {
-  font-size: 10pt;
+  font-size: 1em;
   font-weight: normal;
   margin: 0;
   padding: 0;
@@ -1199,76 +1279,156 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 }
 
 #add-comment textarea.ui-input-text {
-  font-size: 9pt;
+  font-size: 0.9em;
+  height: 7em;
+  border-radius: 10px;
 }
 
 #add-comment .btn-publicate {
-  font-size: 10pt;
+  font-size: 1em;
   color: #ec9c01;
   display: block;
   text-align: right;
+  background: url("icons/send.svg") no-repeat right;
+  height: 24px;
+  width: 24px;
+  position: absolute;
+  right: 0;
+  bottom: 5px;
+  margin-right: 0.5em ;
 }
 
 #add-comment .btn-publicate.inactif {
   color: #999;
   text-decoration: none;
+  filter: opacity(0.5);
 }
 
 #attachments li a {
   text-decoration: none;
   color: #000;
+  display: flex;
+}
+
+#attachments li a .weight {
+  display: block;
+  color: #848484;
 }
 
-#attachments li a .weight,
 #a-media #attachments li a .dimension {
   display: block;
-  padding-left: 24px;
   color: #848484;
+  padding-left: 0px;
 }
 
 #a-media #attachments li a .weight {
   display: inline-block;
-  padding-left: 4px;
+  padding-left: 0px;
 }
 
 #attachments li a img {
   vertical-align: bottom;
   border: 0;
   margin-right: 8px;
+  float: left;
+  height: 24px;
+  width: 24px;
+}
+
+#attachments li a.expand-more {
+	background: transparent url(icons/expand_more.svg) right 0.5em no-repeat;
+	margin-right: 0.5em;
 }
 
-#attachments li a.downloadable {
-	background: transparent url(download.png) right 1em no-repeat;
-	display: block;
-	margin-right: 1.5em;
+#attachments li a.expand-less {
+  background: transparent url(icons/expand_less.svg) right 0.5em no-repeat;
+  margin-right: 0.5em;
 }
 
 #shares li {
   width: max-content;
 }
-#shares li a.share-link {
-  background: transparent url(download.png) right 1em no-repeat;
-  display: inline-block;
-  width: 10px;
-  height: 24px;
+
+#attachments li a span {
+  display: block;
+  padding-right:1em;
+}
+
+.ops-open, .ops-open #share, .ops-open #download, .ops-open #view, .ops-open #notify {
+  transition: all .25s ease-in-out;
+  color: transparent;
+  height: 30px;
+  line-height:30px;
+  transform: scaleY(1);
+  margin-bottom:1em;
+}
+
+.ops-closed, .ops-closed #share, .ops-closed #download, .ops-closed #view, .ops-closed #notify {
+  transition: all .25s ease-in-out;
+  height: 0px;
+  line-height:0px;
+  transform: scaleY(1);
+  margin-bottom:0px;
+}
+
+.item-open {
+  transition: all .25s ease-in-out;
+  color: transparent;
+  max-height: 600px;
+}
+
+.item-closed {
+  transition: all .25s ease-in-out;
+  max-height: 0px;
+}
+
+
+li > #operations {
+  padding:0em;
+}
+
+#download {
+  background : transparent url(icons/download.svg) no-repeat;
+  background-position: 50% 50%;
+  background-color:#ececec;
+  width: 30px;
+  height: 30px;
+  border-radius: 0.25em;
   margin-right: 1em;
-  margin-left: 1em;
+  float : right;
 }
 
-#attachments li a.share {
-  background: transparent url(share.png) right 1em no-repeat;
-  display: block;
-  margin-right: 1.5em;
-  margin-bottom: 1em;
+#view {
+  background: transparent url(icons/view.svg) no-repeat;
+  background-position: 50% 50%;
+  background-color:#ececec;
+  width: 30px;
+  height: 30px;
+  border-radius: 0.25em;
+  margin-right: 1em;
+  float : right;
 }
 
-#attachments li a span {
-  display: inline-block;
+#share {
+  background: transparent url(icons/share.svg) no-repeat;
+  background-position: 50% 50%;
+  background-color:#ececec;
+  width: 30px;
+  height: 30px;
+  border-radius: 0.25em;
+  margin-right: 1em;
+  float : right;
 }
 
-#attachments li a.not-downloadable {
-  background: transparent url(forbidden-download.png) right 10px no-repeat;
-  display: block;
+#notify {
+  background: transparent url(icons/send.svg) no-repeat;
+  background-position: 50% 50%;
+  background-color:#ececec;
+  width: 30px;
+  height: 30px;
+  border-radius: 0.25em;
+  margin-right: 1em;
+  float : right;
 }
 
 /********** CONTACT *******/
@@ -1281,20 +1441,18 @@ html .ui-controlgroup-controls .ui-btn-up-c {
   font-style: italic;
 }
 
-#btn-my-contacts > span, #btn-all-contacts > span {
-  background: transparent url(packPictos.png) 4px -241px no-repeat;
+#btn-my-contacts > span, #btn-all-contactsext > span {
+  background: url('icons/contacts.svg') no-repeat;
   padding-left: 30px;
   display: block;
-  line-height: 0.8em;
   text-align: left;
   font-size: 0.8em;
 }
 
-#btn-all-contactsext > span {
-  background: transparent url(packPictos.png) 4px -170px no-repeat;
+#btn-all-contacts > span {
+  background: url('icons/account.svg') no-repeat;
   padding-left: 30px;
   display: block;
-  line-height: 0.8em;
   text-align: left;
   font-size: 0.8em;
 }
@@ -1303,6 +1461,7 @@ html .ui-controlgroup-controls .ui-btn-up-c {
   margin-bottom: 2em;
 }
 
+
 /* notification */
 
 #notification .list-contacts li {
@@ -1325,18 +1484,20 @@ html .ui-controlgroup-controls .ui-btn-up-c {
 }
 
 #edit-notification .ui-input-text.destinataires {
-  background: #FFF url(packPictos.png) 13px -234px no-repeat;
-  padding-left: 4em;
   line-height: 1.4em;
   position: relative;
-  color: #AAA;
-  font-size: 80%;
+  color: #000;
+  font-size: 0.8em;
   min-height: 3.4em;
 }
 
+#edit-notification #message {
+  height: 15em;
+}
+
 #edit-notification .ui-input-text.destinataires .nb-user-sectionne {
   position: absolute;
-  top: 1em;
+  top: 0.5em;
   left: 1.6em;
   font-size: 1.4em;
   color: #333;
@@ -1347,24 +1508,24 @@ html .ui-controlgroup-controls .ui-btn-up-c {
   top: 0.1em;
   right: 0.1em;
   bottom: 0.1em;
-  background: #7eb73a url(packPictos.png) 0.5em 0.5em no-repeat;
   display: block;
   text-indent: -300em;
   width: 2em;
 }
 
-#notification .list-notifications > li.selected, .list-resources > li.selected {
+#notification .list-notifications > li.selected, .list-resources > li.selected, #tasks > li.selected,
+.notifications > li.selected, .shares > li.selected, .favoris > li.selected {
   border-left: 8px solid #7eb73a;
   color: #000
 }
 
 #notification .list-notifications {
-  font-size: 80%;
+  font-size: 0.8em;
 }
 
 #notification .title-instruction {
   display: inline-block;
-  font-size: 80%;
+  font-size: 0.8em;
   font-style: italic;
 }
 
@@ -1372,14 +1533,18 @@ html .ui-controlgroup-controls .ui-btn-up-c {
   margin-bottom: 0;
 }
 
+#edit-notification .iconFile {
+  position: absolute;
+}
+
 .filter-contacts,
 #edit-notification .ui-input-text.publication {
   width: 98%;
   padding-right: 1%;
   padding-left: 1%;
-  line-height: 2em;
+  line-height: 2.5em;
   background-color: #FFF;
-  font-size: 80%;
+  font-size: 0.8em;
 }
 
 .ui-controlgroup-horizontal .ui-controlgroup-controls > .ui-btn, .ui-controlgroup-horizontal .ui-controlgroup-controls li > .ui-btn, .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-checkbox, .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-radio, .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-select {
@@ -1405,17 +1570,21 @@ input.filter-contacts {
 .list-contacts,
 .list-comments,
 .list-notifications, {
-  font-size: 10pt;
+  font-size: 1em;
   line-height: 1.8em;
 }
 
 .list-contacts .user-name img,
 .list-comments .user-name img,
 .list-notifications .user-name img {
-  width: 24px;
+  width: 32px;
   border: 1px solid #ccc;
   float: right;
-  margin-right: 1em;
+}
+
+.icon-group svg {
+  float: right;
+  width: 32px;
 }
 
 .list-contacts .user-name,
@@ -1436,6 +1605,19 @@ input.filter-contacts {
   color: #ec8001;
   text-decoration: none;
   white-space: nowrap;
+  margin-right: 1em;
+}
+
+.tel-link span {
+  margin-left: 1em;
+}
+
+.tel-link svg {
+  fill:#ec8001;
+}
+
+.sms-link svg {
+  fill:#ec8001;
 }
 
 /***** STATUT & ADD COMMENT***/
@@ -1445,7 +1627,7 @@ input.filter-contacts {
 }
 
 #update-statut h2, #send-message h2 {
-  font-size: 13pt;
+  font-size: 1.3em;
   font-weight: normal
 }
 
@@ -1472,6 +1654,12 @@ input.filter-contacts {
   border-radius: 10px;
 }
 
+.btn-validate {
+  text-transform: uppercase;
+  border-radius: 2px;
+  box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);
+}
+
 .ui-page-theme-a .btn-validate {
   background-color: #6fa800;
   background: linear-gradient(#7eb73a, #6fa800) repeat scroll 0 0 #6fa800;
@@ -1480,6 +1668,7 @@ input.filter-contacts {
   color: #fff !important;
   text-decoration: none;
   display: block;
+  font-weight: bold;
 }
 
 .btn-validate.smaller {
@@ -1502,7 +1691,7 @@ input.filter-contacts {
 
 .ui-btn-left, .ui-btn-right {
   position: absolute;
-  top: .24em;
+  top: 5px;
 }
 
 .ui-btn {
@@ -1536,6 +1725,7 @@ textarea.ui-input-text {
 .ui-controlgroup-horizontal .ui-controlgroup-controls {
   display: inline-block;
   vertical-align: middle;
+  margin-top:0.5em;
 }
 
 .ui-controlgroup-controls, .ui-controlgroup-controls .ui-radio, .ui-controlgroup-controls .ui-checkbox, .ui-controlgroup-controls .ui-select, .ui-controlgroup-controls li {
@@ -1569,32 +1759,55 @@ textarea.ui-input-text {
 
 #formLogin {
   text-align: center;
-  padding-top: 1em;
+  padding-top: 4em;
 }
 
 #page-login #Login, #page-login #Password {
+  box-sizing: border-box;
   background: #FFF url(bg-input-login.png) 0 0 no-repeat;
-  padding-left: 24px;
+  padding-left: 2em;
   border: 1px solid #dddddd;
-  width: 210px;
-  margin: 0 0 1em 0;
+  width: 70vw;
+  margin: 0 0 1.5em 0;
+  line-height: 2em;
+  border-radius: 0.25em;
+  box-shadow: 0 0 1em 0 rgba(0, 0, 0, 0.2);
 }
 
 #page-login #Password {
   background: #FFF url(bg-input-password.png) 0 0 no-repeat;
 }
 
-#page-login #DomainId {
-  width: 237px;
+#page-login #DomainId, .filter-list {
+  width: 70vw;
+  box-sizing: border-box;
+  padding: 0.5em;
+  background-color: white;
+  border-radius: 0.25em;
+  border: none;
+  box-shadow: 0 0 1em 0 rgba(0, 0, 0, 0.2);
+}
+
+.field-label {
+  padding-right: 1em;
 }
 
 #page-login #password-visibility {
-  margin-bottom: 1em;
+  margin-bottom: 1.5em;
 }
 
 #page-login #copyright {
+  bottom: 3em;
+  font-size: 0.8em;
+  left: 0;
+  position: fixed;
+  right: 0;
+  text-align: center;
+}
+
+#page-login #version {
   bottom: 1em;
-  font-size: 80%;
+  font-size: 0.8em;
   left: 0;
   position: fixed;
   right: 0;
@@ -1604,7 +1817,7 @@ textarea.ui-input-text {
 #page-login .btn-validate,
 #page-login .btn-validate:visited {
   padding: 0.5em 0;
-  width: 235px;
+  width: 10em;
   margin: 1em 0 0
 }
 
@@ -1635,19 +1848,19 @@ textarea.ui-input-text {
 .searchBox {
   border: 1px solid #d3d3d3;
   border-radius: 3px;
-  width:calc( 100% - 2em - 20px );
+  width:calc( 100% - 4em );
   background-color: #FFF;
   color: #666;
   padding: 5px;
   outline-style: none;
+  height: 1.5em;
 }
 
-.searchButton {
-  width: 20px;
-  height: 17px;
-  background: transparent url(packPictos.png) bottom left no-repeat;
-  text-indent: -300em;
+.searchButton svg {
+  width: 2em;
+  height: 2em;
   display: inline-block;
+  position: absolute;
 }
 
 #menu-search {
@@ -1656,14 +1869,6 @@ textarea.ui-input-text {
   border-top: 1px solid #d3d3d3;
 }
 
-#menu-config {
-  /*display:none;*/
-}
-
-#menu-tasks {
-  /*display:none;*/
-}
-
 .bloc-actu-vignette, .bloc-actu-content {
   float: left;
 }
@@ -1681,11 +1886,11 @@ textarea.ui-input-text {
   padding: 0;
 }
 
-.ui-content .carroussel-news li {
+.carroussel-news li {
   height: auto !important;
   clear: both;
   border-bottom: 1px solid #eee;
-  margin-bottom: 1em
+  margin-bottom: 1em;
 }
 
 .ui-content .carroussel-news .caption {
@@ -1718,7 +1923,7 @@ textarea.ui-input-text {
 }
 
 .liste-news li p, .liste-annonces li p {
-  font-size: 11px;
+  font-size: 0.82em;
   color: #666;
 }
 
@@ -1733,7 +1938,6 @@ textarea.ui-input-text {
   border: 0 none;
   margin: 0;
   text-align: left;
-  /*background:#fff url(packImagesNavigation.png) 0.5625em -386px no-repeat;*/
   padding-left: 2.5625em;
 }
 
@@ -1744,7 +1948,7 @@ textarea.ui-input-text {
 
 .forms .form-title {
   color: #333333;
-  font-size: 130%;
+  font-size: 1.3em;
   font-weight: bold;
   margin: 0 0 5px;
   padding: 0;
@@ -1843,30 +2047,6 @@ form .forms .fields > li:nth-child(even) {
   float: left;
 }
 
-.ui-listview input[type="range"] {
-  -webkit-appearance: none;
-  -moz-apperance: none;
-  border-radius: 0px;
-  border: 0;
-  height: 4px;
-  margin: 1em 0;
-  background-image: -webkit-gradient(
-      linear,
-      left top,
-      right top,
-      color-stop(0, #72ab0e),
-      color-stop(0, #C5C5C5)
-  );
-}
-
-.ui-listview input[type='range']::-webkit-slider-thumb {
-  -webkit-appearance: none !important;
-  background-color: transparent;
-  border: 0;
-  height: 1px;
-  width: 1px;
-}
-
 .task-percent-range {
   width: 80%;
   float: right;
@@ -1902,25 +2082,33 @@ form .forms .fields > li:nth-child(even) {
   padding: 1em;
 }
 
+#actions {
+  position: absolute;
+  right: 8px;
+  top: 11px;
+  filter: invert(1);
+  z-index: 9999;
+}
+
 #action-button {
   border: 0;
   position: absolute;
   width: 16px;
   height: 24px;
   text-indent: -3000px;
-  top: 1em;
-  right: 1em;
-  background: transparent url("qvf.png") 0 0 no-repeat;
+  right: 8px;
+  background: transparent url("qvf.svg") 0 0 no-repeat;
   outline: none;
   z-index: 999;
+  padding-left: 12px;
+  padding-right: 12px;
 }
 
 #action-bloc {
-  display: none;
   border: 0;
   position: absolute;
-  top: 3em;
-  right: 1em;
+  top: 37px;
+  right: 2px;
   padding: 0;
   margin: 0;
   width: 10em;
@@ -1942,33 +2130,132 @@ form .forms .fields > li:nth-child(even) {
   width: 100%;
 }
 
+#actionsList {
+  position: absolute;
+  top: 11px;
+  right: 50px;
+  z-index: 9999;
+}
+
+#actionsList ul {
+  margin: 0;
+  padding: 0;
+}
+
+#actionsList li {
+  list-style: none;
+}
+
+#actionsList.menu-empty {
+  right: 8px;
+}
+
+.empty {
+  display: none;
+}
+
+.delete-action {
+  height: 24px;
+  width: 24px;
+  filter: invert(1);
+  background: url('icons/delete.svg') no-repeat;
+}
+
+.add-action {
+  height: 24px;
+  width: 24px;
+  filter: invert(1);
+  background: url('icons/add.svg') no-repeat;
+}
+
+.speak-action {
+  height: 24px;
+  width: 24px;
+  filter: invert(1);
+  background: url('icons/speaker_phone.svg') no-repeat;
+}
+
+.speak-action.running {
+  background: url('icons/stop.svg') no-repeat;
+  animation: stopSpeak 2s infinite;
+}
+
+@-webkit-keyframes stopSpeak {
+  50%   {
+    transform: scale(1.5);
+    opacity: 50
+  }
+  100%   {
+    transform: scale(1.5);
+    opacity: 50
+  }
+}
+
 .config .actuality a {
-  background-image: url(packImagesNavigation.png);
-  background-position: right -1022px;
-  background-repeat: no-repeat;
+
 }
 
 .config .publication a {
-  background-position: right -184px;
+  background:none;
 }
 
 .config .event a {
-  background-image: url(packImagesNavigation.png);
-  background-position: right -1393px;
-  background-repeat: no-repeat;
+
 }
 
 .config .favoris a {
-  background: transparent url(packImagesNavigation.png) right -1182px no-repeat;
+
 }
 
 .config li a {
   padding-left: 1em;
 }
 
+.font-percent-size {
+  margin-left: 1em;
+  margin-bottom: 3em;
+  width: calc(100% - 2em);
+}
+
+.filters > span {
+  display: block;
+  margin-left: 1em;
+}
+
+.ui-listview.favoris {
+  overflow: hidden;
+}
+
 .ui-listview.favoris a {
-  background: transparent url(packImagesNavigation.png) 0.5em -1182px no-repeat;
-  padding-left: 2em;
+  padding-left: 2.5em;
+}
+
+.ui-listview.favoris span {
+  top: 0.25em;
+  fill : #a9a9a9;
+}
+
+.ui-listview.favoris .category {
+  z-index: 3;
+}
+
+.ui-listview.favoris .category .category-title {
+  font-weight: bold;
+}
+
+.ui-listview.favoris .category .category-desc {
+  display: block;
+}
+
+.ui-listview.favoris .category .category-icon {
+  position: absolute;
+  right: 0.5em;
+  fill: black;
+}
+
+.ui-listview.favoris .category a {
+  background-color: #7eb73b;
+  padding-left: 1em;
 }
 
 /*** Popup ***/
@@ -1990,6 +2277,8 @@ form .forms .fields > li:nth-child(even) {
 	width: calc( 90% - 104px );
 	margin:0 5%;
 	text-align: center;
+    z-index: 999;
+    position: absolute;
 }
 
 .popin-btns {
@@ -2067,7 +2356,7 @@ a.popin-btn {
 .forms-list   .gwt-Label{
 	padding-bottom:0.5em;
 	color:#333;
-	font-size:11pt;
+	font-size:1.1em;
 }
 
 .workflow-form li:nth-child(odd),
@@ -2208,8 +2497,8 @@ a.popin-btn {
 .liste-news li h2 a,
 .forms-list h2,
 .liste-annonces li h2 a {
-  font-size: 14px;
-  line-height: 16px;
+  font-size: 1em;
+  line-height: 1.1em;
   color: #555;
   text-decoration: none;
   font-weight:500;
@@ -2270,7 +2559,7 @@ a.popin-btn {
 }
 
 .ui-list-graduate > li {
-  background: #f4f4f4 url(packImagesNavigation.png) right -2104px no-repeat;
+  background: url('icons/expand_more.svg') top right no-repeat;
   border-bottom: 1px solid #ddd;
   position: relative;
 }
@@ -2281,17 +2570,20 @@ a.popin-btn {
   display: inline-block
 }
 
+.graduate-time {
+  line-height: 2em;
+}
+
 .ui-list-graduate li .nb-event {
   position: absolute;
-  right: 1.5em;
+  right: 2em;
   top: 0.4em;
-  background: transparent url(packImagesNavigation.png) right -2176px no-repeat;
-  padding-right: 2em;
-  line-height: 14px;
+  background: transparent url('icons/calendar_today.svg') no-repeat right;
+  padding-right: 2.5em;
 }
 
 .ui-list-graduate li.open .nb-event {
-  display: none;
+
 }
 
 .ui-list-graduate > li:nth-child(odd) {
@@ -2299,12 +2591,12 @@ a.popin-btn {
 }
 
 .ui-list-graduate li.open {
-  background: #4c4c4c url(packImagesNavigation.png) right -2133px no-repeat;
+  background: url('icons/expand_less.svg') top right no-repeat;
   border: 0;
 }
 
 .ui-list-graduate li.open .label {
-  color: #FFF;
+
 }
 
 .ui-list-graduate li ul {
@@ -2312,8 +2604,7 @@ a.popin-btn {
 }
 
 .ui-list-graduate li.open ul {
-  background-color: #4c4c4c;
-  display: block;
+
 }
 
 #list-events .open .ui-listview {
@@ -2359,7 +2650,7 @@ a.popin-btn {
   margin-top: 0.5em;
   max-width: 80%;
   text-overflow: ellipsis;
-  height: 1em;
+  line-height: 1em;
   overflow: hidden;
   white-space: nowrap;
 }
@@ -2370,6 +2661,106 @@ a.popin-btn {
   padding-left: 1em;
 }
 
+#eventForm {
+  padding-top: 2em;
+}
+
+#eventForm .title, #eventForm .allDay {
+  width: calc(100vw - 4em);
+  margin-top: 1em;
+  margin-bottom: 1em;
+  margin-left: 2em;
+  line-height: 2em;
+}
+
+#eventForm .title::placeholder {
+  color: #ec8001;
+}
+
+#eventForm .description {
+  width: calc(100vw - 4em);
+  margin-top: 1em;
+  margin-bottom: 1em;
+  margin-left: 2em;
+  border: none;
+}
+
+#eventForm .priority, #eventForm .visibility {
+  margin-left: 2em;
+  margin-top: 1em;
+  margin-bottom: 1em;
+  display: inline-block;
+}
+
+#eventForm .startDate > label, #eventForm .endDate > label {
+  width: 3em;
+  display: inline-block;
+}
+
+#eventForm .title, #eventForm .startDate > input, #eventForm .endDate > input {
+  line-height: 2em;
+  border: none;
+  border-radius: 2px;
+}
+
+#eventForm .startDate, #eventForm .endDate {
+  display: block;
+  margin-bottom: 1em;
+  margin-left: 2em;
+  float: none;
+}
+
+#eventForm .calendars {
+  display: block;
+  margin-left: 2em;
+}
+
+#eventForm .frequency {
+  display: block;
+  margin-left: 2em;
+  margin-bottom: 1em;
+}
+
+#eventForm .calendars > select, #eventForm .frequency > select {
+  box-sizing: border-box;
+  padding: 0.5em;
+  background-color: white;
+  border-radius: 0.25em;
+  border: none;
+}
+
+#eventForm .participants {
+
+}
+
+#eventForm .participants > label {
+  margin-left: 2em;
+}
+
+#eventForm .participants > a {
+  background-color: white;
+  min-height: 4em;
+  display: inline-block;
+  width: calc(100vw - 4em);
+  margin-left: 2em;
+  margin-top: 1em;
+  vertical-align: middle;
+}
+
+#eventForm .participants > a .selection {
+  color: #333333;
+}
+
+.formMandatoryField {
+  color: #ec8001;
+}
+
+.formIncomplete {
+  filter: grayscale(1);
+}
+
+
+
 .termsOfServiceText {
   text-align: center;
   margin-top: 2em;
@@ -2424,10 +2815,20 @@ a.popin-btn {
   margin:0.50em 0 ;
 }
 
+.filter-classifield {
+  text-align: right;
+}
+
+.filter-classifield span {
+  padding-right: 1em;
+}
+
 .liste-annonces div.thumbnail img{
   margin:auto;
   max-height:125px;
   max-width:125px;
+  border-radius: 2px;
+  box-shadow: 0 0 1em 0 rgba(0, 0, 0, 0.2);
 }
 
 .classified_form {
@@ -2576,41 +2977,117 @@ a.popin-btn {
   padding:1em;
 }
 
-/********* notification **************/
-.notificationBox .ui-listview.notifications  .notification-date {
-	color:#777;
-	display:inline-block;
-	font-size:90%;
+/********* sharebox **************/
+
+.sharesbox .ui-listview.shares a {
+  background-color: transparent;
 }
+
+.sharesbox .ui-listview.shares  .share-date {
+  font-size:90%;
+  display:inline-block;
+  color : #777;
+  user-select: none;
+}
+
+.sharesbox .ui-listview.shares  .share-name {
+  font-size:90%;
+  display:block;
+  color: #70a72e;
+  user-select: none;
+}
+
+.sharesbox .ui-listview.shares .share-link {
+  background: url('icons/link.svg') no-repeat;
+  height: 24px;
+  width: 24px;
+  display: block;
+  float: left;
+  padding-right: 1em;
+}
+
+.ui-listview.shares li span {
+  display:block;
+}
+.ui-listview.shares li {
+  width: 100%;
+  padding: 0.75em 0.75em 0.75em 2em;
+  position: relative;
+  border-bottom:1px solid  #CCC;
+}
+
+.ui-listview.shares li:first-child {
+  border-top:1px solid  #CCC;
+}
+
+.ui-listview.shares  li:nth-child(odd){
+  background-color: #F0F0F0;
+}
+
+.ui-listview.shares  li:nth-child(even){
+  background-color: #FFF;
+}
+
+/********* favorites **************/
+.favorite-desc {
+  display: block;
+  padding-top: 1em;
+  overflow:hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+
+#favoris ul li a {
+  display: flex;
+  align-items: center;
+}
+
+
+
+/********* notification **************/
 .notificationBox .ui-listview.notifications  input {
 	position:absolute;
 	top:0.5em;
 	left:0.25em;
 }
 
+.notificationBox .ui-listview.notifications a {
+    background-color: transparent;
+}
 
-.notificationBox .ui-listview.notifications  .notification-author{
+.notificationBox .ui-listview.notifications  .notification-date,
+.notificationBox .ui-listview.notifications  .notification-author {
 	font-size:90%;
 	display:inline-block;
+    color : #777;
+    user-select: none;
 }
 .notificationBox .ui-listview.notifications  .notification-source {
 	font-size:90%;
+    color: #70a72e;
+    user-select: none;
 }
 
-.notificationBox .ui-listview.notifications  .notification-title{
+.notificationBox .ui-listview.notifications .notification-title{
 	margin-bottom:0.75em;
-	font-weight:600;
+    color: #000;
+    user-select: none;
 }
+
+.notificationBox .notification.not-read a .notification-title {
+  font-weight: bold;
+}
+
 .ui-listview.notifications  li span {
 	display:block;
 }
 .ui-listview.notifications  li{
-	padding: 0.75em 0.75em 0.75em 3em;
+	padding: 0.75em 0.75em 0.75em 2em;
 	position: relative;
 	border-bottom:1px solid  #CCC;
 }
 
-.ui-listview.notifications li:first-child{
+.ui-listview.notifications li:first-child {
 	border-top:1px solid  #CCC;
 }
 
@@ -2622,6 +3099,33 @@ a.popin-btn {
 	background-color: #FFF;
 }
 
+.markAsRead-notification {
+  height: 24px;
+  width: 24px;
+  filter: invert(1);
+  background: url('icons/mark_read.svg') no-repeat;
+}
+
+.add-action a, .delete-action a, .markAsRead-notification a, .speak-action a {
+  height: 24px;
+  width: 24px;
+  display: block;
+}
+
+/******** FAQ ********/
+.faq-categories {
+  width: 90vw;
+  box-sizing: border-box;
+  padding-left: 5vw;
+  background-color: white;
+  border-radius: 0.25em;
+  border: none;
+  box-shadow: 0 0 1em 0 rgba(0, 0, 0, 0.2);
+  padding-right: 5vw;
+  line-height: 3em;
+  height: 2em;
+}
+
 /******** Resources Manager ********/
 
 #resourcesManager .list-resources li.category {
@@ -2639,7 +3143,7 @@ a.popin-btn {
 
 #resourcesManager .reservationDate {
 	font-weight: 600;
-	font-size: 11pt;
+	font-size: 1.1em;
 	padding-bottom: 0.5em;
 }
 
@@ -2716,4 +3220,38 @@ a.popin-btn {
 
 #sharing .label {
   padding-top: 1em;
+}
+
+/**** Cookies information page ****/
+.infosTextContainer {
+  background-color: white;
+  min-height: 25vh;
+  padding: 2em;
+  margin-left: 1em;
+  margin-right: 1em;
+  margin-top: 2em;
+  border-radius: 0.25em;
+}
+
+.infosText {
+  min-height: 20vh;
+  text-align: justify;
+  line-height: 1.2em;
+}
+.infosTextActions {
+  text-align: right;
+}
+
+#header #page-infos-title {
+  left: 1em;
+  right: 1em;
+}
+
+/** Profil Page **/
+
+#champs-password input {
+  display: block;
+  background-color: white;
+  height: 2em;
+  width: calc(100vw - 2em);
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java
index 4d4ff5c4c..d42fc80e2 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java
@@ -25,8 +25,11 @@
 package org.silverpeas.mobile.server;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import org.jsoup.Jsoup;
 import org.silverpeas.core.notification.sse.CDIServerEventListener;
 import org.silverpeas.core.notification.user.UserNotificationServerEvent;
+import org.silverpeas.core.notification.user.server.channel.silvermail.SILVERMAILMessage;
+import org.silverpeas.core.notification.user.server.channel.silvermail.SILVERMAILPersistence;
 import org.silverpeas.core.util.logging.SilverLogger;
 import org.silverpeas.mobile.server.services.helpers.NotificationsPushHelper;
 
@@ -48,7 +51,13 @@ public void on(final UserNotificationServerEvent event) {
       String json = event.getData("", null);
       Map<String, Object> data = mapper.readValue(json, Map.class);
       Boolean isCreation = (Boolean) data.get("isCreation");
+      String id = (String) data.get("id");
       if (Boolean.TRUE.equals(isCreation)) {
+        SILVERMAILMessage msg =  SILVERMAILPersistence.getMessage(event.getEmitterUserId(), Long.valueOf(id));
+        String body = msg.getBody();
+        body = body.replace("<!--BEFORE_MESSAGE_FOOTER-->", "<!--BEFORE_MESSAGE_FOOTER--> ");
+        data.put("body", Jsoup.parse(body).wholeText());
+        data.put("notificationId", (String) id);
         NotificationsPushHelper.getInstance().sendNotification(emitterUserId, data);
       }
     } catch(Exception e) {
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java
index 0c3940eb8..f2c7df9b9 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java
@@ -4,14 +4,18 @@
 import org.silverpeas.core.security.authentication.AuthenticationCredential;
 import org.silverpeas.core.security.authentication.AuthenticationService;
 import org.silverpeas.core.security.authentication.AuthenticationServiceProvider;
+import org.silverpeas.core.security.session.SessionInfo;
+import org.silverpeas.core.security.session.SessionManagement;
+import org.silverpeas.core.security.session.SessionManagementProvider;
 import org.silverpeas.core.util.ResourceLocator;
 import org.silverpeas.core.util.SettingBundle;
+import org.silverpeas.core.util.logging.SilverLogger;
 import org.silverpeas.core.web.mvc.controller.MainSessionController;
 import org.silverpeas.core.web.rs.RESTWebService;
+import org.silverpeas.core.web.util.viewgenerator.html.GraphicElementFactory;
 import org.silverpeas.mobile.server.common.CommandCreateList;
 import org.silverpeas.mobile.shared.StreamingList;
 import org.silverpeas.mobile.shared.dto.BaseDTO;
-import org.silverpeas.mobile.shared.dto.notifications.NotificationSendedDTO;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
@@ -28,7 +32,7 @@ protected static SettingBundle getSettings() {
     return ResourceLocator.getSettingBundle("org.silverpeas.mobile.mobileSettings");
   }
 
-  protected MainSessionController getMainSessionController() throws Exception {
+  protected MainSessionController getMainSessionController() {
     return (MainSessionController) getHttpRequest().getSession()
         .getAttribute(MAINSESSIONCONTROLLER_ATTRIBUT_NAME);
   }
@@ -37,13 +41,47 @@ protected void setMainsessioncontroller(String login, String password, String do
       throws SilverpeasException {
     AuthenticationService authService = AuthenticationServiceProvider.getService();
     AuthenticationCredential credential = AuthenticationCredential.newWithAsLogin(login);
-    String key =
+    String response =
         authService.authenticate(credential.withAsPassword(password).withAsDomainId(domainId));
+    String key;
+    if (response == null) {
+      key = null;
+    } else {
+      key = response;
+    }
     MainSessionController mainSessionController =
         new MainSessionController(key, getHttpRequest().getSession());
   }
 
-  protected StreamingList createStreamingList(CommandCreateList command, int callNumber, int callSize, String cacheKey) throws Exception {
+  protected void initSilverpeasSession(HttpServletRequest request) {
+    MainSessionController controller = (MainSessionController) request.getSession()
+            .getAttribute(MainSessionController.MAIN_SESSION_CONTROLLER_ATT);
+    if (controller == null) {
+      SessionManagement sessionManagement = SessionManagementProvider.getSessionManagement();
+      SessionInfo sessionInfo = sessionManagement.validateSession(request.getSession().getId());
+      if (sessionInfo.getSessionId() == null) {
+        sessionInfo = sessionManagement.openSession(getUser(), request);
+      }
+
+      try {
+        controller = new MainSessionController(sessionInfo, request.getSession());
+      } catch (SilverpeasException e) {
+        SilverLogger.getLogger(this).error(e);
+      }
+      request.getSession()
+              .setAttribute(MainSessionController.MAIN_SESSION_CONTROLLER_ATT, controller);
+    }
+
+    GraphicElementFactory gef = (GraphicElementFactory) request.getSession()
+            .getAttribute(GraphicElementFactory.GE_FACTORY_SESSION_ATT);
+    if (gef == null && controller != null) {
+      gef = new GraphicElementFactory(controller);
+      request.getSession().setAttribute(GraphicElementFactory.GE_FACTORY_SESSION_ATT, gef);
+    }
+  }
+
+  protected StreamingList createStreamingList(CommandCreateList command, int callNumber,
+      int callSize, String cacheKey) throws Exception {
     List list;
     if (callNumber == 0) {
       list = command.execute();
@@ -55,25 +93,31 @@ protected StreamingList createStreamingList(CommandCreateList command, int callN
 
     int calledSize = 0;
     boolean moreElements = true;
-    if (callNumber > 0) calledSize = callSize * callNumber;
+    if (callNumber > 0) {
+      calledSize = callSize * callNumber;
+    }
 
     if ((calledSize + callSize) >= list.size()) {
       moreElements = false;
       callSize = list.size() - calledSize;
     }
-    StreamingList<BaseDTO> streamingList = new StreamingList<BaseDTO>(list.subList(calledSize, calledSize + callSize), moreElements);
-    if (!streamingList.getMoreElement()) getHttpRequest().getSession().removeAttribute(cacheKey);
+    StreamingList<BaseDTO> streamingList =
+        new StreamingList<BaseDTO>(list.subList(calledSize, calledSize + callSize), moreElements);
+    if (!streamingList.getMoreElement()) {
+      getHttpRequest().getSession().removeAttribute(cacheKey);
+    }
     return streamingList;
   }
 
-  protected StreamingList<?> makeStreamingList(int callNumber, String CACHE_NAME, HttpServletRequest request, Populator populator) {
+  protected StreamingList<?> makeStreamingList(int callNumber, String CACHE_NAME,
+      HttpServletRequest request, Populator populator) {
     int callSize = 25;
 
-    List<?> list = (List<?>) request.getSession()
-        .getAttribute(CACHE_NAME);
+    if (callNumber==0) request.getSession().removeAttribute(CACHE_NAME);
+    List<?> list = (List<?>) request.getSession().getAttribute(CACHE_NAME);
     if (list == null) {
-        list = populator.execute();
-        request.getSession().setAttribute(CACHE_NAME, list);
+      list = populator.execute();
+      request.getSession().setAttribute(CACHE_NAME, list);
     }
 
     int calledSize = 0;
@@ -88,9 +132,10 @@ protected StreamingList<?> makeStreamingList(int callNumber, String CACHE_NAME,
     }
 
     List<?> sbList = list.subList(calledSize, calledSize + callSize);
-    StreamingList<?> streamingList =
-        new StreamingList<>(sbList, moreElements);
-    if (callNumber == 0) streamingList.setFirstCall(true);
+    StreamingList<?> streamingList = new StreamingList<>(sbList, moreElements);
+    if (callNumber == 0) {
+      streamingList.setFirstCall(true);
+    }
     if (!streamingList.getMoreElement()) {
       getHttpRequest().getSession().removeAttribute(CACHE_NAME);
     }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceConnection.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceConnection.java
index 4f03332f3..cfef071d9 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceConnection.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceConnection.java
@@ -137,6 +137,8 @@ public DetailUserDTO login(List<String> ids) {
       throw new WebApplicationException(AuthenticationError.CanCreateMainSessionController.name());
     }
 
+    initSilverpeasSession(request);
+
     DetailUserDTO userDTO = new DetailUserDTO();
     userDTO = UserHelper.getInstance().populate(user);
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceContact.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceContact.java
index f833cff1d..eca7273b3 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceContact.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceContact.java
@@ -132,7 +132,8 @@ public List<DetailUserDTO> getContacts(@PathParam("type") String type,
         List tabUserDetail = getUsersByQuery(filter, "UserFull");
         for (int i = 0; i < tabUserDetail.size(); i++) {
           if (i >= startIndex && i < startIndex + pageSize) {
-            listUsers.add(populate(tabUserDetail.get(i)));
+            DetailUserDTO dto = populate(tabUserDetail.get(i));
+            if (dto != null) listUsers.add(dto);
           }
         }
       } else if (type.equals(ContactFilters.ALL_EXT)) {
@@ -320,19 +321,20 @@ private DetailUserDTO populate(Object user) {
       SilverLogger.getLogger(this).debug(SpMobileLogModule.getName(), "ServiceContact.populate",
           "User id=" + userDetail.getId());
       UserFull userFull = UserFull.getById(userDetail.getId());
-      DetailUserDTO dto = new DetailUserDTO();
-      dto.setId(userFull.getId());
-      dto.setFirstName(userFull.getFirstName());
-      dto.setLastName(userFull.getLastName());
-      dto.seteMail(userFull.geteMail());
-      dto.setStatus(userFull.getStatus());
-      dto.setAvatar(userFull.getAvatar());
-      dto.setLanguage(userFull.getUserPreferences().getLanguage());
-      dto.setConnected(userFull.isConnected());
-      String avatar = DataURLHelper.convertAvatarToUrlData(userDetail.getAvatarFileName(),
-          getSettings().getString("avatar.size", "24x"));
-      dto.setAvatar(avatar);
+      DetailUserDTO dto = null;
       if (userFull != null) {
+        dto = new DetailUserDTO();
+        dto.setId(userFull.getId());
+        dto.setFirstName(userFull.getFirstName());
+        dto.setLastName(userFull.getLastName());
+        dto.seteMail(userFull.getEmailAddress());
+        dto.setStatus(userFull.getStatus());
+        dto.setAvatar(userFull.getAvatar());
+        dto.setLanguage(userFull.getUserPreferences().getLanguage());
+        dto.setConnected(userFull.isConnected());
+        String avatar = DataURLHelper.convertAvatarToUrlData(userDetail.getAvatarFileName(),
+            getSettings().getString("avatar.size", "24x"));
+        dto.setAvatar(avatar);
         for (String prop : getUserProperties()) {
           dto.addProperty(prop, userFull.getValue(prop));
         }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java
index c06419e86..f4a448b74 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java
@@ -37,27 +37,19 @@
 import org.silverpeas.core.admin.user.model.User;
 import org.silverpeas.core.annotation.WebService;
 import org.silverpeas.core.comment.service.CommentServiceProvider;
-import org.silverpeas.core.contribution.attachment.AttachmentService;
 import org.silverpeas.core.contribution.attachment.AttachmentServiceProvider;
 import org.silverpeas.core.contribution.attachment.model.SimpleDocument;
 import org.silverpeas.core.contribution.attachment.model.SimpleDocumentPK;
-import org.silverpeas.core.contribution.publication.model.CompletePublication;
-import org.silverpeas.core.contribution.publication.model.PublicationDetail;
-import org.silverpeas.core.contribution.publication.model.PublicationLink;
-import org.silverpeas.core.contribution.publication.model.PublicationPK;
+import org.silverpeas.core.contribution.attachment.util.SimpleDocumentList;
+import org.silverpeas.core.contribution.publication.model.*;
 import org.silverpeas.core.contribution.publication.service.PublicationService;
 import org.silverpeas.core.io.media.image.thumbnail.ThumbnailSettings;
 import org.silverpeas.core.node.model.NodeDetail;
 import org.silverpeas.core.node.model.NodePK;
 import org.silverpeas.core.node.service.NodeService;
 import org.silverpeas.core.sharing.services.SharingServiceProvider;
-import org.silverpeas.core.sharing.services.SharingTicketService;
 import org.silverpeas.core.silverstatistics.access.service.StatisticService;
-import org.silverpeas.core.util.LocalizationBundle;
-import org.silverpeas.core.util.ResourceLocator;
-import org.silverpeas.core.util.ServiceProvider;
-import org.silverpeas.core.util.SettingBundle;
-import org.silverpeas.core.util.StringUtil;
+import org.silverpeas.core.util.*;
 import org.silverpeas.core.util.file.FileServerUtils;
 import org.silverpeas.core.util.logging.SilverLogger;
 import org.silverpeas.core.web.rs.UserPrivilegeValidation;
@@ -348,6 +340,8 @@ public List<PublicationDTO> getPublications(@PathParam("appId") String instanceI
         PublicationDTO dto = new PublicationDTO();
         dto.setId(publicationDetail.getId());
         dto.setVignette(getVignetteUrl(publicationDetail));
+        dto.setDraft(publicationDetail.isDraft());
+        dto.setPublishable(isPublishable(publicationDetail));
 
         if (publicationDetail.isDraft()) {
           if (publicationDetail.getUpdaterId().equals(getUser().getId())) {
@@ -423,6 +417,10 @@ public PublicationDTO getPublication(@PathParam("id") String id,
         .debug("ServiceDocumentsImpl.getPublication", "getPublication for id " + id);
 
     try {
+      final String userLanguage = getUser().getUserPreferences().getLanguage();
+      LocalizationBundle resource =
+              ResourceLocator.getLocalizationBundle("org.silverpeas.mobile.multilang.mobileBundle",
+                      userLanguage);
       SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
 
       PublicationDetail pub = getPubBm().getDetail(new PublicationPK(id));
@@ -431,11 +429,16 @@ public PublicationDTO getPublication(@PathParam("id") String id,
       dto.setId(pub.getId());
       dto.setName(pub.getName());
       dto.setCreator(pub.getCreator().getDisplayedName());
+      dto.setPublishable(isPublishable(pub));
       dto.setUpdater(organizationController.getUserDetail(pub.getUpdaterId()).getDisplayedName());
       dto.setVersion(pub.getVersion());
+      dto.setDraft(pub.isDraft());
+      if (pub.isDraft())  dto.setName(pub.getName() + " (" + resource.getString("publication.draft") + ")");
+
       dto.setDescription(pub.getDescription());
       dto.setUpdateDate(sdf.format(pub.getLastUpdateDate()));
       dto.setCreationDate(sdf.format(pub.getCreationDate()));
+      dto.setNotAllowedDownloads(new ArrayList<>());
 
       if (type.equals(ContentsTypes.Publication.toString())) {
         try {
@@ -444,6 +447,18 @@ public PublicationDTO getPublication(@PathParam("id") String id,
         } catch (Exception e) {
           SilverLogger.getLogger(this).warn("Unable to get views number", e);
         }
+
+        // List all attachements not downloadable for readers
+        ResourceReference foreignKey = new ResourceReference(id, componentId);
+        SimpleDocumentList<SimpleDocument> attachements = AttachmentServiceProvider.getAttachmentService().listAllDocumentsByForeignKey(foreignKey, null);
+        ArrayList<String> notAllowedDownloads = new ArrayList<>();
+        for (SimpleDocument attachement : attachements) {
+          if (!attachement.isDownloadAllowedForReaders() && !attachement.canBeModifiedBy(getUser())) {
+            notAllowedDownloads.add(attachement.getId());
+          }
+        }
+        dto.setNotAllowedDownloads(notAllowedDownloads);
+
       } else if (type.equals(ContentsTypes.News.toString())) {
         dto.setViewsNumber(QuickInfoService.get().getNews(contributionId).getNbAccess());
       } else {
@@ -606,6 +621,83 @@ public List<BaseDTO> getTopicsAndPublications(@PathParam("appId") String instanc
     return list;
   }
 
+  @GET
+  @Produces(MediaType.APPLICATION_JSON)
+  @Path("nextpublication/{id}/{direction}")
+  public PublicationDTO getNextPublication(@PathParam("appId") String instanceId, @PathParam("id") String id, @PathParam("direction") String direction) throws Exception {
+
+    PublicationDTO dto = new PublicationDTO();
+    try {
+      PublicationPK pubPK = new PublicationPK(id);
+      PublicationDetail pub = getPubBm().getDetail(pubPK);
+
+      List<Location> locations = getPubBm().getAllLocations(pubPK);
+      String folderId = locations.get(0).getLocalId();
+
+
+      NodePK nodePK = new NodePK(folderId, instanceId);
+      List<KmeliaPublication> publications = KmeliaService.get().getAuthorizedPublicationsOfFolder(nodePK,
+              getUserTopicProfile(nodePK.getId(), instanceId), getUser().getId(),
+              isTreeStructure(instanceId));
+
+
+      int sort;
+      if (isManualSortingUsed(publications)) {
+        sort = 99;
+      } else {
+        sort = getDefaultSortValue(pubPK.getInstanceId());
+      }
+      new KmeliaPublicationSort(sort).withContentLanguage(getUser().getUserPreferences().getLanguage()).sort(publications);
+
+      KmeliaPublication next = null;
+      for (int i = 0; i < publications.size(); i++) {
+        if (publications.get(i).getId().equals(id)) {
+          if (direction.equalsIgnoreCase("right")) {
+            if (i == publications.size() - 1) {
+              next = publications.get(0);
+            } else {
+              next = publications.get(i + 1);
+            }
+          } else if (direction.equalsIgnoreCase("left")) {
+            if (i == 0) {
+              next = publications.get(publications.size() - 1);
+            } else {
+              next = publications.get(i - 1);
+            }
+          }
+        }
+      }
+      
+      dto.setId(next.getId());
+      dto.setName(next.getName());
+      dto.setDescription(next.getDescription());
+
+    } catch(Throwable e) {
+      SilverLogger.getLogger(this)
+              .error("ServiceDocumentsImpl.getNextPublication", "root.EX_NO_MESSAGE", e);
+      throw e;
+    }
+
+    return dto;
+  }
+
+  private boolean isPublishable(PublicationDetail pub) {
+    return pub.canBeModifiedBy(getUser());
+  }
+
+  @POST
+  @Path("publish/{pubId}")
+  @Produces(MediaType.APPLICATION_JSON)
+  public PublicationDTO publish(@PathParam("appId") String appId, @PathParam("pubId") String pubId) throws Exception {
+    CompletePublication pub = PublicationService.get().getCompletePublication(new PublicationPK(pubId));
+    NodePK nodePK = KmeliaService.get().getPublicationFatherPK(new PublicationPK(pubId, pub.getPublicationDetail().getInstanceId()));
+    String profile = getUserTopicProfile(nodePK.getId(), appId);
+    KmeliaService.get().draftOutPublication(new PublicationPK(pubId), new NodePK(nodePK.getId(), appId), profile);
+    PublicationDTO dto = new PublicationDTO();
+    dto.setName(pub.getPublicationDetail().getName(getUser().getUserPreferences().getLanguage()));
+    return dto;
+  }
+
   @Override
   protected String getResourceBasePath() {
     return PATH;
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceHyperLink.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceHyperLink.java
index 416b167ae..186e7f6e5 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceHyperLink.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceHyperLink.java
@@ -29,6 +29,7 @@
 import org.silverpeas.core.admin.service.Administration;
 import org.silverpeas.core.annotation.WebService;
 import org.silverpeas.core.web.rs.annotation.Authorized;
+import org.silverpeas.mobile.shared.dto.hyperlink.HyperLinkDTO;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.GET;
@@ -53,17 +54,21 @@ public class ServiceHyperLink extends AbstractRestWebService {
   static final String PATH = "mobile/hyperlink";
 
   @GET
-  @Produces(MediaType.TEXT_PLAIN)
+  @Produces(MediaType.APPLICATION_JSON)
   @Path("/")
-  public String getUrl() {
-    String url = "";
+  public HyperLinkDTO getUrl() {
+    HyperLinkDTO dto = new HyperLinkDTO();
     try {
       ComponentInstLight app = Administration.get().getComponentInstLight(componentId);
-      url = app.getParameterValue("URL");
+      dto.setUrl(app.getParameterValue("URL"));
+      String v = app.getParameterValue("openNewWindow");
+      dto.setOpenNewWindow(v.equalsIgnoreCase("yes"));
+      v = app.getParameterValue("isInternalLink");
+      dto.setInternalLink(v.equalsIgnoreCase("yes"));
     } catch (AdminException e) {
       throw new WebApplicationException(e);
     }
-    return url;
+    return dto;
   }
 
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMedia.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMedia.java
index 9242b31cc..d2ee200d6 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMedia.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMedia.java
@@ -174,38 +174,6 @@ private String createPhoto(String name, String userId, String componentId,
     return newMedia.getId();
   }
 
-
-  /**
-   * Retourne la listes des galleries accessibles.
-   */
-  @GET
-  @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
-  @Path("allGalleries")
-  public List<ApplicationInstanceDTO> getAllGalleries(){
-
-    ArrayList<ApplicationInstanceDTO> results = new ArrayList<ApplicationInstanceDTO>();
-    try {
-      String [] rootSpaceIds = Administration.get().getAllRootSpaceIds();
-      for (String rootSpaceId : rootSpaceIds) {
-        String [] componentIds = Administration.get().getAvailCompoIds(rootSpaceId);
-        for (String componentId : componentIds) {
-          ComponentInstLight instance = Administration.get().getComponentInstLight(componentId);
-          if (instance.getName().equals("gallery")) {
-            ApplicationInstanceDTO i = new ApplicationInstanceDTO();
-            i.setId(instance.getId());
-            i.setLabel(instance.getLabel());
-            results.add(i);
-          }
-        }
-      }
-    } catch (Exception e) {
-      SilverLogger.getLogger(this).error("ServiceMediaImpl.getAllGalleries", "root.EX_NO_MESSAGE", e);
-    }
-
-    Collections.sort(results);
-    return results;
-  }
-
   /**
    * Retourne la liste des albums d'une appli media.
    */
@@ -296,7 +264,7 @@ private List<MediaDTO> getMedias(String instanceId, String albumId) throws Media
   @GET
   @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
   @Path("media/{id}")
-  public MediaDTO getMedia(@PathParam("id") String id) {
+  public MediaDTO getMedia(@PathParam("appId") String instanceId, @PathParam("id") String id) {
     MediaDTO dto = null;
     try {
       Media media = getGalleryService().getMedia(new MediaPK(id));
@@ -400,7 +368,7 @@ public VideoStreamingDTO getVideoStreaming(@PathParam("appId") String instanceId
    */
   @GET
   @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
-  @Path("videostream/{pictureId}")
+  @Path("photo/{pictureId}")
   public PhotoDTO getPreviewPicture(@PathParam("appId") String instanceId, @PathParam("pictureId") String pictureId) {
 
     PhotoDTO picture = null;
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMyLinks.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMyLinks.java
new file mode 100644
index 000000000..39bdd1838
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMyLinks.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.server.services;
+
+import org.fusesource.restygwt.client.MethodCallback;
+import org.fusesource.restygwt.client.RestService;
+import org.silverpeas.mobile.shared.dto.MyLinkCategoryDTO;
+import org.silverpeas.mobile.shared.dto.MyLinkDTO;
+import org.silverpeas.mobile.shared.dto.comments.CommentDTO;
+
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import java.util.List;
+
+/**
+ * @author svu
+ */
+@Path("/mylinks")
+public interface ServiceMyLinks extends RestService {
+
+
+  @POST
+  @Path("/")
+  public void addLink(MyLinkDTO newLink, MethodCallback<MyLinkDTO> callback);
+
+  @GET
+  @Path("/")
+  public void getMyLinks(MethodCallback<List<MyLinkDTO>> callback);
+
+  @DELETE
+  @Path("{linkId}")
+  public void deleteLink(final @PathParam("linkId") String linkId, MethodCallback<Void> callback);
+
+  @GET
+  @Path("categories")
+  @Produces(MediaType.APPLICATION_JSON)
+  public void getMyCategories(MethodCallback<List<MyLinkCategoryDTO>> callback);
+
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java
index 6e7accd5c..760a66821 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java
@@ -25,14 +25,10 @@
 package org.silverpeas.mobile.server.services;
 
 import org.apache.commons.lang3.EnumUtils;
-import org.jsoup.Connection;
-import org.jsoup.Jsoup;
-import org.jsoup.nodes.Document;
 import org.silverpeas.components.gallery.model.Media;
 import org.silverpeas.components.gallery.model.MediaPK;
 import org.silverpeas.components.gallery.service.MediaServiceProvider;
 import org.silverpeas.components.quickinfo.model.News;
-import org.silverpeas.core.SilverpeasException;
 import org.silverpeas.core.admin.component.model.ComponentInst;
 import org.silverpeas.core.admin.component.model.ComponentInstLight;
 import org.silverpeas.core.admin.service.AdminException;
@@ -47,15 +43,11 @@
 import org.silverpeas.core.contribution.publication.model.PublicationPK;
 import org.silverpeas.core.contribution.publication.service.PublicationService;
 import org.silverpeas.core.mylinks.model.LinkDetail;
-import org.silverpeas.core.security.session.SessionInfo;
-import org.silverpeas.core.security.session.SessionManagement;
-import org.silverpeas.core.security.session.SessionManagementProvider;
 import org.silverpeas.core.security.token.synchronizer.SynchronizerToken;
 import org.silverpeas.core.util.SettingBundle;
 import org.silverpeas.core.util.StringUtil;
 import org.silverpeas.core.util.logging.SilverLogger;
 import org.silverpeas.core.web.look.PublicationHelper;
-import org.silverpeas.core.web.mvc.controller.MainSessionController;
 import org.silverpeas.core.web.rs.UserPrivilegeValidation;
 import org.silverpeas.core.web.rs.annotation.Authorized;
 import org.silverpeas.core.web.util.viewgenerator.html.GraphicElementFactory;
@@ -66,24 +58,15 @@
 import org.silverpeas.mobile.server.services.helpers.UserHelper;
 import org.silverpeas.mobile.server.services.helpers.events.EventsHelper;
 import org.silverpeas.mobile.server.services.helpers.events.NextEvents;
-import org.silverpeas.mobile.shared.dto.ContentsTypes;
-import org.silverpeas.mobile.shared.dto.DetailUserDTO;
-import org.silverpeas.mobile.shared.dto.HomePageDTO;
-import org.silverpeas.mobile.shared.dto.RightDTO;
-import org.silverpeas.mobile.shared.dto.ShortCutLinkDTO;
+import org.silverpeas.mobile.shared.dto.*;
 import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO;
 import org.silverpeas.mobile.shared.dto.documents.PublicationDTO;
-import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO;
-import org.silverpeas.mobile.shared.dto.navigation.Apps;
-import org.silverpeas.mobile.shared.dto.navigation.HomePages;
-import org.silverpeas.mobile.shared.dto.navigation.SilverpeasObjectDTO;
-import org.silverpeas.mobile.shared.dto.navigation.SpaceDTO;
+import org.silverpeas.mobile.shared.dto.navigation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.*;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
-import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -193,33 +176,6 @@ private DetailUserDTO initSession(DetailUserDTO user) {
     }
   }
 
-  private void initSilverpeasSession() {
-    MainSessionController controller = (MainSessionController) request.getSession()
-        .getAttribute(MainSessionController.MAIN_SESSION_CONTROLLER_ATT);
-    if (controller == null) {
-      SessionManagement sessionManagement = SessionManagementProvider.getSessionManagement();
-      SessionInfo sessionInfo = sessionManagement.validateSession(request.getSession().getId());
-      if (sessionInfo.getSessionId() == null) {
-        sessionInfo = sessionManagement.openSession(getUser(), request);
-      }
-
-      try {
-        controller = new MainSessionController(sessionInfo, request.getSession());
-      } catch (SilverpeasException e) {
-        SilverLogger.getLogger(this).error(e);
-      }
-      request.getSession()
-          .setAttribute(MainSessionController.MAIN_SESSION_CONTROLLER_ATT, controller);
-    }
-
-    GraphicElementFactory gef = (GraphicElementFactory) request.getSession()
-        .getAttribute(GraphicElementFactory.GE_FACTORY_SESSION_ATT);
-    if (gef == null && controller != null) {
-      gef = new GraphicElementFactory(controller);
-      request.getSession().setAttribute(GraphicElementFactory.GE_FACTORY_SESSION_ATT, gef);
-    }
-  }
-
   protected void setUserInSession(UserDetail user) {
     request.getSession().setAttribute(AbstractAuthenticateService.USER_ATTRIBUT_NAME, user);
   }
@@ -230,11 +186,12 @@ protected UserDetail getUserInSession() {
 
   @GET
   @Produces(MediaType.APPLICATION_JSON)
-  @Path("homepage/{spaceId}/")
-  public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) {
+  @Path("homepage/{spaceId}/{zoom}/")
+  public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId, @PathParam("zoom") String zoom) {
     if (spaceId.equals("null")) spaceId = null;
 
-    initSilverpeasSession();
+    initSilverpeasSession(request);
+    request.getSession().setAttribute("Silverpeas_Portlet_SpaceId", spaceId);
 
     String look = "";
     try {
@@ -273,15 +230,15 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) {
       if (spaceId == null) {
         maxNews = settings.getInteger("home.news.size", 3);
       } else {
-        maxNews = settings.getInteger("home.news.size", 3);
-      }
-      List<News> lastNews = NewsHelper.getInstance().getLastNews(getUser().getId(), spaceId);
-      if (lastNews != null && lastNews.size() > maxNews) {
-        lastNews = lastNews.subList(0, maxNews);
+        maxNews = settings.getInteger("space.homepage.news.nb", 3);
       }
 
-      data.setNews(NewsHelper.getInstance().populate(lastNews, false));
-
+      if ((spaceId == null && getSettings().getBoolean("homepage.lastnews", true)) ||
+              (spaceId != null && getSettings().getBoolean("spacehomepage.lastnews", true))) {
+        List<News> lastNews = NewsHelper.getInstance().getLastNews(getUser().getId(), spaceId, maxNews);
+        data.setNews(NewsHelper.getInstance().populate(lastNews, false));
+      }
+            
       if (spaceId == null || spaceId.isEmpty()) {
         List<LinkDetail> links =
             FavoritesHelper.getInstance().getBookmarkPersoVisible(getUser().getId());
@@ -396,16 +353,21 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) {
         String pageWebAppId = settings.getString("home.freezone.appId", "");
         if (pageWebAppId != null && !pageWebAppId.isEmpty() && isComponentAvailable(pageWebAppId)) {
           String html = WysiwygController.loadForReadOnly(pageWebAppId, pageWebAppId, lang);
+          html = "<div style='zoom:"+zoom+"'>" + html + "</div>";
           data.setHtmlFreeZone(html);
         }
       } else if (spaceId != null) {
         SpaceInst space = Administration.get().getSpaceInstById(spaceId);
-        if (space.getFirstPageType() == HomePages.URL.getValue()) {
-          String html =
-              "<iframe frameborder='0' onLoad='javaScript:this.height = this.contentWindow" +
-                  ".document.body" +
-                  ".scrollHeight ;' style='width:100%;' src='" + space.getFirstPageExtraParam() +
-                  "'></iframe>";
+        if (space.getFirstPageType() == HomePages.URL.getValue() &&
+                getSettings().getBoolean("spacehomepage.displayUrlType")) {
+          String url = space.getFirstPageExtraParam();
+          if (url.startsWith("/") && !url.startsWith("/silverpeas") && !url.startsWith("$")) url = "/silverpeas" + url;
+          String html = getIframe(url, zoom);
+          data.setHtmlFreeZone(html);
+        } else if (space.getFirstPageType() == HomePages.APP.getValue() && space.getFirstPageExtraParam().startsWith("webPage")) {
+          String appId = space.getFirstPageExtraParam();
+          String url = "/silverpeas/services/spmobile/PublicationContent" + "?id=" + appId + "&componentId=" + appId;
+          String html = getIframe(url, zoom);
           data.setHtmlFreeZone(html);
         }
       }
@@ -427,6 +389,18 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) {
     return data;
   }
 
+  private String getIframe(String url, String zoom) {
+    String style = "border-style: none; width: 100%; overflow: hidden;";
+
+    String script = "o.contentWindow.document.body.style='zoom:" + zoom + "'; ";
+    script += "var h = o.contentWindow.document.body.scrollHeight;";
+    script += "o.style.height=h+'px'; ";
+
+    String html = "<iframe style='" + style + "' src='" + url + "' onload=\"" + "javascript:(function(o){" + script + "}(this));" + "\" scrolling='no'>";
+    html += "</iframe>";
+    return html;
+  }
+
   private List<ComponentInstLight> getAllowedComponents(boolean visibleOnly, String name,
       String spaceId) {
     OrganizationController oc = OrganizationController.get();
@@ -507,6 +481,40 @@ public Boolean isWorkflowApp(@PathParam("instanceId") String intanceId) {
     }
   }
 
+  @GET
+  @Produces(MediaType.APPLICATION_JSON)
+  @Path("personalSpace/{userId}/")
+  public List<ApplicationInstanceDTO> getPersonnalSpaceContent(@PathParam("userId") String userId) {
+    try {
+      SpaceInst space = Administration.get().getPersonalSpace(userId);
+      List<ApplicationInstanceDTO> apps = new ArrayList<>();
+      for (ComponentInst app : space.getAllComponentsInst()) {
+        ApplicationInstanceDTO dto = populate(app, true);
+        apps.add(dto);
+      }
+      return apps;
+    } catch (AdminException e) {
+      SilverLogger.getLogger(this).error(e);
+      throw new WebApplicationException(e);
+    }
+  }
+
+  @GET
+  @Produces(MediaType.APPLICATION_JSON)
+  @Path("space/{spaceId}/")
+  public SpaceDTO getSpace(@PathParam("spaceId") String spaceId) {
+    try {
+      SpaceInst space = Administration.get().getSpaceInstById(spaceId);
+      SpaceDTO dto = new SpaceDTO();
+      dto.setHomePageType(space.getFirstPageType());
+      dto.setHomePageParameter(space.getFirstPageExtraParam());
+      return dto;
+    } catch (AdminException e) {
+      SilverLogger.getLogger(this).error(e);
+      throw new WebApplicationException(e);
+    }
+  }
+
   //TODO : remove appType
   @GET
   @Produces(MediaType.APPLICATION_JSON)
@@ -516,7 +524,7 @@ public List<SilverpeasObjectDTO> getSpacesAndApps(@PathParam("rootSpaceId") Stri
     if (rootSpaceId !=null && rootSpaceId.equals("null")) rootSpaceId = null;
     try {
       if (rootSpaceId == null) {
-        String[] spaceIds = Administration.get().getAllSpaceIds(getUser().getId());
+        String[] spaceIds = Administration.get().getAllRootSpaceIds(getUser().getId());
         for (String spaceId : spaceIds) {
           SpaceInst space = Administration.get().getSpaceInstById(spaceId);
           if (!space.isRemoved()) {
@@ -549,7 +557,8 @@ public List<SilverpeasObjectDTO> getSpacesAndApps(@PathParam("rootSpaceId") Stri
           ComponentInstLight app = Administration.get().getComponentInstLight(appId);
           if (isSupportedApp(app) && app.getDomainFatherId().equals(rootSpaceId)) {
             if (!app.isHidden()) {
-              partialResults.add(populate(app));
+              SpaceInst space = Administration.get().getSpaceInstById(app.getDomainFatherId());
+              partialResults.add(populate(app, space.isPersonalSpace()));
             }
           }
         }
@@ -597,7 +606,8 @@ private ApplicationInstanceDTO getApplicationInstanceDTO(final String instanceId
     ApplicationInstanceDTO dto = null;
     try {
       ComponentInstLight app = Administration.get().getComponentInstLight(instanceId);
-      dto = populate(app);
+      SpaceInst space = Administration.get().getSpaceInstById(app.getDomainFatherId());
+      dto = populate(app,space.isPersonalSpace());
     } catch (Exception e) {
       SilverLogger.getLogger(this).error(e);
     }
@@ -654,14 +664,24 @@ private SpaceDTO populate(SpaceInst space) {
 
     return dto;
   }
+  private ApplicationInstanceDTO populate(ComponentInst app, boolean personal) {
+    ApplicationInstanceDTO dto = new ApplicationInstanceDTO();
+    dto.setId(app.getId());
+    dto.setLabel(app.getLabel());
+    dto.setType(app.getName());
+    dto.setOrderNum(app.getOrderNum());
+    dto.setPersonnal(personal);
+    return dto;
+  }
 
-  private ApplicationInstanceDTO populate(ComponentInstLight app) {
+  private ApplicationInstanceDTO populate(ComponentInstLight app,boolean personal) {
     ApplicationInstanceDTO dto = new ApplicationInstanceDTO();
     dto.setId(app.getId());
     dto.setLabel(app.getLabel());
     dto.setType(app.getName());
     dto.setOrderNum(app.getOrderNum());
     dto.setWorkflow(isWorkflowApp(app));
+    dto.setPersonnal(personal);
 
     RightDTO rights = new RightDTO();
     String[] roles = getUserRoles(app.getId(), getUser().getId());
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java
index e260a3df9..6c4827549 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java
@@ -56,6 +56,7 @@
 import org.silverpeas.core.web.rs.UserPrivilegeValidation;
 import org.silverpeas.core.web.rs.annotation.Authorized;
 import org.silverpeas.mobile.server.helpers.DataURLHelper;
+import org.silverpeas.mobile.server.services.helpers.UserHelper;
 import org.silverpeas.mobile.shared.StreamingList;
 import org.silverpeas.mobile.shared.dto.BaseDTO;
 import org.silverpeas.mobile.shared.dto.GroupDTO;
@@ -116,7 +117,7 @@ public List<?> execute() {
               SentNotificationInterface.get().getAllNotifByUser(getUser().getId());
           for (SentNotificationDetail notif : notifications) {
             NotificationSendedDTO dto = new NotificationSendedDTO();
-            dto.setSource(notif.getSource());
+            dto.setSource(notif.getBody());
             dto.setDate(sdf.format(notif.getNotifDate()));
             dto.setLink(notif.getLink());
             dto.setTitle(notif.getTitle());
@@ -183,9 +184,7 @@ public List<BaseDTO> getAllowedUsersAndGroups(@PathParam("componentId") String c
           users.add(populate(user));
         }
         for (GroupDetail group : Administration.get().getAllGroups()) {
-          GroupDTO g = new GroupDTO();
-          g.setId(group.getId());
-          g.setName(group.getName());
+          GroupDTO g =UserHelper.getInstance().populateGroupDTO(group);
           groups.add(g);
         }
       } else {
@@ -223,9 +222,7 @@ public List<BaseDTO> getAllowedUsersAndGroups(@PathParam("componentId") String c
           for (String groupId : profile.getAllGroups()) {
             if (!isGroupPresent(groups, groupId)) {
               Group group = organizationController.getGroup(groupId);
-              GroupDTO g = new GroupDTO();
-              g.setId(group.getId());
-              g.setName(group.getName());
+              GroupDTO g = UserHelper.getInstance().populateGroupDTO(group);
               groups.add(g);
             }
           }
@@ -289,7 +286,7 @@ private UserDTO populate(UserDetail userDetail) {
     u.setId(userDetail.getId());
     u.setFirstName(userDetail.getFirstName());
     u.setLastName(userDetail.getLastName());
-    u.seteMail(userDetail.geteMail());
+    u.seteMail(userDetail.getEmailAddress());
     String avatar = DataURLHelper.convertAvatarToUrlData(userDetail.getAvatarFileName(),
             getSettings().getString("avatar.size", "24x"));
     u.setAvatar(avatar);
@@ -365,10 +362,10 @@ private List<String> getSelectionIds(List<NotificationBoxDTO> selection) {
   @Consumes(MediaType.APPLICATION_JSON)
   @Path("")
   public void delete(List<NotificationBoxDTO> selection) {
-    if (selection.get(0) instanceof NotificationSendedDTO) {
+    if (selection.get(0).isSended()) {
       for (NotificationBoxDTO dto : selection) {
         try {
-          SentNotificationInterface.get().deleteNotif((int) dto.getIdNotif(), getUser().getId());
+          SentNotificationInterface.get().deleteNotif(getUser().getId(), (int) dto.getIdNotif());
         } catch (NotificationException e) {
           SilverLogger.getLogger(this).error(e);
         }
@@ -409,7 +406,11 @@ public void send(NotificationToSendDTO notificationToSendDTO) throws Exception {
       if (notificationToSendDTO.getNotification().getContentType()
           .equals(NotificationDTO.TYPE_PUBLICATION)) {
         String url = silverpeasServerUrl + "/Publication/" +
-            notificationToSendDTO.getNotification().getContentId();
+                notificationToSendDTO.getNotification().getContentId();
+        metaData.setLink(url);
+      } else if (notificationToSendDTO.getNotification().getContentType().equals(NotificationDTO.TYPE_DOCUMENT)) {
+        String url = silverpeasServerUrl + "/services/media/viewer/embed/pdf?documentId=" +
+                notificationToSendDTO.getNotification().getContentId() + "&documentType=attachment&embedPlayer=true";
         metaData.setLink(url);
       } else if (notificationToSendDTO.getNotification().getContentType()
           .equals(NotificationDTO.TYPE_PHOTO) ||
@@ -432,7 +433,7 @@ public void send(NotificationToSendDTO notificationToSendDTO) throws Exception {
       }
       metaData.setAnswerAllowed(false);
       metaData.setContent(notificationToSendDTO.getNotification().getMessage());
-      metaData.setSender(getUser().geteMail());
+      metaData.setSender(getUser().getEmailAddress());
 
       ComponentInst app = Administration.get()
           .getComponentInst(notificationToSendDTO.getNotification().getInstanceId());
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceTask.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceTask.java
index 270cb78e4..6d9ac57c4 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceTask.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceTask.java
@@ -38,12 +38,7 @@
 import org.silverpeas.mobile.shared.dto.TaskDTO;
 
 import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
+import javax.ws.rs.*;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import java.text.SimpleDateFormat;
@@ -95,6 +90,16 @@ public void updateTask(TaskDTO task) {
     getCalendar().updateToDo(todo);
   }
 
+  @DELETE
+  @Produces(MediaType.APPLICATION_JSON)
+  @Consumes(MediaType.APPLICATION_JSON)
+  @Path("")
+  public void deleteTasks(List<TaskDTO> tasks) {
+    for (TaskDTO task : tasks) {
+      getCalendar().removeToDo(task.getId());
+    }
+  }
+
   @POST
   @Produces(MediaType.APPLICATION_JSON)
   @Consumes(MediaType.APPLICATION_JSON)
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java
index 988e1f1b6..d33260c09 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java
@@ -36,18 +36,13 @@
 import org.silverpeas.core.admin.service.AdminException;
 import org.silverpeas.core.admin.service.Administration;
 import org.silverpeas.core.admin.service.OrganizationController;
+import org.silverpeas.core.admin.user.model.UserDetail;
 import org.silverpeas.core.contribution.publication.model.PublicationDetail;
-import org.silverpeas.core.contribution.publication.service.PublicationService;
 import org.silverpeas.core.io.file.ImageResizingProcessor;
 import org.silverpeas.core.io.file.SilverpeasFileProcessor;
-import org.silverpeas.core.util.CollectionUtil;
-import org.silverpeas.core.util.ResourceLocator;
-import org.silverpeas.core.util.ServiceProvider;
-import org.silverpeas.core.util.SettingBundle;
-import org.silverpeas.core.util.StringUtil;
+import org.silverpeas.core.util.*;
 import org.silverpeas.core.util.file.FileRepositoryManager;
 import org.silverpeas.core.util.logging.SilverLogger;
-import org.silverpeas.core.web.look.PublicationUpdateDateComparator;
 import org.silverpeas.core.web.util.viewgenerator.html.GraphicElementFactory;
 import org.silverpeas.mobile.shared.dto.news.NewsDTO;
 
@@ -55,12 +50,7 @@
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.MissingResourceException;
+import java.util.*;
 
 /**
  * @author: svu
@@ -80,8 +70,8 @@ public static NewsHelper getInstance() {
     return instance;
   }
 
-  public List<News> getLastNews(String userId, String spaceId) throws Exception {
-    if(spaceId != null) {
+  public List<News> getLastNews(String userId, String spaceId, int maxNews) throws Exception {
+    if (spaceId != null) {
       List<String> appIds = new ArrayList<String>();
       String[] cIds = organizationController.getAvailCompoIds(spaceId, userId);
       for (String id : cIds) {
@@ -94,7 +84,7 @@ public List<News> getLastNews(String userId, String spaceId) throws Exception {
       for (String appId : appIds) {
         news.addAll(service.getVisibleNews(appId));
       }
-      Collections.sort(news, (o1, o2) -> o1.getUpdateDate().compareTo(o2.getUpdateDate()));
+      news = sortAndTruncate(maxNews, news, false);
       return news;
     } else {
       // News on main page
@@ -106,15 +96,18 @@ public List<News> getLastNews(String userId, String spaceId) throws Exception {
       } catch (MissingResourceException e) {}
       if (newsSource != null && newsSource.isEmpty() == false) {
           if (newsSource.trim().startsWith("quickinfo")) {
-            news = getNewsByComponentId(newsSource, false, userId);
+            String [] sources = newsSource.split(" ");
+            for (String source : sources) {
+              news.addAll(getNewsByComponentId(source.trim(), false, userId, maxNews));
+            }
+            news = sortAndTruncate(maxNews, news, true);
           } else if (newsSource.trim().equals("*")) {
-            news = getAllNews(userId);
+            news = getAllNews(userId, maxNews);
+            news = sortAndTruncate(maxNews, news, true);
           } else {
-            news = getDelegatedNews(userId);
+            news = getDelegatedNews(userId, maxNews);
           }
       }
-      Collections.sort(news, (o1, o2) -> o1.getUpdateDate().compareTo(o2.getUpdateDate()));
-      Collections.reverse(news);
       return news;
     }
   }
@@ -123,21 +116,39 @@ private boolean isVisibleNews(PublicationDetail news) {
     return news.isValid() && news.isVisible();
   }
 
-  private List<News> getDelegatedNews(String userId) throws Exception {
+  private List<News> getDelegatedNews(String userId, int maxNews) throws Exception {
     List<News> news = new ArrayList();
     List<DelegatedNews> delegatedNews = DelegatedNewsServiceProvider.getDelegatedNewsService().getAllValidDelegatedNews();
-
+    UserDetail u = Administration.get().getUserDetail(userId);
+    Date now = new Date();
+    int count = 0;
     for (DelegatedNews delegated : delegatedNews) {
-      PublicationDetail pub = delegated.getPublicationDetail();
-      if (pub.canBeAccessedBy(Administration.get().getUserDetail(userId))) {
-        News aNews = QuickInfoService.get().getNewsByForeignId(delegated.getPubId());
+      if (count >= maxNews) break;
+      News aNews = null;
+      if (delegated.getBeginDate() == null && delegated.getEndDate() == null) {
+        aNews = getNews(delegated, u);
+      } else if (delegated.getBeginDate() != null && now.after(delegated.getBeginDate())
+              && delegated.getEndDate() != null && now.before(delegated.getEndDate())) {
+        aNews = getNews(delegated, u);
+      } else if (delegated.getBeginDate() != null && now.after(delegated.getBeginDate()) && delegated.getEndDate() == null) {
+        aNews = getNews(delegated, u);
+      } else if (delegated.getEndDate() != null && now.before(delegated.getEndDate())) {
+         aNews = getNews(delegated, u);
+      }
+      if (aNews != null) {
         news.add(aNews);
+        count++;
       }
     }
-
     return news;
   }
 
+  private News getNews(DelegatedNews delegated, UserDetail u) {
+    News aNews = QuickInfoService.get().getNewsByForeignId(delegated.getPubId());
+    if (!aNews.canBeAccessedBy(u)) aNews = null;
+    return aNews;
+  }
+
   public List<News> getNewsByAppId(String appId, boolean managerAccess) {
     QuickInfoService service = QuickInfoServiceProvider.getQuickInfoService();
     List<News> news;
@@ -150,19 +161,19 @@ public List<News> getNewsByAppId(String appId, boolean managerAccess) {
     return news;
   }
 
-  private List<News> getAllNews(String userId) throws AdminException {
+  private List<News> getAllNews(String userId, int maxNews) throws AdminException {
     List<News> news = new ArrayList<>();
     List<String> apps = CollectionUtil
         .asList(organizationController.getComponentIdsForUser(userId, "quickinfo"));
     for (String appId : apps) {
-      news.addAll(getNewsByComponentId(appId, false, userId));
+      news.addAll(getNewsByComponentId(appId, false, userId, maxNews));
     }
-    //TODO sort list
+    news = sortAndTruncate(maxNews, news, false);
 
     return news;
   }
 
-  private List<News> getNewsByComponentId(String appId, boolean managerAccess, String userId) throws AdminException {
+  private List<News> getNewsByComponentId(String appId, boolean managerAccess, String userId, int maxNews) throws AdminException {
     QuickInfoService service = QuickInfoServiceProvider.getQuickInfoService();
     List<News> news = new ArrayList<>();
 
@@ -173,6 +184,17 @@ private List<News> getNewsByComponentId(String appId, boolean managerAccess, Str
         news = service.getVisibleNews(appId);
       }
     }
+    news = sortAndTruncate(maxNews, news, false);
+
+    return news;
+  }
+
+  private static List<News> sortAndTruncate(int maxNews, List<News> news, boolean reverse) {
+    Collections.sort(news, (o1, o2) -> o1.getUpdateDate().compareTo(o2.getUpdateDate()));
+    if (reverse) Collections.reverse(news);
+    if (news != null && news.size() > maxNews) {
+      news = news.subList(0, maxNews);
+    }
     return news;
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java
index 8eb22cfec..5a6128e46 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java
@@ -130,11 +130,13 @@ public String sendToToken(final String userId, String token, Map<String, Object>
       // This registration token comes from the client FCM SDKs.
 
       // See documentation on defining a message payload.
-      response = getNotificationPermalink(String.valueOf(notifData.get("id")))
+      response = getNotificationPermalink(userId, String.valueOf(notifData.get("id")))
           // No push if no permalink
           .map(l -> Message.builder()
               .putData("subject", String.valueOf(notifData.get("subject")))
               .putData("sender", String.valueOf(notifData.get("sender")))
+              .putData("body", String.valueOf(notifData.get("body")))
+              .putData("notificationId", String.valueOf(notifData.get("notificationId")))
               .putData("permalink", l))
           .map(m -> m.setToken(token))
           .map(Message.Builder::build)
@@ -156,10 +158,8 @@ public String sendToToken(final String userId, String token, Map<String, Object>
     return response;
   }
 
-  private Optional<String> getNotificationPermalink(String id) {
-    return ofNullable(id)
-        .map(Long::decode)
-        .map(SILVERMAILPersistence::getMessage)
-        .map(SILVERMAILMessage::getUrl);
+  private Optional<String> getNotificationPermalink(String userId, String id) {
+    SILVERMAILMessage m = SILVERMAILPersistence.getMessage(userId, Long.valueOf(id));
+    return ofNullable(m.getUrl());
   }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java
index b151d7f22..ded67d292 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java
@@ -25,6 +25,7 @@
 package org.silverpeas.mobile.server.services.helpers;
 
 import org.silverpeas.core.admin.service.Administration;
+import org.silverpeas.core.admin.user.model.Group;
 import org.silverpeas.core.admin.user.model.GroupDetail;
 import org.silverpeas.core.admin.user.model.UserDetail;
 import org.silverpeas.core.notification.NotificationException;
@@ -65,12 +66,14 @@ public DetailUserDTO populate(UserDetail user) {
     dto.setId(user.getId());
     dto.setFirstName(user.getFirstName());
     dto.setLastName(user.getLastName());
-    dto.seteMail(user.geteMail());
+    dto.seteMail(user.getEmailAddress());
     dto.setStatus(user.getStatus());
     dto.setAvatar(user.getAvatar());
     dto.setLanguage(user.getUserPreferences().getLanguage());
     dto.setToken(user.getToken());
     dto.setZone(user.getUserPreferences().getZoneId().getId());
+    dto.setLdap(!user.getDomain().getDriverClassName()
+            .equals("org.silverpeas.core.admin.domain.driver.SilverpeasDomainDriver"));
 
     boolean notificationBox = false;
     List<Properties> channels = null;
@@ -97,17 +100,18 @@ public UserDTO populateUserDTO(UserDetail user) {
     dto.setId(user.getId());
     dto.setFirstName(user.getFirstName());
     dto.setLastName(user.getLastName());
-    dto.seteMail(user.geteMail());
+    dto.seteMail(user.getEmailAddress());
     String avatar = DataURLHelper.convertAvatarToUrlData(user.getAvatarFileName(),
         getSettings().getString("avatar.size", "24x"));
     dto.setAvatar(avatar);
     return dto;
   }
 
-  public GroupDTO populateGroupDTO(GroupDetail group) {
+  public GroupDTO populateGroupDTO(Group group) {
     GroupDTO dto = new GroupDTO();
     dto.setId(group.getId());
     dto.setName(group.getName());
+    dto.setNbMembers(group.getNbUsers());
     return dto;
   }
 
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java
new file mode 100644
index 000000000..1d45e6c01
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.server.servlets;
+
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileUploadBase;
+import org.apache.commons.fileupload.FileUploadException;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.apache.commons.io.FileUtils;
+import org.silverpeas.components.kmelia.service.KmeliaService;
+import org.silverpeas.core.contribution.publication.model.PublicationDetail;
+import org.silverpeas.core.contribution.publication.model.PublicationPK;
+import org.silverpeas.core.node.model.NodePK;
+import org.silverpeas.core.subscription.SubscriptionServiceProvider;
+import org.silverpeas.core.subscription.service.NodeSubscriptionResource;
+import org.silverpeas.core.subscription.util.SubscriptionSubscriberList;
+import org.silverpeas.core.util.file.FileRepositoryManager;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+
+@SuppressWarnings("serial")
+public class FileServlet extends AbstractSilverpeasMobileServlet {
+
+  private static final int MEMORY_THRESHOLD   = 1024 * 1024 * 3;  // 3MB
+  private static long MAX_FILE_SIZE      = 1024 * 1024 * 100; // 100MB
+  private static long MAX_REQUEST_SIZE   = 1024 * 1024 * 110; // 110MB
+
+  @Override
+  public void init(final ServletConfig config) throws ServletException {
+    super.init(config);
+    MAX_FILE_SIZE = FileRepositoryManager.getUploadMaximumFileSize();
+    MAX_REQUEST_SIZE = (long) (MAX_FILE_SIZE * 1.1);
+  }
+
+  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+
+  }
+
+  protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
+    try {
+      checkUserInSession(request, response);
+      processRequest(request, response);
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+  }
+
+  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+
+
+
+    String componentId = "";
+    String publicationId = "";
+    String folderId = "";
+    String tempDir = FileRepositoryManager.getTemporaryPath();
+
+    // configures upload settings
+    DiskFileItemFactory factory = new DiskFileItemFactory();
+    // sets memory threshold - beyond which files are stored in disk
+    factory.setSizeThreshold(MEMORY_THRESHOLD);
+    // sets temporary location to store files
+    factory.setRepository(new File(tempDir));
+
+    ServletFileUpload upload = new ServletFileUpload(factory);
+
+    // sets maximum size of upload file
+    upload.setFileSizeMax(MAX_FILE_SIZE);
+
+    // sets maximum size of request (include file + form data)
+    upload.setSizeMax(MAX_REQUEST_SIZE);
+
+    // Parse the request
+    @SuppressWarnings("unchecked")
+    List<FileItem> items = null;
+    try {
+      items = upload.parseRequest(request);
+    } catch(FileUploadBase.FileSizeLimitExceededException eu) {
+      response.sendError(HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE);
+      return;
+    } catch (FileUploadException e) {
+      e.printStackTrace();
+    }
+
+    // Process the uploaded items
+    Iterator iter = items.iterator();
+    while (iter.hasNext())
+    {
+      FileItem item = (FileItem) iter.next();
+      if (item.isFormField())
+      {
+        if (item.getFieldName().equals("componentId")) componentId = item.getString();
+        if (item.getFieldName().equals("folderId")) folderId = item.getString();
+        if (item.getFieldName().equals("publicationId")) publicationId = item.getString();
+
+      }
+      else {
+        String fileName = item.getName();
+        File file = new File(tempDir + File.separator + fileName);
+        try {
+          item.write(file);
+          if(folderId.isEmpty()) {
+            addFileToPublication(request, fileName, componentId, publicationId, file);
+          } else {
+            createPublication(request, fileName, componentId, folderId, file);
+          }
+        } catch (Exception e) {
+          e.printStackTrace();
+        }
+      }
+    }
+  }
+
+  private void addFileToPublication(HttpServletRequest request, String name, String componentId, String publicationId,
+                                    File file) throws Exception {
+
+    PublicationPK pk = new PublicationPK(publicationId, componentId);
+    KmeliaService.get().addAttachmentToPublication(pk, getUserInSession(request).getId(), name, "",
+            FileUtils.readFileToByteArray(file));
+  }
+
+  private String createPublication(HttpServletRequest request, String name,
+                                   String componentId, String folderId, File file) throws Exception {
+
+    PublicationDetail pub = PublicationDetail.builder().build();
+    pub.setName(file.getName());
+    PublicationPK pk = new PublicationPK("", componentId);
+    pub.setPk(pk);
+    pub.setCreatorId(getUserInSession(request).getId());
+
+    NodePK node = new NodePK(folderId);
+    node.setComponentName(componentId);
+
+    String pubId = KmeliaService.get().createPublicationIntoTopic(pub, node);
+    pk.setId(pubId);
+
+    KmeliaService.get().addAttachmentToPublication(pk, getUserInSession(request).getId(), name, "", FileUtils.readFileToByteArray(file));
+
+
+    SubscriptionSubscriberList l = SubscriptionServiceProvider.getSubscribeService()
+            .getSubscribers(NodeSubscriptionResource.from(node));
+
+
+    KmeliaService.get().getUserNotification(node).send();
+
+    return pubId;
+  }
+
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/MediaServlet.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/MediaServlet.java
index eb924401f..bea510cf8 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/MediaServlet.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/MediaServlet.java
@@ -37,8 +37,11 @@
 import org.silverpeas.components.gallery.model.Media;
 import org.silverpeas.components.gallery.model.MediaPK;
 import org.silverpeas.components.gallery.model.Photo;
+import org.silverpeas.components.gallery.notification.user.GalleryUserAlertNotification;
 import org.silverpeas.components.gallery.service.GalleryService;
 import org.silverpeas.components.gallery.service.MediaServiceProvider;
+import org.silverpeas.core.admin.user.model.User;
+import org.silverpeas.core.node.model.NodePK;
 import org.silverpeas.core.util.file.FileRepositoryManager;
 import org.silverpeas.mobile.server.common.LocalDiskFileItem;
 import org.silverpeas.mobile.server.helpers.MediaHelper;
@@ -202,6 +205,11 @@ private String createMedia(HttpServletRequest request, HttpServletResponse respo
 
     Media newMedia = getGalleryService().createMedia(getUserInSession(request), componentId, GalleryComponentSettings.getWatermark(componentId), delegate);
 
+    // notification management
+    User sender = getUserInSession(request);
+    GalleryUserAlertNotification n = new GalleryUserAlertNotification(new NodePK(albumId, componentId), newMedia, sender);
+    n.build().send();
+
     return newMedia.getId();
   }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java
index 679c872d7..ca0f1bc16 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java
@@ -115,19 +115,16 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re
 
     response.getOutputStream().print("<html>");
     response.getOutputStream().print("<head>");
-    response.getOutputStream()
-        .print("<meta http-equiv='content-type' content='text/html;charset=UTF-8' />");
-    response.getOutputStream().print("<style>");
-
-    InputStream template =
-        getServletContext().getResourceAsStream("/spmobile/spmobile.css");
-    response.getOutputStream().print(IOUtils.toString(template, StandardCharsets.UTF_8));
-    response.getOutputStream().print("</style>");
+    response.getOutputStream().print("<meta http-equiv='content-type' content='text/html;charset=UTF-8' />");
 
     String urlCSS = mobileSettings.getString("styleSheet", "");
     if (!urlCSS.isEmpty()) {
       response.getOutputStream().print("<link rel=\"stylesheet\" href=\"" + urlCSS + "\">");
     }
+    String urlCSSWysiwyg = mobileSettings.getString("wysiwyg.styleSheet", "");
+    if (!urlCSSWysiwyg.isEmpty()) {
+      response.getOutputStream().print("<link rel=\"stylesheet\" href=\"" + urlCSSWysiwyg + "\">");
+    }
 
     response.getOutputStream().print("</head>");
     response.getOutputStream().print("<body>");
@@ -185,6 +182,17 @@ private void displayWysiwyg(String html, HttpServletRequest request, HttpServlet
       }
       img.attr("src", newSource);
     }
+    Elements anchors = doc.getElementsByTag("a");
+    for (Element a : anchors) {
+      String href = a.attr("href");
+      String target = a.attr("target");
+      if (!target.equalsIgnoreCase("_blank")) {
+        if (href.contains("/silverpeas/") && !href.contains(".jsp")) {
+          a.attr("href", "#");
+          a.attr("onclick", "parent.navigate('" + href + "');");
+        }
+      }
+    }
 
     html = doc.outerHtml();
     OutputStreamWriter out = new OutputStreamWriter(response.getOutputStream(), "UTF-8");
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/WebAppOriginAssociationServlet.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/WebAppOriginAssociationServlet.java
new file mode 100644
index 000000000..1e256f9fa
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/WebAppOriginAssociationServlet.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.server.servlets;
+
+
+import org.apache.commons.io.IOUtils;
+import org.silverpeas.core.util.StringUtil;
+import org.silverpeas.core.util.logging.SilverLogger;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * @author: svu
+ */
+public class WebAppOriginAssociationServlet extends AbstractSilverpeasMobileServlet {
+  protected void doGet(HttpServletRequest request, HttpServletResponse response)
+      throws ServletException, IOException {
+    try {
+      response.setContentType("application/json");
+      response.setHeader("Cache-Control", "private, no-store, no-cache, must-revalidate");
+      response.setHeader("Pragma", "no-cache");
+
+      PrintWriter out = response.getWriter();
+
+      ServletContext context = getServletContext();
+      String path = getSettings().getString("web-app-origin-association.json.path", "");
+      InputStream template;
+      if (StringUtil.isDefined(path)) {
+        template = new FileInputStream(path);
+      } else {
+        template =
+            context.getResourceAsStream("/WEB-INF/web-app-origin-association.template");
+      }
+      out.println(IOUtils.toString(template, StandardCharsets.UTF_8));
+    } catch (Exception e) {
+      SilverLogger.getLogger(this).error(e);
+    }
+  }
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/DetailUserDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/DetailUserDTO.java
index 63bb3288c..df729367e 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/DetailUserDTO.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/DetailUserDTO.java
@@ -25,8 +25,8 @@
 package org.silverpeas.mobile.shared.dto;
 
 import java.io.Serializable;
-import java.util.LinkedHashMap;
-import java.util.Set;
+import java.util.ArrayList;
+import java.util.List;
 
 public class DetailUserDTO implements Serializable{
 
@@ -46,18 +46,20 @@ public class DetailUserDTO implements Serializable{
   private String sessionKey;
   private boolean connected;
   private boolean notificationBox;
-  private LinkedHashMap<String, String> properties = new LinkedHashMap<String, String>();
+  private boolean ldap;
+  private List<PropertyDTO> properties = new ArrayList<>();
 
   public void addProperty(String key, String value) {
-    properties.put(key, value);
+    PropertyDTO dto = new PropertyDTO();
+    dto.setKey(key);
+    dto.setValue(value);
+    this.properties.add(dto);
   }
-
-  public Set<String> getProperties() {
-    return properties.keySet();
+  public void setProperties(List<PropertyDTO> properties) {
+    this.properties = properties;
   }
-
-  public String getPropertieValue(String key) {
-    return properties.get(key);
+  public List<PropertyDTO> getProperties() {
+    return properties;
   }
 
   public String getId() {
@@ -175,4 +177,12 @@ public void setNotificationBox(final boolean notificationBox) {
   public boolean isNotificationBox() {
     return notificationBox;
   }
+
+  public void setLdap(boolean ldap) {
+    this.ldap = ldap;
+  }
+
+  public boolean isLdap() {
+    return ldap;
+  }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/GroupDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/GroupDTO.java
index 73a976624..75d97496f 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/GroupDTO.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/GroupDTO.java
@@ -33,7 +33,14 @@ public class GroupDTO extends BaseDTO implements Serializable{
 
   private static final long serialVersionUID = 5388415881024885835L;
   private String name;
+  private int nbMembers;
+  public int getNbMembers() {
+    return nbMembers;
+  }
 
+  public void setNbMembers(int nbMembers) {
+    this.nbMembers = nbMembers;
+  }
   public String getName() {
     return name;
   }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/MyLinkCategoryDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/MyLinkCategoryDTO.java
new file mode 100644
index 000000000..5344b02a6
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/MyLinkCategoryDTO.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.shared.dto;
+
+import java.io.Serializable;
+
+/**
+ * @author svu
+ */
+public class MyLinkCategoryDTO implements Serializable {
+
+  private String catId;
+
+  private String position;
+  private String name;
+  private String description;
+
+  private String userId;
+
+  public String getCatId() {
+    return catId;
+  }
+
+  public void setCatId(String catId) {
+    this.catId = catId;
+  }
+
+  public String getPosition() {
+    return position;
+  }
+
+  public void setPosition(String position) {
+    this.position = position;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public void setDescription(String description) {
+    this.description = description;
+  }
+
+  public String getUserId() {
+    return userId;
+  }
+
+  public void setUserId(String userId) {
+    this.userId = userId;
+  }
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/MyLinkDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/MyLinkDTO.java
index ecc12c09a..382edf0f8 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/MyLinkDTO.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/MyLinkDTO.java
@@ -43,6 +43,8 @@ public class MyLinkDTO implements Serializable {
   private String instanceId = "";
   private String objectId = "";
 
+  private String categoryId = "";
+
   public String getUri() {
     return uri;
   }
@@ -130,4 +132,12 @@ public String getObjectId() {
   public void setObjectId(final String objectId) {
     this.objectId = objectId;
   }
+
+  public String getCategoryId() {
+    return categoryId;
+  }
+
+  public void setCategoryId(String categoryId) {
+    this.categoryId = categoryId;
+  }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/PropertyDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/PropertyDTO.java
new file mode 100644
index 000000000..cea66b17f
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/PropertyDTO.java
@@ -0,0 +1,24 @@
+package org.silverpeas.mobile.shared.dto;
+
+import java.io.Serializable;
+
+public class PropertyDTO implements Serializable {
+    private String key;
+    private String value;
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/almanach/CalendarEventCreationDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/almanach/CalendarEventCreationDTO.java
new file mode 100644
index 000000000..bccb19874
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/almanach/CalendarEventCreationDTO.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.shared.dto.almanach;
+
+import org.silverpeas.mobile.shared.dto.reminder.ReminderDTO;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author svu
+ */
+public class CalendarEventCreationDTO implements Serializable {
+
+  private String eventType;
+  private String occurrenceType;
+  private String startDate;
+  private String endDate;
+  private String eventId;
+  private CalendarDTO calendar;
+  private String title;
+  private boolean onAllDay;
+  private String visibility;
+  private String priority;
+  private String description;
+  private CalendarEventRecurrenceDTO recurrence;
+
+  // "attributes": [{"name": "externalUrl"}],
+  // attachmentParameters": []
+  private List<CalendarEventAttendeeDTO> attendees;
+
+  public String getEventType() {
+    return eventType;
+  }
+
+  public void setEventType(String eventType) {
+    this.eventType = eventType;
+  }
+
+  public String getOccurrenceType() {
+    return occurrenceType;
+  }
+
+  public void setOccurrenceType(String occurrenceType) {
+    this.occurrenceType = occurrenceType;
+  }
+
+  public String getStartDate() {
+    return startDate;
+  }
+
+  public void setStartDate(String startDate) {
+    this.startDate = startDate;
+  }
+
+  public String getEndDate() {
+    return endDate;
+  }
+
+  public void setEndDate(String endDate) {
+    this.endDate = endDate;
+  }
+
+  public String getEventId() {
+    return eventId;
+  }
+
+  public void setEventId(String eventId) {
+    this.eventId = eventId;
+  }
+
+  public CalendarDTO getCalendar() {
+    return calendar;
+  }
+
+  public void setCalendar(CalendarDTO calendar) {
+    this.calendar = calendar;
+  }
+
+  public String getTitle() {
+    return title;
+  }
+
+  public void setTitle(String title) {
+    this.title = title;
+  }
+
+  public boolean getOnAllDay() {
+    return onAllDay;
+  }
+
+  public void setOnAllDay(boolean onAllDay) {
+    this.onAllDay = onAllDay;
+  }
+
+  public String getVisibility() {
+    return visibility;
+  }
+
+  public void setVisibility(String visibility) {
+    this.visibility = visibility;
+  }
+
+  public String getPriority() {
+    return priority;
+  }
+
+  public void setPriority(String priority) {
+    this.priority = priority;
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public void setDescription(String description) {
+    this.description = description;
+  }
+
+  public CalendarEventRecurrenceDTO getRecurrence() {
+    return recurrence;
+  }
+
+  public void setRecurrence(CalendarEventRecurrenceDTO recurrence) {
+    this.recurrence = recurrence;
+  }
+
+  public List<CalendarEventAttendeeDTO> getAttendees() {
+    return attendees;
+  }
+
+  public void setAttendees(List<CalendarEventAttendeeDTO> attendees) {
+    this.attendees = attendees;
+  }
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/comments/CommentDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/comments/CommentDTO.java
index b742b9643..59264111a 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/comments/CommentDTO.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/comments/CommentDTO.java
@@ -98,16 +98,16 @@ public String getText() {
 
   public void setText(final String text) {
     this.text = text;
+    this.textForHtml = "";
   }
 
   public String getTextForHtml() {
+    if (textForHtml.isEmpty()) {
+      textForHtml = text;
+    }
     return textForHtml;
   }
 
-  public void setTextForHtml(final String textForHtml) {
-    this.textForHtml = textForHtml;
-  }
-
   public UserProfileDTO getAuthor() {
     return author;
   }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/Config.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/Config.java
index 97099e20f..1cf35b56a 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/Config.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/Config.java
@@ -38,6 +38,13 @@ public class Config {
   private boolean freeZoneDisplay;
   private boolean freeZoneThinDisplay;
 
+  private boolean standard;
+  private boolean grayscale;
+  private boolean sepia;
+  private boolean inverse;
+
+  private int fontSize;
+
   public Config() {
   }
 
@@ -51,6 +58,11 @@ public static Config getDefaultConfig() {
     c.setShortCutsToolsDisplay(true);
     c.setFreeZoneDisplay(true);
     c.setFreeZoneThinDisplay(true);
+    c.setFontSize(10);
+    c.setStandard(true);
+    c.setGrayscale(false);
+    c.setSepia(false);
+    c.setInverse(false);
     return c;
   }
 
@@ -118,6 +130,66 @@ public void setShortCutsToolsDisplay(final boolean shortCutsToolsDisplay) {
     this.shortCutsToolsDisplay = shortCutsToolsDisplay;
   }
 
+  public int getFontSize() {
+    return fontSize;
+  }
+
+  public void setFontSize(int fontSize) {
+    this.fontSize = fontSize;
+  }
+
+  public boolean isStandard() {
+    return standard;
+  }
+
+  public void setStandard(boolean standard) {
+    this.standard = standard;
+    if (standard) {
+      setSepia(false);
+      setInverse(false);
+      setGrayscale(false);
+    }
+  }
+
+  public boolean isGrayscale() {
+    return grayscale;
+  }
+
+  public void setGrayscale(boolean grayscale) {
+    this.grayscale = grayscale;
+    if (grayscale) {
+      setStandard(false);
+      setSepia(false);
+      setInverse(false);
+    }
+  }
+
+  public boolean isSepia() {
+    return sepia;
+  }
+
+  public void setSepia(boolean sepia) {
+    this.sepia = sepia;
+    if (sepia) {
+      setStandard(false);
+      setInverse(false);
+      setGrayscale(false);
+    }
+  }
+
+  public boolean isInverse() {
+    return inverse;
+  }
+
+  public void setInverse(boolean inverse) {
+    this.inverse = inverse;
+    if (inverse) {
+      setStandard(false);
+      setSepia(false);
+      setGrayscale(false);
+    }
+  }
+
   public AutoBean<IConfig> getAutoBean () {
     AutoBean<IConfig> b = LocalStorageHelper.factory.iconfig();
     b.as().setFreeZoneDisplay(isFreeZoneDisplay());
@@ -128,6 +200,11 @@ public AutoBean<IConfig> getAutoBean () {
     b.as().setLastPublicationsDisplay(isLastPublicationsDisplay());
     b.as().setShortCutsDisplay(isShortCutsDisplay());
     b.as().setShortCutsToolsDisplay(isShortCutsToolsDisplay());
+    b.as().setFontSize(getFontSize());
+    b.as().setStandard(isStandard());
+    b.as().setGrayscale(isGrayscale());
+    b.as().setSepia(isSepia());
+    b.as().setInverse(isInverse());
     return b;
   }
 
@@ -141,6 +218,11 @@ public static Config getBean (AutoBean<IConfig> b) {
     conf.setLastPublicationsDisplay(b.as().isLastPublicationsDisplay());
     conf.setShortCutsDisplay(b.as().isShortCutsDisplay());
     conf.setShortCutsToolsDisplay(b.as().isShortCutsToolsDisplay());
+    conf.setFontSize(b.as().getFontSize());
+    conf.setStandard(b.as().isStandard());
+    conf.setGrayscale(b.as().isGrayscale());
+    conf.setSepia(b.as().isSepia());
+    conf.setInverse(b.as().isInverse());
     return conf;
   }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/IConfig.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/IConfig.java
index ab93b6c1a..e684e67e5 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/IConfig.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/IConfig.java
@@ -42,4 +42,23 @@ public interface IConfig {
 
   public void setShortCutsToolsDisplay(final boolean shortCutsToolsDisplay);
 
+  public int getFontSize();
+
+  public void setFontSize(int fontSize);
+
+  boolean isStandard();
+
+  void setStandard(final boolean standard);
+
+  void setGrayscale(final boolean grayscale);
+
+  boolean isGrayscale();
+
+  void setSepia(final boolean sepia);
+
+  boolean isSepia();
+
+  void setInverse(final boolean inverse);
+
+  boolean isInverse();
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/PublicationDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/PublicationDTO.java
index 7592f3829..b991141c0 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/PublicationDTO.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/PublicationDTO.java
@@ -43,10 +43,16 @@ public class PublicationDTO extends BaseDTO implements Serializable, Comparable<
   private int commentsNumber = 0;
   private String instanceId;
   private boolean content;
+
+  private boolean draft;
+
+  private boolean publishable;
   private List<PublicationDTO> linkedPublications;
   private String vignette;
   private int viewsNumber;
 
+  private List<String> notAllowedDownloads;
+
   public String getName() {
     return name;
   }
@@ -136,4 +142,27 @@ public void setCreationDate(final String creationDate) {
   public int getViewsNumber() { return viewsNumber; }
 
   public void setViewsNumber(final int viewsNumber) { this.viewsNumber = viewsNumber; }
+
+  public void setNotAllowedDownloads(List<String> notAllowedDownloads) {
+    this.notAllowedDownloads = notAllowedDownloads;
+  }
+  public List<String> getNotAllowedDownloads() {
+    return notAllowedDownloads;
+  }
+
+  public boolean isDraft() {
+    return draft;
+  }
+
+  public void setDraft(boolean draft) {
+    this.draft = draft;
+  }
+
+  public boolean isPublishable() {
+    return publishable;
+  }
+
+  public void setPublishable(boolean publishable) {
+    this.publishable = publishable;
+  }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/SimpleDocumentDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/SimpleDocumentDTO.java
index cd2effcef..577524227 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/SimpleDocumentDTO.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/SimpleDocumentDTO.java
@@ -50,6 +50,8 @@ public class SimpleDocumentDTO implements Serializable {
 
   private String spId;
 
+  private boolean downloadable;
+
 
   public String getId() {
     return id;
@@ -194,4 +196,11 @@ public String getSpId() {
   public void setSpId(String spId) {
     this.spId = spId;
   }
+
+  public void setDownloadable(boolean downloadable) {
+    this.downloadable = downloadable;
+  }
+  public boolean isDownloadable() {
+    return this.downloadable;
+  }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/hyperlink/HyperLinkDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/hyperlink/HyperLinkDTO.java
new file mode 100644
index 000000000..7a928e6b2
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/hyperlink/HyperLinkDTO.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2000 - 2022 Silverpeas
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * As a special exception to the terms and conditions of version 3.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * Open Source Software ("FLOSS") applications as described in Silverpeas's
+ * FLOSS exception.  You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * "https://www.silverpeas.org/legal/floss_exception.html"
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.silverpeas.mobile.shared.dto.hyperlink;
+
+import org.silverpeas.mobile.shared.dto.BaseDTO;
+
+import java.io.Serializable;
+
+public class HyperLinkDTO implements Serializable {
+
+  private String url;
+  private boolean openNewWindow;
+  private boolean internalLink;
+
+  public HyperLinkDTO() {
+  }
+
+  public String getUrl() {
+    return url;
+  }
+
+  public void setUrl(String url) {
+    this.url = url;
+  }
+
+  public boolean getOpenNewWindow() {
+    return openNewWindow;
+  }
+
+  public void setOpenNewWindow(boolean openNewWindow) {
+    this.openNewWindow = openNewWindow;
+  }
+
+  public boolean getInternalLink() {
+    return internalLink;
+  }
+
+  public void setInternalLink(boolean internalLink) {
+    this.internalLink = internalLink;
+  }
+}
\ No newline at end of file
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/navigation/ApplicationInstanceDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/navigation/ApplicationInstanceDTO.java
index 49d1d5df7..94a8f302e 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/navigation/ApplicationInstanceDTO.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/navigation/ApplicationInstanceDTO.java
@@ -42,6 +42,8 @@ public class ApplicationInstanceDTO extends SilverpeasObjectDTO implements Seria
   private int publicationSharing;
   private int fileSharing;
 
+  private boolean personnal;
+
   public String getType() {
     return type;
   }
@@ -105,4 +107,11 @@ public void setExtraId(final String extraId) {
   public int getPublicationSharing() { return publicationSharing; }
   public int getFileSharing() { return fileSharing; }
 
+  public boolean getPersonnal() {
+    return personnal;
+  }
+
+  public void setPersonnal(boolean personnal) {
+    this.personnal = personnal;
+  }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationBoxDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationBoxDTO.java
index d7529eb6e..39d6634b6 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationBoxDTO.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationBoxDTO.java
@@ -34,6 +34,7 @@
 public class NotificationBoxDTO implements Serializable {
 
   private long idNotif;
+  private boolean sended;
 
   public long getIdNotif() {
     return idNotif;
@@ -42,4 +43,12 @@ public long getIdNotif() {
   public void setIdNotif(final long idNotif) {
     this.idNotif = idNotif;
   }
+
+  public boolean isSended() {
+    return sended;
+  }
+
+  protected void setSended(boolean sended) {
+    this.sended = sended;
+  }
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationDTO.java
index 12dbc2410..844f129ec 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationDTO.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationDTO.java
@@ -34,6 +34,8 @@
 public class NotificationDTO implements Serializable {
 
   public final static String TYPE_PUBLICATION = "Publication";
+
+  public final static String TYPE_DOCUMENT = "Document";
   public final static String TYPE_PHOTO = "Photo";
   public final static String TYPE_VIDEO = "Video";
   public final static String TYPE_SOUND = "Sound";
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationReceivedDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationReceivedDTO.java
index feff5f1c7..e71e179b9 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationReceivedDTO.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationReceivedDTO.java
@@ -42,6 +42,7 @@ public class NotificationReceivedDTO extends NotificationBoxDTO implements Seria
 
   public NotificationReceivedDTO() {
     super();
+    setSended(false);
   }
 
   public String getDate() {
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationSendedDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationSendedDTO.java
index a393444f3..aeabdb25a 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationSendedDTO.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationSendedDTO.java
@@ -40,6 +40,7 @@ public class NotificationSendedDTO extends NotificationBoxDTO implements Seriali
 
   public NotificationSendedDTO() {
     super();
+    setSended(true);
   }
 
   public String getDate() {
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/helpers/ApplicationsHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/helpers/ApplicationsHelper.java
new file mode 100644
index 000000000..f1cdfb6ea
--- /dev/null
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/helpers/ApplicationsHelper.java
@@ -0,0 +1,18 @@
+package org.silverpeas.mobile.shared.helpers;
+
+import com.google.gwt.user.client.Window;
+import org.silverpeas.mobile.client.common.resources.ResourcesManager;
+import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO;
+
+public class ApplicationsHelper {
+
+    public static boolean isSupportedApp(ApplicationInstanceDTO app) {
+        String appSupported = ResourcesManager.getParam("apps.supported");
+        String apps[] = appSupported.split(",");
+        for (String ap : apps) {
+            if (app.getType().equalsIgnoreCase(ap.trim())) return true;
+        }
+        return false;
+    }
+
+}
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceAlmanach.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceAlmanach.java
index 79a82b79f..d63aa879c 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceAlmanach.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceAlmanach.java
@@ -28,13 +28,11 @@
 import org.fusesource.restygwt.client.RestService;
 import org.silverpeas.mobile.shared.dto.almanach.CalendarDTO;
 import org.silverpeas.mobile.shared.dto.almanach.CalendarEventAttendeeDTO;
+import org.silverpeas.mobile.shared.dto.almanach.CalendarEventCreationDTO;
 import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO;
 
-import javax.ws.rs.GET;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.QueryParam;
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
 import java.util.List;
 
 /**
@@ -72,4 +70,10 @@ public void updateParticipation(@PathParam("componentInstanceId") String compone
       @QueryParam("zoneid") String zoneid, CalendarEventAttendeeDTO dto,
       MethodCallback<CalendarEventDTO> callback);
 
+  @POST
+  @Consumes(MediaType.APPLICATION_JSON)
+  @Path("{componentInstanceId}/{calendarId}/events")
+  public void createEvent(@PathParam("componentInstanceId") String componentInstanceId,
+                          @PathParam("calendarId") String calendarId, CalendarEventCreationDTO event, MethodCallback<CalendarEventDTO> callback);
+
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceDocuments.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceDocuments.java
index 607357ea9..743df139e 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceDocuments.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceDocuments.java
@@ -82,4 +82,16 @@ public void getTickets(@PathParam("appId") String appId, List<TicketDTO> tickets
   public void deleteTickets(@PathParam("appId") String appId,
                             List<TicketDTO> tickets, MethodCallback<List<TicketDTO>> callback);
 
+  @GET
+  @Produces(MediaType.APPLICATION_JSON)
+  @Path("{appId}/nextpublication/{id}/{direction}")
+  public void getNextPublication(@PathParam("appId") String appId,
+                                 @PathParam("id") String id,
+                                 @PathParam("direction") String direction, MethodCallback<PublicationDTO> callback);
+
+  @POST
+  @Produces(MediaType.APPLICATION_JSON)
+  @Path("{appId}/publish/{pubId}")
+  public void publish(@PathParam("appId") String appId, @PathParam("pubId") String pubId, MethodCallback<PublicationDTO> callback);
+
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceHyperLink.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceHyperLink.java
index e08837d6d..1000c1ada 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceHyperLink.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceHyperLink.java
@@ -24,8 +24,9 @@
 
 package org.silverpeas.mobile.shared.services.rest;
 
+import org.fusesource.restygwt.client.MethodCallback;
 import org.fusesource.restygwt.client.RestService;
-import org.fusesource.restygwt.client.TextCallback;
+import org.silverpeas.mobile.shared.dto.hyperlink.HyperLinkDTO;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -39,5 +40,5 @@ public interface ServiceHyperLink extends RestService {
 
   @GET
   @Path("{appId}/")
-  public void getUrl(@PathParam("appId") String appId, TextCallback callback);
+  public void getUrl(@PathParam("appId") String appId, MethodCallback<HyperLinkDTO> callback);
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMedia.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMedia.java
index 0d2674a6d..1e8fce900 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMedia.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMedia.java
@@ -48,26 +48,14 @@
 @Path("/mobile/medialib")
 public interface ServiceMedia extends RestService {
 
-  @GET
-  @Path("{appId}/question/all")
-  public void getAllQuestions(@PathParam("appId") String appId,
-      MethodCallback<List<QuestionDTO>> callback);
-
-
-
   @GET
   @Path("add/{name}/{data}/{idGallery}/{idAlbum}")
   public void uploadPicture(@PathParam("name") String name, @PathParam("data") String data, @PathParam("idGallery") String idGallery, @PathParam("idAlbum") String idAlbum, MethodCallback<Void> callback);
 
   @GET
   @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
-  @Path("allGalleries")
-  public void getAllGalleries(MethodCallback<List<ApplicationInstanceDTO>> callback);
-
-  @GET
-  @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
-  @Path("media/{id}")
-  public void getMedia(@PathParam("id") String id, MethodCallback<MediaDTO> callback);
+  @Path("{appId}/media/{id}")
+  public void getMedia(@PathParam("appId") String instanceId, @PathParam("id") String id, MethodCallback<MediaDTO> callback);
 
   @GET
   @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
@@ -92,6 +80,6 @@ public void getAllQuestions(@PathParam("appId") String appId,
 
   @GET
   @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
-  @Path("{appId}/videostream/{pictureId}")
+  @Path("{appId}/photo/{pictureId}")
   public void getPreviewPicture(@PathParam("appId") String instanceId, @PathParam("pictureId") String pictureId, MethodCallback<PhotoDTO> callback);
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMyLinks.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMyLinks.java
index 67579cf80..244277c31 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMyLinks.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMyLinks.java
@@ -26,13 +26,12 @@
 
 import org.fusesource.restygwt.client.MethodCallback;
 import org.fusesource.restygwt.client.RestService;
+import org.silverpeas.mobile.shared.dto.MyLinkCategoryDTO;
 import org.silverpeas.mobile.shared.dto.MyLinkDTO;
 import org.silverpeas.mobile.shared.dto.comments.CommentDTO;
 
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
 import java.util.List;
 
 /**
@@ -50,4 +49,13 @@ public interface ServiceMyLinks extends RestService {
   @Path("/")
   public void getMyLinks(MethodCallback<List<MyLinkDTO>> callback);
 
+  @DELETE
+  @Path("{linkId}")
+  public void deleteLink(final @PathParam("linkId") String linkId, MethodCallback<Void> callback);
+
+  @GET
+  @Path("categories")
+  @Produces(MediaType.APPLICATION_JSON)
+  public void getMyCategories(MethodCallback<List<MyLinkCategoryDTO>> callback);
+
 }
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java
index 02a98c7b7..b216b9059 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java
@@ -31,6 +31,7 @@
 import org.silverpeas.mobile.shared.dto.HomePageDTO;
 import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO;
 import org.silverpeas.mobile.shared.dto.navigation.SilverpeasObjectDTO;
+import org.silverpeas.mobile.shared.dto.navigation.SpaceDTO;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
@@ -48,6 +49,16 @@
 @Path("/mobile/navigation")
 public interface ServiceNavigation extends RestService {
 
+  @GET
+  @Produces(MediaType.APPLICATION_JSON)
+  @Path("space/{spaceId}/")
+  public void getSpace(@PathParam("spaceId") String spaceId, MethodCallback<SpaceDTO> callback);
+
+  @GET
+  @Produces(MediaType.APPLICATION_JSON)
+  @Path("personalSpace/{userId}/")
+  public void getPersonnalSpaceContent(@PathParam("userId") String userId, MethodCallback<List<ApplicationInstanceDTO>> callback);
+
   @GET
   @Produces(MediaType.APPLICATION_JSON)
   @Path("spacesAndApps/{rootSpaceId}/")
@@ -77,8 +88,8 @@ public void getApp(@PathParam("instanceId") String instanceId,
 
   @GET
   @Produces(MediaType.APPLICATION_JSON)
-  @Path("homepage/{spaceId}/")
-  public void getHomePageData(@PathParam("spaceId") String spaceId, MethodCallback<HomePageDTO> callback);
+  @Path("homepage/{spaceId}/{zoom}/")
+  public void getHomePageData(@PathParam("spaceId") String spaceId, @PathParam("zoom") String zoom, MethodCallback<HomePageDTO> callback);
 
   @GET
   @Produces(MediaType.APPLICATION_JSON)
diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceTask.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceTask.java
index 2cfffd1bd..97840bb83 100644
--- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceTask.java
+++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceTask.java
@@ -28,12 +28,7 @@
 import org.fusesource.restygwt.client.RestService;
 import org.silverpeas.mobile.shared.dto.TaskDTO;
 
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
+import javax.ws.rs.*;
 import javax.ws.rs.core.MediaType;
 import java.util.List;
 
@@ -55,6 +50,12 @@ public interface ServiceTask extends RestService {
   @Path("")
   public void updateTask(TaskDTO task, MethodCallback<Void> callback);
 
+  @DELETE
+  @Produces(MediaType.APPLICATION_JSON)
+  @Consumes(MediaType.APPLICATION_JSON)
+  @Path("")
+  public void deleteTasks(List<TaskDTO> tasks, MethodCallback<Void> callback);
+
   @POST
   @Produces(MediaType.APPLICATION_JSON)
   @Consumes(MediaType.APPLICATION_JSON)
diff --git a/mobile-war/src/main/webapp/WEB-INF/app-init.template b/mobile-war/src/main/webapp/WEB-INF/app-init.template
index 0e834d3e6..86250f507 100644
--- a/mobile-war/src/main/webapp/WEB-INF/app-init.template
+++ b/mobile-war/src/main/webapp/WEB-INF/app-init.template
@@ -5,28 +5,31 @@ if (firebaseConfig != null) {
   const messaging = firebase.messaging();
   navigator.serviceWorker.register('/silverpeas/spmobile/app-sw.js')
       .then((registration) => {
-        messaging.useServiceWorker(registration);
+       navigator.serviceWorker.ready.then(function(reg) {
+           messaging.useServiceWorker(registration);
 
-        // Request permission and get token.....
-        Notification.requestPermission().then(function(permission) {
-          if (permission === "granted") {
-            messaging.getToken().then(token => {
-              console.log("Token Is : " + token);
-              storeToken(token);
+            // Request permission and get token.....
+            Notification.requestPermission().then(function(permission) {
+              if (permission === "granted") {
+                messaging.getToken().then(token => {
+                  console.log("Token Is : " + token);
+                  storeToken(token);
+                });
+              } else {
+                console.log("No permission to send push");
+              }
             });
-          } else {
-            console.log("No permission to send push");
-          }
         });
       });
 
   messaging.onMessage(payload => {
     const notificationOptions = {
-      body : payload.data["subject"], icon : '/silverpeas/util/icons/desktop-user-notification.png'
+      body : payload.data["body"], icon : '/silverpeas/util/icons/desktop-user-notification.png',
+      data : payload.data
     };
 
     navigator.serviceWorker.getRegistration('/silverpeas/spmobile/').then(registration => {
-            registration.showNotification(payload.data["sender"], notificationOptions)
+            registration.showNotification(payload.data["subject"], notificationOptions)
     });
   });
 } else {
diff --git a/mobile-war/src/main/webapp/WEB-INF/app-sw.template b/mobile-war/src/main/webapp/WEB-INF/app-sw.template
index ed7735cf4..a379890f3 100644
--- a/mobile-war/src/main/webapp/WEB-INF/app-sw.template
+++ b/mobile-war/src/main/webapp/WEB-INF/app-sw.template
@@ -10,9 +10,9 @@ if (firebaseConfig != null) {
 
   messaging.setBackgroundMessageHandler(function(payload) {
     console.log('[firebase-messaging-sw.js] Received background message ', payload);
-    const notificationTitle = payload.data["sender"];
+    const notificationTitle = payload.data["subject"];
     const notificationOptions = {
-      body : payload.data["subject"], icon : '/silverpeas/util/icons/desktop-user-notification.png',
+      body : payload.data["body"], icon : '/silverpeas/util/icons/desktop-user-notification.png',
       data : payload.data
     };
 
@@ -24,7 +24,33 @@ if (firebaseConfig != null) {
      const pushData = event.notification.data;
      event.notification.close();
      if (!pushData["permalink"].endsWith("/null")) {
-      event.waitUntil(self.clients.openWindow(pushData["permalink"]));
+      fetch('/silverpeas/services/mobile/notification/readed/' + pushData["notificationId"], {
+        method: 'PUT'
+      });
+
+      event.waitUntil(clients.matchAll({type: "window", includeUncontrolled: true}).then(function (clientList) {
+          if (pushData["permalink"]) {
+              let client = null;
+              for (let i = 0; i < clientList.length; i++) {
+                  let item = clientList[i];
+                  if (item.url) {
+                      client = item;
+                      break;
+                  }
+              }
+              if (client && 'navigate' in client) {
+                  client.focus();
+                  event.notification.close();
+                  return client.navigate(pushData["permalink"]);
+              }
+              else {
+                  event.notification.close();
+                  // if client doesn't have navigate function, try to open a new browser window
+                  return clients.openWindow(pushData["permalink"]);
+              }
+          }
+      }));
+
      }
   });
 
diff --git a/mobile-war/src/main/webapp/WEB-INF/manifest.json.template b/mobile-war/src/main/webapp/WEB-INF/manifest.json.template
index 64fdf79e0..6abde7196 100644
--- a/mobile-war/src/main/webapp/WEB-INF/manifest.json.template
+++ b/mobile-war/src/main/webapp/WEB-INF/manifest.json.template
@@ -1,18 +1,32 @@
 {
   "name": "Silverpeas Mobile",
   "short_name": "SpMobile",
-  "background_color": "white",
+  "id": "spmobile",
+  "background_color": "#FFFFFF",
   "description": "Version mobile de Silverpeas",
   "orientation": "portrait-primary",
   "scope": "/silverpeas/spmobile/",
   "start_url": "/silverpeas/spmobile/spmobil.jsp",
   "display": "standalone",
-  "theme_color": "green",
+  "display_override": ["standalone", "minimal-ui"],
+  "theme_color": "#7eb73b",
   "icons": [
     {
       "src" : "icon.png",
       "type" : "image/png",
       "sizes" : "144x144"
+    },
+    {
+      "src" : "iconh.png",
+      "type" : "image/png",
+      "sizes" : "512x512"
     }
-  ]
+  ],
+
+  "capture_links": "existing_client_event",
+      "url_handlers" : [
+          {
+              "origin": "https://intranoo.silverpeas.com"
+          }
+      ]
 }
\ No newline at end of file
diff --git a/mobile-war/src/main/webapp/WEB-INF/web-app-origin-association.template b/mobile-war/src/main/webapp/WEB-INF/web-app-origin-association.template
new file mode 100644
index 000000000..f08be9f99
--- /dev/null
+++ b/mobile-war/src/main/webapp/WEB-INF/web-app-origin-association.template
@@ -0,0 +1,11 @@
+{
+    "web_apps": [
+        {
+            "manifest": "https://intranoo.silverpeas.com/silverpeas/spmobile/manifest.json",
+            "details": {
+                "paths": ["/*"],
+                "exclude_paths": []
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/mobile-war/src/main/webapp/WEB-INF/web.xml b/mobile-war/src/main/webapp/WEB-INF/web.xml
index 541ab30ab..83b98d3a0 100644
--- a/mobile-war/src/main/webapp/WEB-INF/web.xml
+++ b/mobile-war/src/main/webapp/WEB-INF/web.xml
@@ -71,6 +71,16 @@
     <servlet-class>org.silverpeas.mobile.server.servlets.PublicationContentServlet</servlet-class>
   </servlet>
 
+  <servlet-mapping>
+    <servlet-name>webAppOriginAssociationServlet</servlet-name>
+    <url-pattern>/spmobile/web-app-origin-association</url-pattern>
+  </servlet-mapping>
+
+  <servlet>
+    <servlet-name>webAppOriginAssociationServlet</servlet-name>
+    <servlet-class>org.silverpeas.mobile.server.servlets.WebAppOriginAssociationServlet</servlet-class>
+  </servlet>
+
   <servlet-mapping>
     <servlet-name>PublicationContentServlet</servlet-name>
     <url-pattern>/services/spmobile/PublicationContent</url-pattern>
@@ -86,6 +96,16 @@
     <url-pattern>/services/spmobile/MediaAction</url-pattern>
   </servlet-mapping>
 
+  <servlet>
+    <servlet-name>FileServlet</servlet-name>
+    <servlet-class>org.silverpeas.mobile.server.servlets.FileServlet</servlet-class>
+  </servlet>
+
+  <servlet-mapping>
+    <servlet-name>FileServlet</servlet-name>
+    <url-pattern>/services/spmobile/FileAction</url-pattern>
+  </servlet-mapping>
+
   <servlet>
     <servlet-name>FormServlet</servlet-name>
     <servlet-class>org.silverpeas.mobile.server.servlets.FormServlet</servlet-class>
diff --git a/mobile-war/src/main/webapp/spmobile/iconh.png b/mobile-war/src/main/webapp/spmobile/iconh.png
new file mode 100644
index 000000000..3d65a520a
Binary files /dev/null and b/mobile-war/src/main/webapp/spmobile/iconh.png differ
diff --git a/mobile-war/src/main/webapp/spmobile/spmobil.jsp b/mobile-war/src/main/webapp/spmobile/spmobil.jsp
index 4ef5e0867..6b10c3b1c 100644
--- a/mobile-war/src/main/webapp/spmobile/spmobil.jsp
+++ b/mobile-war/src/main/webapp/spmobile/spmobil.jsp
@@ -49,6 +49,7 @@
   <meta name="apple-mobile-web-app-capable" content="yes"/>
   <meta name="apple-mobile-web-app-status-bar-style" content="default"/>
   <link rel="manifest" href="manifest.json">
+  <link rel="web-app-origin-association" href="web-app-origin-association">
 
   <%
     String l = request.getHeader("Accept-Language");
@@ -144,6 +145,9 @@
       var windowHeight = window.innerHeight;
       document.body.style.height = windowHeight + "px";
     }
+    function navigate(url) {
+      window.navigateTo(url);
+    }
   </script>
 
   <%
@@ -157,9 +161,12 @@
 </head>
 <body class="ui-panel-wrapper ui-page-theme-a csspinner traditional" onload="resize();">
 <%
-  String fullSsoPath = request.getRequestURL().toString();
-  fullSsoPath = fullSsoPath.replace("/spmobile/spmobil.jsp","");
-  fullSsoPath = fullSsoPath + ssoPath;
+  String fullSsoPath = "";
+  if (!ssoPath.trim().isEmpty()) {
+    fullSsoPath = request.getRequestURL().toString();
+    fullSsoPath = fullSsoPath.replace("/spmobile/spmobil.jsp", "");
+    fullSsoPath = fullSsoPath + ssoPath;
+  }
 %>
 <input type="hidden" id="ssoPath" value="<%=fullSsoPath%>">
 <div id="oneinch"
diff --git a/pom.xml b/pom.xml
index 6f142784e..0f2426fda 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,14 +35,14 @@
   <groupId>org.silverpeas.components</groupId>
   <artifactId>mobile</artifactId>
   <packaging>pom</packaging>
-  <version>6.4-SNAPSHOT</version>
+  <version>6.4-JR-SNAPSHOT</version>
   <name>Silverpeas Mobile component</name>
 
   <properties>
-    <silverpeas.version>6.4-build230430</silverpeas.version>
+    <silverpeas.version>6.4-JR-build240107</silverpeas.version>
     <maven.compiler.source>11</maven.compiler.source>
     <maven.compiler.target>11</maven.compiler.target>
-     <next.release>6.4</next.release>
+     <next.release>6.4-JR</next.release>
   </properties>
 
   <repositories>