diff --git a/app/lib/dal/fileDAL.ts b/app/lib/dal/fileDAL.ts
index 04c5b2cd63db738cdcc542783b0127c8b9e24944..f0a9103a5eb2c1d877a9929748b5cd10351c53ec 100644
--- a/app/lib/dal/fileDAL.ts
+++ b/app/lib/dal/fileDAL.ts
@@ -38,6 +38,7 @@ import {SIndexDAL} from "./sqliteDAL/index/SIndexDAL"
 import {IIndexDAL} from "./sqliteDAL/index/IIndexDAL"
 import {DataErrors} from "../common-libs/errors"
 import {BasicRevocableIdentity, IdentityDTO} from "../dto/IdentityDTO"
+import {BlockDAL} from "./sqliteDAL/BlockDAL"
 
 const fs      = require('fs')
 const path    = require('path')
@@ -66,7 +67,7 @@ export class FileDAL {
   confDAL:ConfDAL
   metaDAL:MetaDAL
   peerDAL:PeerDAL
-  blockDAL:any
+  blockDAL:BlockDAL
   txsDAL:TxsDAL
   statDAL:StatDAL
   idtyDAL:IdentityDAL
@@ -274,7 +275,7 @@ export class FileDAL {
   }
 
   getBlocksBetween (start:number, end:number) {
-    return Promise.resolve(this.blockDAL.getBlocks(Math.max(0, start), end))
+    return this.blockDAL.getBlocks(Math.max(0, start), end)
   }
 
   getForkBlocksFollowing(current:DBBlock) {
diff --git a/app/lib/rules/global_rules.ts b/app/lib/rules/global_rules.ts
index f4dcf07e8f618b7b16b6b7d5bdb7b3a33a9c6497..7f9e44a39202eedd33da0940ac7233bade978ed3 100644
--- a/app/lib/rules/global_rules.ts
+++ b/app/lib/rules/global_rules.ts
@@ -85,7 +85,7 @@ export const GLOBAL_RULES_FUNCTIONS = {
         // From DUP 0.5: we fully check the blockstamp
         const basedBlock = await dal.getBlockByBlockstamp(idty.buid);
         // Check if writable
-        let duration = current.medianTime - parseInt(basedBlock.medianTime);
+        let duration = current.medianTime - basedBlock.medianTime
         if (duration > conf.idtyWindow) {
           throw Error('Identity is too old and cannot be written');
         }
diff --git a/app/modules/bma/lib/controllers/blockchain.ts b/app/modules/bma/lib/controllers/blockchain.ts
index d38b561442a1b8df386b19117c3873209a68acf8..bfed41e47d7b2f162c9714e36d641f4872ef9653 100644
--- a/app/modules/bma/lib/controllers/blockchain.ts
+++ b/app/modules/bma/lib/controllers/blockchain.ts
@@ -28,6 +28,7 @@ import {
   HttpParameters,
   HttpStat
 } from "../dtos"
+import {TransactionDTO} from "../../../../lib/dto/TransactionDTO"
 
 const _                = require('underscore');
 const http2raw         = require('../http2raw');
@@ -118,9 +119,53 @@ export class BlockchainBinding extends AbstractController {
     const params = ParametersService.getCountAndFrom(req);
     const count = parseInt(params.count);
     const from = parseInt(params.from);
-    let blocks = await this.BlockchainService.blocksBetween(from, count);
+    let blocks: any[] = await this.BlockchainService.blocksBetween(from, count);
     blocks = blocks.map((b:any) => toJson.block(b));
-    return blocks;
+    return blocks.map(b => ({
+      version: b.version,
+      currency: b.currency,
+      number: b.number,
+      issuer: b.issuer,
+      issuersFrame: b.issuersFrame,
+      issuersFrameVar: b.issuersFrameVar,
+      issuersCount: b.issuersCount,
+      parameters: b.parameters,
+      membersCount: b.membersCount,
+      monetaryMass: b.monetaryMass,
+      powMin: b.powMin,
+      time: b.time,
+      medianTime: b.medianTime,
+      dividend: b.dividend,
+      unitbase: b.unitbase,
+      hash: b.hash,
+      previousHash: b.previousHash,
+      previousIssuer: b.previousIssuer,
+      identities: b.identities,
+      certifications: b.certifications,
+      joiners: b.joiners,
+      actives: b.actives,
+      leavers: b.leavers,
+      revoked: b.revoked,
+      excluded: b.excluded,
+      transactions: b.transactions.map((t:TransactionDTO) => ({
+        version: t.version,
+        currency: t.currency,
+        comment: t.comment,
+        locktime: t.locktime,
+        signatures: t.signatures,
+        outputs: t.outputs,
+        inputs: t.inputs,
+        unlocks: t.unlocks,
+        blockstamp: t.blockstamp,
+        blockstampTime: t.blockstampTime,
+        issuers: t.issuers,
+        hash: t.hash,
+      })),
+      nonce: b.nonce,
+      inner_hash: b.inner_hash,
+      signature: b.signature,
+      raw: b.raw,
+    }))
   }
 
   async current(): Promise<HttpBlock> {
diff --git a/app/modules/bma/lib/dtos.ts b/app/modules/bma/lib/dtos.ts
index 91c4317770452da6e72029c6fe15ec5a27607742..a048dfcce52a3434b664571279dd9128209232af 100644
--- a/app/modules/bma/lib/dtos.ts
+++ b/app/modules/bma/lib/dtos.ts
@@ -184,17 +184,16 @@ export const TransactionOfBlock = {
 export interface HttpTransactionOfBlock {
   version: number
   currency: string
-  comment: string
   locktime: number
-  signatures: string[]
-  outputs: string[]
-  inputs: string[]
-  unlocks: string[]
-  block_number: number
+  hash: string
   blockstamp: string
   blockstampTime: number
-  time: number
   issuers: string[]
+  inputs: string[]
+  outputs: string[]
+  unlocks: string[]
+  signatures: string[]
+  comment: string
 }
 
 export const Block = {
@@ -244,7 +243,7 @@ export interface HttpBlock {
   powMin: number
   time: number
   medianTime: number
-  dividend: number
+  dividend: number|null
   unitbase: number
   hash: string
   previousHash: string
@@ -301,10 +300,9 @@ export function block2HttpBlock(blockDTO:BlockDTO): HttpBlock {
         outputs: tx.outputs,
         inputs: tx.inputs,
         unlocks: tx.unlocks,
-        block_number: tx.blockNumber,
+        hash: tx.hash,
         blockstamp: tx.blockstamp,
         blockstampTime: tx.blockstampTime,
-        time: tx.blockstampTime
       }
     }),
     nonce: blockDTO.nonce,
diff --git a/app/modules/crawler/lib/sync.ts b/app/modules/crawler/lib/sync.ts
index 2a2d6aeba0e428712165a967e3d0f1699a0188d0..71751c13f2eb1f098d70dc262f3c6780ce345521 100644
--- a/app/modules/crawler/lib/sync.ts
+++ b/app/modules/crawler/lib/sync.ts
@@ -309,7 +309,7 @@ export class Synchroniser extends stream.Duplex {
 
       // Save currency parameters given by root block
       const rootBlock = await this.server.dal.getBlock(0);
-      await this.BlockchainService.saveParametersForRootBlock(rootBlock);
+      await this.BlockchainService.saveParametersForRootBlock(BlockDTO.fromJSONObject(rootBlock))
       this.server.dal.blockDAL.cleanCache();
 
       //=======
diff --git a/app/modules/prover/lib/blockGenerator.ts b/app/modules/prover/lib/blockGenerator.ts
index 3c6d67921060590fc4906325cb86d369955a2f4f..87af52071be917e027babd0ace8e48d6318d6990 100644
--- a/app/modules/prover/lib/blockGenerator.ts
+++ b/app/modules/prover/lib/blockGenerator.ts
@@ -726,7 +726,7 @@ class NextBlockGenerator implements BlockGeneratorInterface {
         // Do not rely on certification block UID, prefer using the known hash of the block by its given number
         const targetBlock = await this.dal.getBlock(cert.block_number);
         // Check if writable
-        let duration = current && targetBlock ? current.medianTime - parseInt(targetBlock.medianTime) : 0;
+        let duration = current && targetBlock ? current.medianTime - targetBlock.medianTime : 0;
         if (targetBlock && duration <= this.conf.sigWindow) {
           cert.sig = '';
           cert.currency = this.conf.currency;
diff --git a/app/modules/ws2p/lib/impl/WS2PReqMapperByServer.ts b/app/modules/ws2p/lib/impl/WS2PReqMapperByServer.ts
index 8b27036a435b0e11c5180b1de7075c297037842e..49c04d411546fdc8b4a878b9d3624c35c985e4c4 100644
--- a/app/modules/ws2p/lib/impl/WS2PReqMapperByServer.ts
+++ b/app/modules/ws2p/lib/impl/WS2PReqMapperByServer.ts
@@ -16,6 +16,7 @@ import {Server} from "../../../../../server"
 import {WS2PReqMapper} from "../interface/WS2PReqMapper"
 import {BlockDTO} from "../../../../lib/dto/BlockDTO"
 import {IindexEntry} from '../../../../lib/indexer';
+import {DBBlock} from "../../../../lib/db/DBBlock"
 
 export class WS2PReqMapperByServer implements WS2PReqMapper {
 
@@ -25,8 +26,8 @@ export class WS2PReqMapperByServer implements WS2PReqMapper {
     return this.server.BlockchainService.current()
   }
 
-  getBlock(number: number): Promise<BlockDTO[]> {
-    return this.server.dal.getBlock(number)
+  getBlock(number: number): Promise<BlockDTO> {
+    return Promise.resolve(BlockDTO.fromJSONObject(this.server.dal.getBlock(number)))
   }
 
   async getBlocks(count: number, from: number): Promise<BlockDTO[]> {
@@ -38,7 +39,7 @@ export class WS2PReqMapperByServer implements WS2PReqMapper {
     if (!current || current.number < from) {
       return []
     }
-    return this.server.dal.getBlocksBetween(from, from + count - 1)
+    return (await this.server.dal.getBlocksBetween(from, from + count - 1)).map((b:DBBlock) => BlockDTO.fromJSONObject(b))
   }
 
   async getRequirementsOfPending(minsig: number): Promise<any> {
diff --git a/app/modules/ws2p/lib/interface/WS2PReqMapper.ts b/app/modules/ws2p/lib/interface/WS2PReqMapper.ts
index 651fb22cb59cd04d70c09f2b549df0f5728a55ec..f410e8145303accc678c95c87dfd6238d97a0539 100644
--- a/app/modules/ws2p/lib/interface/WS2PReqMapper.ts
+++ b/app/modules/ws2p/lib/interface/WS2PReqMapper.ts
@@ -16,7 +16,7 @@ import {BlockDTO} from "../../../../lib/dto/BlockDTO"
 export interface WS2PReqMapper {
 
   getCurrent(): Promise<BlockDTO>
-  getBlock(number:number): Promise<BlockDTO[]>
+  getBlock(number:number): Promise<BlockDTO>
   getBlocks(count:number, fromNumber:number): Promise<BlockDTO[]>
   getRequirementsOfPending(minCert:number): Promise<any>
 }
\ No newline at end of file
diff --git a/app/service/IdentityService.ts b/app/service/IdentityService.ts
index 167e3291d838baf94d5ace097ecaa6b634cf7a01..342c8dc682674149f0800283874864fcaabf9c45 100644
--- a/app/service/IdentityService.ts
+++ b/app/service/IdentityService.ts
@@ -198,7 +198,7 @@ export class IdentityService extends FIFOService {
       }
       if (!anErr) {
         try {
-          let basedBlock = await this.dal.getBlock(cert.block_number);
+          let basedBlock: { number:number, hash:string, medianTime?:number } = await this.dal.getBlock(cert.block_number);
           if (cert.block_number == 0 && !basedBlock) {
             basedBlock = {
               number: 0,
@@ -213,7 +213,7 @@ export class IdentityService extends FIFOService {
             block_hash: basedBlock.hash,
             target: targetHash,
             to: idty.pubkey,
-            expires_on: basedBlock.medianTime + this.conf.sigWindow,
+            expires_on: (basedBlock.medianTime || 0) + this.conf.sigWindow,
             linked: false,
             written: false,
             expired: false,
diff --git a/app/service/MembershipService.ts b/app/service/MembershipService.ts
index a02eaa76866b79045cbe37e650e17940c1e47274..b0a75f51f02855e5ccdfaef4be37a17b6fd1dcb5 100644
--- a/app/service/MembershipService.ts
+++ b/app/service/MembershipService.ts
@@ -89,7 +89,7 @@ export class MembershipService extends FIFOService {
         idtyHash: entry.getIdtyHash(),
         written: false,
         written_number: null,
-        expires_on: basedBlock ? basedBlock.medianTime + this.conf.msWindow : null,
+        expires_on: basedBlock ? basedBlock.medianTime + this.conf.msWindow : 0,
         signature: entry.signature,
         expired: false,
         block_number: entry.number