       iterate(0)
     .fail (er) ->
       # Handle reorgs
-      @emit 'fatal_error'
-      e er
-    .then () =>
-      l "Recovery completed"
-      @emit 'done'
-    .fin =>
-      # Delete sync token and stop
-      @_deleteSynchronizationToken(syncToken) if syncToken?
-      @stopIfNeccessary()
+      e "Failure during synchro", er
+      if er?.getStatusCode?() is 404
+        @_handlerReorgs(savedState, er.block).then () =>
+          @_performRecovery()
+      else
+        throw er
 
   _recoverAccount: (accountIndex, savedState, syncToken) ->
     savedAccountState = savedState["account_#{accountIndex}"] or {}

  @instance: new @()

  onStart: () ->
    @_performRecovery()

  _performRecovery: ->
    syncToken = null
    savedState = {}
    @_loadSynchronizationData().then (data) =>

      d.resolve()
    d.promise

  _handlerReorgs: (state, failedBlock) ->
    # Iterate through the state and delete any block heigher or equal to block.height
    # Remove from the database all orphan transaction and blocks
    # Save the new state

  ###
  onStart: () ->
