diff --git a/chrome/content/sogo-connector/addressbook/addressbook.groupdav.overlay.js b/chrome/content/sogo-connector/addressbook/addressbook.groupdav.overlay.js
index a45a405..b9fe3f3 100644
--- a/chrome/content/sogo-connector/addressbook/addressbook.groupdav.overlay.js
+++ b/chrome/content/sogo-connector/addressbook/addressbook.groupdav.overlay.js
@@ -579,7 +579,7 @@ function SCAbConfirmDeleteDirectory(selectedDir) {
 }
 
 function SCSynchronizeFromChildWindow(uri) {
-    this.setTimeout(SynchronizeGroupdavAddressbook, 1, uri, null);
+    this.setTimeout(SynchronizeGroupdavAddressbook, 1, uri, null, 1);
 }
 
 let groupdavSynchronizationObserver = {
@@ -847,7 +847,7 @@ function SCCommandSynchronize() {
     SynchronizeGroupdavAddressbook(gSelectedDir, SCCommandSynchronizeCallback);
 }
 
-function SCCommandSynchronizeCallback(url, code, failures) {
+function SCCommandSynchronizeCallback(url, code, failures, datas) {
     dump("SCCommandSynchronizeCallback\n");
     dump("  url: " + url + "\n");
     dump("  code: " + code + "\n");
diff --git a/chrome/content/sogo-connector/addressbook/addressbook.groupdav.overlay.xul b/chrome/content/sogo-connector/addressbook/addressbook.groupdav.overlay.xul
index d29d5c3..366f5d3 100644
--- a/chrome/content/sogo-connector/addressbook/addressbook.groupdav.overlay.xul
+++ b/chrome/content/sogo-connector/addressbook/addressbook.groupdav.overlay.xul
@@ -44,6 +44,15 @@
   <script type="application/x-javascript"
     src="chrome://sogo-connector/content/addressbook/addressbook.groupdav.overlay.js"/>
 
+    <!-- 
+    MUST USE THE EXISTING id OF BUNDLESET OF ORIGINAL XUL FILE 
+      ===> it means we add the stringbundle to the existing stringbundleset
+    -->
+    <stringbundleset id="stringbundleset">
+        <stringbundle id="sogoStringBundle" src="chrome://sogo-connector/locale/addressbook/messenger.groupdav.overlay.properties"/>
+    </stringbundleset>
+
+
   <commandset id="addressBook">
     <command id="cmd_syncGroupdav" oncommand="SCCommandSynchronize();"/>
     <command id="cmd_syncAbortGroupdav" oncommand="SCCommandSynchronizeAbort();"/>
diff --git a/chrome/content/sogo-connector/addressbook/messenger.groupdav.overlay.js b/chrome/content/sogo-connector/addressbook/messenger.groupdav.overlay.js
index c6a2ef1..df12da7 100644
--- a/chrome/content/sogo-connector/addressbook/messenger.groupdav.overlay.js
+++ b/chrome/content/sogo-connector/addressbook/messenger.groupdav.overlay.js
@@ -214,21 +214,59 @@ function _migrateOldCardDAVDirs(prefs, uniqueChildren) {
     }
 }
 
+// TODO : better handling of that var
+var SOGO_Timers = [];
+
 function startFolderSync() {
     let abManager = Components.classes["@mozilla.org/abmanager;1"]
                               .getService(Components.interfaces.nsIAbManager);
+
     let children = abManager.directories;
     while (children.hasMoreElements()) {
         let ab = children.getNext().QueryInterface(Components.interfaces.nsIAbDirectory);
-        if (isGroupdavDirectory(ab.URI)) {
-            let synchronizer = new GroupDavSynchronizer(ab.URI, false);
-            synchronizer.start();
+        if (isGroupdavDirectory(ab.URI)) {            
+            let dirPrefId = ab.dirPrefId;                
+            let groupdavPrefService = new GroupdavPreferenceService(dirPrefId);
+            let periodicSync = false;
+            let periodicSyncInterval = 60;
+            let notifications = false;
+            let notificationsOnlyIfNotEmpty = false;
+            try {
+                periodicSync = groupdavPrefService.getPeriodicSync();
+                periodicSyncInterval = groupdavPrefService.getPeriodicSyncInterval();
+                notifications = groupdavPrefService.getNotifications();
+                notificationsOnlyIfNotEmpty = groupdavPrefService.getNotificationsOnlyIfNotEmpty();            
+            } catch(e) {
+            }
+            
+            
+            // handle startup sync
+            sync = GetSyncNotifyGroupdavAddressbook(ab.URI, ab, SOGOC_SYNC_STARTUP);
+            sync.notify();
+
+            if (periodicSync) {
+                // handle future periodic sync
+                psync = GetSyncNotifyGroupdavAddressbook(ab.URI, ab, SOGOC_SYNC_PERIODIC);
+                
+                // TODO : handle syncInterval and Notifications in a dynamic way :
+                // today, we have to restart TB if we change those values.
+                 
+                // Now it is time to create the timer.
+                var timer = Components.classes["@mozilla.org/timer;1"].createInstance(Components.interfaces.nsITimer);
+                 
+                let delay = periodicSyncInterval;
+                delay = delay *60; // min --> sec
+                // delay = delay * 3; // min --> sec DEBUG
+                delay = delay * 1000; // sec --> ms
+                timer.initWithCallback(psync, delay, Components.interfaces.nsITimer.TYPE_REPEATING_PRECISE_CAN_SKIP);
+                SOGO_Timers.push(timer);
+            }
         }
     }
 }
 
 function SCSynchronizeFromChildWindow(uri) {
-    this.setTimeout(SynchronizeGroupdavAddressbook, 100, uri, null);
+    this.setTimeout(SynchronizeGroupdavAddressbook, 100, uri, null, SOGOC_SYNC_WRITE);
 }
 
 window.addEventListener("load", OnLoadMessengerOverlay, false);
diff --git a/chrome/content/sogo-connector/addressbook/messenger.groupdav.overlay.xul b/chrome/content/sogo-connector/addressbook/messenger.groupdav.overlay.xul
index 065dae4..30b92a7 100644
--- a/chrome/content/sogo-connector/addressbook/messenger.groupdav.overlay.xul
+++ b/chrome/content/sogo-connector/addressbook/messenger.groupdav.overlay.xul
@@ -30,4 +30,13 @@
 <overlay id="ca.inverse.messenger.groupdav" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
   <script type="application/x-javascript"
           src="chrome://sogo-connector/content/addressbook/messenger.groupdav.overlay.js"/>
+
+    <!-- 
+    MUST USE THE EXISTING id OF BUNDLESET OF ORIGINAL XUL FILE 
+      ===> it means we add the stringbundle to the existing stringbundleset
+    -->
+    <stringbundleset id="stringbundleset">
+        <stringbundle id="sogoStringBundle" src="chrome://sogo-connector/locale/addressbook/messenger.groupdav.overlay.properties"/>
+    </stringbundleset>
+
 </overlay>
diff --git a/chrome/content/sogo-connector/addressbook/preferences.addressbook.groupdav.js b/chrome/content/sogo-connector/addressbook/preferences.addressbook.groupdav.js
index 6988848..cad7ee0 100644
--- a/chrome/content/sogo-connector/addressbook/preferences.addressbook.groupdav.js
+++ b/chrome/content/sogo-connector/addressbook/preferences.addressbook.groupdav.js
@@ -108,11 +108,34 @@ function onAcceptWebDAV() {
                                          done */);
     }
 
-    let groupdavPrefService = new GroupdavPreferenceService(prefId);
-    groupdavPrefService.setURL(document.getElementById("groupdavURL").value);
+    try {
+        let groupdavPrefService = new GroupdavPreferenceService(prefId);
+        groupdavPrefService.setURL(document.getElementById("groupdavURL").value);
+        
+        groupdavPrefService.setPeriodicSync(document.getElementById("periodicSync").checked);
+        groupdavPrefService.setPeriodicSyncInterval(document.getElementById("periodicSyncInterval").value);
+
+        groupdavPrefService.setNotifications(document.getElementById("notifications").checked);
+        groupdavPrefService.setNotificationsOnlyIfNotEmpty(document.getElementById("notificationsOnlyIfNotEmpty").checked);
+
+        groupdavPrefService.setNotificationsManual(document.getElementById("notificationsManual").checked);
+        groupdavPrefService.setNotificationsSave(document.getElementById("notificationsSave").checked);
+        groupdavPrefService.setNotificationsStart(document.getElementById("notificationsStart").checked);
+    } catch(e) {
+    }
 }
 
 function onLoad() {
+    let description = "";
+    let url = "";
+    let periodicSync = false;
+    let periodicSyncInterval = 15;
+    let notifications = true;
+    let notificationsOnlyIfNotEmpty = false;
+    let notificationsManual = true;
+    let notificationsSave = false;
+    let notificationsStart = true;
+
     let directory = SCGetCurrentDirectory();
     if (directory) {
         let uri = directory.URI;
@@ -121,22 +144,58 @@ function onLoad() {
         roElem.setAttribute("checked", readOnly);
         roElem.disabled = true;
 
-        let description = "";
-        let url = "";
-
+        
         if (readOnly) {
             description = directory.dirName;
             directory = directory.wrappedJSObject;
             url = directory.serverURL;
         }
-        else {
+
+        try {
             let groupdavPrefService = new GroupdavPreferenceService(directory.dirPrefId);
             description = directory.dirName;
             url = groupdavPrefService.getURL();
+
+            periodicSync = groupdavPrefService.getPeriodicSync();
+            periodicSyncInterval = groupdavPrefService.getPeriodicSyncInterval();
+
+            notifications = groupdavPrefService.getNotifications();
+            notificationsOnlyIfNotEmpty = groupdavPrefService.getNotificationsOnlyIfNotEmpty();            
+            notificationsManual = groupdavPrefService.getNotificationsManual();
+            notificationsSave = groupdavPrefService.getNotificationsSave();
+            notificationsStart = groupdavPrefService.getNotificationsStart();
+        } catch(e) {
         }
-        document.getElementById("description").value = description;
-        document.getElementById("groupdavURL").value = url;
+
     }
+
+    // always define values
+    document.getElementById("description").value = description;
+    document.getElementById("groupdavURL").value = url;
+
+    document.getElementById("periodicSync").checked = periodicSync;
+    document.getElementById("periodicSyncInterval").value = periodicSyncInterval;
+    
+    document.getElementById("notifications").checked = notifications;
+    document.getElementById("notificationsOnlyIfNotEmpty").checked = notificationsOnlyIfNotEmpty;
+    document.getElementById("notificationsManual").checked = notificationsManual;
+    document.getElementById("notificationsSave").checked = notificationsSave;
+    document.getElementById("notificationsStart").checked = notificationsStart;
+
+    onUpdateCheck();
+}
+
+function onUpdateCheck() {
+    var psc = document.getElementById("periodicSync").checked;
+    var nc = document.getElementById("notifications").checked;
+    document.getElementById("periodicSyncInterval").disabled = !psc;    
+    document.getElementById("notifications").disabled = !psc;
+    document.getElementById("notificationsOnlyIfNotEmpty").disabled = !nc || !psc;
+}
+
+function onShowRestart() {
+    // show the info about restart
+    document.getElementById("periodicSync_restart").hidden = false;
 }
 
 //TODO:catch the directory delete and delete preferences
diff --git a/chrome/content/sogo-connector/addressbook/preferences.addressbook.groupdav.xul b/chrome/content/sogo-connector/addressbook/preferences.addressbook.groupdav.xul
index b372ea3..598986c 100644
--- a/chrome/content/sogo-connector/addressbook/preferences.addressbook.groupdav.xul
+++ b/chrome/content/sogo-connector/addressbook/preferences.addressbook.groupdav.xul
@@ -113,10 +113,65 @@ Modifications by
 	  <textbox id="groupdavURL" flex="1" disableiflocked="true" class="uri-element"/>							
 	  <spacer flex="1"/>
 	</row>						  
+
+      </rows>
+    </grid>
+
+
+    <grid flex="1">
+      <columns>
+        <column/>
+        <column flex="1"/>
+      </columns>
+
+      <rows >
+        <separator/>
+        <row  align="center" flex="1">
+            <checkbox id="periodicSync" label="&groupdavPeriodicSync.label;" oncommand="onUpdateCheck();onShowRestart()" />
+            <menulist id="periodicSyncInterval" oncommand="onShowRestart()" >
+                <menupopup>
+                    <menuitem label="&groupdavPeriodicSync5m.label;" value="5"/>
+                    <menuitem label="&groupdavPeriodicSync15m.label;" value="15"/>
+                    <menuitem label="&groupdavPeriodicSync1h.label;" value="60"/>
+                    <menuitem label="&groupdavPeriodicSync2h.label;" value="120"/>
+                </menupopup>
+            </menulist>        
+        </row>
+        <row  align="center" flex="1">
+            <spacer flex="1"/>
+            <hbox>
+                <checkbox id="notifications" label="&groupdavNotifications.label;" oncommand="onUpdateCheck()" />
+                <checkbox id="notificationsOnlyIfNotEmpty" label="&groupdavNotificationsOINE.label;"  />
+            </hbox>
+        </row>
+
+        <row  align="center" flex="1">
+            <spacer flex="1"/>
+            <label id="periodicSync_restart" hidden="true"
+                    style="font-style:italic"
+                    value="&groupdavNotificationsRestart.label;" />
+        </row>
       </rows>
     </grid>
+
+    <separator/>
+    <checkbox id="notificationsManual" label="&groupdavNotificationsManual.label;"  />
+    <label  style="font-style:italic"
+            value="&groupdavNotificationsManual.info;" />
+
+    <separator/>
+    <checkbox id="notificationsSave" label="&groupdavNotificationsSave.label;" />
+    <label  style="font-style:italic"
+            value="&groupdavNotificationsSave.info;" />
+
+    <separator/>
+    <checkbox id="notificationsStart" label="&groupdavNotificationsStart.label;" />
+        
+
     <separator/>
     <checkbox id="readOnly" label="&ReadOnly.label;" accesskey="&ReadOnly.accesskey;"/>
+
+
   </vbox>
   <!--			</tabpanel>
   <tabpanel id="downloadPanel">
diff --git a/chrome/content/sogo-connector/general/preference.service.addressbook.groupdav.js b/chrome/content/sogo-connector/general/preference.service.addressbook.groupdav.js
index de90195..0dd7782 100644
--- a/chrome/content/sogo-connector/general/preference.service.addressbook.groupdav.js
+++ b/chrome/content/sogo-connector/general/preference.service.addressbook.groupdav.js
@@ -127,8 +127,8 @@ GroupdavPreferenceService.prototype = {
             value = this.mPreferencesService.getCharPref(this.prefPath + prefName);
         }
         catch(e) {
-            // dump("exception getting pref '" + this.prefPath + prefName
-            //      + "': \n" + e + " (" + e.lineNumber + ")\n");
+            dump("exception getting pref '" + this.prefPath + prefName
+                  + "': \n" + e + " (" + e.lineNumber + ")\n");
             // dump("  stack:\n" + backtrace() + "\n");
             throw("unacceptable condition: " + e);
         }
@@ -229,6 +229,57 @@ GroupdavPreferenceService.prototype = {
     },
     setWebdavSyncToken: function GdPSvc_setWebdavSyncToken(value) {
         this._setPref("sync-token", value);
+    },
+
+
+    getPeriodicSync: function GdPSvc_getPeriodicSync() {
+        return this._getBoolPref("periodicSync");
+    },
+    setPeriodicSync: function GdPSvc_setPeriodicSync(value) {
+        this._setBoolPref("periodicSync", value);
+    },
+    
+    getPeriodicSyncInterval: function GdPSvc_getPeriodicSyncInterval() {
+        return this._getPrefWithDefault("periodicSyncInterval", "15");
+    },
+    setPeriodicSyncInterval: function GdPSvc_setPeriodicSyncInterval(value) {
+        this._setPref("periodicSyncInterval", value);
+    },
+
+
+    getNotifications: function GdPSvc_getNotifications() {
+        return this._getBoolPref("notifications");
+    },
+    setNotifications: function GdPSvc_setNotifications(value) {
+        this._setBoolPref("notifications", value);
+    },
+
+    getNotificationsOnlyIfNotEmpty: function GdPSvc_getNotificationsOnlyIfNotEmpty() {
+        return this._getBoolPref("notificationsNotEmpty");
+    },
+    setNotificationsOnlyIfNotEmpty: function GdPSvc_setNotificationsOnlyIfNotEmpty(value) {
+        this._setBoolPref("notificationsNotEmpty", value);
+    },
+
+    getNotificationsManual: function GdPSvc_getNotificationsManual() {
+        return this._getBoolPref("notificationsManual");
+    },
+    setNotificationsManual: function GdPSvc_setNotificationsManual(value) {
+        this._setBoolPref("notificationsManual", value);
+    },
+    
+    getNotificationsSave: function GdPSvc_getNotificationsSave() {
+        return this._getBoolPref("notificationsSave");
+    },
+    setNotificationsSave: function GdPSvc_setNotificationsSave(value) {
+        this._setBoolPref("notificationsSave", value);
+    },
+
+    getNotificationsStart: function GdPSvc_getNotificationsStart() {
+        return this._getBoolPref("notificationsStart");
+    },
+    setNotificationsStart: function GdPSvc_setNotificationsStart(value) {
+        this._setBoolPref("notificationsStart", value);
     }
 };
 
diff --git a/chrome/content/sogo-connector/general/sync.addressbook.groupdav.js b/chrome/content/sogo-connector/general/sync.addressbook.groupdav.js
index 848c38b..d1c9335 100644
--- a/chrome/content/sogo-connector/general/sync.addressbook.groupdav.js
+++ b/chrome/content/sogo-connector/general/sync.addressbook.groupdav.js
@@ -56,6 +56,50 @@ let SOGOC_PROCESS_CARDS = 0;
 let SOGOC_PROCESS_LISTS = 1;
 let SOGOC_PROCESS_FINALIZE = 2;
 
+
+let SOGOC_SYNC_MANUAL = 0;      // manual sync
+let SOGOC_SYNC_WRITE = 1;       // manual save in card from addressbook
+let SOGOC_SYNC_PERIODIC = 2;    // periodic sync
+let SOGOC_SYNC_STARTUP = 3;     // startup
+
+function loadNotificationsStrings() {
+    var SOGO_Notifications_Strings = {};
+
+    let keys = ['notificationsTitle', 'notificationsUpload', 'notificationsUploads', 
+                'notificationsDownload', 'notificationsDownloads', 'notificationsDelete', 
+                'notificationsDeletes', 'notificationsNoChanges' ];
+    for (let i in keys) {
+        key = keys[i];
+        SOGO_Notifications_Strings[key] = SOGO_GetString(key);
+    }
+    return SOGO_Notifications_Strings;
+}
+
+function SOGO_GetString(key) {
+    /*
+     * wrapper for localization
+     * 
+     * params :
+     *   key : the name of the property
+     * return :
+     *   the value of property in the current language
+     */
+    let bundle = document.getElementById("sogoStringBundle");
+    dump("Bundle="+bundle);
+    if (bundle)
+        return bundle.getString(key);
+    else
+        return key;
+    /*
+     * Alternate way
+     * 
+    let bundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService);
+    let bundle = bundleService.createBundle("chrome://mrc_compose/locale/mrc_compose.properties");
+    let str = bundle.GetStringFromName(key);
+    return str;
+    */
+}
+
 let sCounter = 0;
 function GroupDavSynchronizer(uri) {
     if (typeof uri == "undefined" || !uri)
@@ -1505,7 +1549,169 @@ new:
     }
 };
 
-function SynchronizeGroupdavAddressbook(uri, callback, callbackData) {
+
+function GetSyncNotifyGroupdavAddressbook(uri, ab, origin) {
+    /*
+     * Returns an timer object that handle syncs.
+     * He can be used in a timer or as a one-call sync.
+     * 
+     * params :
+     *      uri :   text, the URI of CardDAV addressbook.
+     *      ab :    object, the (OPTIONAL) addressbook object.
+     *              Depending on the calling chain, it is defined
+     *              only for periodic sync.
+     *      origin : int
+     *              0 : manual sync
+     *              1 : manual save in card from addressbook
+     *              2 : periodic sync
+     *              3 : startup
+     */
+    let notifications = false;
+    let notificationsOnlyIfNotEmpty = false;
+    let notificationsManual = true;
+    let notificationsSave = false;
+    let notificationsStart = true;
+    let dirName = uri;
+    if(typeof(ab) === 'undefined' || ab === null) {
+        ab = false;
+
+        // search addressbook with URI :
+        // needed to get :
+        //   - ab dirName
+        //   - notification prefs
+        let abManager = Components.classes["@mozilla.org/abmanager;1"]
+                                  .getService(Components.interfaces.nsIAbManager);
+
+        let children = abManager.directories;
+        while (children.hasMoreElements()) {
+            let ab = children.getNext().QueryInterface(Components.interfaces.nsIAbDirectory);
+            if (ab.URI === uri) {
+                dirName = ab.dirName;
+                let dirPrefId = ab.dirPrefId;                
+                let groupdavPrefService = new GroupdavPreferenceService(dirPrefId);
+                try {
+                    notifications = groupdavPrefService.getNotifications();
+                    notificationsOnlyIfNotEmpty = groupdavPrefService.getNotificationsOnlyIfNotEmpty();
+                    notificationsManual = groupdavPrefService.getNotificationsManual();
+                    notificationsSave = groupdavPrefService.getNotificationsSave();
+                    notificationsStart = groupdavPrefService.getNotificationsStart();
+                } catch(e) {
+                }
+            }
+        }
+
+    } else {
+        dirName = ab.dirName;
+        let dirPrefId = ab.dirPrefId;
+        let groupdavPrefService = new GroupdavPreferenceService(dirPrefId);
+        try {
+            notifications = groupdavPrefService.getNotifications();
+            notificationsOnlyIfNotEmpty = groupdavPrefService.getNotificationsOnlyIfNotEmpty();            
+            notificationsManual = groupdavPrefService.getNotificationsManual();
+            notificationsSave = groupdavPrefService.getNotificationsSave();
+            notificationsStart = groupdavPrefService.getNotificationsStart();
+        } catch(e) {
+        }
+    }
+    if(typeof(origin) === 'undefined') {
+        origin = SOGOC_SYNC_MANUAL;
+    }
+
+    var sync = {
+        URI : uri,
+        dirName : dirName,
+        origin : origin,
+        notifications : notifications,
+        notificationsOnlyIfNotEmpty : notificationsOnlyIfNotEmpty,
+        notificationsManual : notificationsManual,
+        notificationsSave : notificationsSave,
+        notificationsStart : notificationsStart,
+        notificationsStrings : loadNotificationsStrings(),
+        
+        notify: function(timer) {
+            this.synchronizer = new GroupDavSynchronizer(this.URI);
+            this.synchronizer.callback = this.cbSynchronize;
+            this.synchronizer.callbackData = this;
+            this.synchronizer.start();
+        },
+      
+        cbSynchronize: function (cbURL, cbCode, cbFailures, cbData) {
+            //
+            // Can't use 'this' because it is a callback.
+            // 
+            let title = cbData.notificationsStrings['notificationsTitle']+cbData.dirName;
+            let texte = "";
+            let total = (cbData.synchronizer.localUploads
+                         + cbData.synchronizer.serverDownloadsCount
+                         + cbData.synchronizer.serverDeletes.length);
+            if (total > 0) {
+                texte = "";
+                if( cbData.synchronizer.localUploads <= 1)
+                    texte += cbData.synchronizer.localUploads+cbData.notificationsStrings['notificationsUpload'];
+                if( cbData.synchronizer.localUploads > 1)
+                    texte += cbData.synchronizer.localUploads+cbData.notificationsStrings['notificationsUploads'];
+
+                if( cbData.synchronizer.serverDownloadsCount <= 1)
+                    texte += cbData.synchronizer.serverDownloadsCount+cbData.notificationsStrings['notificationsDownload'];
+                if( cbData.synchronizer.serverDownloadsCount > 1)
+                    texte += cbData.synchronizer.serverDownloadsCount+cbData.notificationsStrings['notificationsDownloads'];
+
+                if( cbData.synchronizer.serverDeletes <= 1)
+                    texte += cbData.synchronizer.serverDeletes.length+cbData.notificationsStrings['notificationsDelete'];
+                if( cbData.synchronizer.serverDeletes > 1)
+                    texte += cbData.synchronizer.serverDeletes.length+cbData.notificationsStrings['notificationsDeletes'];
+                
+            } else {
+                texte = cbData.notificationsStrings['notificationsNoChanges'];
+            }
+            switch (cbData.origin) {
+                case (SOGOC_SYNC_MANUAL):
+                    // manual
+                    if(cbData.notificationsManual)
+                        cbData.notifyUser(title, texte);
+                    break;
+                    
+                case SOGOC_SYNC_WRITE:
+                    // save of card
+                    if(cbData.notificationsSave)
+                        cbData.notifyUser(title, texte);
+                    break;
+                
+                case SOGOC_SYNC_PERIODIC:
+                    // periodic sync
+                    if (cbData.notifications) {
+                        if (cbData.notificationsOnlyIfNotEmpty) {
+                            if (total > 0) {
+                                cbData.notifyUser(title, texte);
+                            }
+                        } else {
+                            cbData.notifyUser(title, texte);
+                        }
+                    }
+                    break;
+
+                case SOGOC_SYNC_STARTUP:
+                    // startup
+                    if (cbData.notificationsStart)
+                        cbData.notifyUser(title, texte);
+                    break;
+            }
+        },
+
+        notifyUser: function(atitle, atexte) {
+            Components.classes['@mozilla.org/alerts-service;1']
+                .getService(Components.interfaces.nsIAlertsService)
+                .showAlertNotification(null, atitle, atexte, false, '', null);
+        }
+    }
+
+    return sync;
+}
+
+function SynchronizeGroupdavAddressbook(uri, callback, origin) {
+    /*
+     * old version
+     * 
     // dump("sync uri: " + uri + "\n");
     let synchronizer = new GroupDavSynchronizer(uri);
     // dump("callback:" + callback + "\n");
@@ -1513,6 +1719,12 @@ function SynchronizeGroupdavAddressbook(uri, callback, callbackData) {
     synchronizer.callback = callback;
     synchronizer.callbackData = callbackData;
     synchronizer.start();
+    */
+
+    // new version with sync
+    var sync = GetSyncNotifyGroupdavAddressbook(uri, null, origin);
+    sync.notify();
+    
 }
 
 function SynchronizeGroupdavAddressbookAbort(uri) {
diff --git a/chrome/locale/cs-CZ/sogo-connector/addressbook/messenger.groupdav.overlay.properties b/chrome/locale/cs-CZ/sogo-connector/addressbook/messenger.groupdav.overlay.properties
new file mode 100644
index 0000000..86d91a2
--- /dev/null
+++ b/chrome/locale/cs-CZ/sogo-connector/addressbook/messenger.groupdav.overlay.properties
@@ -0,0 +1,8 @@
+notificationsTitle=SOGO :\u0020
+notificationsUpload=\u0020upload,\u0020
+notificationsUploads=\u0020uploads,\u0020
+notificationsDownload=\u0020download,\u0020
+notificationsDownloads=\u0020downloads,\u0020
+notificationsDelete=\u0020delete.
+notificationsDeletes=\u0020deletes.
+notificationsNoChanges=No changes.
diff --git a/chrome/locale/cs-CZ/sogo-connector/addressbook/pref-directory-add.dtd b/chrome/locale/cs-CZ/sogo-connector/addressbook/pref-directory-add.dtd
index daaa120..05016b9 100644
--- a/chrome/locale/cs-CZ/sogo-connector/addressbook/pref-directory-add.dtd
+++ b/chrome/locale/cs-CZ/sogo-connector/addressbook/pref-directory-add.dtd
@@ -74,6 +74,20 @@ Modifications to original file pref-directory-add.xul by:
 <!ENTITY groupDavServerType.label         "Typ vzdáleného serveru:">
 <!ENTITY groupDavServerType.accesskey     "T">
 
+<!ENTITY groupdavPeriodicSync.label       "Periodic sync" >
+<!ENTITY groupdavPeriodicSync5m.label     "5 min" >
+<!ENTITY groupdavPeriodicSync15m.label    "15 min" >
+<!ENTITY groupdavPeriodicSync1h.label     "1 h" >
+<!ENTITY groupdavPeriodicSync2h.label     "2 h" >
+<!ENTITY groupdavNotifications.label      "Show Notifications" >
+
+<!ENTITY groupdavNotificationsOINE.label  "Notify only if data synchronized" >
+<!ENTITY groupdavNotificationsRestart.label "Changes in options for 'Periodic sync' need a restart of Thunderbird." >
+<!ENTITY groupdavNotificationsManual.label "Show Notifications for manual synchronizations" >
+<!ENTITY groupdavNotificationsManual.info  "When select 'Synchronize' from toolbar or context menu." >
+<!ENTITY groupdavNotificationsSave.label   "Show Notifications when saving a card" >
+<!ENTITY groupdavNotificationsSave.info    "The default notification is a progress bar in the status bar. If checked, a general notification will be displayed." >
+<!ENTITY groupdavNotificationsStart.label  "Show Notifications on startup" >
 
 <!ENTITY General.tab                       "Obecný">
 <!ENTITY Offline.tab                       "Offline">
diff --git a/chrome/locale/de-DE/sogo-connector/addressbook/messenger.groupdav.overlay.properties b/chrome/locale/de-DE/sogo-connector/addressbook/messenger.groupdav.overlay.properties
new file mode 100644
index 0000000..86d91a2
--- /dev/null
+++ b/chrome/locale/de-DE/sogo-connector/addressbook/messenger.groupdav.overlay.properties
@@ -0,0 +1,8 @@
+notificationsTitle=SOGO :\u0020
+notificationsUpload=\u0020upload,\u0020
+notificationsUploads=\u0020uploads,\u0020
+notificationsDownload=\u0020download,\u0020
+notificationsDownloads=\u0020downloads,\u0020
+notificationsDelete=\u0020delete.
+notificationsDeletes=\u0020deletes.
+notificationsNoChanges=No changes.
diff --git a/chrome/locale/de-DE/sogo-connector/addressbook/pref-directory-add.dtd b/chrome/locale/de-DE/sogo-connector/addressbook/pref-directory-add.dtd
index 5720b91..6ffb50b 100644
--- a/chrome/locale/de-DE/sogo-connector/addressbook/pref-directory-add.dtd
+++ b/chrome/locale/de-DE/sogo-connector/addressbook/pref-directory-add.dtd
@@ -41,6 +41,20 @@
 <!ENTITY groupDavServerType.label         "GroupDAV Server Typ:">
 <!ENTITY groupDavServerType.accesskey     "G">
 
+<!ENTITY groupdavPeriodicSync.label       "Periodic sync" >
+<!ENTITY groupdavPeriodicSync5m.label     "5 min" >
+<!ENTITY groupdavPeriodicSync15m.label    "15 min" >
+<!ENTITY groupdavPeriodicSync1h.label     "1 h" >
+<!ENTITY groupdavPeriodicSync2h.label     "2 h" >
+<!ENTITY groupdavNotifications.label      "Show Notifications" >
+
+<!ENTITY groupdavNotificationsOINE.label  "Notify only if data synchronized" >
+<!ENTITY groupdavNotificationsRestart.label "Changes in options for 'Periodic sync' need a restart of Thunderbird." >
+<!ENTITY groupdavNotificationsManual.label "Show Notifications for manual synchronizations" >
+<!ENTITY groupdavNotificationsManual.info  "When select 'Synchronize' from toolbar or context menu." >
+<!ENTITY groupdavNotificationsSave.label   "Show Notifications when saving a card" >
+<!ENTITY groupdavNotificationsSave.info    "The default notification is a progress bar in the status bar. If checked, a general notification will be displayed." >
+<!ENTITY groupdavNotificationsStart.label  "Show Notifications on startup" >
 
 <!ENTITY General.tab                       "Allgemein">
 <!ENTITY Offline.tab                       "Offline">
diff --git a/chrome/locale/en-US/sogo-connector/addressbook/messenger.groupdav.overlay.properties b/chrome/locale/en-US/sogo-connector/addressbook/messenger.groupdav.overlay.properties
new file mode 100644
index 0000000..86d91a2
--- /dev/null
+++ b/chrome/locale/en-US/sogo-connector/addressbook/messenger.groupdav.overlay.properties
@@ -0,0 +1,8 @@
+notificationsTitle=SOGO :\u0020
+notificationsUpload=\u0020upload,\u0020
+notificationsUploads=\u0020uploads,\u0020
+notificationsDownload=\u0020download,\u0020
+notificationsDownloads=\u0020downloads,\u0020
+notificationsDelete=\u0020delete.
+notificationsDeletes=\u0020deletes.
+notificationsNoChanges=No changes.
diff --git a/chrome/locale/en-US/sogo-connector/addressbook/pref-directory-add.dtd b/chrome/locale/en-US/sogo-connector/addressbook/pref-directory-add.dtd
index f26ea59..284375a 100644
--- a/chrome/locale/en-US/sogo-connector/addressbook/pref-directory-add.dtd
+++ b/chrome/locale/en-US/sogo-connector/addressbook/pref-directory-add.dtd
@@ -74,6 +74,20 @@ Modifications to original file pref-directory-add.xul by:
 <!ENTITY groupDavServerType.label         "Remote Server Type:">
 <!ENTITY groupDavServerType.accesskey     "G">
 
+<!ENTITY groupdavPeriodicSync.label       "Periodic sync" >
+<!ENTITY groupdavPeriodicSync5m.label     "5 min" >
+<!ENTITY groupdavPeriodicSync15m.label    "15 min" >
+<!ENTITY groupdavPeriodicSync1h.label     "1 h" >
+<!ENTITY groupdavPeriodicSync2h.label     "2 h" >
+<!ENTITY groupdavNotifications.label      "Show Notifications" >
+
+<!ENTITY groupdavNotificationsOINE.label  "Notify only if data synchronized" >
+<!ENTITY groupdavNotificationsRestart.label "Changes in options for 'Periodic sync' need a restart of Thunderbird." >
+<!ENTITY groupdavNotificationsManual.label "Show Notifications for manual synchronizations" >
+<!ENTITY groupdavNotificationsManual.info  "When select 'Synchronize' from toolbar or context menu." >
+<!ENTITY groupdavNotificationsSave.label   "Show Notifications when saving a card" >
+<!ENTITY groupdavNotificationsSave.info    "The default notification is a progress bar in the status bar. If checked, a general notification will be displayed." >
+<!ENTITY groupdavNotificationsStart.label  "Show Notifications on startup" >
 
 <!ENTITY General.tab                       "General">
 <!ENTITY Offline.tab                       "Offline">
diff --git a/chrome/locale/fr-FR/sogo-connector/addressbook/messenger.groupdav.overlay.properties b/chrome/locale/fr-FR/sogo-connector/addressbook/messenger.groupdav.overlay.properties
new file mode 100644
index 0000000..f84ba35
--- /dev/null
+++ b/chrome/locale/fr-FR/sogo-connector/addressbook/messenger.groupdav.overlay.properties
@@ -0,0 +1,8 @@
+notificationsTitle=SOGO :\u0020
+notificationsUpload=\u0020envoi,\u0020
+notificationsUploads=\u0020envois,\u0020
+notificationsDownload=\u0020téléchargement,\u0020
+notificationsDownloads=\u0020téléchargements,\u0020
+notificationsDelete=\u0020suppression.
+notificationsDeletes=\u0020suppressions.
+notificationsNoChanges=Aucun changement.
diff --git a/chrome/locale/fr-FR/sogo-connector/addressbook/pref-directory-add.dtd b/chrome/locale/fr-FR/sogo-connector/addressbook/pref-directory-add.dtd
index a1f2440..3145b7b 100644
--- a/chrome/locale/fr-FR/sogo-connector/addressbook/pref-directory-add.dtd
+++ b/chrome/locale/fr-FR/sogo-connector/addressbook/pref-directory-add.dtd
@@ -74,6 +74,20 @@ Modifications to original file pref-directory-add.xul by:
 <!ENTITY groupDavServerType.label         "Type de serveur GroupDAV:">
 <!ENTITY groupDavServerType.accesskey     "G">
 
+<!ENTITY groupdavPeriodicSync.label       "Synchronisation Périodique" >
+<!ENTITY groupdavPeriodicSync5m.label     "5 min" >
+<!ENTITY groupdavPeriodicSync15m.label    "15 min" >
+<!ENTITY groupdavPeriodicSync1h.label     "1 h" >
+<!ENTITY groupdavPeriodicSync2h.label     "2 h" >
+<!ENTITY groupdavNotifications.label      "Afficher les Notifications" >
+
+<!ENTITY groupdavNotificationsOINE.label  "Notifier seulement si des données synchronisées" >
+<!ENTITY groupdavNotificationsRestart.label "Les changements d'options pour 'Synchronisation Périodique' nécessitent un redémarrage de Thunderbird." >
+<!ENTITY groupdavNotificationsManual.label "Afficher les Notifications pour les synchronisations manuelles" >
+<!ENTITY groupdavNotificationsManual.info  "Quand vous choisissez 'Synchroniser' depuis la barre d'outils ou le menu contextuel." >
+<!ENTITY groupdavNotificationsSave.label   "Afficher les Notifications lors de l'enregistrement d'une fiche" >
+<!ENTITY groupdavNotificationsSave.info    "La notification par défaut est une barre de progression dans la barre de statut. Si cochée, une notification générale sera affichée." >
+<!ENTITY groupdavNotificationsStart.label  "Afficher les Notifications au démarrage" >
 
 <!ENTITY General.tab                       "Général">
 <!ENTITY Offline.tab                       "Hors-ligne">
@@ -88,4 +102,4 @@ Modifications to original file pref-directory-add.xul by:
 <!ENTITY newDirectoryWidth                 "36em">
 
 <!ENTITY ReadOnly.label                   "En lecture seulement">
-<!ENTITY ReadOnly.accesskey               "L">
\ No newline at end of file
+<!ENTITY ReadOnly.accesskey               "L">
diff --git a/chrome/locale/it-IT/sogo-connector/addressbook/messenger.groupdav.overlay.properties b/chrome/locale/it-IT/sogo-connector/addressbook/messenger.groupdav.overlay.properties
new file mode 100644
index 0000000..86d91a2
--- /dev/null
+++ b/chrome/locale/it-IT/sogo-connector/addressbook/messenger.groupdav.overlay.properties
@@ -0,0 +1,8 @@
+notificationsTitle=SOGO :\u0020
+notificationsUpload=\u0020upload,\u0020
+notificationsUploads=\u0020uploads,\u0020
+notificationsDownload=\u0020download,\u0020
+notificationsDownloads=\u0020downloads,\u0020
+notificationsDelete=\u0020delete.
+notificationsDeletes=\u0020deletes.
+notificationsNoChanges=No changes.
diff --git a/chrome/locale/it-IT/sogo-connector/addressbook/pref-directory-add.dtd b/chrome/locale/it-IT/sogo-connector/addressbook/pref-directory-add.dtd
index 6106fc5..c00e8bf 100644
--- a/chrome/locale/it-IT/sogo-connector/addressbook/pref-directory-add.dtd
+++ b/chrome/locale/it-IT/sogo-connector/addressbook/pref-directory-add.dtd
@@ -39,6 +39,20 @@
 <!ENTITY groupDavServerType.label         "Tipo del server remoto:">
 <!ENTITY groupDavServerType.accesskey     "G">
 
+<!ENTITY groupdavPeriodicSync.label       "Periodic sync" >
+<!ENTITY groupdavPeriodicSync5m.label     "5 min" >
+<!ENTITY groupdavPeriodicSync15m.label    "15 min" >
+<!ENTITY groupdavPeriodicSync1h.label     "1 h" >
+<!ENTITY groupdavPeriodicSync2h.label     "2 h" >
+<!ENTITY groupdavNotifications.label      "Show Notifications" >
+
+<!ENTITY groupdavNotificationsOINE.label  "Notify only if data synchronized" >
+<!ENTITY groupdavNotificationsRestart.label "Changes in options for 'Periodic sync' need a restart of Thunderbird." >
+<!ENTITY groupdavNotificationsManual.label "Show Notifications for manual synchronizations" >
+<!ENTITY groupdavNotificationsManual.info  "When select 'Synchronize' from toolbar or context menu." >
+<!ENTITY groupdavNotificationsSave.label   "Show Notifications when saving a card" >
+<!ENTITY groupdavNotificationsSave.info    "The default notification is a progress bar in the status bar. If checked, a general notification will be displayed." >
+<!ENTITY groupdavNotificationsStart.label  "Show Notifications on startup" >
 
 <!ENTITY General.tab                       "Generale">
 <!ENTITY Offline.tab                       "Offline">
diff --git a/chrome/locale/nl-NL/sogo-connector/addressbook/messenger.groupdav.overlay.properties b/chrome/locale/nl-NL/sogo-connector/addressbook/messenger.groupdav.overlay.properties
new file mode 100644
index 0000000..86d91a2
--- /dev/null
+++ b/chrome/locale/nl-NL/sogo-connector/addressbook/messenger.groupdav.overlay.properties
@@ -0,0 +1,8 @@
+notificationsTitle=SOGO :\u0020
+notificationsUpload=\u0020upload,\u0020
+notificationsUploads=\u0020uploads,\u0020
+notificationsDownload=\u0020download,\u0020
+notificationsDownloads=\u0020downloads,\u0020
+notificationsDelete=\u0020delete.
+notificationsDeletes=\u0020deletes.
+notificationsNoChanges=No changes.
diff --git a/chrome/locale/nl-NL/sogo-connector/addressbook/pref-directory-add.dtd b/chrome/locale/nl-NL/sogo-connector/addressbook/pref-directory-add.dtd
index 2c61cae..60f817c 100644
--- a/chrome/locale/nl-NL/sogo-connector/addressbook/pref-directory-add.dtd
+++ b/chrome/locale/nl-NL/sogo-connector/addressbook/pref-directory-add.dtd
@@ -74,6 +74,20 @@ Modifications to original file pref-directory-add.xul by:
 <!ENTITY groupDavServerType.label         "Soort server:">
 <!ENTITY groupDavServerType.accesskey     "S">
 
+<!ENTITY groupdavPeriodicSync.label       "Periodic sync" >
+<!ENTITY groupdavPeriodicSync5m.label     "5 min" >
+<!ENTITY groupdavPeriodicSync15m.label    "15 min" >
+<!ENTITY groupdavPeriodicSync1h.label     "1 h" >
+<!ENTITY groupdavPeriodicSync2h.label     "2 h" >
+<!ENTITY groupdavNotifications.label      "Show Notifications" >
+
+<!ENTITY groupdavNotificationsOINE.label  "Notify only if data synchronized" >
+<!ENTITY groupdavNotificationsRestart.label "Changes in options for 'Periodic sync' need a restart of Thunderbird." >
+<!ENTITY groupdavNotificationsManual.label "Show Notifications for manual synchronizations" >
+<!ENTITY groupdavNotificationsManual.info  "When select 'Synchronize' from toolbar or context menu." >
+<!ENTITY groupdavNotificationsSave.label   "Show Notifications when saving a card" >
+<!ENTITY groupdavNotificationsSave.info    "The default notification is a progress bar in the status bar. If checked, a general notification will be displayed." >
+<!ENTITY groupdavNotificationsStart.label  "Show Notifications on startup" >
 
 <!ENTITY General.tab                       "Algemeen">
 <!ENTITY Offline.tab                       "Offline">
