diff --git a/Cargo.lock b/Cargo.lock
index 5fcdc43a2dcfeb2c679c1a4c0340c2b8c0c740a9..13417b4f18e0392927b5d7c7c17f4ea70e4ed4eb 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -289,15 +289,46 @@ dependencies = [
  "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "dubp-common-doc"
+version = "0.1.0"
+dependencies = [
+ "dup-crypto 0.7.0",
+ "durs-common-tools 0.2.0",
+ "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "json-pest-parser 0.2.0",
+ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pest 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pretty_assertions 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.86 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.86 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)",
+ "shrinkwraprs 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unwrap 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "dubp-currency-params"
+version = "0.2.0"
+dependencies = [
+ "bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "dubp-common-doc 0.1.0",
+ "durs-common-tools 0.2.0",
+ "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.86 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "dubp-documents"
-version = "0.13.0"
+version = "0.14.0"
 dependencies = [
- "dup-crypto 0.6.0",
- "dup-currency-params 0.1.0",
- "durs-common-tools 0.1.0",
+ "dubp-common-doc 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dup-crypto 0.7.0",
+ "durs-common-tools 0.2.0",
  "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "json-pest-parser 0.1.0",
+ "json-pest-parser 0.2.0",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "pest 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -312,10 +343,11 @@ dependencies = [
 name = "dubp-documents-tests-tools"
 version = "0.1.0"
 dependencies = [
- "dubp-documents 0.13.0",
- "dup-crypto 0.6.0",
+ "dubp-common-doc 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dubp-documents 0.14.0",
+ "dup-crypto 0.7.0",
  "dup-crypto-tests-tools 0.1.0",
- "dup-currency-params 0.1.0",
 ]
 
 [[package]]
@@ -335,12 +367,12 @@ dependencies = [
 
 [[package]]
 name = "dup-crypto"
-version = "0.6.0"
+version = "0.7.0"
 dependencies = [
  "base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "durs-common-tools 0.1.0",
+ "durs-common-tools 0.2.0",
  "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -354,17 +386,7 @@ dependencies = [
 name = "dup-crypto-tests-tools"
 version = "0.1.0"
 dependencies = [
- "dup-crypto 0.6.0",
-]
-
-[[package]]
-name = "dup-currency-params"
-version = "0.1.0"
-dependencies = [
- "bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "durs-common-tools 0.1.0",
- "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.86 (registry+https://github.com/rust-lang/crates.io-index)",
+ "dup-crypto 0.7.0",
 ]
 
 [[package]]
@@ -372,13 +394,14 @@ name = "durs-blockchain"
 version = "0.2.0-a"
 dependencies = [
  "dirs 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "dubp-documents 0.13.0",
+ "dubp-common-doc 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dubp-documents 0.14.0",
  "dubp-documents-tests-tools 0.1.0",
- "dup-crypto 0.6.0",
+ "dup-crypto 0.7.0",
  "dup-crypto-tests-tools 0.1.0",
- "dup-currency-params 0.1.0",
  "durs-blockchain-dal 0.2.0-a",
- "durs-common-tools 0.1.0",
+ "durs-common-tools 0.2.0",
  "durs-conf 0.2.0-a",
  "durs-message 0.2.0-a",
  "durs-module 0.2.0-a",
@@ -386,7 +409,7 @@ dependencies = [
  "durs-network-documents 0.4.0",
  "durs-wot 0.8.0-a0.9",
  "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "json-pest-parser 0.1.0",
+ "json-pest-parser 0.2.0",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "pbr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -401,13 +424,14 @@ dependencies = [
 name = "durs-blockchain-dal"
 version = "0.2.0-a"
 dependencies = [
- "dubp-documents 0.13.0",
+ "dubp-common-doc 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dubp-documents 0.14.0",
  "dubp-documents-tests-tools 0.1.0",
- "dup-crypto 0.6.0",
+ "dup-crypto 0.7.0",
  "dup-crypto-tests-tools 0.1.0",
- "dup-currency-params 0.1.0",
  "durs-common-tests-tools 0.1.0",
- "durs-common-tools 0.1.0",
+ "durs-common-tools 0.2.0",
  "durs-conf 0.2.0-a",
  "durs-module 0.2.0-a",
  "durs-wot 0.8.0-a0.9",
@@ -431,7 +455,7 @@ dependencies = [
 
 [[package]]
 name = "durs-common-tools"
-version = "0.1.0"
+version = "0.2.0"
 dependencies = [
  "pretty_assertions 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -441,10 +465,10 @@ name = "durs-conf"
 version = "0.2.0-a"
 dependencies = [
  "dirs 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "dubp-documents 0.13.0",
- "dup-crypto 0.6.0",
- "dup-currency-params 0.1.0",
- "durs-common-tools 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dubp-documents 0.14.0",
+ "dup-crypto 0.7.0",
+ "durs-common-tools 0.2.0",
  "durs-module 0.2.0-a",
  "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -460,10 +484,10 @@ name = "durs-core"
 version = "0.2.0-a"
 dependencies = [
  "dirs 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "dup-crypto 0.6.0",
- "dup-currency-params 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dup-crypto 0.7.0",
  "durs-blockchain 0.2.0-a",
- "durs-common-tools 0.1.0",
+ "durs-common-tools 0.2.0",
  "durs-conf 0.2.0-a",
  "durs-message 0.2.0-a",
  "durs-module 0.2.0-a",
@@ -484,9 +508,10 @@ dependencies = [
 name = "durs-message"
 version = "0.2.0-a"
 dependencies = [
- "dubp-documents 0.13.0",
- "dup-crypto 0.6.0",
- "dup-currency-params 0.1.0",
+ "dubp-common-doc 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dubp-documents 0.14.0",
+ "dup-crypto 0.7.0",
  "durs-blockchain-dal 0.2.0-a",
  "durs-module 0.2.0-a",
  "durs-network 0.2.0-a",
@@ -500,10 +525,10 @@ dependencies = [
 name = "durs-module"
 version = "0.2.0-a"
 dependencies = [
- "dubp-documents 0.13.0",
- "dup-crypto 0.6.0",
- "dup-currency-params 0.1.0",
- "durs-common-tools 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dubp-documents 0.14.0",
+ "dup-crypto 0.7.0",
+ "durs-common-tools 0.2.0",
  "durs-network-documents 0.4.0",
  "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -517,9 +542,10 @@ dependencies = [
 name = "durs-network"
 version = "0.2.0-a"
 dependencies = [
- "dubp-documents 0.13.0",
- "dup-crypto 0.6.0",
- "durs-common-tools 0.1.0",
+ "dubp-common-doc 0.1.0",
+ "dubp-documents 0.14.0",
+ "dup-crypto 0.7.0",
+ "durs-common-tools 0.2.0",
  "durs-module 0.2.0-a",
  "durs-network-documents 0.4.0",
  "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -535,10 +561,11 @@ version = "0.4.0"
 dependencies = [
  "base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "dubp-documents 0.13.0",
- "dup-crypto 0.6.0",
- "dup-currency-params 0.1.0",
- "durs-common-tools 0.1.0",
+ "dubp-common-doc 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dubp-documents 0.14.0",
+ "dup-crypto 0.7.0",
+ "durs-common-tools 0.2.0",
  "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -556,10 +583,10 @@ dependencies = [
 name = "durs-skeleton"
 version = "0.1.0"
 dependencies = [
- "dubp-documents 0.13.0",
- "dup-crypto 0.6.0",
- "dup-currency-params 0.1.0",
- "durs-common-tools 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dubp-documents 0.14.0",
+ "dup-crypto 0.7.0",
+ "durs-common-tools 0.2.0",
  "durs-conf 0.2.0-a",
  "durs-message 0.2.0-a",
  "durs-module 0.2.0-a",
@@ -576,10 +603,10 @@ dependencies = [
 name = "durs-tui"
 version = "0.2.0-a"
 dependencies = [
- "dubp-documents 0.13.0",
- "dup-crypto 0.6.0",
- "dup-currency-params 0.1.0",
- "durs-common-tools 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dubp-documents 0.14.0",
+ "dup-crypto 0.7.0",
+ "durs-common-tools 0.2.0",
  "durs-conf 0.2.0-a",
  "durs-message 0.2.0-a",
  "durs-module 0.2.0-a",
@@ -600,7 +627,7 @@ version = "0.8.0-a0.9"
 dependencies = [
  "bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "durs-common-tools 0.1.0",
+ "durs-common-tools 0.2.0",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.86 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -612,11 +639,12 @@ name = "durs-ws2p"
 version = "0.2.0-a"
 dependencies = [
  "bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "dubp-documents 0.13.0",
- "dup-crypto 0.6.0",
- "dup-currency-params 0.1.0",
+ "dubp-common-doc 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dubp-documents 0.14.0",
+ "dup-crypto 0.7.0",
  "durs-common-tests-tools 0.1.0",
- "durs-common-tools 0.1.0",
+ "durs-common-tools 0.2.0",
  "durs-conf 0.2.0-a",
  "durs-message 0.2.0-a",
  "durs-module 0.2.0-a",
@@ -640,10 +668,11 @@ version = "0.2.0-a"
 dependencies = [
  "bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "dubp-documents 0.13.0",
- "dup-crypto 0.6.0",
- "dup-currency-params 0.1.0",
- "durs-common-tools 0.1.0",
+ "dubp-common-doc 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dubp-documents 0.14.0",
+ "dup-crypto 0.7.0",
+ "durs-common-tools 0.2.0",
  "durs-network-documents 0.4.0",
  "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -657,10 +686,11 @@ dependencies = [
 name = "durs-ws2p-protocol"
 version = "0.2.0-a"
 dependencies = [
- "dubp-documents 0.13.0",
- "dup-crypto 0.6.0",
- "dup-currency-params 0.1.0",
- "durs-common-tools 0.1.0",
+ "dubp-common-doc 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dubp-documents 0.14.0",
+ "dup-crypto 0.7.0",
+ "durs-common-tools 0.2.0",
  "durs-module 0.2.0-a",
  "durs-network-documents 0.4.0",
  "durs-ws2p-messages 0.2.0-a",
@@ -678,10 +708,11 @@ version = "0.2.0-a"
 dependencies = [
  "bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "dubp-documents 0.13.0",
- "dup-crypto 0.6.0",
- "dup-currency-params 0.1.0",
- "durs-common-tools 0.1.0",
+ "dubp-common-doc 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dubp-documents 0.14.0",
+ "dup-crypto 0.7.0",
+ "durs-common-tools 0.2.0",
  "durs-conf 0.2.0-a",
  "durs-message 0.2.0-a",
  "durs-module 0.2.0-a",
@@ -854,6 +885,14 @@ dependencies = [
  "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "itertools"
+version = "0.7.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "itoa"
 version = "0.4.3"
@@ -861,7 +900,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "json-pest-parser"
-version = "0.1.0"
+version = "0.2.0"
 dependencies = [
  "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "pest 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1120,6 +1159,14 @@ dependencies = [
  "difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "proc-macro2"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "proc-macro2"
 version = "0.4.27"
@@ -1128,6 +1175,14 @@ dependencies = [
  "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "quote"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "quote"
 version = "0.6.11"
@@ -1484,6 +1539,17 @@ dependencies = [
  "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "shrinkwraprs"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itertools 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.12.15 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "simplelog"
 version = "0.5.3"
@@ -1537,6 +1603,16 @@ dependencies = [
  "syn 0.15.26 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "syn"
+version = "0.12.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "syn"
 version = "0.15.26"
@@ -1868,6 +1944,7 @@ dependencies = [
 "checksum id_tree 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0c265a4e397174ac4e22b5e923ad2905858aa5f1512e3b5b4942ee4ff56d146f"
 "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
 "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08"
+"checksum itertools 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0d47946d458e94a1b7bcabbf6521ea7c037062c81f534615abcad76e84d4970d"
 "checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b"
 "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
 "checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1"
@@ -1900,7 +1977,9 @@ dependencies = [
 "checksum pest_meta 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f5a3492a4ed208ffc247adcdcc7ba2a95be3104f58877d0d02f0df39bf3efb5e"
 "checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c"
 "checksum pretty_assertions 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3a029430f0d744bc3d15dd474d591bed2402b645d024583082b9f63bb936dac6"
+"checksum proc-macro2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cd07deb3c6d1d9ff827999c7f9b04cdfd66b1b17ae508e14fe47b620f2282ae0"
 "checksum proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)" = "4d317f9caece796be1980837fd5cb3dfec5613ebdb04ad0956deea83ce168915"
+"checksum quote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1eca14c727ad12702eb4b6bfb5a232287dcf8385cb8ca83a3eeaf6519c44c408"
 "checksum quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)" = "cdd8e04bd9c52e0342b406469d494fcb033be4bdbe5c606016defbb1681411e1"
 "checksum rand 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)" = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c"
 "checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
@@ -1940,6 +2019,7 @@ dependencies = [
 "checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
 "checksum sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b4d8bfd0e469f417657573d8451fb33d16cfe0989359b93baf3a1ffc639543d"
 "checksum sha2-asm 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8aba8afb8bba3f5d433ede1d036c46e122a7b75a67c92a6b7b5f11d87e2e4478"
+"checksum shrinkwraprs 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7d5f047b90b2ca2d1526ff73d67cba61f86f4cf9a8afddc99dd96702ded8e684"
 "checksum simplelog 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e95345f185d5adeb8ec93459d2dc99654e294cc6ccf5b75414d8ea262de9a13"
 "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
 "checksum smallvec 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "88aea073965ab29f6edb5493faf96ad662fb18aa9eeb186a3b7057951605ed15"
@@ -1947,6 +2027,7 @@ dependencies = [
 "checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550"
 "checksum structopt 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "670ad348dc73012fcf78c71f06f9d942232cdd4c859d4b6975e27836c3efc0c3"
 "checksum structopt-derive 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "ef98172b1a00b0bec738508d3726540edcbd186d50dfd326f2b1febbb3559f04"
+"checksum syn 0.12.15 (registry+https://github.com/rust-lang/crates.io-index)" = "c97c05b8ebc34ddd6b967994d5c6e9852fa92f8b82b3858c39451f97346dcce5"
 "checksum syn 0.15.26 (registry+https://github.com/rust-lang/crates.io-index)" = "f92e629aa1d9c827b2bb8297046c1ccffc57c99b947a680d3ccff1f136a3bee9"
 "checksum synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73687139bf99285483c96ac0add482c3776528beac1d97d444f6e91f203a2015"
 "checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
diff --git a/Cargo.toml b/Cargo.toml
index ddfa34223e0198a731eff4250551c46cb835891b..47f6588f533ed942ff9f05db6fe7e821824d2145 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -7,6 +7,7 @@ members = [
     "lib/core/module",
     "lib/core/network",
     "lib/crypto",
+    "lib/dubp/common-doc",
     "lib/dubp/currency-params",
     "lib/dubp/documents",
     "lib/dubp/wot",
diff --git a/lib/core/message/Cargo.toml b/lib/core/message/Cargo.toml
index 6494bc931ea81315a96300c5477ef15a9dc46632..b97bf7afd77402fe45a10904ee4b7fcde200a0e7 100644
--- a/lib/core/message/Cargo.toml
+++ b/lib/core/message/Cargo.toml
@@ -10,9 +10,10 @@ edition = "2018"
 path = "src/lib.rs"
 
 [dependencies]
-dup-crypto = { path = "../../crypto" }
+dubp-common-doc = { path = "../../dubp/common-doc"} #, version = "0.1.0" }
 dubp-currency-params = { path = "../../dubp/currency-params" }
 dubp-documents= { path = "../../dubp/documents" }
+dup-crypto = { path = "../../crypto" }
 durs-module = { path = "../module" }
 durs-network = { path = "../network" }
 durs-blockchain-dal = { path = "../../modules/blockchain/blockchain-dal" }
diff --git a/lib/core/message/src/events.rs b/lib/core/message/src/events.rs
index f3b9df2e47331c84d2381c1f6024a4ffab18fa6e..c89ac18fa581fd7bef7d41587b5b8c907107f90b 100644
--- a/lib/core/message/src/events.rs
+++ b/lib/core/message/src/events.rs
@@ -14,9 +14,9 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::*;
+use dubp_common_doc::Blockstamp;
 use dubp_documents::documents::block::BlockDocument;
 use dubp_documents::documents::UserDocumentDUBP;
-use dubp_documents::Blockstamp;
 use durs_network::events::NetworkEvent;
 
 /// The DURS event message.
diff --git a/lib/core/message/src/requests.rs b/lib/core/message/src/requests.rs
index e6a49ed17e72dcd3c95d4c30d2568f8d7008e26d..96411b6a5e6ce4c21dfb97d5f24703451d28ff0d 100644
--- a/lib/core/message/src/requests.rs
+++ b/lib/core/message/src/requests.rs
@@ -14,7 +14,7 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::*;
-use dubp_documents::BlockNumber;
+use dubp_common_doc::BlockNumber;
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::*;
 use durs_blockchain_dal::filters::identities::IdentitiesFilter;
diff --git a/lib/core/message/src/responses.rs b/lib/core/message/src/responses.rs
index eb5db0ca1c692f1beaf49517f22e214a7cd367a8..e04778d6a167c60d712d08d781210d4ec0c6c88c 100644
--- a/lib/core/message/src/responses.rs
+++ b/lib/core/message/src/responses.rs
@@ -13,13 +13,13 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
+use dubp_common_doc::BlockNumber;
+use dubp_common_doc::Blockstamp;
 use dubp_documents::documents::block::BlockDocument;
 use dubp_documents::documents::certification::CertificationDocument;
 use dubp_documents::documents::identity::IdentityDocument;
 use dubp_documents::documents::membership::MembershipDocument;
 use dubp_documents::documents::revocation::RevocationDocumentV10;
-use dubp_documents::BlockNumber;
-use dubp_documents::Blockstamp;
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::*;
 use durs_module::ModuleReqId;
diff --git a/lib/core/network/Cargo.toml b/lib/core/network/Cargo.toml
index f0bd0b7769e7ffb0db96dba6b280cdbe310a2962..448287c6b49ac5a5ff76b56691748dc0406605b2 100644
--- a/lib/core/network/Cargo.toml
+++ b/lib/core/network/Cargo.toml
@@ -10,9 +10,10 @@ edition = "2018"
 path = "lib.rs"
 
 [dependencies]
-durs-common-tools = { path = "../../tools/common-tools" }
-dup-crypto = { path = "../../crypto" }
+dubp-common-doc = { path = "../../dubp/common-doc"} #, version = "0.1.0" }
 dubp-documents= { path = "../../dubp/documents" }
+dup-crypto = { path = "../../crypto" }
+durs-common-tools = { path = "../../tools/common-tools" }
 durs-module = { path = "../module" }
 durs-network-documents = { path = "../../dunp/network-documents" }
 failure = "0.1.5"
diff --git a/lib/core/network/events.rs b/lib/core/network/events.rs
index f917cf39c90a62d06f7ed926a2a80121fb2e4a7c..954ed019cfe200d8e98172b0feb09a06f4951332 100644
--- a/lib/core/network/events.rs
+++ b/lib/core/network/events.rs
@@ -18,9 +18,9 @@
 use crate::network_head::NetworkHead;
 use crate::network_peer::PeerCard;
 use crate::NodeFullId;
+use dubp_common_doc::blockstamp::Blockstamp;
 use dubp_documents::documents::block::BlockDocument;
 use dubp_documents::documents::UserDocumentDUBP;
-use dubp_documents::Blockstamp;
 use durs_common_tools::Percent;
 
 #[derive(Debug, Clone)]
diff --git a/lib/core/network/requests.rs b/lib/core/network/requests.rs
index f9b00059ee2f4a1c8e1140f54bf6324bcf70a644..0dad6800ab6544c07190c706f777e4490aeff190 100644
--- a/lib/core/network/requests.rs
+++ b/lib/core/network/requests.rs
@@ -16,9 +16,9 @@
 //! Defined network requests.
 
 use crate::*;
+use dubp_common_doc::blockstamp::Blockstamp;
 use dubp_documents::documents::block::BlockDocument;
 use dubp_documents::documents::UserDocumentDUBP;
-use dubp_documents::Blockstamp;
 
 #[derive(Debug, Copy, Clone)]
 /// Type containing a request addressed to the network module
diff --git a/lib/dubp/common-doc/Cargo.toml b/lib/dubp/common-doc/Cargo.toml
new file mode 100644
index 0000000000000000000000000000000000000000..77106f7d5d1d05be1d36b85537472e508809ab6c
--- /dev/null
+++ b/lib/dubp/common-doc/Cargo.toml
@@ -0,0 +1,32 @@
+[package]
+name = "dubp-common-doc"
+version = "0.1.0"
+authors = ["elois <elois@ifee.fr>"]
+description = "Provide common tools for DUBP (DUniter Blockhain Protocol)."
+repository = "https://git.duniter.org/nodes/rust/duniter-rs"
+readme = "README.md"
+keywords = ["duniter", "dunitrust", "blockchain", "cryptocurrency"]
+license = "AGPL-3.0"
+edition = "2018"
+
+[lib]
+path = "src/lib.rs"
+
+[dependencies]
+dup-crypto = { path = "../../crypto", version = "0.7.0" }
+durs-common-tools = { path = "../../tools/common-tools", version = "0.2.0" }
+failure = "0.1.5"
+json-pest-parser = { path = "../../tools/json-pest-parser", version = "0.2.0" }
+pest = "2.1.0"
+pest_derive = "2.1.0"
+serde = "1.0.*"
+serde_derive = "1.0.*"
+serde_json = "1.0.*"
+shrinkwraprs = "0.2.*"
+log = "0.4.*"
+unwrap = "1.2.1"
+
+[dev-dependencies]
+pretty_assertions = "0.5.1"
+
+[features]
\ No newline at end of file
diff --git a/lib/dubp/common-doc/README.md b/lib/dubp/common-doc/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..3d1323b93b8bd38f46d477910f8ff8f11b2f8b8d
--- /dev/null
+++ b/lib/dubp/common-doc/README.md
@@ -0,0 +1,9 @@
+# DUBP common doc
+
+`dubp-common-doc` is a crate provide common tools To handle [DUBP](dubp-latest-rfc) documents.
+
+[dubp-latest-rfc]: https://git.duniter.org/nodes/common/doc/blob/master/rfc/0009_Duniter_Blockchain_Protocol_V11.md
+
+## How to use it
+
+You can add `dubp-common-doc` as a `cargo` dependency in your Rust project.
diff --git a/lib/dubp/documents/src/blockstamp.rs b/lib/dubp/common-doc/src/blockstamp.rs
similarity index 82%
rename from lib/dubp/documents/src/blockstamp.rs
rename to lib/dubp/common-doc/src/blockstamp.rs
index 8312361545a27d12038796a092323940d1818ff3..9ca3cc8cdbd7d749fbdf9299a3cdbc904e880c13 100644
--- a/lib/dubp/documents/src/blockstamp.rs
+++ b/lib/dubp/common-doc/src/blockstamp.rs
@@ -15,11 +15,17 @@
 
 //! Wrapper for blockstamp
 
-use crate::*;
-
-/// Type of errors for [`BlockUId`] parsing.
+use crate::{BlockHash, BlockNumber};
+use dup_crypto::bases::BaseConvertionError;
+use dup_crypto::hashs::Hash;
+use failure::Fail;
+use serde::{Deserialize, Serialize};
+use std::cmp::Ordering;
+use std::fmt::{Debug, Display, Error, Formatter};
+
+/// Type of errors for [`Blockstamp`] parsing.
 ///
-/// [`BlockUId`]: struct.BlockUId.html
+/// [`Blockstamp`]: struct.Blockstamp.html
 #[derive(Debug, Copy, Clone, PartialEq, Eq, Fail)]
 pub enum BlockstampParseError {
     /// Given string have invalid format
@@ -30,7 +36,13 @@ pub enum BlockstampParseError {
     InvalidBlockNumber(),
     /// [`BlockHash`](struct.BlockHash.html) part is not a valid hex number.
     #[fail(display = "BlockHash part is not a valid hex number.")]
-    InvalidBlockHash(),
+    InvalidBlockHash(BaseConvertionError),
+}
+
+impl From<BaseConvertionError> for BlockstampParseError {
+    fn from(e: BaseConvertionError) -> Self {
+        BlockstampParseError::InvalidBlockHash(e)
+    }
 }
 
 /// A blockstamp (Unique ID).
@@ -105,17 +117,17 @@ pub enum ReadBytesBlockstampError {
     /// Bytes vector is too long
     TooLong(),
     /// IoError
-    IoError(::std::io::Error),
+    IoError(std::io::Error),
 }
 
-impl From<::std::io::Error> for ReadBytesBlockstampError {
-    fn from(e: ::std::io::Error) -> Self {
+impl From<std::io::Error> for ReadBytesBlockstampError {
+    fn from(e: std::io::Error) -> Self {
         ReadBytesBlockstampError::IoError(e)
     }
 }
 
 impl Blockstamp {
-    /// Create a `BlockUId` from a text.
+    /// Create a `Blockstamp` from a text.
     pub fn from_string(src: &str) -> Result<Blockstamp, BlockstampParseError> {
         let mut split = src.split('-');
 
@@ -123,18 +135,14 @@ impl Blockstamp {
             Err(BlockstampParseError::InvalidFormat())
         } else {
             let id = split.next().unwrap().parse::<u32>();
-            let hash = Hash::from_hex(split.next().unwrap());
+            let hash = Hash::from_hex(split.next().unwrap())?;
 
             if id.is_err() {
                 Err(BlockstampParseError::InvalidBlockNumber())
-            } else if hash.is_err() {
-                Err(BlockstampParseError::InvalidBlockHash())
             } else {
                 Ok(Blockstamp {
                     id: BlockNumber(id.unwrap()),
-                    hash: BlockHash(
-                        hash.expect("Try to get hash of an uncompleted or reduce block !"),
-                    ),
+                    hash: BlockHash(hash),
                 })
             }
         }
diff --git a/lib/dubp/currency-params/src/currencies_codes.rs b/lib/dubp/common-doc/src/currencies_codes.rs
similarity index 100%
rename from lib/dubp/currency-params/src/currencies_codes.rs
rename to lib/dubp/common-doc/src/currencies_codes.rs
diff --git a/lib/dubp/documents/src/documents_grammar.pest b/lib/dubp/common-doc/src/documents_grammar.pest
similarity index 100%
rename from lib/dubp/documents/src/documents_grammar.pest
rename to lib/dubp/common-doc/src/documents_grammar.pest
diff --git a/lib/dubp/common-doc/src/errors.rs b/lib/dubp/common-doc/src/errors.rs
new file mode 100644
index 0000000000000000000000000000000000000000..bdd1d2af2307ad1877f6e213ba54cdc8d1ba3202
--- /dev/null
+++ b/lib/dubp/common-doc/src/errors.rs
@@ -0,0 +1,30 @@
+//  Copyright (C) 2017-2019  The AXIOM TEAM Association.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+//! Define DUBP Documents errors types.
+
+use dup_crypto::keys::SigError;
+use std::collections::HashMap;
+
+/// List of possible errors for document signatures verification.
+#[derive(Debug, Eq, PartialEq)]
+pub enum DocumentSigsErr {
+    /// Not same amount of issuers and signatures.
+    /// (issuers count, signatures count)
+    IncompletePairs(usize, usize),
+    /// Signatures don't match.
+    /// List of mismatching pairs indexes.
+    Invalid(HashMap<usize, SigError>),
+}
diff --git a/lib/dubp/common-doc/src/lib.rs b/lib/dubp/common-doc/src/lib.rs
new file mode 100644
index 0000000000000000000000000000000000000000..5cb1195250994b7e8c36686d2c84cd1bb8316e0a
--- /dev/null
+++ b/lib/dubp/common-doc/src/lib.rs
@@ -0,0 +1,88 @@
+//  Copyright (C) 2017-2019  The AXIOM TEAM Association.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+//! Provide common tools for DUBP.
+
+#![deny(
+    missing_debug_implementations,
+    missing_copy_implementations,
+    trivial_casts,
+    trivial_numeric_casts,
+    unsafe_code,
+    unstable_features,
+    unused_import_braces
+)]
+
+#[macro_use]
+extern crate pest_derive;
+
+pub mod blockstamp;
+pub mod currencies_codes;
+pub mod errors;
+pub mod parser;
+pub mod traits;
+
+use dup_crypto::hashs::Hash;
+use serde::{Deserialize, Serialize};
+use shrinkwraprs::Shrinkwrap;
+use std::fmt::{Debug, Display, Error, Formatter};
+
+pub use blockstamp::{Blockstamp, PreviousBlockstamp};
+
+/// Currency name
+#[derive(Debug, Clone, Eq, Hash, PartialEq, Deserialize, Serialize, Shrinkwrap)]
+pub struct CurrencyName(pub String);
+
+impl Display for CurrencyName {
+    fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
+        write!(f, "{}", self.0)
+    }
+}
+
+impl From<&str> for CurrencyName {
+    fn from(s: &str) -> Self {
+        CurrencyName(s.to_owned())
+    }
+}
+
+/// A block number.
+#[derive(
+    Copy, Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize, Shrinkwrap,
+)]
+pub struct BlockNumber(pub u32);
+
+impl Display for BlockNumber {
+    fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
+        write!(f, "{}", self.0)
+    }
+}
+
+/// Wrapper of a block hash.
+#[derive(
+    Copy, Clone, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize, Shrinkwrap,
+)]
+pub struct BlockHash(pub Hash);
+
+impl Display for BlockHash {
+    fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
+        write!(f, "{}", self.0.to_hex())
+    }
+}
+
+impl Debug for BlockHash {
+    fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
+        write!(f, "BlockHash({})", self)
+    }
+}
diff --git a/lib/dubp/common-doc/src/parser.rs b/lib/dubp/common-doc/src/parser.rs
new file mode 100644
index 0000000000000000000000000000000000000000..25e6ad7e7786d50d00eea4bbc2133f0b812d8c91
--- /dev/null
+++ b/lib/dubp/common-doc/src/parser.rs
@@ -0,0 +1,93 @@
+//  Copyright (C) 2017-2019  The AXIOM TEAM Association.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+//! Provide parser for DUBP documents.
+
+use failure::Fail;
+use pest::iterators::Pair;
+use pest::RuleType;
+use std::net::AddrParseError;
+
+#[derive(Debug, Clone, Copy, Parser)]
+#[grammar = "documents_grammar.pest"]
+/// Parser for Documents
+pub struct DocumentsParser;
+
+pub trait TextDocumentParser<R: RuleType> {
+    /// Type of document generated by the parser
+    type DocumentType;
+
+    /// Parse text document from raw format
+    fn parse(doc: &str) -> Result<Self::DocumentType, TextDocumentParseError>;
+    /// Parse text document from pest pairs
+    fn from_pest_pair(pairs: Pair<R>) -> Result<Self::DocumentType, TextDocumentParseError>;
+    /// Parse text document from versioned pest pairs
+    fn from_versioned_pest_pair(
+        version: u16,
+        pairs: Pair<R>,
+    ) -> Result<Self::DocumentType, TextDocumentParseError>;
+}
+
+/// Error with pest parser (grammar)
+#[derive(Debug, Clone, Eq, Fail, PartialEq)]
+#[fail(display = "Grammar error: {}", _0)]
+pub struct PestError(pub String);
+
+impl<T: pest::RuleType> From<pest::error::Error<T>> for PestError {
+    fn from(e: pest::error::Error<T>) -> Self {
+        PestError(format!("{}", e))
+    }
+}
+
+/// List of possible errors while parsing a text document.
+#[derive(Debug, Clone, Eq, Fail, PartialEq)]
+pub enum TextDocumentParseError {
+    /// The given source don't have a valid specific document format (document type).
+    #[fail(display = "TextDocumentParseError: Invalid inner format: {}", _0)]
+    InvalidInnerFormat(String),
+    /// Ip address parse error
+    #[fail(display = "TextDocumentParseError: invalid ip: {}", _0)]
+    IpAddrError(AddrParseError),
+    /// Error with pest parser
+    #[fail(display = "TextDocumentParseError: {}", _0)]
+    PestError(PestError),
+    /// Unexpected rule
+    #[fail(display = "TextDocumentParseError: Unexpected rule: '{}'", _0)]
+    UnexpectedRule(String),
+    /// Unexpected version
+    #[fail(display = "TextDocumentParseError: Unexpected version: '{}'", _0)]
+    UnexpectedVersion(String),
+    /// Unknown type
+    #[fail(display = "TextDocumentParseError: UnknownType.")]
+    UnknownType,
+}
+
+impl From<AddrParseError> for TextDocumentParseError {
+    fn from(e: AddrParseError) -> Self {
+        TextDocumentParseError::IpAddrError(e)
+    }
+}
+
+impl From<PestError> for TextDocumentParseError {
+    fn from(e: PestError) -> Self {
+        TextDocumentParseError::PestError(e)
+    }
+}
+
+impl<T: pest::RuleType> From<pest::error::Error<T>> for TextDocumentParseError {
+    fn from(e: pest::error::Error<T>) -> Self {
+        TextDocumentParseError::PestError(e.into())
+    }
+}
diff --git a/lib/dubp/common-doc/src/traits.rs b/lib/dubp/common-doc/src/traits.rs
new file mode 100644
index 0000000000000000000000000000000000000000..1a0c46b4e7f8de33d7ab153528300e68f3109de6
--- /dev/null
+++ b/lib/dubp/common-doc/src/traits.rs
@@ -0,0 +1,164 @@
+//  Copyright (C) 2017-2019  The AXIOM TEAM Association.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+//! Define DUBP Documents Traits.
+
+pub mod text;
+
+use crate::blockstamp::Blockstamp;
+use crate::errors::DocumentSigsErr;
+use dup_crypto::keys::*;
+use serde::Serialize;
+use std::collections::HashMap;
+use std::fmt::Debug;
+
+/// trait providing commun methods for any documents of any protocol version.
+///
+/// # Design choice
+///
+/// Allow only ed25519 for protocol 10 and many differents
+/// schemes for protocol 11 through a proxy type.
+pub trait Document: Debug + Clone + PartialEq + Eq {
+    /// Type of the `PublicKey` used by the document.
+    type PublicKey: PublicKey;
+
+    /// Get document as bytes for signature verification.
+    fn as_bytes(&self) -> &[u8];
+
+    /// Get document blockstamp
+    fn blockstamp(&self) -> Blockstamp;
+
+    /// Get document currency name.
+    fn currency(&self) -> &str;
+
+    /// Iterate over document issuers.
+    fn issuers(&self) -> &Vec<Self::PublicKey>;
+
+    /// Some documents do not directly store the sequence of bytes that will be signed but generate
+    // it on request, so these types of documents cannot provide a reference to the signed bytes.
+    fn no_as_bytes(&self) -> bool {
+        false
+    }
+
+    /// Get document to bytes for signature verification.
+    fn to_bytes(&self) -> Vec<u8> {
+        self.as_bytes().to_vec()
+    }
+
+    /// Iterate over document signatures.
+    fn signatures(&self) -> &Vec<<Self::PublicKey as PublicKey>::Signature>;
+
+    /// Verify one signature
+    #[inline]
+    fn verify_one_signature(
+        &self,
+        public_key: &Self::PublicKey,
+        signature: &<Self::PublicKey as PublicKey>::Signature,
+    ) -> Result<(), SigError> {
+        if self.no_as_bytes() {
+            public_key.verify(&self.to_bytes(), signature)
+        } else {
+            public_key.verify(self.as_bytes(), signature)
+        }
+    }
+
+    /// Verify signatures of document content
+    fn verify_signatures(&self) -> Result<(), DocumentSigsErr> {
+        let issuers_count = self.issuers().len();
+        let signatures_count = self.signatures().len();
+
+        if issuers_count != signatures_count {
+            Err(DocumentSigsErr::IncompletePairs(
+                issuers_count,
+                signatures_count,
+            ))
+        } else {
+            let issuers = self.issuers();
+            let signatures = self.signatures();
+            let mismatches: HashMap<usize, SigError> = issuers
+                .iter()
+                .zip(signatures)
+                .enumerate()
+                .filter_map(|(i, (key, signature))| {
+                    if let Err(e) = self.verify_one_signature(key, signature) {
+                        Some((i, e))
+                    } else {
+                        None
+                    }
+                })
+                .collect();
+
+            if mismatches.is_empty() {
+                Ok(())
+            } else {
+                Err(DocumentSigsErr::Invalid(mismatches))
+            }
+        }
+    }
+
+    /// Get document version.
+    fn version(&self) -> u16;
+}
+
+/// Trait helper for building new documents.
+pub trait DocumentBuilder {
+    /// Type of the builded document.
+    type Document: Document;
+
+    /// Type of the private keys signing the documents.
+    type PrivateKey: PrivateKey<
+        Signature = <<Self::Document as Document>::PublicKey as PublicKey>::Signature,
+    >;
+
+    /// Build a document with provided signatures.
+    fn build_with_signature(
+        &self,
+        signatures: Vec<<<Self::Document as Document>::PublicKey as PublicKey>::Signature>,
+    ) -> Self::Document;
+
+    /// Build a document and sign it with the private key.
+    fn build_and_sign(&self, private_keys: Vec<Self::PrivateKey>) -> Self::Document;
+}
+
+/// Trait for a document parser from a `S` source
+/// format to a `D` document. Will return the
+/// parsed document or an `E` error.
+pub trait DocumentParser<S, D, E> {
+    /// Parse a source and return a document or an error.
+    fn parse(source: S) -> Result<D, E>;
+}
+
+/// Stringify a document
+pub trait ToStringObject {
+    /// Generated string object
+    type StringObject: Serialize;
+
+    /// Transforms object fields into string
+    fn to_string_object(&self) -> Self::StringObject;
+}
+
+/// Jsonify a document
+pub trait ToJsonObject: ToStringObject {
+    /// Convert to JSON String
+    fn to_json_string(&self) -> Result<String, serde_json::Error> {
+        Ok(serde_json::to_string(&self.to_string_object())?)
+    }
+    /// Convert to JSON String pretty
+    fn to_json_string_pretty(&self) -> Result<String, serde_json::Error> {
+        Ok(serde_json::to_string_pretty(&self.to_string_object())?)
+    }
+}
+
+impl<T: ToStringObject> ToJsonObject for T {}
diff --git a/lib/dubp/documents/src/text_document_traits.rs b/lib/dubp/common-doc/src/traits/text.rs
similarity index 97%
rename from lib/dubp/documents/src/text_document_traits.rs
rename to lib/dubp/common-doc/src/traits/text.rs
index 4052968082a5d0a7595f64484f159928b5221fc6..e3c721e139702e30712fbba92e2d8955ecb12803 100644
--- a/lib/dubp/documents/src/text_document_traits.rs
+++ b/lib/dubp/common-doc/src/traits/text.rs
@@ -15,10 +15,11 @@
 
 //! Define the Text Document Traits.
 
+use super::{Document, DocumentBuilder};
 use crate::*;
 use dup_crypto::keys::*;
 
-#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
+#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
 /// Contains a document in full or compact format
 pub enum TextDocumentFormat<D: TextDocument> {
     /// Complete format (Allows to check the validity of the signature)
@@ -56,7 +57,7 @@ impl<D: TextDocument> CompactTextDocument for TextDocumentFormat<D> {
     }
 }
 
-/// Trait for a V10 document.
+/// Trait for a text document.
 pub trait TextDocument: Document<PublicKey = PubKey> {
     /// Type of associated compact document.
     type CompactTextDocument_: CompactTextDocument;
diff --git a/lib/dubp/currency-params/Cargo.toml b/lib/dubp/currency-params/Cargo.toml
index a0027c9fdb720a23be7d24fe1c544685e48edd68..38c5e0975d085b9ba9bfce8e493fcf381ed27bfd 100644
--- a/lib/dubp/currency-params/Cargo.toml
+++ b/lib/dubp/currency-params/Cargo.toml
@@ -13,6 +13,7 @@ path = "src/lib.rs"
 
 [dependencies]
 bincode = "1.0.1"
+dubp-common-doc = { path = "../common-doc" } #, version = "0.1.0" }
 durs-common-tools = { path = "../../tools/common-tools", version = "0.2.0" }
 failure = "0.1.5"
 serde = { version = "1.0.*", features = ["derive"] }
diff --git a/lib/dubp/currency-params/src/lib.rs b/lib/dubp/currency-params/src/lib.rs
index 258fb7f06c8699622cd7f62ab84fad3fd2099912..1eeb05b0692d6f429a1e7cf3ae0dbfa3ec7abdd9 100644
--- a/lib/dubp/currency-params/src/lib.rs
+++ b/lib/dubp/currency-params/src/lib.rs
@@ -27,30 +27,12 @@
 )]
 
 pub mod constants;
-pub mod currencies_codes;
 pub mod db;
 pub mod genesis_block_params;
 
 use crate::constants::*;
+pub use dubp_common_doc::CurrencyName;
 use genesis_block_params::v10::BlockV10Parameters;
-use serde::{Deserialize, Serialize};
-use std::fmt::{Display, Error, Formatter};
-
-/// Currency name
-#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize, Hash)]
-pub struct CurrencyName(pub String);
-
-impl Display for CurrencyName {
-    fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
-        write!(f, "{}", self.0)
-    }
-}
-
-impl From<&str> for CurrencyName {
-    fn from(s: &str) -> Self {
-        CurrencyName(s.to_owned())
-    }
-}
 
 #[derive(Debug, Copy, Clone)]
 /// Currency parameters
diff --git a/lib/dubp/documents/Cargo.toml b/lib/dubp/documents/Cargo.toml
index 11d05423dbb4d051308b35939b5f486d9632c98a..2742315fd6918e0698f0f52263cf7474f24ed520 100644
--- a/lib/dubp/documents/Cargo.toml
+++ b/lib/dubp/documents/Cargo.toml
@@ -13,9 +13,10 @@ edition = "2018"
 path = "src/lib.rs"
 
 [dependencies]
-durs-common-tools = { path = "../../tools/common-tools", version = "0.2.0" }
-dup-crypto = { path = "../../crypto", version = "0.7.0" }
+dubp-common-doc = { path = "../common-doc"} #, version = "0.1.0" }
 dubp-currency-params = { path = "../currency-params", version = "0.2.0" }
+dup-crypto = { path = "../../crypto", version = "0.7.0" }
+durs-common-tools = { path = "../../tools/common-tools", version = "0.2.0" }
 failure = "0.1.5"
 json-pest-parser = { path = "../../tools/json-pest-parser", version = "0.2.0" }
 pest = "2.1.0"
diff --git a/lib/dubp/documents/src/documents/block.rs b/lib/dubp/documents/src/documents/block.rs
index 73f732f285d25aa320609cba5c05f45aaa5a04b2..4bb62449c890708b2659a90568c802f3a9c6a40b 100644
--- a/lib/dubp/documents/src/documents/block.rs
+++ b/lib/dubp/documents/src/documents/block.rs
@@ -17,13 +17,14 @@
 
 pub mod v10;
 
-pub use v10::{BlockDocumentV10, BlockDocumentV10Stringified};
-
-use crate::blockstamp::Blockstamp;
-use crate::{BlockHash, BlockNumber, Document, ToStringObject};
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::traits::{Document, ToStringObject};
+use dubp_common_doc::{BlockHash, BlockNumber};
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::{PrivKey, PubKey, PublicKey};
 
+pub use v10::{BlockDocumentV10, BlockDocumentV10Stringified};
+
 /// Wrap a Block document.
 ///
 /// Must be created by parsing a text document or using a builder.
diff --git a/lib/dubp/documents/src/documents/block/v10.rs b/lib/dubp/documents/src/documents/block/v10.rs
index 2a30f30292659513bd66a30b2a535ab17862b245..73832fce71503cceee8392235f7d935718f5337a 100644
--- a/lib/dubp/documents/src/documents/block/v10.rs
+++ b/lib/dubp/documents/src/documents/block/v10.rs
@@ -15,16 +15,7 @@
 
 //! Wrappers around Block document V10.
 
-use dubp_currency_params::genesis_block_params::v10::BlockV10Parameters;
-use dubp_currency_params::CurrencyName;
-use dup_crypto::hashs::Hash;
-use dup_crypto::keys::*;
-use durs_common_tools::fatal_error;
-use std::ops::Deref;
-use unwrap::unwrap;
-
 use super::{BlockDocumentTrait, VerifyBlockHashError};
-use crate::blockstamp::Blockstamp;
 use crate::documents::certification::v10::CompactCertificationDocumentV10Stringified;
 use crate::documents::identity::IdentityDocumentV10;
 use crate::documents::membership::v10::{MembershipDocumentV10, MembershipDocumentV10Stringified};
@@ -32,7 +23,17 @@ use crate::documents::revocation::v10::CompactRevocationDocumentV10Stringified;
 use crate::documents::revocation::RevocationDocumentV10;
 use crate::documents::transaction::TransactionDocument;
 use crate::documents::*;
-use crate::text_document_traits::*;
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::traits::text::*;
+use dubp_common_doc::traits::{Document, ToStringObject};
+use dubp_common_doc::{BlockHash, BlockNumber};
+use dubp_currency_params::genesis_block_params::v10::BlockV10Parameters;
+use dubp_currency_params::CurrencyName;
+use dup_crypto::hashs::Hash;
+use dup_crypto::keys::*;
+use durs_common_tools::fatal_error;
+use std::ops::Deref;
+use unwrap::unwrap;
 
 /// Store a transaction document or just its hash.
 #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
@@ -622,7 +623,7 @@ mod tests {
     use super::certification::CertificationDocumentParser;
     use super::transaction::TransactionDocumentParser;
     use super::*;
-    use crate::Document;
+    use dubp_common_doc::traits::Document;
 
     #[test]
     fn generate_and_verify_empty_block() {
diff --git a/lib/dubp/documents/src/documents/certification.rs b/lib/dubp/documents/src/documents/certification.rs
index e50e3ffe55b5ca5cc371db75ac9bb9c975ae0659..7b4afc1f9172ad3e7948cfac57706086e021286e 100644
--- a/lib/dubp/documents/src/documents/certification.rs
+++ b/lib/dubp/documents/src/documents/certification.rs
@@ -17,17 +17,18 @@
 
 pub mod v10;
 
-pub use v10::{
-    CertificationDocumentV10, CertificationDocumentV10Stringified, CompactCertificationDocumentV10,
-};
-
-use crate::blockstamp::Blockstamp;
 use crate::documents::*;
-
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::parser::{DocumentsParser, TextDocumentParseError, TextDocumentParser};
+use dubp_common_doc::traits::{Document, ToStringObject};
 use dup_crypto::keys::*;
 use durs_common_tools::fatal_error;
 use pest::Parser;
 
+pub use v10::{
+    CertificationDocumentV10, CertificationDocumentV10Stringified, CompactCertificationDocumentV10,
+};
+
 /// Wrap an Certification document.
 ///
 /// Must be created by parsing a text document or using a builder.
diff --git a/lib/dubp/documents/src/documents/certification/v10.rs b/lib/dubp/documents/src/documents/certification/v10.rs
index 20740f89a50f4f6c68dedf9dd0e3f48f3ed4b1e5..d125639d83e9fc8ba5c5eca027be3addb763fbc8 100644
--- a/lib/dubp/documents/src/documents/certification/v10.rs
+++ b/lib/dubp/documents/src/documents/certification/v10.rs
@@ -15,13 +15,16 @@
 
 //! Wrappers around Certification documents V10.
 
+use crate::documents::*;
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::parser::TextDocumentParseError;
+use dubp_common_doc::traits::text::*;
+use dubp_common_doc::traits::{Document, DocumentBuilder, ToStringObject};
+use dubp_common_doc::{BlockHash, BlockNumber};
+use dup_crypto::hashs::Hash;
 use dup_crypto::keys::*;
 use durs_common_tools::fatal_error;
 
-use crate::blockstamp::Blockstamp;
-use crate::documents::*;
-use crate::text_document_traits::*;
-
 #[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
 /// Wrap an Compact Revocation document (in block content)
 pub struct CompactCertificationDocumentV10 {
diff --git a/lib/dubp/documents/src/documents/identity.rs b/lib/dubp/documents/src/documents/identity.rs
index 032c0a00f0daacabef592945adff05a9f5dbc640..1544481e1c7efad8f3fe1d678bfc4ce72a559c29 100644
--- a/lib/dubp/documents/src/documents/identity.rs
+++ b/lib/dubp/documents/src/documents/identity.rs
@@ -17,9 +17,13 @@
 
 pub mod v10;
 
-pub use v10::{IdentityDocumentV10, IdentityDocumentV10Stringified};
-
 use crate::documents::*;
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::parser::{DocumentsParser, TextDocumentParseError, TextDocumentParser};
+use dubp_common_doc::traits::{Document, ToStringObject};
+use dup_crypto::keys::*;
+
+pub use v10::{IdentityDocumentV10, IdentityDocumentV10Stringified};
 
 /// Identity document
 #[derive(Clone, Debug, Deserialize, Hash, Serialize, PartialEq, Eq)]
diff --git a/lib/dubp/documents/src/documents/identity/v10.rs b/lib/dubp/documents/src/documents/identity/v10.rs
index f2f8fc3cbab965588fdbb3c27427abef7b56f0a2..b26c078fbc8c97ee1897eac8e038271368ccb428 100644
--- a/lib/dubp/documents/src/documents/identity/v10.rs
+++ b/lib/dubp/documents/src/documents/identity/v10.rs
@@ -18,8 +18,13 @@
 use durs_common_tools::fatal_error;
 
 use crate::documents::*;
-use crate::text_document_traits::*;
-use crate::Blockstamp;
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::parser::TextDocumentParseError;
+use dubp_common_doc::traits::text::*;
+use dubp_common_doc::traits::{Document, DocumentBuilder, ToStringObject};
+use dubp_common_doc::{BlockHash, BlockNumber};
+use dup_crypto::hashs::Hash;
+use dup_crypto::keys::*;
 
 /// Wrap an Identity document.
 ///
@@ -262,7 +267,7 @@ Timestamp: {blockstamp}
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Document;
+    use dubp_common_doc::traits::Document;
     use dup_crypto::keys::{PrivateKey, PublicKey, Signature};
 
     #[test]
diff --git a/lib/dubp/documents/src/documents/membership.rs b/lib/dubp/documents/src/documents/membership.rs
index cf58aa8ebc67fc977fd7a5a8068f7f52cb803167..515d7f79229ef6f15c798db6832cbd32a67eaa4b 100644
--- a/lib/dubp/documents/src/documents/membership.rs
+++ b/lib/dubp/documents/src/documents/membership.rs
@@ -17,10 +17,14 @@
 
 pub mod v10;
 
-pub use v10::{MembershipDocumentV10, MembershipDocumentV10Stringified};
-
 use crate::documents::*;
-use crate::text_document_traits::{CompactTextDocument, TextDocument};
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::parser::{DocumentsParser, TextDocumentParseError, TextDocumentParser};
+use dubp_common_doc::traits::text::*;
+use dubp_common_doc::traits::{Document, ToStringObject};
+use dup_crypto::keys::*;
+
+pub use v10::{MembershipDocumentV10, MembershipDocumentV10Stringified};
 
 /// Wrap an Membership document.
 ///
diff --git a/lib/dubp/documents/src/documents/membership/v10.rs b/lib/dubp/documents/src/documents/membership/v10.rs
index bcf11786daa9491225cfd3496f79e2e233a16a73..25ecc0b0f8046c73c60929e73de43dfc7a86957b 100644
--- a/lib/dubp/documents/src/documents/membership/v10.rs
+++ b/lib/dubp/documents/src/documents/membership/v10.rs
@@ -15,13 +15,16 @@
 
 //! Wrappers around Membership documents v10.
 
+use crate::documents::*;
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::parser::TextDocumentParseError;
+use dubp_common_doc::traits::text::*;
+use dubp_common_doc::traits::{Document, DocumentBuilder, ToStringObject};
+use dubp_common_doc::{BlockHash, BlockNumber};
+use dup_crypto::hashs::Hash;
 use dup_crypto::keys::*;
 use durs_common_tools::fatal_error;
 
-use crate::blockstamp::Blockstamp;
-use crate::documents::*;
-use crate::text_document_traits::*;
-
 /// Type of a Membership.
 #[derive(Debug, Deserialize, Clone, Copy, Hash, Serialize, PartialEq, Eq)]
 pub enum MembershipType {
diff --git a/lib/dubp/documents/src/documents/mod.rs b/lib/dubp/documents/src/documents/mod.rs
index 2b5c96b6f8d123ff81d3828bb1084eeec7a58a36..16d48f81cd80e1a8ead19171028e559b5f2bd624 100644
--- a/lib/dubp/documents/src/documents/mod.rs
+++ b/lib/dubp/documents/src/documents/mod.rs
@@ -21,9 +21,8 @@ use crate::documents::identity::*;
 use crate::documents::membership::*;
 use crate::documents::revocation::*;
 use crate::documents::transaction::*;
-use crate::Rule;
-use crate::*;
-
+use dubp_common_doc::parser::{DocumentsParser, Rule, TextDocumentParseError, TextDocumentParser};
+use dubp_common_doc::traits::ToStringObject;
 use durs_common_tools::fatal_error;
 use pest::iterators::Pair;
 use pest::Parser;
@@ -194,8 +193,9 @@ impl UserDocumentDUBP {
 
 #[cfg(test)]
 mod tests {
-    use crate::blockstamp::Blockstamp;
-    use crate::*;
+    use dubp_common_doc::parser::TextDocumentParser;
+    use dubp_common_doc::traits::Document;
+    use dubp_common_doc::Blockstamp;
 
     use super::certification::CertificationDocumentParser;
     use super::identity::IdentityDocumentParser;
diff --git a/lib/dubp/documents/src/documents/revocation.rs b/lib/dubp/documents/src/documents/revocation.rs
index 992bce712c4c52685280024afe168d3a6c6be8ac..23b5ec49dc79691a2aeceb70f5cf1a30b5ba449f 100644
--- a/lib/dubp/documents/src/documents/revocation.rs
+++ b/lib/dubp/documents/src/documents/revocation.rs
@@ -17,17 +17,18 @@
 
 pub mod v10;
 
+use crate::documents::*;
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::parser::{DocumentsParser, TextDocumentParseError, TextDocumentParser};
+use dubp_common_doc::traits::{Document, ToStringObject};
+use dup_crypto::keys::*;
+use pest::Parser;
+
 pub use v10::{
     CompactRevocationDocumentV10, CompactRevocationDocumentV10Stringified, RevocationDocumentV10,
     RevocationDocumentV10Stringified,
 };
 
-use crate::blockstamp::Blockstamp;
-use crate::documents::*;
-
-use dup_crypto::keys::*;
-use pest::Parser;
-
 /// Wrap an Revocation document.
 ///
 /// Must be created by parsing a text document or using a builder.
diff --git a/lib/dubp/documents/src/documents/revocation/v10.rs b/lib/dubp/documents/src/documents/revocation/v10.rs
index b23508474e3eb6c5cce813b5dab1de89cdf4f9b9..d58118e81a0e8905839a77af8c2a6706ad37c9d9 100644
--- a/lib/dubp/documents/src/documents/revocation/v10.rs
+++ b/lib/dubp/documents/src/documents/revocation/v10.rs
@@ -32,9 +32,13 @@
 
 use dup_crypto::keys::*;
 
-use crate::blockstamp::Blockstamp;
 use crate::documents::*;
-use crate::text_document_traits::*;
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::parser::TextDocumentParseError;
+use dubp_common_doc::traits::text::*;
+use dubp_common_doc::traits::{Document, DocumentBuilder, ToStringObject};
+use dubp_common_doc::{BlockHash, BlockNumber};
+use dup_crypto::hashs::Hash;
 
 #[derive(Debug, Copy, Clone, Deserialize, Serialize, PartialEq, Eq)]
 /// Wrap an Compact Revocation document (in block content)
diff --git a/lib/dubp/documents/src/documents/transaction.rs b/lib/dubp/documents/src/documents/transaction.rs
index 162ab058700bb159347b2ee747f30a1e2c051a60..48c9720a77c89beacfa92abad0282f1c5d2b375e 100644
--- a/lib/dubp/documents/src/documents/transaction.rs
+++ b/lib/dubp/documents/src/documents/transaction.rs
@@ -15,7 +15,14 @@
 
 //! Wrappers around Transaction documents.
 
+use crate::documents::*;
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::parser::{DocumentsParser, TextDocumentParseError, TextDocumentParser};
+use dubp_common_doc::traits::text::*;
+use dubp_common_doc::traits::{Document, DocumentBuilder, ToStringObject};
+use dubp_common_doc::{BlockHash, BlockNumber};
 use dup_crypto::hashs::*;
+use dup_crypto::keys::*;
 use durs_common_tools::fatal_error;
 use pest::iterators::Pair;
 use pest::iterators::Pairs;
@@ -24,10 +31,6 @@ use std::ops::{Add, Deref, Sub};
 use std::str::FromStr;
 use unwrap::unwrap;
 
-use crate::blockstamp::Blockstamp;
-use crate::documents::*;
-use crate::text_document_traits::*;
-
 /// Wrap a transaction amount
 #[derive(Debug, Copy, Clone, Eq, Ord, PartialEq, PartialOrd, Deserialize, Hash, Serialize)]
 pub struct TxAmount(pub isize);
@@ -944,7 +947,7 @@ impl TextDocumentParser<Rule> for TransactionDocumentParser {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::Document;
+    use dubp_common_doc::traits::Document;
 
     #[test]
     fn generate_real_document() {
diff --git a/lib/dubp/documents/src/lib.rs b/lib/dubp/documents/src/lib.rs
index 18a5b7d2aad2abead4f4bc8c725e5ee665574b57..56608e3ed66f5164ccd2b28325c88f4429565e1f 100644
--- a/lib/dubp/documents/src/lib.rs
+++ b/lib/dubp/documents/src/lib.rs
@@ -29,286 +29,19 @@
 extern crate log;
 #[macro_use]
 extern crate failure;
-#[macro_use]
-extern crate pest_derive;
 #[cfg(test)]
 #[macro_use]
 extern crate pretty_assertions;
 #[macro_use]
 extern crate serde_derive;
 
-pub mod blockstamp;
 pub mod documents;
 pub mod parsers;
-pub mod text_document_traits;
-
-use dup_crypto::hashs::Hash;
-use dup_crypto::keys::*;
-use pest::iterators::Pair;
-use pest::RuleType;
-use serde::Serialize;
-use std::cmp::Ordering;
-use std::fmt::{Debug, Display, Error, Formatter};
-use std::net::AddrParseError;
-
-pub use crate::blockstamp::{Blockstamp, PreviousBlockstamp};
-
-#[derive(Parser)]
-#[grammar = "documents_grammar.pest"]
-/// Parser for Documents
-struct DocumentsParser;
-
-pub trait TextDocumentParser<R: RuleType> {
-    /// Type of document generated by the parser
-    type DocumentType;
-
-    /// Parse text document from raw format
-    fn parse(doc: &str) -> Result<Self::DocumentType, TextDocumentParseError>;
-    /// Parse text document from pest pairs
-    fn from_pest_pair(pairs: Pair<R>) -> Result<Self::DocumentType, TextDocumentParseError>;
-    /// Parse text document from versioned pest pairs
-    fn from_versioned_pest_pair(
-        version: u16,
-        pairs: Pair<R>,
-    ) -> Result<Self::DocumentType, TextDocumentParseError>;
-}
-
-/// Error with pest parser (grammar)
-#[derive(Debug, Clone, Eq, Fail, PartialEq)]
-#[fail(display = "Grammar error: {}", _0)]
-pub struct PestError(pub String);
-
-impl<T: pest::RuleType> From<pest::error::Error<T>> for PestError {
-    fn from(e: pest::error::Error<T>) -> Self {
-        PestError(format!("{}", e))
-    }
-}
-
-/// List of possible errors while parsing a text document.
-#[derive(Debug, Clone, Eq, Fail, PartialEq)]
-pub enum TextDocumentParseError {
-    /// The given source don't have a valid specific document format (document type).
-    #[fail(display = "TextDocumentParseError: Invalid inner format: {}", _0)]
-    InvalidInnerFormat(String),
-    /// Ip address parse error
-    #[fail(display = "TextDocumentParseError: invalid ip: {}", _0)]
-    IpAddrError(AddrParseError),
-    /// Error with pest parser
-    #[fail(display = "TextDocumentParseError: {}", _0)]
-    PestError(PestError),
-    /// Unexpected rule
-    #[fail(display = "TextDocumentParseError: Unexpected rule: '{}'", _0)]
-    UnexpectedRule(String),
-    /// Unexpected version
-    #[fail(display = "TextDocumentParseError: Unexpected version: '{}'", _0)]
-    UnexpectedVersion(String),
-    /// Unknown type
-    #[fail(display = "TextDocumentParseError: UnknownType.")]
-    UnknownType,
-}
-
-impl From<AddrParseError> for TextDocumentParseError {
-    fn from(e: AddrParseError) -> Self {
-        TextDocumentParseError::IpAddrError(e)
-    }
-}
-
-impl From<PestError> for TextDocumentParseError {
-    fn from(e: PestError) -> Self {
-        TextDocumentParseError::PestError(e)
-    }
-}
-
-impl<T: pest::RuleType> From<pest::error::Error<T>> for TextDocumentParseError {
-    fn from(e: pest::error::Error<T>) -> Self {
-        TextDocumentParseError::PestError(e.into())
-    }
-}
-
-/// A block Id.
-#[derive(Copy, Clone, Debug, Deserialize, Ord, PartialEq, PartialOrd, Eq, Hash, Serialize)]
-pub struct BlockNumber(pub u32);
-
-impl Display for BlockNumber {
-    fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
-        write!(f, "{}", self.0)
-    }
-}
-
-/// Wrapper of a block hash.
-#[derive(Copy, Clone, Default, Deserialize, Eq, Ord, PartialEq, PartialOrd, Hash, Serialize)]
-pub struct BlockHash(pub Hash);
-
-impl Display for BlockHash {
-    fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
-        write!(f, "{}", self.0.to_hex())
-    }
-}
-
-impl Debug for BlockHash {
-    fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
-        write!(f, "BlockHash({})", self)
-    }
-}
-
-/// trait providing commun methods for any documents of any protocol version.
-///
-/// # Design choice
-///
-/// Allow only ed25519 for protocol 10 and many differents
-/// schemes for protocol 11 through a proxy type.
-pub trait Document: Debug + Clone + PartialEq + Eq {
-    /// Type of the `PublicKey` used by the document.
-    type PublicKey: PublicKey;
-
-    /// Get document as bytes for signature verification.
-    fn as_bytes(&self) -> &[u8];
-
-    /// Get document blockstamp
-    fn blockstamp(&self) -> Blockstamp;
-
-    /// Get document currency name.
-    fn currency(&self) -> &str;
-
-    /// Iterate over document issuers.
-    fn issuers(&self) -> &Vec<Self::PublicKey>;
-
-    /// Some documents do not directly store the sequence of bytes that will be signed but generate
-    // it on request, so these types of documents cannot provide a reference to the signed bytes.
-    fn no_as_bytes(&self) -> bool {
-        false
-    }
-
-    /// Get document to bytes for signature verification.
-    fn to_bytes(&self) -> Vec<u8> {
-        self.as_bytes().to_vec()
-    }
-
-    /// Iterate over document signatures.
-    fn signatures(&self) -> &Vec<<Self::PublicKey as PublicKey>::Signature>;
-
-    /// Verify one signature
-    #[inline]
-    fn verify_one_signature(
-        &self,
-        public_key: &Self::PublicKey,
-        signature: &<Self::PublicKey as PublicKey>::Signature,
-    ) -> Result<(), SigError> {
-        if self.no_as_bytes() {
-            public_key.verify(&self.to_bytes(), signature)
-        } else {
-            public_key.verify(self.as_bytes(), signature)
-        }
-    }
-
-    /// Verify signatures of document content (as text format)
-    fn verify_signatures(&self) -> Result<(), DocumentSigsErr> {
-        let issuers_count = self.issuers().len();
-        let signatures_count = self.signatures().len();
-
-        if issuers_count != signatures_count {
-            Err(DocumentSigsErr::IncompletePairs(
-                issuers_count,
-                signatures_count,
-            ))
-        } else {
-            let issuers = self.issuers();
-            let signatures = self.signatures();
-            let mismatches: HashMap<usize, SigError> = issuers
-                .iter()
-                .zip(signatures)
-                .enumerate()
-                .filter_map(|(i, (key, signature))| {
-                    if let Err(e) = self.verify_one_signature(key, signature) {
-                        Some((i, e))
-                    } else {
-                        None
-                    }
-                })
-                .collect();
-
-            if mismatches.is_empty() {
-                Ok(())
-            } else {
-                Err(DocumentSigsErr::Invalid(mismatches))
-            }
-        }
-    }
-
-    /// Get document version.
-    fn version(&self) -> u16;
-}
-
-use std::collections::HashMap;
-
-// todo: à mon avis faudrait pas que y ait de Valid() dans cette enum
-// et du coup faudrait que les fonctions qui renvoient un DocumentSigsErr renvoie Result<(), DocumentSigsErr>
-// du coup SignatureError dans la local verif sert plus à rien.
-
-/// List of possible errors for document signatures verification.
-#[derive(Debug, Eq, PartialEq)]
-pub enum DocumentSigsErr {
-    /// Not same amount of issuers and signatures.
-    /// (issuers count, signatures count)
-    IncompletePairs(usize, usize),
-    /// Signatures don't match.
-    /// List of mismatching pairs indexes.
-    Invalid(HashMap<usize, SigError>),
-}
-
-/// Trait helper for building new documents.
-pub trait DocumentBuilder {
-    /// Type of the builded document.
-    type Document: Document;
-
-    /// Type of the private keys signing the documents.
-    type PrivateKey: PrivateKey<
-        Signature = <<Self::Document as Document>::PublicKey as PublicKey>::Signature,
-    >;
-
-    /// Build a document with provided signatures.
-    fn build_with_signature(
-        &self,
-        signatures: Vec<<<Self::Document as Document>::PublicKey as PublicKey>::Signature>,
-    ) -> Self::Document;
-
-    /// Build a document and sign it with the private key.
-    fn build_and_sign(&self, private_keys: Vec<Self::PrivateKey>) -> Self::Document;
-}
-
-/// Trait for a document parser from a `S` source
-/// format to a `D` document. Will return the
-/// parsed document or an `E` error.
-pub trait DocumentParser<S, D, E> {
-    /// Parse a source and return a document or an error.
-    fn parse(source: S) -> Result<D, E>;
-}
-
-/// Stringify a document
-pub trait ToStringObject {
-    type StringObject: Serialize;
-    /// Transforms object fields into string
-    fn to_string_object(&self) -> Self::StringObject;
-}
-
-/// Jsonify a document
-pub trait ToJsonObject: ToStringObject {
-    /// Convert to JSON String
-    fn to_json_string(&self) -> Result<String, serde_json::Error> {
-        Ok(serde_json::to_string(&self.to_string_object())?)
-    }
-    /// Convert to JSON String pretty
-    fn to_json_string_pretty(&self) -> Result<String, serde_json::Error> {
-        Ok(serde_json::to_string_pretty(&self.to_string_object())?)
-    }
-}
-
-impl<T: ToStringObject> ToJsonObject for T {}
 
 #[cfg(test)]
 mod tests {
-    use super::*;
     use crate::documents::UserDocumentDUBP;
+    use dubp_common_doc::parser::TextDocumentParser;
 
     #[test]
     fn parse_dubp_document() {
diff --git a/lib/dubp/documents/src/parsers/blocks.rs b/lib/dubp/documents/src/parsers/blocks.rs
index 5070a5f3ef570ff83f983f102e4ed290e5ef587c..c7d7f168d760b7f45df11bf5eeaab1b1481f2562 100644
--- a/lib/dubp/documents/src/parsers/blocks.rs
+++ b/lib/dubp/documents/src/parsers/blocks.rs
@@ -17,6 +17,7 @@ use crate::documents::block::{v10::TxDocOrTxHash, BlockDocument, BlockDocumentV1
 use crate::documents::membership::v10::MembershipType;
 use crate::parsers::{serde_json_value_to_pest_json_value, DefaultHasher};
 use crate::*;
+use dubp_common_doc::{BlockHash, BlockNumber};
 use dubp_currency_params::genesis_block_params::v10::BlockV10Parameters;
 use dubp_currency_params::CurrencyName;
 use dup_crypto::bases::BaseConvertionError;
diff --git a/lib/dubp/documents/src/parsers/certifications.rs b/lib/dubp/documents/src/parsers/certifications.rs
index 6cafaf7aa07343eea18e2a0027697bd431a8806f..424e8fecd55cb3a19e5a5616685a2d8f7d7b3a4d 100644
--- a/lib/dubp/documents/src/parsers/certifications.rs
+++ b/lib/dubp/documents/src/parsers/certifications.rs
@@ -14,8 +14,8 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::documents::certification::{CertificationDocumentV10, CompactCertificationDocumentV10};
-use crate::text_document_traits::TextDocumentFormat;
-use crate::BlockNumber;
+use dubp_common_doc::traits::text::TextDocumentFormat;
+use dubp_common_doc::BlockNumber;
 use dup_crypto::keys::*;
 
 /// Parse array of certification json documents into vector of `CompactCertificationDocument`
diff --git a/lib/dubp/documents/src/parsers/identities.rs b/lib/dubp/documents/src/parsers/identities.rs
index 28106cdacfe53699ec0ceabcf6d52c202efaa914..1955290b1c004b8f520845c411e5acce92eed997 100644
--- a/lib/dubp/documents/src/parsers/identities.rs
+++ b/lib/dubp/documents/src/parsers/identities.rs
@@ -14,8 +14,8 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::documents::identity::v10::*;
-use crate::Blockstamp;
-use crate::DocumentBuilder;
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::traits::DocumentBuilder;
 use dup_crypto::keys::*;
 
 #[derive(Debug, Fail)]
diff --git a/lib/dubp/documents/src/parsers/memberships.rs b/lib/dubp/documents/src/parsers/memberships.rs
index 9540bfe5217ed0c329101adbb05c870308963ee0..676620560db5545d9144331a77895f5aede9d441 100644
--- a/lib/dubp/documents/src/parsers/memberships.rs
+++ b/lib/dubp/documents/src/parsers/memberships.rs
@@ -14,8 +14,8 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::documents::membership::v10::*;
-use crate::Blockstamp;
-use crate::DocumentBuilder;
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::traits::DocumentBuilder;
 use dup_crypto::keys::*;
 use failure::Error;
 
diff --git a/lib/dubp/documents/src/parsers/mod.rs b/lib/dubp/documents/src/parsers/mod.rs
index 8b75c40259a756d22d15751c8ab967dea0556352..c9b80fb0647df0a9e98a9af5e6cc0d45cdc63287 100644
--- a/lib/dubp/documents/src/parsers/mod.rs
+++ b/lib/dubp/documents/src/parsers/mod.rs
@@ -80,9 +80,10 @@ fn serde_json_value_to_pest_json_value(
 
 #[cfg(test)]
 mod tests {
-    use crate::blockstamp::Blockstamp;
     use crate::documents::transaction::*;
-    use crate::*;
+    use dubp_common_doc::traits::DocumentBuilder;
+    use dubp_common_doc::Blockstamp;
+    use dup_crypto::keys::*;
     use std::str::FromStr;
 
     pub fn first_g1_tx_doc() -> TransactionDocument {
diff --git a/lib/dubp/documents/src/parsers/revoked.rs b/lib/dubp/documents/src/parsers/revoked.rs
index edc82aa0b0400e62064fb4e2fcc70e9a841db961..72d6b04bc8e2b4baaf2b7a55317506734716db05 100644
--- a/lib/dubp/documents/src/parsers/revoked.rs
+++ b/lib/dubp/documents/src/parsers/revoked.rs
@@ -14,7 +14,7 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::documents::revocation::{CompactRevocationDocumentV10, RevocationDocumentV10};
-use crate::text_document_traits::TextDocumentFormat;
+use dubp_common_doc::traits::text::TextDocumentFormat;
 use dup_crypto::keys::*;
 
 /// Parse array of revocations json documents into vector of `CompactRevocationDocumentV10`
diff --git a/lib/dubp/documents/src/parsers/transactions.rs b/lib/dubp/documents/src/parsers/transactions.rs
index bdda03b044167163a02a2e19cb3704774d8e6d1c..ba282dd6e4539501a4467296814f10b8e93d88de 100644
--- a/lib/dubp/documents/src/parsers/transactions.rs
+++ b/lib/dubp/documents/src/parsers/transactions.rs
@@ -15,8 +15,10 @@
 
 use crate::documents::transaction::*;
 use crate::parsers::DefaultHasher;
-use crate::TextDocumentParseError;
 use crate::*;
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::parser::TextDocumentParseError;
+use dubp_common_doc::traits::DocumentBuilder;
 use dup_crypto::bases::BaseConvertionError;
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::*;
diff --git a/lib/dunp/network-documents/Cargo.toml b/lib/dunp/network-documents/Cargo.toml
index 755dd902f36fa6bb5a6492d02099bc93d1741f1b..1c272107c4df8211bbb8d4682853891226e80091 100644
--- a/lib/dunp/network-documents/Cargo.toml
+++ b/lib/dunp/network-documents/Cargo.toml
@@ -13,10 +13,11 @@ path = "src/lib.rs"
 
 [dependencies]
 base58 = "0.1.*"
-durs-common-tools = { path = "../../tools/common-tools" }
-dup-crypto = { path = "../../crypto" }
+dubp-common-doc = { path = "../../dubp/common-doc" } #, version = "0.1.0" }
 dubp-currency-params = { path = "../../dubp/currency-params" }
 dubp-documents= { path = "../../dubp/documents" }
+dup-crypto = { path = "../../crypto" }
+durs-common-tools = { path = "../../tools/common-tools" }
 failure = "0.1.5"
 hex = "0.3.*"
 log = "0.4.*"
diff --git a/lib/dunp/network-documents/src/lib.rs b/lib/dunp/network-documents/src/lib.rs
index a1435843359893eed6c5e0f794af5a348e8b5379..bc40961698fc78d3e748e5b1bbb273891daa15e4 100644
--- a/lib/dunp/network-documents/src/lib.rs
+++ b/lib/dunp/network-documents/src/lib.rs
@@ -45,7 +45,7 @@ use crate::network_head::NetworkHead;
 use crate::network_head_v3::NetworkHeadV3;
 use crate::network_peer::PeerCard;
 use crate::network_peer::PeerCardV11;
-use dubp_documents::{TextDocumentParseError, TextDocumentParser};
+use dubp_common_doc::parser::{TextDocumentParseError, TextDocumentParser};
 use dup_crypto::hashs::*;
 use dup_crypto::keys::*;
 use durs_common_tools::fatal_error;
diff --git a/lib/dunp/network-documents/src/network_head.rs b/lib/dunp/network-documents/src/network_head.rs
index 659e919e9e46e72a9f4ce2d775d217aab3649261..130920e401c2474491bc16b9bc6762f6523b44c0 100644
--- a/lib/dunp/network-documents/src/network_head.rs
+++ b/lib/dunp/network-documents/src/network_head.rs
@@ -18,7 +18,7 @@
 use crate::network_head_v2::*;
 use crate::network_head_v3::*;
 use crate::{NodeFullId, NodeId};
-use dubp_documents::blockstamp::*;
+use dubp_common_doc::blockstamp::*;
 use dup_crypto::bases::BaseConvertionError;
 use dup_crypto::keys::*;
 use durs_common_tools::fatal_error;
diff --git a/lib/dunp/network-documents/src/network_head_v2.rs b/lib/dunp/network-documents/src/network_head_v2.rs
index 348fac670d09c45fcbe73e0ac0cb5d6343f188e4..3cfcdd738222f9b8c4497b5d5ce67c31c9c07014 100644
--- a/lib/dunp/network-documents/src/network_head_v2.rs
+++ b/lib/dunp/network-documents/src/network_head_v2.rs
@@ -16,7 +16,7 @@
 //! Module defining the format of network heads v2 and how to handle them.
 
 use crate::NodeId;
-use dubp_documents::blockstamp::*;
+use dubp_common_doc::blockstamp::*;
 use dup_crypto::bases::BaseConvertionError;
 use dup_crypto::keys::*;
 use durs_common_tools::fatal_error;
diff --git a/lib/dunp/network-documents/src/network_head_v3.rs b/lib/dunp/network-documents/src/network_head_v3.rs
index 17d7ab26e26ad003f13566cf1a42ca64570f941c..859be116998715978ea6490b23f80d34efa1e5e7 100644
--- a/lib/dunp/network-documents/src/network_head_v3.rs
+++ b/lib/dunp/network-documents/src/network_head_v3.rs
@@ -18,9 +18,10 @@
 use crate::network_head::NetworkHead;
 use crate::*;
 use base58::ToBase58;
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::traits::ToStringObject;
+use dubp_common_doc::{BlockHash, BlockNumber};
 use dubp_currency_params::CurrencyName;
-use dubp_documents::blockstamp::Blockstamp;
-use dubp_documents::{BlockHash, BlockNumber, ToStringObject};
 use dup_crypto::keys::text_signable::TextSignable;
 use dup_crypto::keys::*;
 use pest::iterators::Pair;
diff --git a/lib/dunp/network-documents/src/network_peer.rs b/lib/dunp/network-documents/src/network_peer.rs
index 851495dc88a94276ed72b81c2c48191f1acef68a..6b9d63f6504e0dc3b161423b838436b8401e0c1a 100644
--- a/lib/dunp/network-documents/src/network_peer.rs
+++ b/lib/dunp/network-documents/src/network_peer.rs
@@ -18,10 +18,10 @@
 use crate::network_endpoint::*;
 use crate::*;
 use base58::ToBase58;
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::traits::ToStringObject;
+use dubp_common_doc::BlockNumber;
 use dubp_currency_params::CurrencyName;
-use dubp_documents::blockstamp::Blockstamp;
-use dubp_documents::BlockNumber;
-use dubp_documents::ToStringObject;
 use dup_crypto::keys::text_signable::TextSignable;
 use dup_crypto::keys::*;
 use pest::iterators::Pair;
diff --git a/lib/modules/blockchain/blockchain-dal/Cargo.toml b/lib/modules/blockchain/blockchain-dal/Cargo.toml
index 536a7da69ea2850895b292a364e311d4fa8a040b..f6d40bdedec0dceeab733c771838e4a0d06b1e11 100644
--- a/lib/modules/blockchain/blockchain-dal/Cargo.toml
+++ b/lib/modules/blockchain/blockchain-dal/Cargo.toml
@@ -10,6 +10,7 @@ edition = "2018"
 path = "src/lib.rs"
 
 [dependencies]
+dubp-common-doc = { path = "../../../dubp/common-doc"} #, version = "0.1.0" }
 dup-crypto = { path = "../../../crypto" }
 dubp-currency-params = { path = "../../../dubp/currency-params" }
 dubp-documents= { path = "../../../dubp/documents" }
diff --git a/lib/modules/blockchain/blockchain-dal/src/entities/block.rs b/lib/modules/blockchain/blockchain-dal/src/entities/block.rs
index f360d1cd3e98391b0e38a4cd4bec90ebd29b6059..059260fe0e11037dfcbc59824ae8f656e2e534f5 100644
--- a/lib/modules/blockchain/blockchain-dal/src/entities/block.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/entities/block.rs
@@ -14,9 +14,9 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::*;
+use dubp_common_doc::traits::Document;
+use dubp_common_doc::BlockNumber;
 use dubp_documents::documents::block::{BlockDocument, BlockDocumentTrait};
-use dubp_documents::Document;
-use dubp_documents::{BlockNumber, Blockstamp};
 use durs_wot::NodeId;
 use std::collections::HashMap;
 
diff --git a/lib/modules/blockchain/blockchain-dal/src/entities/fork_tree.rs b/lib/modules/blockchain/blockchain-dal/src/entities/fork_tree.rs
index 4a0f630315be49c513092f6b1ef81a5b52330bec..69abeffec0029df608083d0e85feec2bb63cf1d2 100644
--- a/lib/modules/blockchain/blockchain-dal/src/entities/fork_tree.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/entities/fork_tree.rs
@@ -15,7 +15,7 @@
 
 //! Describe fork tree
 
-use dubp_documents::{BlockHash, BlockNumber, Blockstamp};
+use dubp_common_doc::{BlockHash, BlockNumber, Blockstamp};
 use serde::de::{self, Deserialize, Deserializer, Visitor};
 use serde::{Serialize, Serializer};
 use std::collections::{HashMap, HashSet};
diff --git a/lib/modules/blockchain/blockchain-dal/src/entities/identity.rs b/lib/modules/blockchain/blockchain-dal/src/entities/identity.rs
index f52baa0782cb6e3aa54fcb45a8c477a8994da16e..6bc7d8f6519ed5053498636dd590f73a39354276 100644
--- a/lib/modules/blockchain/blockchain-dal/src/entities/identity.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/entities/identity.rs
@@ -13,8 +13,8 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
+use dubp_common_doc::{BlockNumber, Blockstamp};
 use dubp_documents::documents::identity::IdentityDocumentV10;
-use dubp_documents::{BlockNumber, Blockstamp};
 use durs_wot::NodeId;
 
 #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, Hash)]
diff --git a/lib/modules/blockchain/blockchain-dal/src/entities/sources.rs b/lib/modules/blockchain/blockchain-dal/src/entities/sources.rs
index c9401e0b86516ca9d0b7397c338e82f9ea2a7cf0..defd3a4331c01cef38b0c82f89670e1b4894f711 100644
--- a/lib/modules/blockchain/blockchain-dal/src/entities/sources.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/entities/sources.rs
@@ -13,8 +13,8 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
+use dubp_common_doc::BlockNumber;
 use dubp_documents::documents::transaction::*;
-use dubp_documents::BlockNumber;
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::PubKey;
 use durs_common_tools::fatal_error;
diff --git a/lib/modules/blockchain/blockchain-dal/src/filters/mod.rs b/lib/modules/blockchain/blockchain-dal/src/filters/mod.rs
index 8f60a2a436e62e100b2d3c8381c5a03f82ca8468..ff4bee88904f8c9974bb7e7d33d83c20d1e39884 100644
--- a/lib/modules/blockchain/blockchain-dal/src/filters/mod.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/filters/mod.rs
@@ -15,7 +15,7 @@
 
 pub mod identities;
 
-use dubp_documents::BlockNumber;
+use dubp_common_doc::BlockNumber;
 
 #[derive(Debug, Copy, Clone, PartialEq, Eq)]
 /// Pagination parameters
diff --git a/lib/modules/blockchain/blockchain-dal/src/lib.rs b/lib/modules/blockchain/blockchain-dal/src/lib.rs
index 7fa796ea1b51a0a9bfad1b88116909bcb2e1366e..5057cf08322e3614ca161aa27dd54ac295f6f1ff 100644
--- a/lib/modules/blockchain/blockchain-dal/src/lib.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/lib.rs
@@ -51,8 +51,8 @@ pub mod tools;
 /// Contains all write databases functions
 pub mod writers;
 
+use dubp_common_doc::{BlockNumber, Blockstamp, PreviousBlockstamp};
 use dubp_documents::documents::transaction::*;
-use dubp_documents::{BlockNumber, Blockstamp, PreviousBlockstamp};
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::*;
 use durs_common_tools::fatal_error;
diff --git a/lib/modules/blockchain/blockchain-dal/src/readers/block.rs b/lib/modules/blockchain/blockchain-dal/src/readers/block.rs
index 48bf4fbd9d7e70cf84570d2eefbb3dacea65a631..670467afb4808878d8dcf37d9db3aa9fa4234d6a 100644
--- a/lib/modules/blockchain/blockchain-dal/src/readers/block.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/readers/block.rs
@@ -14,9 +14,9 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::*;
+use dubp_common_doc::traits::Document;
+use dubp_common_doc::{BlockHash, BlockNumber, Blockstamp};
 use dubp_documents::documents::block::{BlockDocument, BlockDocumentTrait};
-use dubp_documents::Document;
-use dubp_documents::{BlockHash, BlockNumber, Blockstamp};
 use dup_crypto::keys::*;
 use std::collections::HashMap;
 use unwrap::unwrap;
diff --git a/lib/modules/blockchain/blockchain-dal/src/readers/certs.rs b/lib/modules/blockchain/blockchain-dal/src/readers/certs.rs
index ea8eaca23d0a14174fd170b62a1cdbfab29281ea..f745d953c1fd8983009bac60aaba0c52d1907e68 100644
--- a/lib/modules/blockchain/blockchain-dal/src/readers/certs.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/readers/certs.rs
@@ -14,7 +14,7 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::{BinDB, CertsExpirV10Datas, DALError};
-use dubp_documents::BlockNumber;
+use dubp_common_doc::BlockNumber;
 use durs_wot::NodeId;
 use std::collections::HashMap;
 
diff --git a/lib/modules/blockchain/blockchain-dal/src/readers/currency_params.rs b/lib/modules/blockchain/blockchain-dal/src/readers/currency_params.rs
index f061dab2af46785092c308171a7c37c90653f807..bf047f0dfbf05521244e932f8c74f9fd3edc67bf 100644
--- a/lib/modules/blockchain/blockchain-dal/src/readers/currency_params.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/readers/currency_params.rs
@@ -14,11 +14,11 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::*;
+use dubp_common_doc::traits::Document;
 use dubp_currency_params::db::write_currency_params;
 use dubp_currency_params::genesis_block_params::GenesisBlockParams;
 use dubp_currency_params::CurrencyParameters;
 use dubp_documents::documents::block::{BlockDocument, BlockDocumentTrait};
-use dubp_documents::Document;
 use unwrap::unwrap;
 
 /// Get and write currency params
diff --git a/lib/modules/blockchain/blockchain-dal/src/readers/fork_tree.rs b/lib/modules/blockchain/blockchain-dal/src/readers/fork_tree.rs
index 8e8ad80016734f8fc0443d0ce13b95ee9a28f828..a61a9a2a25bdd6d5e95c66681135f524b3a50d69 100644
--- a/lib/modules/blockchain/blockchain-dal/src/readers/fork_tree.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/readers/fork_tree.rs
@@ -14,7 +14,7 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::*;
-use dubp_documents::Blockstamp;
+use dubp_common_doc::Blockstamp;
 
 /// Get stackables blocks
 pub fn get_stackables_blocks(
diff --git a/lib/modules/blockchain/blockchain-dal/src/readers/identity.rs b/lib/modules/blockchain/blockchain-dal/src/readers/identity.rs
index 485e37b651b5b2141b1e0f882f8be899f2de8afc..04db9db50e20e21d7140ba1dbfd6c75e215d3076 100644
--- a/lib/modules/blockchain/blockchain-dal/src/readers/identity.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/readers/identity.rs
@@ -16,7 +16,8 @@
 use crate::entities::identity::DALIdentity;
 use crate::filters::identities::IdentitiesFilter;
 use crate::{BinDB, DALError, IdentitiesV10Datas};
-use dubp_documents::{BlockNumber, Document};
+use dubp_common_doc::traits::Document;
+use dubp_common_doc::BlockNumber;
 use dup_crypto::keys::*;
 use durs_wot::NodeId;
 use std::collections::HashMap;
@@ -120,7 +121,7 @@ mod test {
     use crate::entities::identity::*;
     use crate::filters::PagingFilter;
     use crate::*;
-    use dubp_documents::Blockstamp;
+    use dubp_common_doc::Blockstamp;
     use dup_crypto_tests_tools::mocks::pubkey;
     use durs_common_tests_tools::collections::slice_same_elems;
 
diff --git a/lib/modules/blockchain/blockchain-dal/src/writers/block.rs b/lib/modules/blockchain/blockchain-dal/src/writers/block.rs
index 0abdab82459f8c70f77ed5e0bfba1b6b06f2d0d4..c2b9640c99326f5ffc1a725dd92c82f285609a14 100644
--- a/lib/modules/blockchain/blockchain-dal/src/writers/block.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/writers/block.rs
@@ -16,8 +16,8 @@
 use crate::entities::block::DALBlock;
 use crate::*;
 use crate::{BinDB, DALError, LocalBlockchainV10Datas};
+use dubp_common_doc::traits::Document;
 use dubp_documents::documents::block::BlockDocumentTrait;
-use dubp_documents::Document;
 use unwrap::unwrap;
 
 /// Insert new head Block in databases
diff --git a/lib/modules/blockchain/blockchain-dal/src/writers/certification.rs b/lib/modules/blockchain/blockchain-dal/src/writers/certification.rs
index a42cecb8c2c91175c98d9d4145a84229e086d8f5..92a6790d4ecdba3ab2cbc340409f645f5ef17ee5 100644
--- a/lib/modules/blockchain/blockchain-dal/src/writers/certification.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/writers/certification.rs
@@ -14,9 +14,9 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::{BinDB, CertsExpirV10Datas, DALError, IdentitiesV10Datas};
+use dubp_common_doc::BlockNumber;
 use dubp_currency_params::CurrencyParameters;
 use dubp_documents::documents::certification::CompactCertificationDocumentV10;
-use dubp_documents::BlockNumber;
 use dup_crypto::keys::*;
 use durs_wot::NodeId;
 
diff --git a/lib/modules/blockchain/blockchain-dal/src/writers/dividend.rs b/lib/modules/blockchain/blockchain-dal/src/writers/dividend.rs
index d49aa41b0535a9e6564fe860f23a7957b03afaf5..96c6b987e098b710c9d9e4dd34cb876c6cc56f60 100644
--- a/lib/modules/blockchain/blockchain-dal/src/writers/dividend.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/writers/dividend.rs
@@ -15,8 +15,8 @@
 
 use crate::entities::sources::SourceAmount;
 use crate::*;
+use dubp_common_doc::BlockNumber;
 use dubp_documents::documents::transaction::*;
-use dubp_documents::BlockNumber;
 use dup_crypto::keys::PubKey;
 use std::collections::{HashMap, HashSet};
 
diff --git a/lib/modules/blockchain/blockchain-dal/src/writers/fork_tree.rs b/lib/modules/blockchain/blockchain-dal/src/writers/fork_tree.rs
index d26b3810132de58f230b5da6b505162ff9a0ec46..7fc62d5d8fe34bea3204f16b65f09c7a6588f478 100644
--- a/lib/modules/blockchain/blockchain-dal/src/writers/fork_tree.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/writers/fork_tree.rs
@@ -15,7 +15,7 @@
 
 use crate::entities::fork_tree::ForkTree;
 use crate::*;
-use dubp_documents::*;
+use dubp_common_doc::BlockHash;
 
 /// Insert new head Block in fork tree,
 /// return vector of removed blockstamps
diff --git a/lib/modules/blockchain/blockchain-dal/src/writers/identity.rs b/lib/modules/blockchain/blockchain-dal/src/writers/identity.rs
index 8db1a90fe5d0ce0febb94638c5421bf188830744..bc3b5c1078bb497d60a47f437da165460ce194b7 100644
--- a/lib/modules/blockchain/blockchain-dal/src/writers/identity.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/writers/identity.rs
@@ -15,10 +15,10 @@
 
 use crate::entities::identity::{DALIdentity, DALIdentityState};
 use crate::{BinDB, DALError, IdentitiesV10Datas, MsExpirV10Datas};
+use dubp_common_doc::traits::Document;
+use dubp_common_doc::{BlockNumber, Blockstamp};
 use dubp_currency_params::CurrencyParameters;
 use dubp_documents::documents::identity::IdentityDocumentV10;
-use dubp_documents::Document;
-use dubp_documents::{BlockNumber, Blockstamp};
 use dup_crypto::keys::PubKey;
 use durs_common_tools::fatal_error;
 use durs_wot::NodeId;
diff --git a/lib/modules/blockchain/blockchain-dal/src/writers/requests.rs b/lib/modules/blockchain/blockchain-dal/src/writers/requests.rs
index 1fcb68f99873ffc0fc6a521772afab72ad30203e..ca6bf3d2f96c894f8cb1348c32f783c50ec7a8b8 100644
--- a/lib/modules/blockchain/blockchain-dal/src/writers/requests.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/writers/requests.rs
@@ -17,11 +17,11 @@ use crate::entities::block::DALBlock;
 use crate::entities::sources::SourceAmount;
 use crate::writers::transaction::DALTxV10;
 use crate::*;
+use dubp_common_doc::Blockstamp;
 use dubp_currency_params::CurrencyParameters;
 use dubp_documents::documents::block::{BlockDocument, BlockDocumentTrait};
 use dubp_documents::documents::certification::CompactCertificationDocumentV10;
 use dubp_documents::documents::identity::IdentityDocumentV10;
-use dubp_documents::Blockstamp;
 use dup_crypto::keys::PubKey;
 use durs_wot::NodeId;
 use std::ops::Deref;
diff --git a/lib/modules/blockchain/blockchain-dal/src/writers/transaction.rs b/lib/modules/blockchain/blockchain-dal/src/writers/transaction.rs
index ce5728fbf26c379abbcd3fc069ac8b4ce8f9b9a1..12e5d1e0be0480390f772153ded5142ea78c540a 100644
--- a/lib/modules/blockchain/blockchain-dal/src/writers/transaction.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/writers/transaction.rs
@@ -425,7 +425,7 @@ pub fn apply_and_write_tx(
 #[cfg(test)]
 mod tests {
     use super::*;
-    use dubp_documents::{Document, DocumentBuilder};
+    use dubp_common_doc::traits::{Document, DocumentBuilder};
     use std::str::FromStr;
     use unwrap::unwrap;
 
diff --git a/lib/modules/blockchain/blockchain/Cargo.toml b/lib/modules/blockchain/blockchain/Cargo.toml
index 5c2cad60aa0430bda98ddae9fa11713fb3b41efa..4dd46f126c89bcad963be369073178d28f9bf4c2 100644
--- a/lib/modules/blockchain/blockchain/Cargo.toml
+++ b/lib/modules/blockchain/blockchain/Cargo.toml
@@ -12,9 +12,10 @@ path = "src/lib.rs"
 [dependencies]
 dirs = "1.0.2"
 durs-conf = { path = "../../../core/conf" }
-dup-crypto = { path = "../../../crypto" }
+dubp-common-doc = { path = "../../../dubp/common-doc"} #, version = "0.1.0" }
 dubp-currency-params = { path = "../../../dubp/currency-params" }
 durs-blockchain-dal = { path = "../blockchain-dal" }
+dup-crypto = { path = "../../../crypto" }
 dubp-documents= { path = "../../../dubp/documents" }
 durs-common-tools = { path = "../../../tools/common-tools" }
 durs-network-documents = { path = "../../../dunp/network-documents" }
diff --git a/lib/modules/blockchain/blockchain/src/dbex.rs b/lib/modules/blockchain/blockchain/src/dbex.rs
index ebe8c92b5a86e3b741ec6cc8f79af2ca6ee2152e..24c8cc07a0a11b78d6f8fd56bd8e487444503d89 100644
--- a/lib/modules/blockchain/blockchain/src/dbex.rs
+++ b/lib/modules/blockchain/blockchain/src/dbex.rs
@@ -14,6 +14,7 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::*;
+use dubp_common_doc::BlockNumber;
 use dubp_documents::documents::block::BlockDocumentTrait;
 use dubp_documents::documents::transaction::*;
 use dup_crypto::keys::*;
@@ -290,7 +291,7 @@ pub fn dbex_wot(profile_path: PathBuf, csv: bool, query: &DBExWotQuery) {
                 .read(|db| {
                     let mut expire_dates = Vec::new();
                     for (block_id, nodes_ids) in db {
-                        let created_ms_time = blocks_times[&block_id];
+                        let created_ms_time = blocks_times[&block_id.0];
                         if created_ms_time > min_created_ms_time {
                             for node_id in nodes_ids {
                                 expire_dates.push((
diff --git a/lib/modules/blockchain/blockchain/src/dubp/apply/mod.rs b/lib/modules/blockchain/blockchain/src/dubp/apply/mod.rs
index da92978439cc7ec6b7fc11888c1af1a6401a046e..797f03b20781baa49e5f6cb52ff9662b73127777 100644
--- a/lib/modules/blockchain/blockchain/src/dubp/apply/mod.rs
+++ b/lib/modules/blockchain/blockchain/src/dubp/apply/mod.rs
@@ -15,9 +15,10 @@
 
 //! Sub-module that applies the content of a block to the indexes of the local blockchain.
 
+use dubp_common_doc::traits::Document;
+use dubp_common_doc::BlockNumber;
 use dubp_documents::documents::block::{BlockDocument, BlockDocumentTrait, BlockDocumentV10};
 use dubp_documents::documents::transaction::{TxAmount, TxBase};
-use dubp_documents::{BlockNumber, Document};
 use dup_crypto::keys::*;
 use durs_blockchain_dal::entities::block::DALBlock;
 use durs_blockchain_dal::entities::sources::SourceAmount;
diff --git a/lib/modules/blockchain/blockchain/src/dubp/check/mod.rs b/lib/modules/blockchain/blockchain/src/dubp/check/mod.rs
index 874deecffccef95c1373a0b669a48e244c0e970f..e93eb88292c89ea98d787ed61aed371edbf9c117 100644
--- a/lib/modules/blockchain/blockchain/src/dubp/check/mod.rs
+++ b/lib/modules/blockchain/blockchain/src/dubp/check/mod.rs
@@ -18,8 +18,9 @@
 pub mod hashs;
 
 use crate::dubp::BlockError;
+use dubp_common_doc::traits::Document;
+use dubp_common_doc::BlockNumber;
 use dubp_documents::documents::block::{BlockDocument, BlockDocumentTrait};
-use dubp_documents::*;
 use dup_crypto::keys::PubKey;
 use durs_blockchain_dal::*;
 use durs_wot::*;
diff --git a/lib/modules/blockchain/blockchain/src/dubp/mod.rs b/lib/modules/blockchain/blockchain/src/dubp/mod.rs
index b0d075001500d3d07edd3c76c1a1701e1edbf76c..974daff5125530a66b8ed27e856bb3f942b2cf07 100644
--- a/lib/modules/blockchain/blockchain/src/dubp/mod.rs
+++ b/lib/modules/blockchain/blockchain/src/dubp/mod.rs
@@ -21,9 +21,9 @@ pub mod check;
 use crate::*;
 use apply::*;
 use check::*;
+use dubp_common_doc::traits::Document;
+use dubp_common_doc::{BlockNumber, Blockstamp};
 use dubp_documents::documents::block::{BlockDocumentTrait, VerifyBlockHashError};
-use dubp_documents::Blockstamp;
-use dubp_documents::Document;
 use durs_blockchain_dal::entities::block::DALBlock;
 use durs_blockchain_dal::*;
 use unwrap::unwrap;
diff --git a/lib/modules/blockchain/blockchain/src/dunp/queries.rs b/lib/modules/blockchain/blockchain/src/dunp/queries.rs
index a4179395ffff14960c021e92765928c4c82e3eec..eb7e905cc13db1be0d043aec7f61fac4b2f14d15 100644
--- a/lib/modules/blockchain/blockchain/src/dunp/queries.rs
+++ b/lib/modules/blockchain/blockchain/src/dunp/queries.rs
@@ -16,6 +16,7 @@
 //! Sub-module that sends requests to the inter-node network layer.
 
 use crate::*;
+use dubp_common_doc::BlockNumber;
 use durs_message::*;
 use durs_module::ModuleReqId;
 use durs_network::requests::OldNetworkRequest;
diff --git a/lib/modules/blockchain/blockchain/src/dunp/receiver.rs b/lib/modules/blockchain/blockchain/src/dunp/receiver.rs
index 44f5af92a9f99cb89407cdf75fe1b56f1acf8058..d304eb133828b116f4cc1cfb5316402c94534027 100644
--- a/lib/modules/blockchain/blockchain/src/dunp/receiver.rs
+++ b/lib/modules/blockchain/blockchain/src/dunp/receiver.rs
@@ -17,6 +17,7 @@
 //! (received by the intermediaries of events transmitted by the network module).
 
 use crate::*;
+use dubp_common_doc::traits::Document;
 use dubp_documents::documents::UserDocumentDUBP;
 use unwrap::unwrap;
 
diff --git a/lib/modules/blockchain/blockchain/src/fork/fork_algo.rs b/lib/modules/blockchain/blockchain/src/fork/fork_algo.rs
index bb42224034ca3ccda10ee03c024088cd6ff334b3..8a8db8e3033505aefaaf2a7f3824040027e833f3 100644
--- a/lib/modules/blockchain/blockchain/src/fork/fork_algo.rs
+++ b/lib/modules/blockchain/blockchain/src/fork/fork_algo.rs
@@ -13,8 +13,8 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
+use dubp_common_doc::Blockstamp;
 use dubp_documents::documents::block::BlockDocumentTrait;
-use dubp_documents::Blockstamp;
 use durs_blockchain_dal::entities::fork_tree::ForkTree;
 use durs_blockchain_dal::{DALError, ForksDBs};
 use std::collections::HashSet;
@@ -100,8 +100,8 @@ mod tests {
 
     use super::*;
     use crate::*;
+    use dubp_common_doc::{BlockHash, BlockNumber};
     use dubp_documents::documents::block::BlockDocument;
-    use dubp_documents::BlockHash;
     use durs_blockchain_dal::entities::block::DALBlock;
 
     #[test]
diff --git a/lib/modules/blockchain/blockchain/src/fork/revert_block.rs b/lib/modules/blockchain/blockchain/src/fork/revert_block.rs
index e22bc1182302d4e06838a81bf0e4ea56c529d028..47924b69b8a74257d278272df0cadb4d8ed3cf5b 100644
--- a/lib/modules/blockchain/blockchain/src/fork/revert_block.rs
+++ b/lib/modules/blockchain/blockchain/src/fork/revert_block.rs
@@ -15,10 +15,11 @@
 
 //! Sub-module that applies a block backwards.
 
+use dubp_common_doc::traits::Document;
+use dubp_common_doc::{BlockNumber, Blockstamp};
 use dubp_documents::documents::block::v10::TxDocOrTxHash;
 use dubp_documents::documents::block::{BlockDocument, BlockDocumentTrait, BlockDocumentV10};
 use dubp_documents::documents::transaction::{TxAmount, TxBase};
-use dubp_documents::{BlockNumber, Blockstamp, Document};
 use dup_crypto::keys::*;
 use durs_blockchain_dal::entities::block::DALBlock;
 use durs_blockchain_dal::entities::sources::SourceAmount;
diff --git a/lib/modules/blockchain/blockchain/src/fork/rollback.rs b/lib/modules/blockchain/blockchain/src/fork/rollback.rs
index 351c7474eec0e792ac108633da87c901dc0e03e9..a4bbf7633c0413ca27e61440f1be7a3fb3bd992a 100644
--- a/lib/modules/blockchain/blockchain/src/fork/rollback.rs
+++ b/lib/modules/blockchain/blockchain/src/fork/rollback.rs
@@ -15,7 +15,8 @@
 
 use crate::fork::revert_block::ValidBlockRevertReqs;
 use crate::*;
-use dubp_documents::Blockstamp;
+use dubp_common_doc::traits::Document;
+use dubp_common_doc::Blockstamp;
 use durs_common_tools::fatal_error;
 use unwrap::unwrap;
 
diff --git a/lib/modules/blockchain/blockchain/src/fork/stackable_blocks.rs b/lib/modules/blockchain/blockchain/src/fork/stackable_blocks.rs
index f165eb557b1db3fa76dea23b63abd37866bb5a87..1628a28299c521e3746d84ae2d04eeded3b47d2d 100644
--- a/lib/modules/blockchain/blockchain/src/fork/stackable_blocks.rs
+++ b/lib/modules/blockchain/blockchain/src/fork/stackable_blocks.rs
@@ -16,6 +16,7 @@
 //! Sub-module that finds and applies the orphaned blocks that have become stackable on the local blockchain.
 
 use crate::*;
+use dubp_common_doc::traits::Document;
 use dubp_documents::documents::block::BlockDocumentTrait;
 use unwrap::unwrap;
 
diff --git a/lib/modules/blockchain/blockchain/src/lib.rs b/lib/modules/blockchain/blockchain/src/lib.rs
index 34d6c67a0e342164f8f5668a6dd2604c26f05463..ef8c080273016ea869c554d64c8d3672582f9473 100644
--- a/lib/modules/blockchain/blockchain/src/lib.rs
+++ b/lib/modules/blockchain/blockchain/src/lib.rs
@@ -54,9 +54,10 @@ pub use crate::dbex::{DBExQuery, DBExTxQuery, DBExWotQuery};
 use crate::dubp::apply::ValidBlockApplyReqs;
 use crate::dubp::*;
 use crate::fork::*;
+use dubp_common_doc::traits::Document;
+use dubp_common_doc::Blockstamp;
 use dubp_currency_params::{CurrencyName, CurrencyParameters};
 use dubp_documents::documents::block::BlockDocument;
-use dubp_documents::*;
 use dup_crypto::keys::*;
 use durs_blockchain_dal::*;
 use durs_common_tools::fatal_error;
diff --git a/lib/modules/blockchain/blockchain/src/requests/sent.rs b/lib/modules/blockchain/blockchain/src/requests/sent.rs
index 4ed53650ffcb315eab6e9b30e2340846e99ea6ed..9be294d22b8363f43d0b44acd05f4c9e0dffef6a 100644
--- a/lib/modules/blockchain/blockchain/src/requests/sent.rs
+++ b/lib/modules/blockchain/blockchain/src/requests/sent.rs
@@ -16,6 +16,7 @@
 //! Sub-module managing the inter-modules requests sent.
 
 use crate::*;
+use dubp_common_doc::{BlockNumber, Blockstamp};
 use durs_network::requests::OldNetworkRequest;
 
 pub fn request_network_consensus(bc: &mut BlockchainModule) {
diff --git a/lib/modules/blockchain/blockchain/src/sync/apply/mod.rs b/lib/modules/blockchain/blockchain/src/sync/apply/mod.rs
index 227fce996a1bf652700c077b0470d8a55ffcaec1..8529764fd7b6c6961c332cfd5d553d7705311e9d 100644
--- a/lib/modules/blockchain/blockchain/src/sync/apply/mod.rs
+++ b/lib/modules/blockchain/blockchain/src/sync/apply/mod.rs
@@ -21,9 +21,10 @@ use crate::dubp;
 use crate::dubp::apply::apply_valid_block;
 use crate::dubp::apply::ValidBlockApplyReqs;
 use crate::sync::SyncJobsMess;
+use dubp_common_doc::traits::Document;
+use dubp_common_doc::{BlockNumber, Blockstamp};
 use dubp_currency_params::{CurrencyName, CurrencyParameters};
 use dubp_documents::documents::block::{BlockDocument, BlockDocumentTrait};
-use dubp_documents::{BlockNumber, Blockstamp, Document};
 use dup_crypto::keys::PubKey;
 use durs_blockchain_dal::writers::requests::WotsDBsWriteQuery;
 use durs_blockchain_dal::{BinDB, CertsExpirV10Datas, WotsV10DBs};
@@ -136,7 +137,7 @@ impl BlockApplicator {
                     self.certs_db
                         .write(|db| {
                             let mut created_certs =
-                                db.get(&created_block_id).cloned().unwrap_or_default();
+                                db.get(&created_block_id.0).cloned().unwrap_or_default();
                             created_certs.insert((*source, *target));
                             db.insert(*created_block_id, created_certs);
                         })
diff --git a/lib/modules/blockchain/blockchain/src/sync/download/json_reader_worker.rs b/lib/modules/blockchain/blockchain/src/sync/download/json_reader_worker.rs
index 69d4b661f69d2498bfb8c80723eeb0b9c082b884..e10df647dd1434ef7c88141faf5344c9c3981232 100644
--- a/lib/modules/blockchain/blockchain/src/sync/download/json_reader_worker.rs
+++ b/lib/modules/blockchain/blockchain/src/sync/download/json_reader_worker.rs
@@ -14,8 +14,9 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::sync::*;
+use dubp_common_doc::traits::Document;
+use dubp_common_doc::Blockstamp;
 use dubp_documents::parsers::blocks::parse_json_block;
-use dubp_documents::Blockstamp;
 use durs_common_tools::fatal_error;
 use failure::Error;
 use rayon::prelude::*;
diff --git a/lib/modules/blockchain/blockchain/src/sync/mod.rs b/lib/modules/blockchain/blockchain/src/sync/mod.rs
index 24473a8702be4ca372b5702d6d1b9c6a9e2bc886..7fe6c503a680f7641d433bb61e3d21e3f337d941 100644
--- a/lib/modules/blockchain/blockchain/src/sync/mod.rs
+++ b/lib/modules/blockchain/blockchain/src/sync/mod.rs
@@ -18,9 +18,10 @@ mod download;
 
 use crate::*;
 use apply::BlockApplicator;
+use dubp_common_doc::Blockstamp;
+use dubp_common_doc::{BlockHash, BlockNumber};
 use dubp_currency_params::{CurrencyName, CurrencyParameters};
 use dubp_documents::documents::block::BlockDocumentTrait;
-use dubp_documents::{BlockHash, BlockNumber};
 use dup_crypto::keys::*;
 use durs_blockchain_dal::writers::requests::*;
 use durs_blockchain_dal::{open_memory_db, CertsExpirV10Datas};
diff --git a/lib/modules/ws2p-v1-legacy/Cargo.toml b/lib/modules/ws2p-v1-legacy/Cargo.toml
index e749c815d6c30910fab24936b0cf25ccbadffb2b..e2d923dc1b29f799d2aff6d07e88596ffbd910ba 100644
--- a/lib/modules/ws2p-v1-legacy/Cargo.toml
+++ b/lib/modules/ws2p-v1-legacy/Cargo.toml
@@ -12,12 +12,13 @@ path = "src/lib.rs"
 [dependencies]
 bincode = "1.0.1"
 byteorder = "1.2.3"
+dubp-common-doc = { path = "../../dubp/common-doc"} #, version = "0.1.0" }
+dubp-currency-params = { path = "../../dubp/currency-params" }
 dubp-documents= { path = "../../dubp/documents" }
+dup-crypto = { path = "../../crypto" }
 durs-conf = { path = "../../core/conf" }
 durs-module = { path = "../../core/module" }
 durs-network = { path = "../../core/network" }
-dup-crypto = { path = "../../crypto" }
-dubp-currency-params = { path = "../../dubp/currency-params" }
 durs-network-documents = { path = "../../dunp/network-documents" }
 durs-message =  { path = "../../core/message" }
 durs-common-tools = { path = "../../tools/common-tools" }
diff --git a/lib/modules/ws2p-v1-legacy/src/events/received.rs b/lib/modules/ws2p-v1-legacy/src/events/received.rs
index 6ecdfae4caa5c3f232bdb38d76c80dbefa0e4a42..377f1150abaee8ebae3703a8d75abcdc3c646408 100644
--- a/lib/modules/ws2p-v1-legacy/src/events/received.rs
+++ b/lib/modules/ws2p-v1-legacy/src/events/received.rs
@@ -17,7 +17,7 @@
 
 use crate::serializers::IntoWS2Pv1Json;
 use crate::*;
-use dubp_documents::Document;
+use dubp_common_doc::traits::Document;
 use durs_message::events::DursEvent;
 use durs_module::*;
 use std::ops::Deref;
diff --git a/lib/modules/ws2p-v1-legacy/src/heads.rs b/lib/modules/ws2p-v1-legacy/src/heads.rs
index 219977bec352dcc50c92c8d0bb7a82bd072f2d24..40b17925b4ccb8ce2f730a382ba8fde72fa9a2fa 100644
--- a/lib/modules/ws2p-v1-legacy/src/heads.rs
+++ b/lib/modules/ws2p-v1-legacy/src/heads.rs
@@ -14,7 +14,7 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::*;
-use dubp_documents::Blockstamp;
+use dubp_common_doc::Blockstamp;
 use durs_network_documents::network_head_v2::*;
 
 pub fn generate_my_head(
diff --git a/lib/modules/ws2p-v1-legacy/src/lib.rs b/lib/modules/ws2p-v1-legacy/src/lib.rs
index b57126be8c4ae468675b80230e0f6fb9804cd2ea..045561e4b83b2b386794c15bfc5095a9710c4bae 100644
--- a/lib/modules/ws2p-v1-legacy/src/lib.rs
+++ b/lib/modules/ws2p-v1-legacy/src/lib.rs
@@ -58,10 +58,10 @@ use crate::ws_connections::messages::WS2Pv1Msg;
 use crate::ws_connections::requests::{WS2Pv1ReqBody, WS2Pv1ReqFullId, WS2Pv1ReqId, WS2Pv1Request};
 use crate::ws_connections::states::WS2PConnectionState;
 use crate::ws_connections::*;
+use dubp_common_doc::Blockstamp;
 use dubp_currency_params::CurrencyName;
 use dubp_documents::documents::block::BlockDocument;
 use dubp_documents::documents::UserDocumentDUBP;
-use dubp_documents::Blockstamp;
 use dup_crypto::keys::*;
 use durs_common_tools::fatal_error;
 use durs_common_tools::traits::merge::Merge;
@@ -887,9 +887,9 @@ mod tests {
     use super::*;
     use crate::ws_connections::requests::sent::network_request_to_json;
     use crate::ws_connections::requests::*;
+    use dubp_common_doc::BlockNumber;
     use dubp_documents::documents::block::{BlockDocument, BlockDocumentTrait};
     use dubp_documents::parsers::blocks::parse_json_block_from_serde_value;
-    use dubp_documents::BlockNumber;
 
     #[test]
     fn test_parse_json_block() {
diff --git a/lib/modules/ws2p-v1-legacy/src/requests/received.rs b/lib/modules/ws2p-v1-legacy/src/requests/received.rs
index 69adb63132f3efdc97f58cdaa177e5fca5af3eb6..bfc4e98a723bcadb7b91b9abf6a2428f325d29b8 100644
--- a/lib/modules/ws2p-v1-legacy/src/requests/received.rs
+++ b/lib/modules/ws2p-v1-legacy/src/requests/received.rs
@@ -19,7 +19,7 @@ use crate::ws2p_db::DbEndpoint;
 use crate::ws_connections::requests::{WS2Pv1ReqBody, WS2Pv1ReqId, WS2Pv1Request};
 use crate::ws_connections::states::WS2PConnectionState;
 use crate::WS2Pv1Module;
-use dubp_documents::BlockNumber;
+use dubp_common_doc::BlockNumber;
 use durs_message::requests::DursReqContent;
 use durs_network::requests::OldNetworkRequest;
 
diff --git a/lib/modules/ws2p-v1-legacy/src/ws_connections/requests/mod.rs b/lib/modules/ws2p-v1-legacy/src/ws_connections/requests/mod.rs
index 200a8ee34874c7f5b57e020e72a38fa1e845c2c1..56a9e54844d3533a19348fb3c3879c46bdaaaa13 100644
--- a/lib/modules/ws2p-v1-legacy/src/ws_connections/requests/mod.rs
+++ b/lib/modules/ws2p-v1-legacy/src/ws_connections/requests/mod.rs
@@ -18,7 +18,7 @@
 pub mod received;
 pub mod sent;
 
-use dubp_documents::BlockNumber;
+use dubp_common_doc::BlockNumber;
 use durs_network_documents::NodeFullId;
 use serde::Serialize;
 use std::convert::TryFrom;
diff --git a/lib/modules/ws2p-v1-legacy/src/ws_connections/responses/mod.rs b/lib/modules/ws2p-v1-legacy/src/ws_connections/responses/mod.rs
index 5acc620e2da122299eea072f215dd0ee1a896d1e..a44eea529ed332cc7bb9fc364f7400cf127625b9 100644
--- a/lib/modules/ws2p-v1-legacy/src/ws_connections/responses/mod.rs
+++ b/lib/modules/ws2p-v1-legacy/src/ws_connections/responses/mod.rs
@@ -20,8 +20,8 @@ pub mod sent;
 
 use crate::serializers::IntoWS2Pv1Json;
 use crate::ws_connections::requests::WS2Pv1ReqId;
+use dubp_common_doc::traits::ToStringObject;
 use dubp_documents::documents::block::BlockDocument;
-use dubp_documents::ToStringObject;
 use dup_crypto::keys::PubKey;
 
 /// WS2Pv1 request response
diff --git a/lib/modules/ws2p/ws2p-messages/Cargo.toml b/lib/modules/ws2p/ws2p-messages/Cargo.toml
index fea5797172de4e518531820b21794b208ca86be7..ea5a66f0352c52dd7c92079bf8397741aa796913 100644
--- a/lib/modules/ws2p/ws2p-messages/Cargo.toml
+++ b/lib/modules/ws2p/ws2p-messages/Cargo.toml
@@ -12,11 +12,12 @@ path = "lib.rs"
 [dependencies]
 bincode = "1.0.*"
 byteorder = "1.2.3"
-dup-crypto = { path = "../../../crypto" }
+dubp-common-doc = { path = "../../../dubp/common-doc"} #, version = "0.1.0" }
 dubp-currency-params = { path = "../../../dubp/currency-params" }
 dubp-documents= { path = "../../../dubp/documents" }
 durs-network-documents = { path = "../../../dunp/network-documents" }
 durs-common-tools = { path = "../../../tools/common-tools" }
+dup-crypto = { path = "../../../crypto" }
 failure = "0.1.5"
 log = "0.4.*"
 serde = "1.0.*"
diff --git a/lib/modules/ws2p/ws2p-messages/lib.rs b/lib/modules/ws2p/ws2p-messages/lib.rs
index 1441f460fce7b0b66965144e55147f8a72d7ac85..349b1b3a51e2d949a057a94de15889b6ddb46f41 100644
--- a/lib/modules/ws2p/ws2p-messages/lib.rs
+++ b/lib/modules/ws2p/ws2p-messages/lib.rs
@@ -166,9 +166,9 @@ mod tests {
     use crate::v2::WS2Pv2Message;
     use bincode;
     use bincode::{deserialize, serialize};
+    use dubp_common_doc::{BlockNumber, Blockstamp};
     use dubp_currency_params::CurrencyName;
     use dubp_documents::documents::certification::*;
-    use dubp_documents::{BlockNumber, Blockstamp};
     use dup_crypto::keys::bin_signable::BinSignable;
     use dup_crypto::keys::*;
     use durs_network_documents::network_endpoint::*;
diff --git a/lib/modules/ws2p/ws2p-messages/v2/connect.rs b/lib/modules/ws2p/ws2p-messages/v2/connect.rs
index a9d28c54d03655d3b91880ea3a760a3abdcca487..4f45a524840ecdd6e8ea1e402654b213793044de 100644
--- a/lib/modules/ws2p/ws2p-messages/v2/connect.rs
+++ b/lib/modules/ws2p/ws2p-messages/v2/connect.rs
@@ -15,7 +15,7 @@
 
 //use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
 use super::api_features::WS2PFeatures;
-use dubp_documents::Blockstamp;
+use dubp_common_doc::blockstamp::Blockstamp;
 use dup_crypto::hashs::Hash;
 use durs_network_documents::network_peer::PeerCardV11;
 
@@ -163,7 +163,7 @@ mod tests {
     use super::super::*;
     use super::*;
     use crate::tests::*;
-    use dubp_documents::Blockstamp;
+    use dubp_common_doc::Blockstamp;
     use dup_crypto::keys::text_signable::TextSignable;
 
     #[test]
diff --git a/lib/modules/ws2p/ws2p-messages/v2/ok.rs b/lib/modules/ws2p/ws2p-messages/v2/ok.rs
index 358c59e7c0ab2044adb262e57c57ee68146132eb..5701efc4854c5b9d030e1df0c999d27eb636ab73 100644
--- a/lib/modules/ws2p/ws2p-messages/v2/ok.rs
+++ b/lib/modules/ws2p/ws2p-messages/v2/ok.rs
@@ -13,7 +13,7 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
-use dubp_documents::Blockstamp;
+use dubp_common_doc::blockstamp::Blockstamp;
 use dup_crypto::hashs::Hash;
 use std::num::NonZeroU16;
 
@@ -49,7 +49,7 @@ mod tests {
     use super::super::*;
     use super::*;
     use crate::tests::*;
-    use dubp_documents::Blockstamp;
+    use dubp_common_doc::Blockstamp;
     use std::num::NonZeroU16;
 
     #[test]
diff --git a/lib/modules/ws2p/ws2p-messages/v2/req_responses.rs b/lib/modules/ws2p/ws2p-messages/v2/req_responses.rs
index bbb1d4f2f8270c077756033b5ec9e88fe9a772dd..f734f8fc0ac74f082af1925ce03c839cde630276 100644
--- a/lib/modules/ws2p/ws2p-messages/v2/req_responses.rs
+++ b/lib/modules/ws2p/ws2p-messages/v2/req_responses.rs
@@ -13,11 +13,11 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
+use dubp_common_doc::blockstamp::Blockstamp;
 use dubp_documents::documents::block::BlockDocument;
 use dubp_documents::documents::certification::CompactCertificationDocumentV10;
 use dubp_documents::documents::identity::v10::CompactIdentityDocumentV10;
 use dubp_documents::documents::membership::v10::CompactPoolMembershipDoc;
-use dubp_documents::Blockstamp;
 use dup_crypto::hashs::Hash;
 use std::str;
 
@@ -63,7 +63,7 @@ mod tests {
     use super::super::*;
     use super::*;
     use crate::tests::*;
-    use dubp_documents::Blockstamp;
+    use dubp_common_doc::Blockstamp;
 
     #[test]
     fn test_ws2p_message_req_res_none() {
diff --git a/lib/modules/ws2p/ws2p-messages/v2/requests.rs b/lib/modules/ws2p/ws2p-messages/v2/requests.rs
index 136a9050d8a325f7ee5b15f61a93f166df5112f4..4d7cb689a5fc1efcd968e85ff5be1125fd376ce2 100644
--- a/lib/modules/ws2p/ws2p-messages/v2/requests.rs
+++ b/lib/modules/ws2p/ws2p-messages/v2/requests.rs
@@ -13,7 +13,8 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
-use dubp_documents::{BlockNumber, Blockstamp};
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::BlockNumber;
 
 /// WS2Pv2Request
 #[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize, Deserialize)]
@@ -75,7 +76,7 @@ mod tests {
     use super::super::*;
     use super::*;
     use crate::tests::*;
-    use dubp_documents::Blockstamp;
+    use dubp_common_doc::Blockstamp;
 
     #[test]
     fn test_ws2p_message_request() {
diff --git a/lib/modules/ws2p/ws2p-protocol/Cargo.toml b/lib/modules/ws2p/ws2p-protocol/Cargo.toml
index 50df6ef8de3634d76717f347653e172fdd289603..0c44f5fb7657af2305cc3f417b4a20b2ec501654 100644
--- a/lib/modules/ws2p/ws2p-protocol/Cargo.toml
+++ b/lib/modules/ws2p/ws2p-protocol/Cargo.toml
@@ -10,10 +10,11 @@ edition = "2018"
 path = "src/lib.rs"
 
 [dependencies]
-dup-crypto = { path = "../../../crypto" }
+dubp-common-doc = { path = "../../../dubp/common-doc"} #, version = "0.1.0" }
 dubp-currency-params = { path = "../../../dubp/currency-params" }
-durs-common-tools = { path = "../../../tools/common-tools" }
 dubp-documents= { path = "../../../dubp/documents" }
+durs-common-tools = { path = "../../../tools/common-tools" }
+dup-crypto = { path = "../../../crypto" }
 durs-module = { path = "../../../core/module" }
 durs-network-documents = { path = "../../../dunp/network-documents" }
 durs-ws2p-messages = { path = "../ws2p-messages" }
diff --git a/lib/modules/ws2p/ws2p-protocol/src/controller/meta_datas.rs b/lib/modules/ws2p/ws2p-protocol/src/controller/meta_datas.rs
index 25166ab3abc4b955b5b1a9eb4bc5523a0c556c05..1ba3207775c3e73018f90d19e0a5111defe69ebc 100644
--- a/lib/modules/ws2p/ws2p-protocol/src/controller/meta_datas.rs
+++ b/lib/modules/ws2p/ws2p-protocol/src/controller/meta_datas.rs
@@ -17,8 +17,8 @@
 
 use crate::connection_state::WS2PConnectionState;
 use crate::MySelfWs2pNode;
+use dubp_common_doc::Blockstamp;
 use dubp_currency_params::CurrencyName;
-use dubp_documents::Blockstamp;
 use dup_crypto::hashs::Hash;
 use durs_network_documents::network_peer::PeerCardV11;
 use durs_network_documents::NodeFullId;
diff --git a/lib/modules/ws2p/ws2p/Cargo.toml b/lib/modules/ws2p/ws2p/Cargo.toml
index b7fad25993127d64383e09c915c4a58c82f57a2f..00ac896841a888feef5c6ef372e996208dc21a20 100644
--- a/lib/modules/ws2p/ws2p/Cargo.toml
+++ b/lib/modules/ws2p/ws2p/Cargo.toml
@@ -11,12 +11,13 @@ path = "src/lib.rs"
 
 [dependencies]
 bincode = "1.0.*"
-durs-conf= { path = "../../../core/conf" }
-dup-crypto = { path = "../../../crypto" }
+dubp-common-doc = { path = "../../../dubp/common-doc"} #, version = "0.1.0" }
 dubp-currency-params = { path = "../../../dubp/currency-params" }
 dubp-documents= { path = "../../../dubp/documents" }
 durs-network-documents = { path = "../../../dunp/network-documents" }
 durs-common-tools = { path = "../../../tools/common-tools" }
+dup-crypto = { path = "../../../crypto" }
+durs-conf= { path = "../../../core/conf" }
 durs-ws2p-messages = { path = "../ws2p-messages" }
 durs-ws2p-protocol = { path = "../ws2p-protocol" }
 durs-message= { path = "../../../core/message" }
diff --git a/lib/modules/ws2p/ws2p/src/controllers/mod.rs b/lib/modules/ws2p/ws2p/src/controllers/mod.rs
index a23bc92766859c9873b607b37b2dfaced675aaa1..45483e40f97b999f3efc95f691fed0c95c09e07c 100644
--- a/lib/modules/ws2p/ws2p/src/controllers/mod.rs
+++ b/lib/modules/ws2p/ws2p/src/controllers/mod.rs
@@ -16,7 +16,7 @@
 //! WS2P connections controllers.
 
 //use constants::*;
-use dubp_documents::Blockstamp;
+use dubp_common_doc::Blockstamp;
 use dup_crypto::hashs::Hash;
 use ws::Sender;
 //use dup_crypto::keys::*;
diff --git a/lib/modules/ws2p/ws2p/src/generate_peer.rs b/lib/modules/ws2p/ws2p/src/generate_peer.rs
index 20de0562e64d5bb832f421b38651aa3f1164db5a..d013268e4b9fe97c71b18f9ef6d585a00acdb6b1 100644
--- a/lib/modules/ws2p/ws2p/src/generate_peer.rs
+++ b/lib/modules/ws2p/ws2p/src/generate_peer.rs
@@ -16,8 +16,8 @@
 //! Generate self peer card
 
 use bincode;
+use dubp_common_doc::BlockNumber;
 use dubp_currency_params::CurrencyName;
-use dubp_documents::BlockNumber;
 use dup_crypto::keys::text_signable::TextSignable;
 use dup_crypto::keys::{KeyPair, KeyPairEnum, SignError};
 use durs_common_tools::fatal_error;
diff --git a/lib/modules/ws2p/ws2p/tests/connection_negociation.rs b/lib/modules/ws2p/ws2p/tests/connection_negociation.rs
index 681a0d4a568896a3e6ddc270bae739df30c72281..b499464093ebcca1d60cae5529b2532dacb679ae 100644
--- a/lib/modules/ws2p/ws2p/tests/connection_negociation.rs
+++ b/lib/modules/ws2p/ws2p/tests/connection_negociation.rs
@@ -16,7 +16,7 @@
 use dubp_currency_params::CurrencyName;
 use dup_crypto::keys::KeyPair;
 use dup_crypto::keys::*;
-//use durs_common_tests_tools::logger::init_logger_stdout;
+use durs_common_tests_tools::logger::init_logger_stdout;
 use durs_message::DursMsg;
 use durs_network_documents::network_endpoint::*;
 use durs_network_documents::*;
@@ -150,7 +150,7 @@ fn test_connection_negociation_denial() {
 #[test]
 #[cfg(unix)]
 fn test_connection_negociation_success() {
-    //init_logger_stdout();
+    init_logger_stdout();
 
     // ===== initialization =====
     // client and server are initialized and launched in separate threads
diff --git a/lib/tests-tools/documents-tests-tools/Cargo.toml b/lib/tests-tools/documents-tests-tools/Cargo.toml
index fb2c3cee2cce463102f864fc6050c236011eaf4a..3e4251bb7f163b6dcf75cf5eb84650986a1b2651 100644
--- a/lib/tests-tools/documents-tests-tools/Cargo.toml
+++ b/lib/tests-tools/documents-tests-tools/Cargo.toml
@@ -13,9 +13,10 @@ edition = "2018"
 path = "src/lib.rs"
 
 [dependencies]
-dup-crypto = { path = "../../crypto" }
+dubp-common-doc = { path = "../../dubp/common-doc"} #, version = "0.1.0" }
 dubp-currency-params = { path = "../../dubp/currency-params" }
 dubp-documents = { path = "../../dubp/documents" }
+dup-crypto = { path = "../../crypto" }
 dup-crypto-tests-tools = { path = "../crypto-tests-tools" }
 
 [dev-dependencies]
diff --git a/lib/tests-tools/documents-tests-tools/src/mocks/identity.rs b/lib/tests-tools/documents-tests-tools/src/mocks/identity.rs
index 49f40a23a20ce5765fe5674562a586924cafae06..cd3c19fe5711a5d1ca78d0c4e251a82de0c025b2 100644
--- a/lib/tests-tools/documents-tests-tools/src/mocks/identity.rs
+++ b/lib/tests-tools/documents-tests-tools/src/mocks/identity.rs
@@ -15,9 +15,11 @@
 
 //! Mocks for projects use dubp-documents
 
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::traits::DocumentBuilder;
+use dubp_common_doc::{BlockHash, BlockNumber};
 use dubp_documents::documents::identity::v10::IdentityDocumentV10Builder;
 use dubp_documents::documents::identity::*;
-use dubp_documents::*;
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::PubKey;
 
diff --git a/lib/tests-tools/documents-tests-tools/src/mocks/mod.rs b/lib/tests-tools/documents-tests-tools/src/mocks/mod.rs
index 0856ef941816db9b74829f061b3a719c9e535f85..ec6f19155b679bac08a44413f93527273bee5546 100644
--- a/lib/tests-tools/documents-tests-tools/src/mocks/mod.rs
+++ b/lib/tests-tools/documents-tests-tools/src/mocks/mod.rs
@@ -17,9 +17,10 @@
 
 pub mod identity;
 
+use dubp_common_doc::blockstamp::Blockstamp;
+use dubp_common_doc::{BlockHash, BlockNumber};
 use dubp_currency_params::CurrencyName;
 use dubp_documents::documents::block::{BlockDocument, BlockDocumentV10};
-use dubp_documents::*;
 use dup_crypto::hashs::Hash;
 
 /// Generate n mock blockstamps