diff -ur sogo-connector-24.0.2.jdccdevel.1/chrome/content/inverse-library/sogoWebDAV.js sogo-connector-24.0.2.jdccdevel.2/chrome/content/inverse-library/sogoWebDAV.js
--- sogo-connector-24.0.2.jdccdevel.1/chrome/content/inverse-library/sogoWebDAV.js	2013-12-11 15:27:19.635963841 -0700
+++ sogo-connector-24.0.2.jdccdevel.2/chrome/content/inverse-library/sogoWebDAV.js	2013-12-10 16:47:46.647178104 -0700
@@ -558,10 +558,29 @@
         }
         else if (operation == "PUT" || operation == "POST") {
 	    if(parameters.contentType.indexOf("text/vcard") == 0) {
-                this._sendHTTPRequest(operation,
+                if (this.cbData.data.getProperty("groupDavKey", "") == "") {
+                    dump("NOTICE: uploading new vcard with empty key\n");
+                    this._sendHTTPRequest(operation,
                                       parameters.data,
                                       { "content-type": parameters.contentType,
 				        "If-None-Match": "*" });
+                }
+                else {
+                    let oldDavVersion = this.cbData.data.getProperty("groupDavVersionPrev", "-1");
+                    dump("NOTICE: uploading modified vcard with etag: " + oldDavVersion + "\n");
+                    if (oldDavVersion != "-1") {
+                        this._sendHTTPRequest(operation,
+                                              parameters.data,
+                                              { "content-type": parameters.contentType,
+				                "If-Match": oldDavVersion });
+                    }
+                    else {
+                        dump("NOTICE: uploading modified vcard without etag\n");
+	                this._sendHTTPRequest(operation,
+                                              parameters.data,
+                                              { "content-type": parameters.contentType });
+                    }
+                }
 	    }
 	    else {
 	        this._sendHTTPRequest(operation,
diff -ur sogo-connector-24.0.2.jdccdevel.1/chrome/content/sogo-connector/addressbook/common-card-overlay.js sogo-connector-24.0.2.jdccdevel.2/chrome/content/sogo-connector/addressbook/common-card-overlay.js
--- sogo-connector-24.0.2.jdccdevel.1/chrome/content/sogo-connector/addressbook/common-card-overlay.js	2013-12-11 15:27:19.635963841 -0700
+++ sogo-connector-24.0.2.jdccdevel.2/chrome/content/sogo-connector/addressbook/common-card-overlay.js	2013-12-10 16:47:54.191178177 -0700
@@ -190,7 +190,9 @@
         if (gSCCardValues.documentDirty
             && isGroupdavDirectory(parentURI)) {
             SCSaveCategories();
+            let oldDavVersion = gEditCard.card.getProperty("groupDavVersion", "-1");
             gEditCard.card.setProperty("groupDavVersion", "-1");
+            gEditCard.card.setProperty("groupDavVersionPrev", oldDavVersion);
 
             let abManager = Components.classes["@mozilla.org/abmanager;1"]
                                       .getService(Components.interfaces.nsIAbManager);
