-        boolean fileChanged = false;
-        boolean dirChanged = true;
-
-        // code before in FileSyncAdapter.fetchData
-        PropFindMethod query = null;
-        try {
-            Log_OC.d(TAG, "Synchronizing " + mAccount.name + ", fetching files in " + mRemotePath);
-
-            // remote request 
-            query = new PropFindMethod(client.getBaseUri() + WebdavUtils.encodePath(mRemotePath));
-            int status = client.executeMethod(query);
-
-            // check and process response   - /// TODO take into account all the possible status per child-resource
-            if (isMultiStatus(status)) { 
-                MultiStatus resp = query.getResponseBodyAsMultiStatus();
-
-                // synchronize properties of the parent folder, if necessary
-                if (mParentId == DataStorageManager.ROOT_PARENT_ID) {
-                    dirChanged = false;
-                    WebdavEntry we = new WebdavEntry(resp.getResponses()[0], client.getBaseUri().getPath());
-
-                    // Properties of server folder
-                    OCFile parent = fillOCFile(we);
-                    // Properties of local folder
-                    OCFile localParent = mStorageManager.getFileById(1);
-                    if (localParent == null || !(parent.getEtag().equalsIgnoreCase(localParent.getEtag()))) {
-                        mStorageManager.saveFile(parent);
-                        mParentId = parent.getFileId();
-                        dirChanged = true;
-                    }
-                } 
-                else if (! mRemotePath.equalsIgnoreCase(OCFile.PATH_SEPARATOR)){
-                    dirChanged = false;
-                    WebdavEntry we = new WebdavEntry(resp.getResponses()[0], client.getBaseUri().getPath());
-                    
-                    // Properties of server folder
-                    OCFile parent = fillOCFile(we);
-                    // Properties of local folder
-                    OCFile localParent = mStorageManager.getFileByPath(mRemotePath);
-                    if (localParent == null || !(parent.getEtag().equalsIgnoreCase(localParent.getEtag()))) {
-                        dirChanged = true;
-                    } 
-                }
-
-                if (dirChanged) {
-                // read contents in folder
-                List<String> filesOnServer = new ArrayList<String> (); // Contains the lists of files on server
-                List<OCFile> updatedFiles = new Vector<OCFile>(resp.getResponses().length - 1);
-                List<SynchronizeFileOperation> filesToSyncContents = new Vector<SynchronizeFileOperation>();
-                for (int i = 1; i < resp.getResponses().length; ++i) {
-                    /// new OCFile instance with the data from the server
-                    WebdavEntry we = new WebdavEntry(resp.getResponses()[i], client.getBaseUri().getPath());
-                    OCFile file = fillOCFile(we);
-
-                    filesOnServer.add(file.getRemotePath()); // Registry the file in the list
-
-                    /// set data about local state, keeping unchanged former data if existing
-                    file.setLastSyncDateForProperties(mCurrentSyncTime);
-                    OCFile oldFile = mStorageManager.getFileByPath(file.getRemotePath());
-
-                    // Check if it is needed to synchronize the folder
-                    fileChanged = false;
-                    if (oldFile != null) {
-                        if (!file.getEtag().equalsIgnoreCase(oldFile.getEtag())) {
-                            fileChanged = true;                             
-                        }                        
-                    } else
-                        fileChanged= true;
-
-                    if (fileChanged){  
-                        if (file.isDirectory())
-                            file.setEtag("");
-                        if (oldFile != null) { 
-                            file.setKeepInSync(oldFile.keepInSync());
-                            file.setLastSyncDateForData(oldFile.getLastSyncDateForData());
-                            file.setModificationTimestampAtLastSyncForData(oldFile.getModificationTimestampAtLastSyncForData());    // must be kept unchanged when the file contents are not updated
-                            checkAndFixForeignStoragePath(oldFile);
-                            file.setStoragePath(oldFile.getStoragePath());
-                        }
-                        /// scan default location if local copy of file is not linked in OCFile instance
-                        if (file.getStoragePath() == null && !file.isDirectory()) {
-                            File f = new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, file));
-                            if (f.exists()) {
-                                file.setStoragePath(f.getAbsolutePath());
-                                file.setLastSyncDateForData(f.lastModified());
-                            }
-                        }
-
-                        /// prepare content synchronization for kept-in-sync files
-                        if (file.keepInSync()) {
-                            SynchronizeFileOperation operation = new SynchronizeFileOperation(  oldFile,        
-                                    file, 
-                                    mStorageManager,
-                                    mAccount,       
-                                    true, 
-                                    false,          
-                                    mContext
-                                    );
-                            filesToSyncContents.add(operation);
-                        }
-
-                        updatedFiles.add(file);
-                    }
-                }
+        
+        if (FileUtils.PATH_SEPARATOR.equals(mLocalFolder.getRemotePath()) && !mSyncFullAccount) {
+            updateOCVersion(client);
+        }
+        
+        result = checkForChanges(client);
+        
+        if (result.isSuccess()) {
+            if (mRemoteFolderChanged) {
+                result = fetchAndSyncRemoteFolder(client);
+            } else {
+                mChildren = mStorageManager.getFolderContent(mLocalFolder);
+            }
+        }
+        
+        if (!mSyncFullAccount) {            
+            sendLocalBroadcast(
+                    EVENT_SINGLE_FOLDER_CONTENTS_SYNCED, mLocalFolder.getRemotePath(), result
+            );
+        }
+        
+        if (result.isSuccess() && mIsShareSupported && !mSyncFullAccount) {
+            refreshSharesForFolder(client); // share result is ignored 
+        }
+        
+        if (!mSyncFullAccount) {            
+            sendLocalBroadcast(
+                    EVENT_SINGLE_FOLDER_SHARES_SYNCED, mLocalFolder.getRemotePath(), result
+            );
+        }
+        
+        return result;
+        
+    }