diff --git a/app/lib/entity/block.js b/app/lib/entity/block.js
index cc82a3ee04c0645737c34278fdf3edbc6fba73c2..55314a71b23c3e1dbd6685ae51e680e72a4c7b21 100644
--- a/app/lib/entity/block.js
+++ b/app/lib/entity/block.js
@@ -192,4 +192,8 @@ function Block(json) {
     });
     return transactions;
   };
-}
\ No newline at end of file
+}
+
+Block.statics = {};
+
+Block.statics.fromJSON = (json) => new Block(json);
diff --git a/app/lib/entity/identity.js b/app/lib/entity/identity.js
index de3fec8c6b0dc4dfbcc9fdb8558f14738055be0f..12d3ac695277989df31ffb8797db332a1abdf926 100644
--- a/app/lib/entity/identity.js
+++ b/app/lib/entity/identity.js
@@ -128,4 +128,6 @@ Identity.statics.toInline = function (entity) {
   return [entity.pubkey, entity.sig, moment(entity.time).unix(), entity.uid].join(':');
 };
 
+Identity.statics.fromJSON = (json) => new Identity(json);
+
 module.exports = Identity;
diff --git a/app/lib/entity/membership.js b/app/lib/entity/membership.js
index b312451abf0ee483629c7e2da2b8d4f18d4f1c10..29aff53439dc25acc8e96f40a3ee7baae3ecc559 100644
--- a/app/lib/entity/membership.js
+++ b/app/lib/entity/membership.js
@@ -90,4 +90,6 @@ Membership.statics.toInline = function (entity) {
   return [entity.issuer, entity.signature, entity.number, entity.fpr, moment(entity.certts).unix(), entity.userid].join(':');
 };
 
+Membership.statics.fromJSON = (json) => new Membership(json);
+
 module.exports = Membership;
