   @instance: new @()
 
   onStart: () ->
-    @_performRecovery()
-
-  _performRecovery: ->
+    @_performRecovery().then () =>
+      l "Recovery completed"
+      @emit 'done'
+    .fail (er) =>
+      e "Serious error during synchro", er
+      @emit 'fatal_error'
+    .fin =>
+      # Delete sync token and stop
+      @_deleteSynchronizationToken(syncToken) if syncToken?
+      @stopIfNeccessary()
+
+  _performRecovery: () ->
     syncToken = null
     savedState = {}
     @_loadSynchronizationData().then (data) =>

      d.resolve()
    d.promise

  _handlerReorgs: ->

  ###
  onStart: () ->

      ledger.tasks.TransactionConsumerTask.instance.pushTransactions(result['txs'])
      ledger.tasks.TransactionConsumerTask.instance.pushCallback =>
        d.resolve({hasNext, block})
    .fail (er) ->
      er.block = block
      throw er
    d.promise

  _recoverAddresses: (root, from, to, blockHash, syncToken) ->
