diff --git a/app/lib/streams/parsers/doc/keyblock.js b/app/lib/streams/parsers/doc/keyblock.js
index 6f8bdf90cfafb481894b31ded76f60180d0641a4..377de1d22b42cc95fd569cf37e323098c9e90dfa 100644
--- a/app/lib/streams/parsers/doc/keyblock.js
+++ b/app/lib/streams/parsers/doc/keyblock.js
@@ -114,6 +114,7 @@ function extractKeyChanges(raw) {
   var keychanges = [];
   var currentKC;
   var lines = raw.split(/\n/);
+  lines = lines.slice(0, lines.length - 1);
   var nbKeys = 0;
   lines.forEach(function(line){
     if (line.match(/^#####----(F|N|U|L|B):[A-Z0-9]{40}----#####$/)) {
diff --git a/app/service/KeychainService.js b/app/service/KeychainService.js
index ef3ce86a117445f665549b33e0e04dbefd914a2e..f861ad5cb9da0bd96e0132f68d3d95954389d108 100644
--- a/app/service/KeychainService.js
+++ b/app/service/KeychainService.js
@@ -175,7 +175,7 @@ function KeyService (conn, conf, PublicKeyService) {
       checkPulseBlockKeychanges(block, done);
 
     } else if (current) {
-      done('Post-root blocks are not managed yet');
+      checkNormalBlockKeychanges(block, done);
 
     } else {
       checkRootBlockKeychanges(block, function (err) {
@@ -217,6 +217,29 @@ function KeyService (conn, conf, PublicKeyService) {
     });
   }
 
+  function checkNormalBlockKeychanges(block, done) {
+    var newLinks = {};
+    async.forEach(block.keysChanges, function(kc, callback){
+      if (kc.type != 'U') {
+        callback('Only UPDATE block are managed for now');
+        return;
+      }
+      async.waterfall([
+        function (next){
+          // Check keychange (certifications verification notably)
+          checkKeychange(block, kc, next);
+        },
+        function (next){
+          // Memorize new links from signatures
+          newLinks[kc.fingerprint] = kc.certifiers;
+          next();
+        },
+      ], callback);
+    }, function (err) {
+      done(err, newLinks);
+    });
+  }
+
   function checkKeychange (block, kc, done) {
     try {
 
@@ -933,6 +956,8 @@ function KeyService (conn, conf, PublicKeyService) {
     block.version = 1;
     block.currency = current.currency;
     block.number = current.number + 1;
+    block.previousHash = current.hash;
+    block.previousIssuer = current.issuer;
     // Members merkle
     var stayers = members.slice(); // copy
     var leavers = leaving.slice(); // copy