diff --git a/app/lib/entity/transaction.js b/app/lib/entity/transaction.js
index f151958a5befac56237752aa8e1b331aa5830e9c..1546fe0741488d3900380cb6f610640e85e4ea6c 100644
--- a/app/lib/entity/transaction.js
+++ b/app/lib/entity/transaction.js
@@ -93,4 +93,6 @@ var Transaction = function(obj, currency) {
 
 Transaction.statics = {};
 
+Transaction.statics.fromJSON = (json) => new Transaction(json);
+
 module.exports = Transaction;
diff --git a/app/lib/streams/multicaster.js b/app/lib/streams/multicaster.js
index dcb47b993891ae5d3fd523a4bb124c3b606fec35..38ab9af8967c27d6e37589ecdfd95fccd97cdb8e 100644
--- a/app/lib/streams/multicaster.js
+++ b/app/lib/streams/multicaster.js
@@ -6,6 +6,10 @@ var request = require('request');
 var co      = require('co');
 var constants = require('../../lib/constants');
 var Peer    = require('../../lib/entity/peer');
+var Identity = require('../../lib/entity/identity');
+var Membership = require('../../lib/entity/membership');
+var Block = require('../../lib/entity/block');
+var Transaction = require('../../lib/entity/transaction');
 var logger  = require('../../lib/logger')('multicaster');
 
 const WITH_ISOLATION = true;
@@ -21,6 +25,7 @@ function Multicaster (isolate, timeout) {
   var that = this;
 
   let blockForward = forward({
+    transform: Block.statics.fromJSON,
     type: 'Block',
     uri: '/blockchain/block',
     getObj: (block) => {
@@ -32,6 +37,7 @@ function Multicaster (isolate, timeout) {
   });
 
   let idtyForward = forward({
+    transform: Identity.statics.fromJSON,
     type: 'Identity',
     uri: '/wot/add',
     getObj: (idty) => {
@@ -45,6 +51,7 @@ function Multicaster (isolate, timeout) {
   });
 
   let txForward = forward({
+    transform: Transaction.statics.fromJSON,
     type: 'Transaction',
     uri: '/tx/process',
     getObj: (transaction) => {
@@ -69,6 +76,7 @@ function Multicaster (isolate, timeout) {
   });
 
   let msForward = forward({
+    transform: Membership.statics.fromJSON,
     type: 'Membership',
     uri: '/blockchain/membership',
     getObj: (membership) => {
@@ -96,22 +104,26 @@ function Multicaster (isolate, timeout) {
   function forward(params) {
     return function(doc, peers) {
       return co(function *() {
-        if(!params.withIsolation || !isolate) {
-          let theDoc = params.transform ? params.transform(doc) : doc;
-          logger.debug('--> new %s to be sent to %s peer(s)', params.type, peers.length);
-          if (params.getDocID) {
-            logger.info('POST %s %s', params.type, params.getDocID(theDoc));
+        try {
+          if(!params.withIsolation || !isolate) {
+            let theDoc = params.transform ? params.transform(doc) : doc;
+            logger.debug('--> new %s to be sent to %s peer(s)', params.type, peers.length);
+            if (params.getDocID) {
+              logger.info('POST %s %s', params.type, params.getDocID(theDoc));
+            } else {
+              logger.info('POST %s', params.type);
+            }
+            for (let i = 0, len = peers.length; i < len; i++) {
+              let p = peers[i];
+              let peer = Peer.statics.peerize(p);
+              logger.debug(' `--> to peer %s [%s] (%s)', peer.keyID(), peer.member ? 'member' : '------', peer.getNamedURL());
+              yield post(peer, params.uri, params.getObj(theDoc));
+            }
           } else {
-            logger.info('POST %s', params.type);
+            logger.debug('[ISOLATE] Prevent --> new Peer to be sent to %s peer(s)', peers.length);
           }
-          for (let i = 0, len = peers.length; i < len; i++) {
-            let p = peers[i];
-            let peer = Peer.statics.peerize(p);
-            logger.debug(' `--> to peer %s [%s] (%s)', peer.keyID(), peer.member ? 'member' : '------', peer.getNamedURL());
-            yield post(peer, params.uri, params.getObj(theDoc));
-          }
-        } else {
-          logger.debug('[ISOLATE] Prevent --> new Peer to be sent to %s peer(s)', peers.length);
+        } catch (err) {
+          logger.error(err);
         }
       });
     };
diff --git a/app/lib/streams/parsers/http2raw.js b/app/lib/streams/parsers/http2raw.js
index a9fcfdc7fc83c2eb860bcfc3ee349a7056942a37..8e9f937d7a58636f77008d72ac0f503c503260a8 100644
--- a/app/lib/streams/parsers/http2raw.js
+++ b/app/lib/streams/parsers/http2raw.js
@@ -73,7 +73,14 @@ function Http2RawMembership (req) {
   if(!(req.body && req.body.membership)){
     throw constants.ERRORS.HTTP_PARAM_MEMBERSHIP_REQUIRED;
   }
-  return req.body.membership;
+  let ms = req.body.membership;
+  if(req.body && req.body.signature){
+    ms = [ms, req.body.signature].join('');
+    if (!ms.match(/\n$/)) {
+      ms += '\n';
+    }
+  }
+  return ms;
 }
 
 function Http2RawBlock (req) {
diff --git a/server.js b/server.js
index 30c82ebce3996ab1c28828f435e3d8aa11dbb930..434e90dfb4c90b1dbe3a90da087726f0617cf06b 100644
--- a/server.js
+++ b/server.js
@@ -82,8 +82,8 @@ function Server (dbConf, overrideConf) {
         }
         if (res) {
           // Only emit valid documents
-          that.emit(obj.documentType, res);
-          that.push(res);
+          that.emit(obj.documentType, _.clone(res));
+          that.push(_.clone(res));
         }
         isInnerWrite ? done(null, res) : done();
       } catch (err) {
diff --git a/test/integration/identity-test.js b/test/integration/identity-test.js
index b0d1f52d94f39f494d0a0d20569ee98bd241f422..bbc8e9ea835d20a46bdf6f56d56f5aa9e3d5e33f 100644
--- a/test/integration/identity-test.js
+++ b/test/integration/identity-test.js
@@ -360,7 +360,7 @@ describe("Identities", function() {
 
   it('difficulties', function() {
     return expectAnswer(rp('http://127.0.0.1:7799/blockchain/difficulties', { json: true }), function(res) {
-      res.should.have.property('block').equal(1);
+      res.should.have.property('block').equal(2);
       res.should.have.property('levels').length(1);
       res.levels[0].should.have.property('uid').equal('cat');
       res.levels[0].should.have.property('level').equal(0);