diff --git a/agkyra/syncer/file_client.py b/agkyra/syncer/file_client.py
index a7878535f9b8e02a5befd4901a6e30d2f0ac533c..ec42f66aa88e2541349e0f7f95fe0ecbd41a42db 100644
--- a/agkyra/syncer/file_client.py
+++ b/agkyra/syncer/file_client.py
@@ -41,14 +41,14 @@ class FileClient(object):
             if callback is not None:
                 callback(synced_source_state, synced_target_state)
         except common.SyncError as e:
+            hard = isinstance(e, common.HardSyncError)
+            if failure_callback is not None:
+                failure_callback(source_handle.source_state, hard=hard)
             msg = messaging.SyncErrorMessage(
                 objname=target_state.objname,
                 serial=source_handle.source_state.serial,
                 exception=e, logger=logger)
             self.settings.messager.put(msg)
-            if isinstance(e, common.HardSyncError):
-                if failure_callback is not None:
-                    failure_callback(source_handle.source_state)
 
     def _start(self, source_handle, target_state, sync_state):
         try:
diff --git a/agkyra/syncer/syncer.py b/agkyra/syncer/syncer.py
index a3cc0d81830facf951a2495b3a8bee43339f22ba..2b94681571f9b7d3daebd7afafc8902ed9779c35 100644
--- a/agkyra/syncer/syncer.py
+++ b/agkyra/syncer/syncer.py
@@ -288,16 +288,17 @@ class FileSyncer(object):
             callback=self.ack_file_sync,
             failure_callback=self.mark_as_failed)
 
-    def mark_as_failed(self, state):
+    def mark_as_failed(self, state, hard=False):
         serial = state.serial
         objname = state.objname
-        logger.warning(
-            "Marking failed serial %s for archive: %s, object: '%s'" %
-            (serial, state.archive, objname))
         with self.heartbeat.lock() as hb:
             hb.pop(objname)
-        with self.failed_serials.lock() as d:
-            d[(serial, objname)] = state
+        if hard:
+            logger.warning(
+                "Marking failed serial %s for archive: %s, object: '%s'" %
+                (serial, state.archive, objname))
+            with self.failed_serials.lock() as d:
+                d[(serial, objname)] = state
 
     def update_state(self, old_state, new_state):
         db = self.get_db()