diff --git a/app/lib/dal/fileDALs/BlockDAL.js b/app/lib/dal/fileDALs/BlockDAL.js
index 8f04a17238c6d252605a73256ce40b344d3699bc..d2e1e0c8ab3dcee36e1e74d1f144ea6cea2d1643 100644
--- a/app/lib/dal/fileDALs/BlockDAL.js
+++ b/app/lib/dal/fileDALs/BlockDAL.js
@@ -191,28 +191,31 @@ function BlockDAL(loki, rootFS, getLowerWindowBlock) {
     if (!lowerInLoki) {
       return;
     }
-    logger.debug("LastUD in loki = %s", that.lastBlockWithDividend().number);
-    logger.debug("Lower in loki = %s", lowerInLoki.number);
-    let deadBlocksInLoki = number - lowerInLoki.number;
-    logger.debug("Dead blocks = %s", deadBlocksInLoki);
-    if (deadBlocksInLoki >= constants.BLOCKS_COLLECT_THRESHOLD) {
-      let blocksToPersist = blocksDB.branchResultset().find({
-        $and: [{
-          number: { $gte: lowerInLoki.number }
-        }, {
-          number: { $lte: number }
-        }]
-      }).simplesort('number').data();
-      logger.debug("To store in files = %s to %s", blocksToPersist[0].number, blocksToPersist[blocksToPersist.length - 1].number);
-      for (let i = 0; i < blocksToPersist.length; i++) {
-        let block = blocksToPersist[i];
-        yield rootFS.makeTree(pathOfBlock(block.number));
-        yield rootFS.writeJSON(pathOfBlock(block.number) + blockFileName(block.number) + '.json', block);
-        collection.remove(block);
+    let lastUDBlock = that.lastBlockWithDividend();
+    if (lastUDBlock) {
+      logger.debug("LastUD in loki = %s", lastUDBlock.number);
+      logger.debug("Lower in loki = %s", lowerInLoki.number);
+      let deadBlocksInLoki = number - lowerInLoki.number;
+      logger.debug("Dead blocks = %s", deadBlocksInLoki);
+      if (deadBlocksInLoki >= constants.BLOCKS_COLLECT_THRESHOLD) {
+        let blocksToPersist = blocksDB.branchResultset().find({
+          $and: [{
+            number: { $gte: lowerInLoki.number }
+          }, {
+            number: { $lte: number }
+          }]
+        }).simplesort('number').data();
+        logger.debug("To store in files = %s to %s", blocksToPersist[0].number, blocksToPersist[blocksToPersist.length - 1].number);
+        for (let i = 0; i < blocksToPersist.length; i++) {
+          let block = blocksToPersist[i];
+          yield rootFS.makeTree(pathOfBlock(block.number));
+          yield rootFS.writeJSON(pathOfBlock(block.number) + blockFileName(block.number) + '.json', block);
+          collection.remove(block);
+        }
+        lowerInLoki = collection.chain().simplesort('number').limit(1).data()[0];
+        logger.debug("Lower in loki now = %s", lowerInLoki.number);
+        logger.debug("LastUD in loki = %s", that.lastBlockWithDividend().number);
       }
-      lowerInLoki = collection.chain().simplesort('number').limit(1).data()[0];
-      logger.debug("Lower in loki now = %s", lowerInLoki.number);
-      logger.debug("LastUD in loki = %s", that.lastBlockWithDividend().number);
     }
   });
 
diff --git a/app/service/BlockchainService.js b/app/service/BlockchainService.js
index 084626c2b07aafe4abe3c4459e96a747c5b98d54..f4bd75775e511afc6d63136f3e88a3a2536fd7ee 100644
--- a/app/service/BlockchainService.js
+++ b/app/service/BlockchainService.js
@@ -193,17 +193,21 @@ function BlockchainService (conf, mainDAL, pair) {
           throw 'Already processed side block #' + obj.number + '-' + obj.hash;
         }
         let res = yield mainContext.addSideBlock(obj, doCheck);
-        yield eventuallySwitchOnSideChain(current);
-        let newCurrent = yield mainContext.current();
-        let forked = newCurrent.number != current.number || newCurrent.hash != current.hash;
-        if (forked) {
-          yield Q.nfcall(that.stopPoWThenProcessAndRestartPoW.bind(that));
-        }
+        yield that.tryToFork(current);
         return res;
       }
     });
   }
 
+  that.tryToFork = (current) => co(function *() {
+    yield eventuallySwitchOnSideChain(current);
+    let newCurrent = yield mainContext.current();
+    let forked = newCurrent.number != current.number || newCurrent.hash != current.hash;
+    if (forked) {
+      yield Q.nfcall(that.stopPoWThenProcessAndRestartPoW.bind(that));
+    }
+  });
+
   function eventuallySwitchOnSideChain(current) {
     return co(function *() {
       let branches = yield that.branches();
diff --git a/app/service/PeeringService.js b/app/service/PeeringService.js
index e5b66e80307e33b736a51a371075c740ec174e33..2dd7de85ce38aab95e10165168ec015f8e4a0e06 100644
--- a/app/service/PeeringService.js
+++ b/app/service/PeeringService.js
@@ -249,7 +249,7 @@ function PeeringService(server, pair, dal) {
 
   function syncBlock(callback) {
     return co(function *() {
-      let current = dal.getCurrentBlockOrNull();
+      let current = yield dal.getCurrentBlockOrNull();
       if (current) {
         logger.info("Check network for new blocks...");
         let peers = yield dal.findAllPeersNEWUPBut([selfPubkey]);
@@ -266,7 +266,11 @@ function PeeringService(server, pair, dal) {
             while (downloaded) {
               logger.info("Downloaded block #%s from peer %s", downloaded.number, p.getNamedURL());
               downloaded = rawifyTransactions(downloaded);
-              yield server.BlockchainService.submitBlock(downloaded, true, FROM_PULL);
+              let res = yield server.BlockchainService.submitBlock(downloaded, true, FROM_PULL);
+              if (!res.fork) {
+                let nowCurrent = yield dal.getCurrentBlockOrNull();
+                yield server.BlockchainService.tryToFork(nowCurrent);
+              }
               if (downloaded.number == 0) {
                 downloaded = null;
               } else {
@@ -277,8 +281,8 @@ function PeeringService(server, pair, dal) {
             logger.warn(err);
           }
         }
-        callback();
       }
+      callback();
     })
       .catch((err) => {
         logger.warn(err.code || err.stack || err.message || err);