diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5f19148ebb5f00ddbbf23bfae1102d36ddf8cb6f..3f42afa52aff7ffdc2765c11530c78816fe34f7d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -136,7 +136,7 @@ tests:win64:stable:
     - cargo test --package durs-ws2p-messages --target=x86_64-pc-windows-gnu
     - cargo test --package dup-crypto --target=x86_64-pc-windows-gnu
     - cargo test --package durs-common-tools --target=x86_64-pc-windows-gnu
-    - cargo test --package dubp-documents --target=x86_64-pc-windows-gnu
+    - cargo test --package dubp-user-docs --target=x86_64-pc-windows-gnu
     - cargo test --package json-pest-parser --target=x86_64-pc-windows-gnu
     - cargo test --package durs-network-documents --target=x86_64-pc-windows-gnu
     - cargo test --package rules-engine --target=x86_64-pc-windows-gnu
diff --git a/Cargo.lock b/Cargo.lock
index 13417b4f18e0392927b5d7c7c17f4ea70e4ed4eb..062d4974ac17a5254daf703e312b6b6faa3bfd53 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -289,6 +289,28 @@ dependencies = [
  "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "dubp-block-doc"
+version = "0.1.0"
+dependencies = [
+ "dubp-common-doc 0.1.0",
+ "dubp-currency-params 0.2.0",
+ "dubp-user-docs 0.14.0",
+ "dubp-user-docs-tests-tools 0.1.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.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)",
+ "unwrap 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "dubp-common-doc"
 version = "0.1.0"
@@ -320,11 +342,10 @@ dependencies = [
 ]
 
 [[package]]
-name = "dubp-documents"
+name = "dubp-user-docs"
 version = "0.14.0"
 dependencies = [
  "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)",
@@ -340,12 +361,13 @@ dependencies = [
 ]
 
 [[package]]
-name = "dubp-documents-tests-tools"
+name = "dubp-user-docs-tests-tools"
 version = "0.1.0"
 dependencies = [
+ "dubp-block-doc 0.1.0",
  "dubp-common-doc 0.1.0",
  "dubp-currency-params 0.2.0",
- "dubp-documents 0.14.0",
+ "dubp-user-docs 0.14.0",
  "dup-crypto 0.7.0",
  "dup-crypto-tests-tools 0.1.0",
 ]
@@ -394,10 +416,11 @@ name = "durs-blockchain"
 version = "0.2.0-a"
 dependencies = [
  "dirs 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "dubp-block-doc 0.1.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",
+ "dubp-user-docs 0.14.0",
+ "dubp-user-docs-tests-tools 0.1.0",
  "dup-crypto 0.7.0",
  "dup-crypto-tests-tools 0.1.0",
  "durs-blockchain-dal 0.2.0-a",
@@ -424,10 +447,11 @@ dependencies = [
 name = "durs-blockchain-dal"
 version = "0.2.0-a"
 dependencies = [
+ "dubp-block-doc 0.1.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",
+ "dubp-user-docs 0.14.0",
+ "dubp-user-docs-tests-tools 0.1.0",
  "dup-crypto 0.7.0",
  "dup-crypto-tests-tools 0.1.0",
  "durs-common-tests-tools 0.1.0",
@@ -466,7 +490,7 @@ version = "0.2.0-a"
 dependencies = [
  "dirs 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "dubp-currency-params 0.2.0",
- "dubp-documents 0.14.0",
+ "dubp-user-docs 0.14.0",
  "dup-crypto 0.7.0",
  "durs-common-tools 0.2.0",
  "durs-module 0.2.0-a",
@@ -508,9 +532,10 @@ dependencies = [
 name = "durs-message"
 version = "0.2.0-a"
 dependencies = [
+ "dubp-block-doc 0.1.0",
  "dubp-common-doc 0.1.0",
  "dubp-currency-params 0.2.0",
- "dubp-documents 0.14.0",
+ "dubp-user-docs 0.14.0",
  "dup-crypto 0.7.0",
  "durs-blockchain-dal 0.2.0-a",
  "durs-module 0.2.0-a",
@@ -526,7 +551,7 @@ name = "durs-module"
 version = "0.2.0-a"
 dependencies = [
  "dubp-currency-params 0.2.0",
- "dubp-documents 0.14.0",
+ "dubp-user-docs 0.14.0",
  "dup-crypto 0.7.0",
  "durs-common-tools 0.2.0",
  "durs-network-documents 0.4.0",
@@ -542,8 +567,9 @@ dependencies = [
 name = "durs-network"
 version = "0.2.0-a"
 dependencies = [
+ "dubp-block-doc 0.1.0",
  "dubp-common-doc 0.1.0",
- "dubp-documents 0.14.0",
+ "dubp-user-docs 0.14.0",
  "dup-crypto 0.7.0",
  "durs-common-tools 0.2.0",
  "durs-module 0.2.0-a",
@@ -563,7 +589,7 @@ dependencies = [
  "bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "dubp-common-doc 0.1.0",
  "dubp-currency-params 0.2.0",
- "dubp-documents 0.14.0",
+ "dubp-user-docs 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)",
@@ -584,7 +610,7 @@ name = "durs-skeleton"
 version = "0.1.0"
 dependencies = [
  "dubp-currency-params 0.2.0",
- "dubp-documents 0.14.0",
+ "dubp-user-docs 0.14.0",
  "dup-crypto 0.7.0",
  "durs-common-tools 0.2.0",
  "durs-conf 0.2.0-a",
@@ -604,7 +630,7 @@ name = "durs-tui"
 version = "0.2.0-a"
 dependencies = [
  "dubp-currency-params 0.2.0",
- "dubp-documents 0.14.0",
+ "dubp-user-docs 0.14.0",
  "dup-crypto 0.7.0",
  "durs-common-tools 0.2.0",
  "durs-conf 0.2.0-a",
@@ -641,7 +667,7 @@ dependencies = [
  "bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "dubp-common-doc 0.1.0",
  "dubp-currency-params 0.2.0",
- "dubp-documents 0.14.0",
+ "dubp-user-docs 0.14.0",
  "dup-crypto 0.7.0",
  "durs-common-tests-tools 0.1.0",
  "durs-common-tools 0.2.0",
@@ -668,9 +694,10 @@ 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-block-doc 0.1.0",
  "dubp-common-doc 0.1.0",
  "dubp-currency-params 0.2.0",
- "dubp-documents 0.14.0",
+ "dubp-user-docs 0.14.0",
  "dup-crypto 0.7.0",
  "durs-common-tools 0.2.0",
  "durs-network-documents 0.4.0",
@@ -688,7 +715,7 @@ version = "0.2.0-a"
 dependencies = [
  "dubp-common-doc 0.1.0",
  "dubp-currency-params 0.2.0",
- "dubp-documents 0.14.0",
+ "dubp-user-docs 0.14.0",
  "dup-crypto 0.7.0",
  "durs-common-tools 0.2.0",
  "durs-module 0.2.0-a",
@@ -708,9 +735,10 @@ 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-block-doc 0.1.0",
  "dubp-common-doc 0.1.0",
  "dubp-currency-params 0.2.0",
- "dubp-documents 0.14.0",
+ "dubp-user-docs 0.14.0",
  "dup-crypto 0.7.0",
  "durs-common-tools 0.2.0",
  "durs-conf 0.2.0-a",
diff --git a/Cargo.toml b/Cargo.toml
index 47f6588f533ed942ff9f05db6fe7e821824d2145..3e9fa9165aba2a699e7f6368d6f7f35ac4ed24bb 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -7,9 +7,10 @@ members = [
     "lib/core/module",
     "lib/core/network",
     "lib/crypto",
+    "lib/dubp/block-doc",
     "lib/dubp/common-doc",
     "lib/dubp/currency-params",
-    "lib/dubp/documents",
+    "lib/dubp/user-docs",
     "lib/dubp/wot",
     "lib/dunp/network-documents",
     "lib/modules/blockchain/blockchain",
@@ -20,7 +21,7 @@ members = [
     "lib/modules/ws2p/ws2p",
     "lib/modules/ws2p/ws2p-protocol",
     "lib/tests-tools/crypto-tests-tools",
-    "lib/tests-tools/documents-tests-tools",
+    "lib/tests-tools/user-docs-tests-tools",
     "lib/tests-tools/common-tests-tools",
     "lib/tools/common-tools",
     "lib/tools/json-pest-parser",
diff --git a/doc/fr/developpeurs/installer-son-environnement-de-dev.md b/doc/fr/developpeurs/installer-son-environnement-de-dev.md
index c64f275c22f7cf6b687dedb7f5f23689131d29ef..845d98b9635c9b082fa05ce6404909f41e01add6 100644
--- a/doc/fr/developpeurs/installer-son-environnement-de-dev.md
+++ b/doc/fr/developpeurs/installer-son-environnement-de-dev.md
@@ -318,13 +318,13 @@ La compilation de cette feature `ssl` nécessitera que vous ayez la lib opensssl
 
 ### tc="cargo fmt && cargo test --package"
 
-Pour exécuter les tests d'une crate en particulier. Par exemple pour exécuter les tests de la crate `dubp-documents` sasissez la commande suivante :
+Pour exécuter les tests d'une crate en particulier. Par exemple pour exécuter les tests de la crate `dubp-user-docs` sasissez la commande suivante :
 
-    tc dubp-documents
+    tc dubp-user-docs
 
 Le nom d'une crate est indiqué dans l'attribut `name` du fichier `Cargo.toml` situé a la racine de la crate en question.
 
-Par exemple pour la crate située dans `lib/tools/documents`, il faut regarder le fichier `lib/tools/documents/Cargo.toml`.
+Par exemple pour la crate située dans `lib/tools/user-docs`, il faut regarder le fichier `lib/tools/user-docs/Cargo.toml`.
 
 ### ta="cargo fmt && cargo test --all"
 
diff --git a/doc/fr/developpeurs/tests-auto.md b/doc/fr/developpeurs/tests-auto.md
index c5f8b86a850fb18151ff714eaab2e40d38a24cbb..50389ac92f4ef71afb8feedede9a6a70f64bcebc 100644
--- a/doc/fr/developpeurs/tests-auto.md
+++ b/doc/fr/developpeurs/tests-auto.md
@@ -26,13 +26,13 @@ Pour exécutez les tests (TU+TI) d'une crate en particulier :
 
     cargo test --package CRATE_NAME
 
-Par exemple pour exécuter les tests (TU+TI) de la crate dubp-documents:
+Par exemple pour exécuter les tests (TU+TI) de la crate dubp-user-docs:
 
-    cargo test --package dubp-documents
+    cargo test --package dubp-user-docs
 
 Le nom d'une crate est indiqué dans l'attribut `name` du fichier `Cargo.toml` situé a la racine de la crate en question.
 
-Par exemple pour la crate située dans `lib/tools/documents`, il faut regarder le fichier `lib/tools/documents/Cargo.toml`.
+Par exemple pour la crate située dans `lib/tools/user-docs`, il faut regarder le fichier `lib/tools/user-docs/Cargo.toml`.
 
 ## Lancer tout les tests du projet
 
diff --git a/lib/core/conf/Cargo.toml b/lib/core/conf/Cargo.toml
index d051703407a421219cabd2ed6728bf83bca2310c..b9c4b43598b70a61e396d887cea91d860e4b001e 100644
--- a/lib/core/conf/Cargo.toml
+++ b/lib/core/conf/Cargo.toml
@@ -13,7 +13,7 @@ path = "src/lib.rs"
 dirs = "1.0.2"
 dup-crypto = { path = "../../crypto" }
 dubp-currency-params = { path = "../../dubp/currency-params" }
-dubp-documents= { path = "../../dubp/documents" }
+dubp-user-docs= { path = "../../dubp/user-docs" }
 durs-module = { path = "../module" }
 durs-common-tools = { path = "../../tools/common-tools" }
 failure = "0.1.5"
diff --git a/lib/core/message/Cargo.toml b/lib/core/message/Cargo.toml
index b97bf7afd77402fe45a10904ee4b7fcde200a0e7..4c353a568760a928247b2e9852b52b5103e5b516 100644
--- a/lib/core/message/Cargo.toml
+++ b/lib/core/message/Cargo.toml
@@ -10,9 +10,10 @@ edition = "2018"
 path = "src/lib.rs"
 
 [dependencies]
+dubp-block-doc = { path = "../../dubp/block-doc"} #, version = "0.1.0" }
 dubp-common-doc = { path = "../../dubp/common-doc"} #, version = "0.1.0" }
 dubp-currency-params = { path = "../../dubp/currency-params" }
-dubp-documents= { path = "../../dubp/documents" }
+dubp-user-docs= { path = "../../dubp/user-docs" }
 dup-crypto = { path = "../../crypto" }
 durs-module = { path = "../module" }
 durs-network = { path = "../network" }
diff --git a/lib/core/message/src/events.rs b/lib/core/message/src/events.rs
index c89ac18fa581fd7bef7d41587b5b8c907107f90b..88385edfd55dac3bd49a07db705e6dedb45a407a 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_block_doc::BlockDocument;
 use dubp_common_doc::Blockstamp;
-use dubp_documents::documents::block::BlockDocument;
-use dubp_documents::documents::UserDocumentDUBP;
+use dubp_user_docs::documents::UserDocumentDUBP;
 use durs_network::events::NetworkEvent;
 
 /// The DURS event message.
diff --git a/lib/core/message/src/responses.rs b/lib/core/message/src/responses.rs
index e04778d6a167c60d712d08d781210d4ec0c6c88c..ee7dfbde9b964162df5c0937fdeabd3526b79125 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_block_doc::BlockDocument;
 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_user_docs::documents::certification::CertificationDocument;
+use dubp_user_docs::documents::identity::IdentityDocument;
+use dubp_user_docs::documents::membership::MembershipDocument;
+use dubp_user_docs::documents::revocation::RevocationDocumentV10;
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::*;
 use durs_module::ModuleReqId;
diff --git a/lib/core/module/Cargo.toml b/lib/core/module/Cargo.toml
index dba78f8455dc3c45409e4aa0432cabb29ca62ba1..53f63f034ca55df521ba6de08052342aa9f3b19d 100644
--- a/lib/core/module/Cargo.toml
+++ b/lib/core/module/Cargo.toml
@@ -12,7 +12,7 @@ path = "src/lib.rs"
 [dependencies]
 dup-crypto = { path = "../../crypto" }
 dubp-currency-params = { path = "../../dubp/currency-params" }
-dubp-documents = { path = "../../dubp/documents" }
+dubp-user-docs = { path = "../../dubp/user-docs" }
 durs-common-tools = { path = "../../tools/common-tools" }
 durs-network-documents = { path = "../../dunp/network-documents" }
 failure = "0.1.5"
diff --git a/lib/core/network/Cargo.toml b/lib/core/network/Cargo.toml
index 448287c6b49ac5a5ff76b56691748dc0406605b2..534087f233900a3d323118126a2daa80368ef377 100644
--- a/lib/core/network/Cargo.toml
+++ b/lib/core/network/Cargo.toml
@@ -10,8 +10,9 @@ edition = "2018"
 path = "lib.rs"
 
 [dependencies]
+dubp-block-doc = { path = "../../dubp/block-doc"} #, version = "0.1.0" }
 dubp-common-doc = { path = "../../dubp/common-doc"} #, version = "0.1.0" }
-dubp-documents= { path = "../../dubp/documents" }
+dubp-user-docs= { path = "../../dubp/user-docs" }
 dup-crypto = { path = "../../crypto" }
 durs-common-tools = { path = "../../tools/common-tools" }
 durs-module = { path = "../module" }
diff --git a/lib/core/network/events.rs b/lib/core/network/events.rs
index 954ed019cfe200d8e98172b0feb09a06f4951332..12df524923965a5ae34c0d7a854ada87966201bb 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_block_doc::BlockDocument;
 use dubp_common_doc::blockstamp::Blockstamp;
-use dubp_documents::documents::block::BlockDocument;
-use dubp_documents::documents::UserDocumentDUBP;
+use dubp_user_docs::documents::UserDocumentDUBP;
 use durs_common_tools::Percent;
 
 #[derive(Debug, Clone)]
diff --git a/lib/core/network/requests.rs b/lib/core/network/requests.rs
index 0dad6800ab6544c07190c706f777e4490aeff190..ac7b1c878dfb941a75496cfe54e2eaeb1d850be3 100644
--- a/lib/core/network/requests.rs
+++ b/lib/core/network/requests.rs
@@ -16,9 +16,9 @@
 //! Defined network requests.
 
 use crate::*;
+use dubp_block_doc::BlockDocument;
 use dubp_common_doc::blockstamp::Blockstamp;
-use dubp_documents::documents::block::BlockDocument;
-use dubp_documents::documents::UserDocumentDUBP;
+use dubp_user_docs::documents::UserDocumentDUBP;
 
 #[derive(Debug, Copy, Clone)]
 /// Type containing a request addressed to the network module
diff --git a/lib/dubp/block-doc/Cargo.toml b/lib/dubp/block-doc/Cargo.toml
new file mode 100644
index 0000000000000000000000000000000000000000..750f9a399bea968c34b31c081dce7eee1675f3ad
--- /dev/null
+++ b/lib/dubp/block-doc/Cargo.toml
@@ -0,0 +1,35 @@
+[package]
+name = "dubp-block-doc"
+version = "0.1.0"
+authors = ["elois <elois@ifee.fr>"]
+description = "Handles DUBP block (DUBP: DUniter Blockhain Protocol)."
+repository = "https://git.duniter.org/nodes/rust/duniter-rs"
+readme = "README.md"
+keywords = ["dunitrust", "duniter", "blockchain", "cryptocurrency", "block"]
+license = "AGPL-3.0"
+edition = "2018"
+
+[lib]
+path = "src/lib.rs"
+
+[dependencies]
+dubp-common-doc = { path = "../common-doc"} #, version = "0.1.0" }
+dubp-currency-params = { path = "../currency-params", version = "0.2.0" }
+dubp-user-docs = { path = "../user-docs", version = "0.14.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"
+pest_derive = "2.1.0"
+serde = "1.0.*"
+serde_derive = "1.0.*"
+serde_json = "1.0.*"
+log = "0.4.*"
+unwrap = "1.2.1"
+
+[dev-dependencies]
+pretty_assertions = "0.5.1"
+dubp-user-docs-tests-tools = { path = "../../tests-tools/user-docs-tests-tools" }
+
+[features]
\ No newline at end of file
diff --git a/lib/dubp/block-doc/README.md b/lib/dubp/block-doc/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..5e2e488c9d47476f6bac2c3ef48e85c4e7ddfb21
--- /dev/null
+++ b/lib/dubp/block-doc/README.md
@@ -0,0 +1,9 @@
+# DUBP block doc
+
+This crate provides the definition of the blocks format in [DUBP](dubp-latest-rfc) as well as the methods to manipulate them.
+
+[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-block-doc` as a `cargo` dependency in your Rust project.
diff --git a/lib/dubp/documents/src/documents/block.rs b/lib/dubp/block-doc/src/block.rs
similarity index 100%
rename from lib/dubp/documents/src/documents/block.rs
rename to lib/dubp/block-doc/src/block.rs
diff --git a/lib/dubp/documents/src/documents/block/v10.rs b/lib/dubp/block-doc/src/block/v10.rs
similarity index 97%
rename from lib/dubp/documents/src/documents/block/v10.rs
rename to lib/dubp/block-doc/src/block/v10.rs
index 73832fce71503cceee8392235f7d935718f5337a..43b343acf9ae8777ce7b70c2269ad04477c8e207 100644
--- a/lib/dubp/documents/src/documents/block/v10.rs
+++ b/lib/dubp/block-doc/src/block/v10.rs
@@ -16,19 +16,22 @@
 //! Wrappers around Block document V10.
 
 use super::{BlockDocumentTrait, VerifyBlockHashError};
-use crate::documents::certification::v10::CompactCertificationDocumentV10Stringified;
-use crate::documents::identity::IdentityDocumentV10;
-use crate::documents::membership::v10::{MembershipDocumentV10, MembershipDocumentV10Stringified};
-use crate::documents::revocation::v10::CompactRevocationDocumentV10Stringified;
-use crate::documents::revocation::RevocationDocumentV10;
-use crate::documents::transaction::TransactionDocument;
-use crate::documents::*;
 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 dubp_user_docs::documents::certification::v10::{
+    CertificationDocumentV10, CompactCertificationDocumentV10Stringified,
+};
+use dubp_user_docs::documents::identity::{IdentityDocumentV10, IdentityDocumentV10Stringified};
+use dubp_user_docs::documents::membership::v10::{
+    MembershipDocumentV10, MembershipDocumentV10Stringified,
+};
+use dubp_user_docs::documents::revocation::v10::CompactRevocationDocumentV10Stringified;
+use dubp_user_docs::documents::revocation::RevocationDocumentV10;
+use dubp_user_docs::documents::transaction::{TransactionDocument, TransactionDocumentStringified};
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::*;
 use durs_common_tools::fatal_error;
@@ -620,10 +623,14 @@ impl ToStringObject for BlockDocumentV10 {
 
 #[cfg(test)]
 mod tests {
-    use super::certification::CertificationDocumentParser;
-    use super::transaction::TransactionDocumentParser;
     use super::*;
+    use dubp_common_doc::parser::TextDocumentParser;
     use dubp_common_doc::traits::Document;
+    use dubp_user_docs::documents::certification::{
+        CertificationDocument, CertificationDocumentParser,
+    };
+    use dubp_user_docs::documents::membership::{MembershipDocument, MembershipDocumentParser};
+    use dubp_user_docs::documents::transaction::{TransactionDocument, TransactionDocumentParser};
 
     #[test]
     fn generate_and_verify_empty_block() {
diff --git a/lib/dubp/block-doc/src/lib.rs b/lib/dubp/block-doc/src/lib.rs
new file mode 100644
index 0000000000000000000000000000000000000000..d668761d2235c2e73dc862b901e5fce383573e40
--- /dev/null
+++ b/lib/dubp/block-doc/src/lib.rs
@@ -0,0 +1,77 @@
+//  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/>.
+
+//! Wrappers around Block document.
+
+#![deny(
+    missing_debug_implementations,
+    missing_copy_implementations,
+    trivial_casts,
+    trivial_numeric_casts,
+    unsafe_code,
+    unstable_features,
+    unused_import_braces
+)]
+
+#[macro_use]
+extern crate log;
+#[cfg(test)]
+#[macro_use]
+extern crate pretty_assertions;
+#[macro_use]
+extern crate serde_derive;
+
+pub mod block;
+pub mod parser;
+
+use dubp_common_doc::traits::ToStringObject;
+use dubp_user_docs::documents::{UserDocumentDUBP, UserDocumentDUBPStr};
+
+pub use block::{
+    BlockDocument, BlockDocumentStringified, BlockDocumentV10, BlockDocumentV10Stringified,
+};
+
+/// Document of DUBP (DUniter Blockhain Protocol)
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub enum DocumentDUBP {
+    /// Block document.
+    Block(Box<BlockDocument>),
+    /// User document of DUBP (DUniter Blockhain Protocol)
+    UserDocument(UserDocumentDUBP),
+}
+
+/// List of stringified document types.
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub enum DocumentDUBPStr {
+    /// Block document (not yet implemented)
+    Block(Box<BlockDocumentStringified>),
+    /// Stringified user document.
+    UserDocument(UserDocumentDUBPStr),
+}
+
+impl ToStringObject for DocumentDUBP {
+    type StringObject = DocumentDUBPStr;
+
+    fn to_string_object(&self) -> Self::StringObject {
+        match *self {
+            DocumentDUBP::Block(ref doc) => {
+                DocumentDUBPStr::Block(Box::new(doc.to_string_object()))
+            }
+            DocumentDUBP::UserDocument(ref user_doc) => {
+                DocumentDUBPStr::UserDocument(user_doc.to_string_object())
+            }
+        }
+    }
+}
diff --git a/lib/dubp/documents/src/parsers/blocks.rs b/lib/dubp/block-doc/src/parser.rs
similarity index 94%
rename from lib/dubp/documents/src/parsers/blocks.rs
rename to lib/dubp/block-doc/src/parser.rs
index c7d7f168d760b7f45df11bf5eeaab1b1481f2562..83855d976c8e31401b0213d7297294e1e567fe89 100644
--- a/lib/dubp/documents/src/parsers/blocks.rs
+++ b/lib/dubp/block-doc/src/parser.rs
@@ -13,13 +13,14 @@
 // 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 crate::documents::block::{v10::TxDocOrTxHash, BlockDocument, BlockDocumentV10};
-use crate::documents::membership::v10::MembershipType;
-use crate::parsers::{serde_json_value_to_pest_json_value, DefaultHasher};
-use crate::*;
+//! Parsers for block.
+
+use crate::block::{v10::TxDocOrTxHash, BlockDocument, BlockDocumentV10};
 use dubp_common_doc::{BlockHash, BlockNumber};
 use dubp_currency_params::genesis_block_params::v10::BlockV10Parameters;
 use dubp_currency_params::CurrencyName;
+use dubp_user_docs::documents::membership::v10::MembershipType;
+use dubp_user_docs::parsers::{serde_json_value_to_pest_json_value, DefaultHasher};
 use dup_crypto::bases::BaseConvertionError;
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::*;
@@ -91,26 +92,26 @@ pub fn parse_json_block(json_block: &JSONValue<DefaultHasher>) -> Result<BlockDo
         },
         inner_hash: Some(Hash::from_hex(get_str(json_block, "inner_hash")?)?),
         dividend: get_optional_usize(json_block, "dividend")?,
-        identities: crate::parsers::identities::parse_compact_identities(
+        identities: dubp_user_docs::parsers::identities::parse_compact_identities(
             currency,
             get_str_array(json_block, "identities")?,
         )?,
-        joiners: crate::parsers::memberships::parse_compact_memberships(
+        joiners: dubp_user_docs::parsers::memberships::parse_compact_memberships(
             currency,
             MembershipType::In(),
             &get_str_array(json_block, "joiners")?,
         )?,
-        actives: crate::parsers::memberships::parse_compact_memberships(
+        actives: dubp_user_docs::parsers::memberships::parse_compact_memberships(
             currency,
             MembershipType::In(),
             &get_str_array(json_block, "actives")?,
         )?,
-        leavers: crate::parsers::memberships::parse_compact_memberships(
+        leavers: dubp_user_docs::parsers::memberships::parse_compact_memberships(
             currency,
             MembershipType::Out(),
             &get_str_array(json_block, "leavers")?,
         )?,
-        revoked: crate::parsers::revoked::parse_revocations_into_compact(&get_str_array(
+        revoked: dubp_user_docs::parsers::revoked::parse_revocations_into_compact(&get_str_array(
             json_block, "revoked",
         )?),
         excluded: get_str_array(json_block, "excluded")?
@@ -118,7 +119,7 @@ pub fn parse_json_block(json_block: &JSONValue<DefaultHasher>) -> Result<BlockDo
             .map(|p| ed25519::PublicKey::from_base58(p))
             .map(|p| p.map(PubKey::Ed25519))
             .collect::<Result<Vec<PubKey>, BaseConvertionError>>()?,
-        certifications: crate::parsers::certifications::parse_certifications_into_compact(
+        certifications: dubp_user_docs::parsers::certifications::parse_certifications_into_compact(
             &get_str_array(json_block, "certifications")?,
         ),
         transactions: json_block
@@ -132,7 +133,7 @@ pub fn parse_json_block(json_block: &JSONValue<DefaultHasher>) -> Result<BlockDo
                     .to_owned(),
             })?
             .iter()
-            .map(|tx| crate::parsers::transactions::parse_json_transaction(tx))
+            .map(|tx| dubp_user_docs::parsers::transactions::parse_json_transaction(tx))
             .map(|tx_result| tx_result.map(|tx_doc| TxDocOrTxHash::TxDoc(Box::new(tx_doc))))
             .collect::<Result<Vec<TxDocOrTxHash>, Error>>()?,
     }))
@@ -141,7 +142,7 @@ pub fn parse_json_block(json_block: &JSONValue<DefaultHasher>) -> Result<BlockDo
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::documents::block::BlockDocumentTrait;
+    use crate::block::*;
 
     #[test]
     fn parse_empty_json_block() {
@@ -237,8 +238,6 @@ mod tests {
         );
     }
 
-    use crate::documents::block::VerifyBlockHashError;
-
     #[test]
     fn parse_json_block_with_one_tx() -> Result<(), VerifyBlockHashError> {
         let block_json_str = r#"{
@@ -354,7 +353,7 @@ mod tests {
                 revoked: vec![],
                 excluded: vec![],
                 certifications: vec![],
-                transactions: vec![TxDocOrTxHash::TxDoc(Box::new(crate::parsers::tests::first_g1_tx_doc()))],
+                transactions: vec![TxDocOrTxHash::TxDoc(Box::new(dubp_user_docs_tests_tools::mocks::tx::first_g1_tx_doc()))],
             });
         assert_eq!(
             expected_block,
diff --git a/lib/dubp/documents/Cargo.toml b/lib/dubp/user-docs/Cargo.toml
similarity index 90%
rename from lib/dubp/documents/Cargo.toml
rename to lib/dubp/user-docs/Cargo.toml
index 2742315fd6918e0698f0f52263cf7474f24ed520..bfee1943664d6367091c20efd36048e194d1975b 100644
--- a/lib/dubp/documents/Cargo.toml
+++ b/lib/dubp/user-docs/Cargo.toml
@@ -1,5 +1,5 @@
 [package]
-name = "dubp-documents"
+name = "dubp-user-docs"
 version = "0.14.0"
 authors = ["nanocryk <nanocryk@duniter.org>", "elois <elois@ifee.fr>"]
 description = "Handles DUBP documents (DUBP: DUniter Blockhain Protocol)"
@@ -14,7 +14,6 @@ path = "src/lib.rs"
 
 [dependencies]
 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"
diff --git a/lib/dubp/documents/README.md b/lib/dubp/user-docs/README.md
similarity index 100%
rename from lib/dubp/documents/README.md
rename to lib/dubp/user-docs/README.md
diff --git a/lib/dubp/documents/src/documents/certification.rs b/lib/dubp/user-docs/src/documents/certification.rs
similarity index 100%
rename from lib/dubp/documents/src/documents/certification.rs
rename to lib/dubp/user-docs/src/documents/certification.rs
diff --git a/lib/dubp/documents/src/documents/certification/v10.rs b/lib/dubp/user-docs/src/documents/certification/v10.rs
similarity index 100%
rename from lib/dubp/documents/src/documents/certification/v10.rs
rename to lib/dubp/user-docs/src/documents/certification/v10.rs
diff --git a/lib/dubp/documents/src/documents/identity.rs b/lib/dubp/user-docs/src/documents/identity.rs
similarity index 100%
rename from lib/dubp/documents/src/documents/identity.rs
rename to lib/dubp/user-docs/src/documents/identity.rs
diff --git a/lib/dubp/documents/src/documents/identity/v10.rs b/lib/dubp/user-docs/src/documents/identity/v10.rs
similarity index 100%
rename from lib/dubp/documents/src/documents/identity/v10.rs
rename to lib/dubp/user-docs/src/documents/identity/v10.rs
diff --git a/lib/dubp/documents/src/documents/membership.rs b/lib/dubp/user-docs/src/documents/membership.rs
similarity index 100%
rename from lib/dubp/documents/src/documents/membership.rs
rename to lib/dubp/user-docs/src/documents/membership.rs
diff --git a/lib/dubp/documents/src/documents/membership/v10.rs b/lib/dubp/user-docs/src/documents/membership/v10.rs
similarity index 100%
rename from lib/dubp/documents/src/documents/membership/v10.rs
rename to lib/dubp/user-docs/src/documents/membership/v10.rs
diff --git a/lib/dubp/documents/src/documents/mod.rs b/lib/dubp/user-docs/src/documents/mod.rs
similarity index 92%
rename from lib/dubp/documents/src/documents/mod.rs
rename to lib/dubp/user-docs/src/documents/mod.rs
index 16d48f81cd80e1a8ead19171028e559b5f2bd624..ac5cb1a2258bdc83a01c00fff1e2339b23c9a4bc 100644
--- a/lib/dubp/documents/src/documents/mod.rs
+++ b/lib/dubp/user-docs/src/documents/mod.rs
@@ -15,7 +15,6 @@
 
 //! Implements the Dunitrust blockchain Documents.
 
-use crate::documents::block::*;
 use crate::documents::certification::*;
 use crate::documents::identity::*;
 use crate::documents::membership::*;
@@ -27,22 +26,12 @@ use durs_common_tools::fatal_error;
 use pest::iterators::Pair;
 use pest::Parser;
 
-pub mod block;
 pub mod certification;
 pub mod identity;
 pub mod membership;
 pub mod revocation;
 pub mod transaction;
 
-/// Document of DUBP (DUniter Blockhain Protocol)
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub enum DocumentDUBP {
-    /// Block document.
-    Block(Box<BlockDocument>),
-    /// User document of DUBP (DUniter Blockhain Protocol)
-    UserDocument(UserDocumentDUBP),
-}
-
 /// User document of DUBP (DUniter Blockhain Protocol)
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub enum UserDocumentDUBP {
@@ -62,15 +51,6 @@ pub enum UserDocumentDUBP {
     Revocation(Box<RevocationDocument>),
 }
 
-/// List of stringified document types.
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub enum DocumentDUBPStr {
-    /// Block document (not yet implemented)
-    Block(Box<BlockDocumentStringified>),
-    /// Stringified user document.
-    UserDocument(UserDocumentDUBPStr),
-}
-
 /// List of stringified user document types.
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub enum UserDocumentDUBPStr {
@@ -90,21 +70,6 @@ pub enum UserDocumentDUBPStr {
     Revocation(Box<RevocationDocumentStringified>),
 }
 
-impl ToStringObject for DocumentDUBP {
-    type StringObject = DocumentDUBPStr;
-
-    fn to_string_object(&self) -> Self::StringObject {
-        match *self {
-            DocumentDUBP::Block(ref doc) => {
-                DocumentDUBPStr::Block(Box::new(doc.to_string_object()))
-            }
-            DocumentDUBP::UserDocument(ref user_doc) => {
-                DocumentDUBPStr::UserDocument(user_doc.to_string_object())
-            }
-        }
-    }
-}
-
 impl ToStringObject for UserDocumentDUBP {
     type StringObject = UserDocumentDUBPStr;
 
diff --git a/lib/dubp/documents/src/documents/revocation.rs b/lib/dubp/user-docs/src/documents/revocation.rs
similarity index 100%
rename from lib/dubp/documents/src/documents/revocation.rs
rename to lib/dubp/user-docs/src/documents/revocation.rs
diff --git a/lib/dubp/documents/src/documents/revocation/v10.rs b/lib/dubp/user-docs/src/documents/revocation/v10.rs
similarity index 100%
rename from lib/dubp/documents/src/documents/revocation/v10.rs
rename to lib/dubp/user-docs/src/documents/revocation/v10.rs
diff --git a/lib/dubp/documents/src/documents/transaction.rs b/lib/dubp/user-docs/src/documents/transaction.rs
similarity index 100%
rename from lib/dubp/documents/src/documents/transaction.rs
rename to lib/dubp/user-docs/src/documents/transaction.rs
diff --git a/lib/dubp/documents/src/lib.rs b/lib/dubp/user-docs/src/lib.rs
similarity index 100%
rename from lib/dubp/documents/src/lib.rs
rename to lib/dubp/user-docs/src/lib.rs
diff --git a/lib/dubp/documents/src/parsers/certifications.rs b/lib/dubp/user-docs/src/parsers/certifications.rs
similarity index 100%
rename from lib/dubp/documents/src/parsers/certifications.rs
rename to lib/dubp/user-docs/src/parsers/certifications.rs
diff --git a/lib/dubp/documents/src/parsers/identities.rs b/lib/dubp/user-docs/src/parsers/identities.rs
similarity index 100%
rename from lib/dubp/documents/src/parsers/identities.rs
rename to lib/dubp/user-docs/src/parsers/identities.rs
diff --git a/lib/dubp/documents/src/parsers/memberships.rs b/lib/dubp/user-docs/src/parsers/memberships.rs
similarity index 100%
rename from lib/dubp/documents/src/parsers/memberships.rs
rename to lib/dubp/user-docs/src/parsers/memberships.rs
diff --git a/lib/dubp/documents/src/parsers/mod.rs b/lib/dubp/user-docs/src/parsers/mod.rs
similarity index 57%
rename from lib/dubp/documents/src/parsers/mod.rs
rename to lib/dubp/user-docs/src/parsers/mod.rs
index c9b80fb0647df0a9e98a9af5e6cc0d45cdc63287..5cadf3d85d4e2e8161b60b20fc84a99f766b41a8 100644
--- a/lib/dubp/documents/src/parsers/mod.rs
+++ b/lib/dubp/user-docs/src/parsers/mod.rs
@@ -13,9 +13,6 @@
 // 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/>.
 
-/// Parsers for block
-pub mod blocks;
-
 /// Parsers for certifications
 pub mod certifications;
 
@@ -35,13 +32,16 @@ use json_pest_parser::{JSONValue, Number};
 use serde_json::Value;
 use std::collections::HashMap;
 
-type DefaultHasher = std::hash::BuildHasherDefault<std::collections::hash_map::DefaultHasher>;
+/// Default hasher
+pub type DefaultHasher = std::hash::BuildHasherDefault<std::collections::hash_map::DefaultHasher>;
 
 #[derive(Copy, Clone, Debug, Fail)]
 #[fail(display = "Fail to convert serde_json::Value into json_pest_parser::JSONValue")]
-struct JsonValueConversionError;
+/// Error on conversion of serde_json value into pest_json value
+pub struct JsonValueConversionError;
 
-fn serde_json_value_to_pest_json_value(
+/// Convert serde_json value into pest_json value
+pub fn serde_json_value_to_pest_json_value(
     value: &Value,
 ) -> Result<JSONValue<DefaultHasher>, JsonValueConversionError> {
     match value {
@@ -77,50 +77,3 @@ fn serde_json_value_to_pest_json_value(
 
 //std::collections::HashMap<&str, json_pest_parser::JSONValue<'_, std::hash::BuildHasherDefault<std::collections::hash_map::DefaultHasher>>>
 //std::iter::Iterator<Item=(&std::string::String, json_pest_parser::JSONValue<'_, std::hash::BuildHasherDefault<std::collections::hash_map::DefaultHasher>>)>
-
-#[cfg(test)]
-mod tests {
-    use crate::documents::transaction::*;
-    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 {
-        let expected_tx_builder = TransactionDocumentBuilder {
-            currency: &"g1",
-            blockstamp: &Blockstamp::from_string(
-                "50-00001DAA4559FEDB8320D1040B0F22B631459F36F237A0D9BC1EB923C12A12E7",
-            )
-            .expect("Fail to parse blockstamp"),
-            locktime: &0,
-            issuers: &vec![PubKey::Ed25519(
-                ed25519::PublicKey::from_base58("2ny7YAdmzReQxAayyJZsyVYwYhVyax2thKcGknmQy5nQ")
-                    .expect("Fail to parse issuer !"),
-            )],
-            inputs: &vec![TransactionInput::from_str(
-                "1000:0:D:2ny7YAdmzReQxAayyJZsyVYwYhVyax2thKcGknmQy5nQ:1",
-            )
-            .expect("Fail to parse inputs")],
-            unlocks: &vec![
-                TransactionInputUnlocks::from_str("0:SIG(0)").expect("Fail to parse unlocks")
-            ],
-            outputs: &vec![
-                TransactionOutput::from_str(
-                    "1:0:SIG(Com8rJukCozHZyFao6AheSsfDQdPApxQRnz7QYFf64mm)",
-                )
-                .expect("Fail to parse outputs"),
-                TransactionOutput::from_str(
-                    "999:0:SIG(2ny7YAdmzReQxAayyJZsyVYwYhVyax2thKcGknmQy5nQ)",
-                )
-                .expect("Fail to parse outputs"),
-            ],
-            comment: "TEST",
-            hash: None,
-        };
-
-        expected_tx_builder.build_with_signature(vec![Sig::Ed25519(
-                ed25519::Signature::from_base64("fAH5Gor+8MtFzQZ++JaJO6U8JJ6+rkqKtPrRr/iufh3MYkoDGxmjzj6jCADQL+hkWBt8y8QzlgRkz0ixBcKHBw==").expect("Fail to parse sig !")
-            )])
-    }
-}
diff --git a/lib/dubp/documents/src/parsers/revoked.rs b/lib/dubp/user-docs/src/parsers/revoked.rs
similarity index 100%
rename from lib/dubp/documents/src/parsers/revoked.rs
rename to lib/dubp/user-docs/src/parsers/revoked.rs
diff --git a/lib/dubp/documents/src/parsers/transactions.rs b/lib/dubp/user-docs/src/parsers/transactions.rs
similarity index 70%
rename from lib/dubp/documents/src/parsers/transactions.rs
rename to lib/dubp/user-docs/src/parsers/transactions.rs
index ba282dd6e4539501a4467296814f10b8e93d88de..7d6f5e714a08bfa6738122e43f648dfd176c29ca 100644
--- a/lib/dubp/documents/src/parsers/transactions.rs
+++ b/lib/dubp/user-docs/src/parsers/transactions.rs
@@ -86,9 +86,50 @@ pub fn parse_json_transaction(
 #[cfg(test)]
 mod tests {
     use super::*;
+    use dubp_common_doc::traits::DocumentBuilder;
+    use dubp_common_doc::Blockstamp;
+    use std::str::FromStr;
+
+    pub fn first_g1_tx_doc() -> TransactionDocument {
+        let expected_tx_builder = TransactionDocumentBuilder {
+            currency: &"g1",
+            blockstamp: &Blockstamp::from_string(
+                "50-00001DAA4559FEDB8320D1040B0F22B631459F36F237A0D9BC1EB923C12A12E7",
+            )
+            .expect("Fail to parse blockstamp"),
+            locktime: &0,
+            issuers: &vec![PubKey::Ed25519(
+                ed25519::PublicKey::from_base58("2ny7YAdmzReQxAayyJZsyVYwYhVyax2thKcGknmQy5nQ")
+                    .expect("Fail to parse issuer !"),
+            )],
+            inputs: &vec![TransactionInput::from_str(
+                "1000:0:D:2ny7YAdmzReQxAayyJZsyVYwYhVyax2thKcGknmQy5nQ:1",
+            )
+            .expect("Fail to parse inputs")],
+            unlocks: &vec![
+                TransactionInputUnlocks::from_str("0:SIG(0)").expect("Fail to parse unlocks")
+            ],
+            outputs: &vec![
+                TransactionOutput::from_str(
+                    "1:0:SIG(Com8rJukCozHZyFao6AheSsfDQdPApxQRnz7QYFf64mm)",
+                )
+                .expect("Fail to parse outputs"),
+                TransactionOutput::from_str(
+                    "999:0:SIG(2ny7YAdmzReQxAayyJZsyVYwYhVyax2thKcGknmQy5nQ)",
+                )
+                .expect("Fail to parse outputs"),
+            ],
+            comment: "TEST",
+            hash: None,
+        };
+
+        expected_tx_builder.build_with_signature(vec![Sig::Ed25519(
+                ed25519::Signature::from_base64("fAH5Gor+8MtFzQZ++JaJO6U8JJ6+rkqKtPrRr/iufh3MYkoDGxmjzj6jCADQL+hkWBt8y8QzlgRkz0ixBcKHBw==").expect("Fail to parse sig !")
+            )])
+    }
 
     #[test]
-    fn parse_empty_json_block() {
+    fn test_parse_json_tx() {
         let tx_json_str = r#"{
      "version": 10,
      "currency": "g1",
@@ -120,7 +161,7 @@ mod tests {
             json_pest_parser::parse_json_string(tx_json_str).expect("Fail to parse json tx !");
 
         assert_eq!(
-            crate::parsers::tests::first_g1_tx_doc(),
+            first_g1_tx_doc(),
             parse_json_transaction(&tx_json_value).expect("Fail to parse tx_json_value !")
         );
     }
diff --git a/lib/dunp/network-documents/Cargo.toml b/lib/dunp/network-documents/Cargo.toml
index 1c272107c4df8211bbb8d4682853891226e80091..06a488ba6aa3691fde79bd27c3f987b336672fd3 100644
--- a/lib/dunp/network-documents/Cargo.toml
+++ b/lib/dunp/network-documents/Cargo.toml
@@ -15,7 +15,7 @@ path = "src/lib.rs"
 base58 = "0.1.*"
 dubp-common-doc = { path = "../../dubp/common-doc" } #, version = "0.1.0" }
 dubp-currency-params = { path = "../../dubp/currency-params" }
-dubp-documents= { path = "../../dubp/documents" }
+dubp-user-docs= { path = "../../dubp/user-docs" }
 dup-crypto = { path = "../../crypto" }
 durs-common-tools = { path = "../../tools/common-tools" }
 failure = "0.1.5"
diff --git a/lib/modules/blockchain/blockchain-dal/Cargo.toml b/lib/modules/blockchain/blockchain-dal/Cargo.toml
index f6d40bdedec0dceeab733c771838e4a0d06b1e11..7af736a1e2e0d29c7b378ee73391eb1b1741b8b5 100644
--- a/lib/modules/blockchain/blockchain-dal/Cargo.toml
+++ b/lib/modules/blockchain/blockchain-dal/Cargo.toml
@@ -10,10 +10,11 @@ edition = "2018"
 path = "src/lib.rs"
 
 [dependencies]
+dubp-block-doc = { path = "../../../dubp/block-doc"} #, version = "0.1.0" }
 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" }
+dubp-user-docs= { path = "../../../dubp/user-docs" }
 durs-conf = { path = "../../../core/conf" }
 durs-module = { path = "../../../core/module" }
 durs-common-tools = { path = "../../../tools/common-tools" }
@@ -29,7 +30,7 @@ unwrap = "1.2.1"
 
 [dev-dependencies]
 dup-crypto-tests-tools = { path = "../../../tests-tools/crypto-tests-tools" }
-dubp-documents-tests-tools = { path = "../../../tests-tools/documents-tests-tools" }
+dubp-user-docs-tests-tools = { path = "../../../tests-tools/user-docs-tests-tools" }
 durs-common-tests-tools = { path = "../../../tests-tools/common-tests-tools" }
 
 [features]
diff --git a/lib/modules/blockchain/blockchain-dal/src/entities/block.rs b/lib/modules/blockchain/blockchain-dal/src/entities/block.rs
index 059260fe0e11037dfcbc59824ae8f656e2e534f5..e93bdd72b3a1b7004d2c191722cab6999009bdc6 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_block_doc::block::{BlockDocument, BlockDocumentTrait};
 use dubp_common_doc::traits::Document;
 use dubp_common_doc::BlockNumber;
-use dubp_documents::documents::block::{BlockDocument, BlockDocumentTrait};
 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 69abeffec0029df608083d0e85feec2bb63cf1d2..7c27bfeab9310972c9205e0be963b194dbe79f85 100644
--- a/lib/modules/blockchain/blockchain-dal/src/entities/fork_tree.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/entities/fork_tree.rs
@@ -533,7 +533,7 @@ mod tests {
         // Fill tree with 10 nodes
         let mut tree = ForkTree::default();
         let blockstamps: Vec<Blockstamp> =
-            dubp_documents_tests_tools::mocks::generate_blockstamps(10);
+            dubp_user_docs_tests_tools::mocks::generate_blockstamps(10);
         tree.insert_new_node(blockstamps[0], None, true);
         for i in 1..10 {
             tree.insert_new_node(blockstamps[i], Some(TreeNodeId(i - 1)), true);
@@ -620,7 +620,7 @@ mod tests {
     fn insert_more_fork_window_size_nodes() {
         let mut tree = ForkTree::default();
         let blockstamps: Vec<Blockstamp> =
-            dubp_documents_tests_tools::mocks::generate_blockstamps(*DEFAULT_FORK_WINDOW_SIZE + 2);
+            dubp_user_docs_tests_tools::mocks::generate_blockstamps(*DEFAULT_FORK_WINDOW_SIZE + 2);
 
         // Fill tree with MAX_DEPTH nodes
         tree.insert_new_node(blockstamps[0], None, true);
@@ -657,7 +657,7 @@ mod tests {
     fn test_change_main_branch() {
         let mut tree = ForkTree::default();
         let blockstamps: Vec<Blockstamp> =
-            dubp_documents_tests_tools::mocks::generate_blockstamps(*DEFAULT_FORK_WINDOW_SIZE + 2);
+            dubp_user_docs_tests_tools::mocks::generate_blockstamps(*DEFAULT_FORK_WINDOW_SIZE + 2);
 
         // Fill tree with MAX_DEPTH nodes
         tree.insert_new_node(blockstamps[0], None, true);
diff --git a/lib/modules/blockchain/blockchain-dal/src/entities/identity.rs b/lib/modules/blockchain/blockchain-dal/src/entities/identity.rs
index 6bc7d8f6519ed5053498636dd590f73a39354276..ab1e1e4344a3899e68596474373e5daab8d056ca 100644
--- a/lib/modules/blockchain/blockchain-dal/src/entities/identity.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/entities/identity.rs
@@ -14,7 +14,7 @@
 // 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_user_docs::documents::identity::IdentityDocumentV10;
 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 defd3a4331c01cef38b0c82f89670e1b4894f711..0e059ecc7bb918efb00d437ddd33182611089ea2 100644
--- a/lib/modules/blockchain/blockchain-dal/src/entities/sources.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/entities/sources.rs
@@ -14,7 +14,7 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use dubp_common_doc::BlockNumber;
-use dubp_documents::documents::transaction::*;
+use dubp_user_docs::documents::transaction::*;
 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/lib.rs b/lib/modules/blockchain/blockchain-dal/src/lib.rs
index 5057cf08322e3614ca161aa27dd54ac295f6f1ff..d2f4c9b1360c5c734b18df19ac9654736215ca67 100644
--- a/lib/modules/blockchain/blockchain-dal/src/lib.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/lib.rs
@@ -52,7 +52,7 @@ pub mod tools;
 pub mod writers;
 
 use dubp_common_doc::{BlockNumber, Blockstamp, PreviousBlockstamp};
-use dubp_documents::documents::transaction::*;
+use dubp_user_docs::documents::transaction::*;
 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 670467afb4808878d8dcf37d9db3aa9fa4234d6a..034b15e7736dc2cbe46d81156dc6dc9b067c62e6 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_block_doc::block::{BlockDocument, BlockDocumentTrait};
 use dubp_common_doc::traits::Document;
 use dubp_common_doc::{BlockHash, BlockNumber, Blockstamp};
-use dubp_documents::documents::block::{BlockDocument, BlockDocumentTrait};
 use dup_crypto::keys::*;
 use std::collections::HashMap;
 use unwrap::unwrap;
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 bf047f0dfbf05521244e932f8c74f9fd3edc67bf..70aa7f536541d0accea97ee63fcc544f74b4f7d6 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_block_doc::block::{BlockDocument, BlockDocumentTrait};
 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 unwrap::unwrap;
 
 /// Get and write currency params
diff --git a/lib/modules/blockchain/blockchain-dal/src/readers/identity.rs b/lib/modules/blockchain/blockchain-dal/src/readers/identity.rs
index 04db9db50e20e21d7140ba1dbfd6c75e215d3076..78539356278981bbf356618d714addebb20228d4 100644
--- a/lib/modules/blockchain/blockchain-dal/src/readers/identity.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/readers/identity.rs
@@ -132,7 +132,7 @@ mod test {
             joined_on: Blockstamp::default(),
             expired_on: None,
             revoked_on: None,
-            idty_doc: dubp_documents_tests_tools::mocks::identity::gen_mock_idty(
+            idty_doc: dubp_user_docs_tests_tools::mocks::identity::gen_mock_idty(
                 pubkey,
                 created_block_id,
             ),
diff --git a/lib/modules/blockchain/blockchain-dal/src/tools.rs b/lib/modules/blockchain/blockchain-dal/src/tools.rs
index 14cfa3a4c314590c54de7ef3dd8560ab6dfe1618..c3e3286acb0608faed8222c6189bf8c7cd3cfecb 100644
--- a/lib/modules/blockchain/blockchain-dal/src/tools.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/tools.rs
@@ -14,7 +14,7 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::entities::block::DALBlock;
-use dubp_documents::documents::block::BlockDocumentTrait;
+use dubp_block_doc::block::BlockDocumentTrait;
 use dup_crypto::keys::PubKey;
 use durs_common_tools::fatal_error;
 use durs_wot::operations::centrality::{CentralitiesCalculator, UlrikBrandesCentralityCalculator};
diff --git a/lib/modules/blockchain/blockchain-dal/src/writers/block.rs b/lib/modules/blockchain/blockchain-dal/src/writers/block.rs
index c2b9640c99326f5ffc1a725dd92c82f285609a14..3e8f991d19cd36e6aae504d00317611b553cdc09 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_block_doc::block::BlockDocumentTrait;
 use dubp_common_doc::traits::Document;
-use dubp_documents::documents::block::BlockDocumentTrait;
 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 92a6790d4ecdba3ab2cbc340409f645f5ef17ee5..63cd60e48d6caa8600c82747d88fbcecc8575e10 100644
--- a/lib/modules/blockchain/blockchain-dal/src/writers/certification.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/writers/certification.rs
@@ -16,7 +16,7 @@
 use crate::{BinDB, CertsExpirV10Datas, DALError, IdentitiesV10Datas};
 use dubp_common_doc::BlockNumber;
 use dubp_currency_params::CurrencyParameters;
-use dubp_documents::documents::certification::CompactCertificationDocumentV10;
+use dubp_user_docs::documents::certification::CompactCertificationDocumentV10;
 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 96c6b987e098b710c9d9e4dd34cb876c6cc56f60..cfeb9b1e2b6c01e8b5ccec946dd032aa91a32137 100644
--- a/lib/modules/blockchain/blockchain-dal/src/writers/dividend.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/writers/dividend.rs
@@ -16,7 +16,7 @@
 use crate::entities::sources::SourceAmount;
 use crate::*;
 use dubp_common_doc::BlockNumber;
-use dubp_documents::documents::transaction::*;
+use dubp_user_docs::documents::transaction::*;
 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 7fc62d5d8fe34bea3204f16b65f09c7a6588f478..d95cf6c005de9381daeb82dbd29ba6b871e981c9 100644
--- a/lib/modules/blockchain/blockchain-dal/src/writers/fork_tree.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/writers/fork_tree.rs
@@ -96,7 +96,7 @@ mod test {
     fn test_insert_new_head_block() -> Result<(), DALError> {
         // Create mock datas
         let blockstamps =
-            dubp_documents_tests_tools::mocks::generate_blockstamps(*DEFAULT_FORK_WINDOW_SIZE + 2);
+            dubp_user_docs_tests_tools::mocks::generate_blockstamps(*DEFAULT_FORK_WINDOW_SIZE + 2);
         let fork_tree_db = open_db::<ForksTreeV10Datas>(None, "")?;
 
         // Insert genesis block
@@ -150,7 +150,7 @@ mod test {
     fn test_insert_new_fork_block() -> Result<(), DALError> {
         // Create mock datas
         let blockstamps =
-            dubp_documents_tests_tools::mocks::generate_blockstamps(*DEFAULT_FORK_WINDOW_SIZE + 3);
+            dubp_user_docs_tests_tools::mocks::generate_blockstamps(*DEFAULT_FORK_WINDOW_SIZE + 3);
         let fork_tree_db = open_db::<ForksTreeV10Datas>(None, "")?;
 
         // Insert 4 main blocks
diff --git a/lib/modules/blockchain/blockchain-dal/src/writers/identity.rs b/lib/modules/blockchain/blockchain-dal/src/writers/identity.rs
index bc3b5c1078bb497d60a47f437da165460ce194b7..b9ed989947e9f373dd04b0163ef101bb296a186d 100644
--- a/lib/modules/blockchain/blockchain-dal/src/writers/identity.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/writers/identity.rs
@@ -18,7 +18,7 @@ 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_user_docs::documents::identity::IdentityDocumentV10;
 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 ca6bf3d2f96c894f8cb1348c32f783c50ec7a8b8..7ece8baf5e3e16e099cd1d362bd0cdcfac57c53c 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_block_doc::block::{BlockDocument, BlockDocumentTrait};
 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_user_docs::documents::certification::CompactCertificationDocumentV10;
+use dubp_user_docs::documents::identity::IdentityDocumentV10;
 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 12e5d1e0be0480390f772153ded5142ea78c540a..3800696e1b46cd65b3382f0bd32d3aa95f2a18f8 100644
--- a/lib/modules/blockchain/blockchain-dal/src/writers/transaction.rs
+++ b/lib/modules/blockchain/blockchain-dal/src/writers/transaction.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::documents::transaction::*;
+use dubp_user_docs::documents::transaction::*;
 use durs_common_tools::fatal_error;
 
 use crate::entities::sources::{SourceAmount, SourceIndexV10, UTXOIndexV10, UTXOV10};
diff --git a/lib/modules/blockchain/blockchain/Cargo.toml b/lib/modules/blockchain/blockchain/Cargo.toml
index 4dd46f126c89bcad963be369073178d28f9bf4c2..24c25ab3ca3eaa07f2bf435a212afb7dd2d2924e 100644
--- a/lib/modules/blockchain/blockchain/Cargo.toml
+++ b/lib/modules/blockchain/blockchain/Cargo.toml
@@ -12,11 +12,12 @@ path = "src/lib.rs"
 [dependencies]
 dirs = "1.0.2"
 durs-conf = { path = "../../../core/conf" }
+dubp-block-doc = { path = "../../../dubp/block-doc"} #, version = "0.1.0" }
 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" }
+dubp-user-docs= { path = "../../../dubp/user-docs" }
 durs-common-tools = { path = "../../../tools/common-tools" }
 durs-network-documents = { path = "../../../dunp/network-documents" }
 durs-message =  { path = "../../../core/message" }
@@ -36,4 +37,4 @@ unwrap = "1.2.1"
 
 [dev-dependencies]
 dup-crypto-tests-tools = { path = "../../../tests-tools/crypto-tests-tools" }
-dubp-documents-tests-tools = { path = "../../../tests-tools/documents-tests-tools" }
\ No newline at end of file
+dubp-user-docs-tests-tools = { path = "../../../tests-tools/user-docs-tests-tools" }
\ No newline at end of file
diff --git a/lib/modules/blockchain/blockchain/src/dbex.rs b/lib/modules/blockchain/blockchain/src/dbex.rs
index 24c8cc07a0a11b78d6f8fd56bd8e487444503d89..3d55dbb480e9a44e69bfa5f259bcd5faedded469 100644
--- a/lib/modules/blockchain/blockchain/src/dbex.rs
+++ b/lib/modules/blockchain/blockchain/src/dbex.rs
@@ -14,9 +14,9 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::*;
+use dubp_block_doc::block::BlockDocumentTrait;
 use dubp_common_doc::BlockNumber;
-use dubp_documents::documents::block::BlockDocumentTrait;
-use dubp_documents::documents::transaction::*;
+use dubp_user_docs::documents::transaction::*;
 use dup_crypto::keys::*;
 use durs_wot::data::rusty::RustyWebOfTrust;
 use durs_wot::data::WebOfTrust;
diff --git a/lib/modules/blockchain/blockchain/src/dubp/apply/mod.rs b/lib/modules/blockchain/blockchain/src/dubp/apply/mod.rs
index 797f03b20781baa49e5f6cb52ff9662b73127777..1ecda1f812ac0ded6050229a7a8a7ab2b190f716 100644
--- a/lib/modules/blockchain/blockchain/src/dubp/apply/mod.rs
+++ b/lib/modules/blockchain/blockchain/src/dubp/apply/mod.rs
@@ -15,10 +15,10 @@
 
 //! Sub-module that applies the content of a block to the indexes of the local blockchain.
 
+use dubp_block_doc::block::{BlockDocument, BlockDocumentTrait, BlockDocumentV10};
 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_user_docs::documents::transaction::{TxAmount, TxBase};
 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/hashs.rs b/lib/modules/blockchain/blockchain/src/dubp/check/hashs.rs
index d8b7a054da95b6207238f6e9c8c338d5d4f400ae..f6b4673031e8249ac3cb0ee1b77d6fe727c5a761 100644
--- a/lib/modules/blockchain/blockchain/src/dubp/check/hashs.rs
+++ b/lib/modules/blockchain/blockchain/src/dubp/check/hashs.rs
@@ -15,7 +15,7 @@
 
 //! Verify block inner hash and block hash
 
-use dubp_documents::documents::block::{BlockDocument, BlockDocumentTrait, VerifyBlockHashError};
+use dubp_block_doc::block::{BlockDocument, BlockDocumentTrait, VerifyBlockHashError};
 
 /// Verify block hashs
 pub fn verify_block_hashs(block_doc: &BlockDocument) -> Result<(), VerifyBlockHashError> {
diff --git a/lib/modules/blockchain/blockchain/src/dubp/check/mod.rs b/lib/modules/blockchain/blockchain/src/dubp/check/mod.rs
index e93eb88292c89ea98d787ed61aed371edbf9c117..4ad8c2698152135cf03d980312cf0921a1ed1988 100644
--- a/lib/modules/blockchain/blockchain/src/dubp/check/mod.rs
+++ b/lib/modules/blockchain/blockchain/src/dubp/check/mod.rs
@@ -18,9 +18,9 @@
 pub mod hashs;
 
 use crate::dubp::BlockError;
+use dubp_block_doc::block::{BlockDocument, BlockDocumentTrait};
 use dubp_common_doc::traits::Document;
 use dubp_common_doc::BlockNumber;
-use dubp_documents::documents::block::{BlockDocument, BlockDocumentTrait};
 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 974daff5125530a66b8ed27e856bb3f942b2cf07..5023e3f9425160a017438cf93e892e68b44220b3 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_block_doc::block::{BlockDocumentTrait, VerifyBlockHashError};
 use dubp_common_doc::traits::Document;
 use dubp_common_doc::{BlockNumber, Blockstamp};
-use dubp_documents::documents::block::{BlockDocumentTrait, VerifyBlockHashError};
 use durs_blockchain_dal::entities::block::DALBlock;
 use durs_blockchain_dal::*;
 use unwrap::unwrap;
diff --git a/lib/modules/blockchain/blockchain/src/dunp/receiver.rs b/lib/modules/blockchain/blockchain/src/dunp/receiver.rs
index d304eb133828b116f4cc1cfb5316402c94534027..3fb479a61e0cf72f71b5a52ce602c3c8a99534c3 100644
--- a/lib/modules/blockchain/blockchain/src/dunp/receiver.rs
+++ b/lib/modules/blockchain/blockchain/src/dunp/receiver.rs
@@ -18,7 +18,7 @@
 
 use crate::*;
 use dubp_common_doc::traits::Document;
-use dubp_documents::documents::UserDocumentDUBP;
+use dubp_user_docs::documents::UserDocumentDUBP;
 use unwrap::unwrap;
 
 pub fn receive_user_documents(_bc: &mut BlockchainModule, network_documents: &[UserDocumentDUBP]) {
diff --git a/lib/modules/blockchain/blockchain/src/fork/fork_algo.rs b/lib/modules/blockchain/blockchain/src/fork/fork_algo.rs
index 8a8db8e3033505aefaaf2a7f3824040027e833f3..b049c1a30f897d8ec46f7868aa373d3f970fb286 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_block_doc::block::BlockDocumentTrait;
 use dubp_common_doc::Blockstamp;
-use dubp_documents::documents::block::BlockDocumentTrait;
 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_block_doc::BlockDocument;
     use dubp_common_doc::{BlockHash, BlockNumber};
-    use dubp_documents::documents::block::BlockDocument;
     use durs_blockchain_dal::entities::block::DALBlock;
 
     #[test]
@@ -118,7 +118,7 @@ mod tests {
 
         // Generate `FORK_WINDOW_SIZE + 2` mock blocks
         let main_branch: Vec<BlockDocument> =
-            dubp_documents_tests_tools::mocks::gen_empty_timed_blocks_v10(
+            dubp_user_docs_tests_tools::mocks::gen_empty_timed_blocks_v10(
                 fork_window_size + 2,
                 0u64,
             );
@@ -156,7 +156,7 @@ mod tests {
         let fork_blocks: Vec<BlockDocument> = (0..3)
             .map(|i| {
                 BlockDocument::V10(
-                    dubp_documents_tests_tools::mocks::gen_empty_timed_block_v10(
+                    dubp_user_docs_tests_tools::mocks::gen_empty_timed_block_v10(
                         Blockstamp {
                             id: BlockNumber(fork_point.number().0 + i + 1),
                             hash: BlockHash(dup_crypto_tests_tools::mocks::hash('A')),
@@ -203,7 +203,7 @@ mod tests {
                 &forks_dbs,
                 DALBlock {
                     block: BlockDocument::V10(
-                        dubp_documents_tests_tools::mocks::gen_empty_timed_block_v10(
+                        dubp_user_docs_tests_tools::mocks::gen_empty_timed_block_v10(
                             determining_blockstamp,
                             *ADVANCE_TIME,
                             dup_crypto_tests_tools::mocks::hash('A'),
@@ -235,7 +235,7 @@ mod tests {
         let new_main_blocks: Vec<BlockDocument> = (0..7)
             .map(|i| {
                 BlockDocument::V10(
-                    dubp_documents_tests_tools::mocks::gen_empty_timed_block_v10(
+                    dubp_user_docs_tests_tools::mocks::gen_empty_timed_block_v10(
                         Blockstamp {
                             id: BlockNumber(fork_point.number().0 + i + 1),
                             hash: BlockHash(dup_crypto_tests_tools::mocks::hash('B')),
diff --git a/lib/modules/blockchain/blockchain/src/fork/revert_block.rs b/lib/modules/blockchain/blockchain/src/fork/revert_block.rs
index 47924b69b8a74257d278272df0cadb4d8ed3cf5b..a7d08b00dded99d47715e09532ef0250fa5faad7 100644
--- a/lib/modules/blockchain/blockchain/src/fork/revert_block.rs
+++ b/lib/modules/blockchain/blockchain/src/fork/revert_block.rs
@@ -15,11 +15,11 @@
 
 //! Sub-module that applies a block backwards.
 
+use dubp_block_doc::block::v10::TxDocOrTxHash;
+use dubp_block_doc::block::{BlockDocument, BlockDocumentTrait, BlockDocumentV10};
 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_user_docs::documents::transaction::{TxAmount, TxBase};
 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/stackable_blocks.rs b/lib/modules/blockchain/blockchain/src/fork/stackable_blocks.rs
index 1628a28299c521e3746d84ae2d04eeded3b47d2d..8f0e348b73958efcbf33f909c77053292868ae34 100644
--- a/lib/modules/blockchain/blockchain/src/fork/stackable_blocks.rs
+++ b/lib/modules/blockchain/blockchain/src/fork/stackable_blocks.rs
@@ -16,8 +16,8 @@
 //! Sub-module that finds and applies the orphaned blocks that have become stackable on the local blockchain.
 
 use crate::*;
+use dubp_block_doc::block::BlockDocumentTrait;
 use dubp_common_doc::traits::Document;
-use dubp_documents::documents::block::BlockDocumentTrait;
 use unwrap::unwrap;
 
 pub fn apply_stackable_blocks(bc: &mut BlockchainModule) {
diff --git a/lib/modules/blockchain/blockchain/src/lib.rs b/lib/modules/blockchain/blockchain/src/lib.rs
index ef8c080273016ea869c554d64c8d3672582f9473..b28b072ca102f02169bc9da889e42d3f7dda5ba7 100644
--- a/lib/modules/blockchain/blockchain/src/lib.rs
+++ b/lib/modules/blockchain/blockchain/src/lib.rs
@@ -54,10 +54,10 @@ pub use crate::dbex::{DBExQuery, DBExTxQuery, DBExWotQuery};
 use crate::dubp::apply::ValidBlockApplyReqs;
 use crate::dubp::*;
 use crate::fork::*;
+use dubp_block_doc::BlockDocument;
 use dubp_common_doc::traits::Document;
 use dubp_common_doc::Blockstamp;
 use dubp_currency_params::{CurrencyName, CurrencyParameters};
-use dubp_documents::documents::block::BlockDocument;
 use dup_crypto::keys::*;
 use durs_blockchain_dal::*;
 use durs_common_tools::fatal_error;
diff --git a/lib/modules/blockchain/blockchain/src/requests/received.rs b/lib/modules/blockchain/blockchain/src/requests/received.rs
index 350d320cc4486425e0c87bb3bcf1a13ecc3e275b..00fd40c0a4ffeb625026f96848297fad3b54dc01 100644
--- a/lib/modules/blockchain/blockchain/src/requests/received.rs
+++ b/lib/modules/blockchain/blockchain/src/requests/received.rs
@@ -16,7 +16,7 @@
 //! Sub-module managing the inter-modules requests received.
 
 use crate::*;
-use dubp_documents::documents::identity::IdentityDocument;
+use dubp_user_docs::documents::identity::IdentityDocument;
 use durs_message::requests::*;
 use durs_module::*;
 
diff --git a/lib/modules/blockchain/blockchain/src/sync/apply/mod.rs b/lib/modules/blockchain/blockchain/src/sync/apply/mod.rs
index 8529764fd7b6c6961c332cfd5d553d7705311e9d..449301d3b0b2207dfda37c4179cc4f1c21335ba0 100644
--- a/lib/modules/blockchain/blockchain/src/sync/apply/mod.rs
+++ b/lib/modules/blockchain/blockchain/src/sync/apply/mod.rs
@@ -21,10 +21,10 @@ use crate::dubp;
 use crate::dubp::apply::apply_valid_block;
 use crate::dubp::apply::ValidBlockApplyReqs;
 use crate::sync::SyncJobsMess;
+use dubp_block_doc::block::{BlockDocument, BlockDocumentTrait};
 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 dup_crypto::keys::PubKey;
 use durs_blockchain_dal::writers::requests::WotsDBsWriteQuery;
 use durs_blockchain_dal::{BinDB, CertsExpirV10Datas, WotsV10DBs};
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 e10df647dd1434ef7c88141faf5344c9c3981232..a54e6301c99a75f70e7eb5312ffb55fd09ced9f0 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,9 +14,9 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 use crate::sync::*;
+use dubp_block_doc::parser::parse_json_block;
 use dubp_common_doc::traits::Document;
 use dubp_common_doc::Blockstamp;
-use dubp_documents::parsers::blocks::parse_json_block;
 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 7fe6c503a680f7641d433bb61e3d21e3f337d941..69bb701338fa3c8d8a88401e0b980f99d764e949 100644
--- a/lib/modules/blockchain/blockchain/src/sync/mod.rs
+++ b/lib/modules/blockchain/blockchain/src/sync/mod.rs
@@ -18,10 +18,10 @@ mod download;
 
 use crate::*;
 use apply::BlockApplicator;
+use dubp_block_doc::block::BlockDocumentTrait;
 use dubp_common_doc::Blockstamp;
 use dubp_common_doc::{BlockHash, BlockNumber};
 use dubp_currency_params::{CurrencyName, CurrencyParameters};
-use dubp_documents::documents::block::BlockDocumentTrait;
 use dup_crypto::keys::*;
 use durs_blockchain_dal::writers::requests::*;
 use durs_blockchain_dal::{open_memory_db, CertsExpirV10Datas};
diff --git a/lib/modules/skeleton/Cargo.toml b/lib/modules/skeleton/Cargo.toml
index f6757caf4656bcc3425bcc58b02f8498fe5135e6..386d29531d05c0a9b751b2bbb9becb3babbe871d 100644
--- a/lib/modules/skeleton/Cargo.toml
+++ b/lib/modules/skeleton/Cargo.toml
@@ -10,7 +10,7 @@ edition = "2018"
 path = "lib.rs"
 
 [dependencies]
-dubp-documents= { path = "../../dubp/documents" }
+dubp-user-docs= { path = "../../dubp/user-docs" }
 durs-conf = { path = "../../core/conf" }
 durs-message =  { path = "../../core/message" }
 durs-module = { path = "../../core/module" }
diff --git a/lib/modules/tui/Cargo.toml b/lib/modules/tui/Cargo.toml
index 8d23e982361f32d5323d2bf00644c786725466fa..6d5803fd2724847cbb46ea8207a88a365cae431d 100644
--- a/lib/modules/tui/Cargo.toml
+++ b/lib/modules/tui/Cargo.toml
@@ -13,7 +13,7 @@ path = "lib.rs"
 durs-conf = { path = "../../core/conf" }
 dup-crypto = { path = "../../crypto" }
 dubp-currency-params = { path = "../../dubp/currency-params" }
-dubp-documents= { path = "../../dubp/documents" }
+dubp-user-docs= { path = "../../dubp/user-docs" }
 durs-common-tools = { path = "../../tools/common-tools" }
 durs-message =  { path = "../../core/message" }
 durs-module = { path = "../../core/module" }
diff --git a/lib/modules/ws2p-v1-legacy/Cargo.toml b/lib/modules/ws2p-v1-legacy/Cargo.toml
index e2d923dc1b29f799d2aff6d07e88596ffbd910ba..a1bf624321d680778278752e0325104c1510711f 100644
--- a/lib/modules/ws2p-v1-legacy/Cargo.toml
+++ b/lib/modules/ws2p-v1-legacy/Cargo.toml
@@ -12,9 +12,10 @@ path = "src/lib.rs"
 [dependencies]
 bincode = "1.0.1"
 byteorder = "1.2.3"
+dubp-block-doc = { path = "../../dubp/block-doc"} #, version = "0.1.0" }
 dubp-common-doc = { path = "../../dubp/common-doc"} #, version = "0.1.0" }
 dubp-currency-params = { path = "../../dubp/currency-params" }
-dubp-documents= { path = "../../dubp/documents" }
+dubp-user-docs= { path = "../../dubp/user-docs" }
 dup-crypto = { path = "../../crypto" }
 durs-conf = { path = "../../core/conf" }
 durs-module = { path = "../../core/module" }
diff --git a/lib/modules/ws2p-v1-legacy/src/events/sent.rs b/lib/modules/ws2p-v1-legacy/src/events/sent.rs
index 6711e7ecb04387f8df40bf0b00b6b74fe5c4d7d5..2c9fe3ed2a2d9a717f29ab3c86596b12d0fce659 100644
--- a/lib/modules/ws2p-v1-legacy/src/events/sent.rs
+++ b/lib/modules/ws2p-v1-legacy/src/events/sent.rs
@@ -17,7 +17,7 @@
 
 use crate::constants;
 use crate::WS2Pv1Module;
-use dubp_documents::documents::UserDocumentDUBP;
+use dubp_user_docs::documents::UserDocumentDUBP;
 use durs_message::events::DursEvent;
 use durs_message::*;
 use durs_module::{ModuleEvent, ModuleStaticName, RouterThreadMessage};
diff --git a/lib/modules/ws2p-v1-legacy/src/lib.rs b/lib/modules/ws2p-v1-legacy/src/lib.rs
index 045561e4b83b2b386794c15bfc5095a9710c4bae..7163601564107a190f58e44b97fbb0c461bdbca0 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_block_doc::BlockDocument;
 use dubp_common_doc::Blockstamp;
 use dubp_currency_params::CurrencyName;
-use dubp_documents::documents::block::BlockDocument;
-use dubp_documents::documents::UserDocumentDUBP;
+use dubp_user_docs::documents::UserDocumentDUBP;
 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_block_doc::block::{BlockDocument, BlockDocumentTrait};
+    use dubp_block_doc::parser::parse_json_block_from_serde_value;
     use dubp_common_doc::BlockNumber;
-    use dubp_documents::documents::block::{BlockDocument, BlockDocumentTrait};
-    use dubp_documents::parsers::blocks::parse_json_block_from_serde_value;
 
     #[test]
     fn test_parse_json_block() {
diff --git a/lib/modules/ws2p-v1-legacy/src/serializers/block.rs b/lib/modules/ws2p-v1-legacy/src/serializers/block.rs
index 90f4ba8faf6e29be3820aa223045da1574480e1e..6c7b8358bf9f7f43e93c74757d2cb26f77b99fcc 100644
--- a/lib/modules/ws2p-v1-legacy/src/serializers/block.rs
+++ b/lib/modules/ws2p-v1-legacy/src/serializers/block.rs
@@ -16,7 +16,7 @@
 //! Sub-module that serialize BlockDocument into WS2Pv1 json format
 
 use super::IntoWS2Pv1Json;
-use dubp_documents::documents::block::{BlockDocumentStringified, BlockDocumentV10Stringified};
+use dubp_block_doc::block::{BlockDocumentStringified, BlockDocumentV10Stringified};
 
 impl IntoWS2Pv1Json for BlockDocumentStringified {
     fn into_ws2p_v1_json(self) -> serde_json::Value {
diff --git a/lib/modules/ws2p-v1-legacy/src/serializers/certification.rs b/lib/modules/ws2p-v1-legacy/src/serializers/certification.rs
index 76f3d0a4deffe98be4ba0c144f1521274101b2ca..2c8d47a58dde433b3ef16513997b78d7367b2318 100644
--- a/lib/modules/ws2p-v1-legacy/src/serializers/certification.rs
+++ b/lib/modules/ws2p-v1-legacy/src/serializers/certification.rs
@@ -16,7 +16,7 @@
 //! Sub-module that serialize CompactCertificationDocumentV10Stringified into WS2Pv1 json format
 
 use super::IntoWS2Pv1Json;
-use dubp_documents::documents::certification::v10::CompactCertificationDocumentV10Stringified;
+use dubp_user_docs::documents::certification::v10::CompactCertificationDocumentV10Stringified;
 
 impl IntoWS2Pv1Json for CompactCertificationDocumentV10Stringified {
     fn into_ws2p_v1_json(self) -> serde_json::Value {
diff --git a/lib/modules/ws2p-v1-legacy/src/serializers/identity.rs b/lib/modules/ws2p-v1-legacy/src/serializers/identity.rs
index 43b9da802bd3265cdb51f45c0beece1fc9cab516..3befda133fa6bd11457604c059df0dceb237a902 100644
--- a/lib/modules/ws2p-v1-legacy/src/serializers/identity.rs
+++ b/lib/modules/ws2p-v1-legacy/src/serializers/identity.rs
@@ -16,7 +16,7 @@
 //! Sub-module that serialize IdentityDocumentV10Stringified into WS2Pv1 json format
 
 use super::IntoWS2Pv1Json;
-use dubp_documents::documents::identity::IdentityDocumentV10Stringified;
+use dubp_user_docs::documents::identity::IdentityDocumentV10Stringified;
 
 impl IntoWS2Pv1Json for IdentityDocumentV10Stringified {
     fn into_ws2p_v1_json(self) -> serde_json::Value {
diff --git a/lib/modules/ws2p-v1-legacy/src/serializers/membership.rs b/lib/modules/ws2p-v1-legacy/src/serializers/membership.rs
index 014e4008e24c240d6532463405172b27f977531f..b24c9dfecf3094c62d262051154442e8021644db 100644
--- a/lib/modules/ws2p-v1-legacy/src/serializers/membership.rs
+++ b/lib/modules/ws2p-v1-legacy/src/serializers/membership.rs
@@ -16,7 +16,7 @@
 //! Sub-module that serialize MembershipDocumentV10Stringified into WS2Pv1 json format
 
 use super::IntoWS2Pv1Json;
-use dubp_documents::documents::membership::MembershipDocumentV10Stringified;
+use dubp_user_docs::documents::membership::MembershipDocumentV10Stringified;
 
 impl IntoWS2Pv1Json for MembershipDocumentV10Stringified {
     fn into_ws2p_v1_json(self) -> serde_json::Value {
diff --git a/lib/modules/ws2p-v1-legacy/src/serializers/revoked.rs b/lib/modules/ws2p-v1-legacy/src/serializers/revoked.rs
index 74f294fd22317335c9fb5c3d0cf9b41308e4b026..5b35e61cda6017978842720bcfe12ff50238929c 100644
--- a/lib/modules/ws2p-v1-legacy/src/serializers/revoked.rs
+++ b/lib/modules/ws2p-v1-legacy/src/serializers/revoked.rs
@@ -16,7 +16,7 @@
 //! Sub-module that serialize CompactRevocationDocumentV10Stringified into WS2Pv1 json format
 
 use super::IntoWS2Pv1Json;
-use dubp_documents::documents::revocation::CompactRevocationDocumentV10Stringified;
+use dubp_user_docs::documents::revocation::CompactRevocationDocumentV10Stringified;
 
 impl IntoWS2Pv1Json for CompactRevocationDocumentV10Stringified {
     fn into_ws2p_v1_json(self) -> serde_json::Value {
diff --git a/lib/modules/ws2p-v1-legacy/src/serializers/transaction.rs b/lib/modules/ws2p-v1-legacy/src/serializers/transaction.rs
index 5663e57473e19cea04ec9171eadb544720f7381d..fce889544472c7a21661253d0cbd88996c46dbe2 100644
--- a/lib/modules/ws2p-v1-legacy/src/serializers/transaction.rs
+++ b/lib/modules/ws2p-v1-legacy/src/serializers/transaction.rs
@@ -16,7 +16,7 @@
 //! Sub-module that serialize TransactionDocument into WS2Pv1 json format
 
 use super::IntoWS2Pv1Json;
-use dubp_documents::documents::transaction::TransactionDocumentStringified;
+use dubp_user_docs::documents::transaction::TransactionDocumentStringified;
 
 impl IntoWS2Pv1Json for TransactionDocumentStringified {
     fn into_ws2p_v1_json(self) -> serde_json::Value {
diff --git a/lib/modules/ws2p-v1-legacy/src/ws_connections/messages.rs b/lib/modules/ws2p-v1-legacy/src/ws_connections/messages.rs
index 00d6b811c9f48aa4b92c94ec6423d827d105a076..64167849b0530872411801471aa9df96d7323e30 100644
--- a/lib/modules/ws2p-v1-legacy/src/ws_connections/messages.rs
+++ b/lib/modules/ws2p-v1-legacy/src/ws_connections/messages.rs
@@ -17,7 +17,7 @@
 
 use super::*;
 use crate::ws_connections::requests::WS2Pv1ReqBody;
-use dubp_documents::documents::DocumentDUBP;
+use dubp_block_doc::DocumentDUBP;
 use durs_network_documents::NodeFullId;
 use ws::Message;
 
diff --git a/lib/modules/ws2p-v1-legacy/src/ws_connections/meta_datas.rs b/lib/modules/ws2p-v1-legacy/src/ws_connections/meta_datas.rs
index bb6a692e4047cebb3831dbee09f9cce655758e2d..d88eca23087fdda5433cc655531d2d3cfef04ac1 100644
--- a/lib/modules/ws2p-v1-legacy/src/ws_connections/meta_datas.rs
+++ b/lib/modules/ws2p-v1-legacy/src/ws_connections/meta_datas.rs
@@ -19,8 +19,8 @@ use super::messages::WS2Pv1MsgPayload;
 use super::states::WS2PConnectionState;
 use crate::ws_connections::requests::{WS2Pv1ReqBody, WS2Pv1ReqId};
 use crate::*;
-use dubp_documents::documents::DocumentDUBP;
-use dubp_documents::parsers::blocks::parse_json_block_from_serde_value;
+use dubp_block_doc::parser::parse_json_block_from_serde_value;
+use dubp_block_doc::DocumentDUBP;
 use dup_crypto::keys::*;
 use durs_network_documents::network_endpoint::{ApiName, EndpointV1};
 use durs_network_documents::NodeId;
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 a44eea529ed332cc7bb9fc364f7400cf127625b9..a94443cc7d61aa6c739a01d83642285907907cf2 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_block_doc::BlockDocument;
 use dubp_common_doc::traits::ToStringObject;
-use dubp_documents::documents::block::BlockDocument;
 use dup_crypto::keys::PubKey;
 
 /// WS2Pv1 request response
diff --git a/lib/modules/ws2p-v1-legacy/src/ws_connections/responses/received.rs b/lib/modules/ws2p-v1-legacy/src/ws_connections/responses/received.rs
index 138d68477e5e902782d6ea92394cb40c09411f33..bb18e866b6c1e6f8d35e5feb92aef25370170d47 100644
--- a/lib/modules/ws2p-v1-legacy/src/ws_connections/responses/received.rs
+++ b/lib/modules/ws2p-v1-legacy/src/ws_connections/responses/received.rs
@@ -16,7 +16,7 @@
 //! Sub-module managing the WS2Pv1 responses received.
 
 use crate::*;
-use dubp_documents::parsers::blocks::parse_json_block_from_serde_value;
+use dubp_block_doc::parser::parse_json_block_from_serde_value;
 use durs_module::ModuleReqFullId;
 use durs_network::requests::*;
 use durs_network_documents::NodeFullId;
diff --git a/lib/modules/ws2p/ws2p-messages/Cargo.toml b/lib/modules/ws2p/ws2p-messages/Cargo.toml
index ea5a66f0352c52dd7c92079bf8397741aa796913..10c9ede850f2fd1a2efa72058c3b6eefe498ba13 100644
--- a/lib/modules/ws2p/ws2p-messages/Cargo.toml
+++ b/lib/modules/ws2p/ws2p-messages/Cargo.toml
@@ -13,8 +13,9 @@ path = "lib.rs"
 bincode = "1.0.*"
 byteorder = "1.2.3"
 dubp-common-doc = { path = "../../../dubp/common-doc"} #, version = "0.1.0" }
+dubp-block-doc = { path = "../../../dubp/block-doc"} #, version = "0.1.0" }
 dubp-currency-params = { path = "../../../dubp/currency-params" }
-dubp-documents= { path = "../../../dubp/documents" }
+dubp-user-docs= { path = "../../../dubp/user-docs" }
 durs-network-documents = { path = "../../../dunp/network-documents" }
 durs-common-tools = { path = "../../../tools/common-tools" }
 dup-crypto = { path = "../../../crypto" }
diff --git a/lib/modules/ws2p/ws2p-messages/lib.rs b/lib/modules/ws2p/ws2p-messages/lib.rs
index 97f90c584252e110e60cbe11f3231d3a2158593f..71f395bab7d40cbfa504eaebd458aae8d246fbed 100644
--- a/lib/modules/ws2p/ws2p-messages/lib.rs
+++ b/lib/modules/ws2p/ws2p-messages/lib.rs
@@ -160,11 +160,12 @@ impl<'de> BinSignable<'de> for WS2PMessage {
 mod tests {
     use crate::v2::payload_container::WS2Pv2MessagePayload;
     use crate::v2::WS2Pv2Message;
+    use crate::WS2PMessage;
     use bincode;
     use bincode::{deserialize, serialize};
     use dubp_common_doc::{BlockNumber, Blockstamp};
     use dubp_currency_params::CurrencyName;
-    use dubp_documents::documents::certification::*;
+    use dubp_user_docs::documents::certification::*;
     use dup_crypto::keys::bin_signable::BinSignable;
     use dup_crypto::keys::*;
     use durs_network_documents::network_endpoint::*;
@@ -221,14 +222,14 @@ mod tests {
 
     pub fn test_ws2p_message(payload: WS2Pv2MessagePayload) {
         let keypair1 = keypair1();
-        let mut ws2p_message = WS2Pv2Message {
+        let mut ws2p_message = WS2PMessage::V2(WS2Pv2Message {
             currency_name: CurrencyName(String::from("g1")),
             issuer_node_id: NodeId(0),
             issuer_pubkey: PubKey::Ed25519(keypair1.public_key()),
             payload,
             message_hash: None,
             signature: None,
-        };
+        });
 
         let sign_result = ws2p_message.sign(PrivKey::Ed25519(keypair1.private_key()));
         if let Ok(bin_msg) = sign_result {
@@ -242,8 +243,7 @@ mod tests {
                 .verify()
                 .expect("WS2Pv2Message : Invalid signature !");
             // Test debinarization
-            let debinarization_result: Result<WS2Pv2Message, bincode::Error> =
-                deserialize(&bin_msg);
+            let debinarization_result: Result<WS2PMessage, bincode::Error> = deserialize(&bin_msg);
             if let Ok(ws2p_message2) = debinarization_result {
                 assert_eq!(ws2p_message, ws2p_message2);
             } else {
diff --git a/lib/modules/ws2p/ws2p-messages/v2/payload_container.rs b/lib/modules/ws2p/ws2p-messages/v2/payload_container.rs
index 42f19c9ab6fe35a18095de305c3d87e1c5b94101..3a31d06ae3a4acdb8f4282ab7beb4e9db65d6012 100644
--- a/lib/modules/ws2p/ws2p-messages/v2/payload_container.rs
+++ b/lib/modules/ws2p/ws2p-messages/v2/payload_container.rs
@@ -18,12 +18,12 @@ use super::ok::WS2Pv2OkMsg;
 use super::req_responses::WS2Pv2ReqRes;
 use super::requests::WS2Pv2Request;
 use super::secret_flags::WS2Pv2SecretFlagsMsg;
-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::documents::transaction::TransactionDocument;
+use dubp_block_doc::BlockDocument;
+use dubp_user_docs::documents::certification::CertificationDocument;
+use dubp_user_docs::documents::identity::IdentityDocument;
+use dubp_user_docs::documents::membership::MembershipDocument;
+use dubp_user_docs::documents::revocation::RevocationDocumentV10;
+use dubp_user_docs::documents::transaction::TransactionDocument;
 use dup_crypto::hashs::Hash;
 use durs_network_documents::network_head_v2::NetworkHeadV2;
 use durs_network_documents::network_head_v3::NetworkHeadV3;
diff --git a/lib/modules/ws2p/ws2p-messages/v2/req_responses.rs b/lib/modules/ws2p/ws2p-messages/v2/req_responses.rs
index f734f8fc0ac74f082af1925ce03c839cde630276..3bdfd5753c198ed107a2c31af179cd29829d2ca8 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_block_doc::BlockDocument;
 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_user_docs::documents::certification::CompactCertificationDocumentV10;
+use dubp_user_docs::documents::identity::v10::CompactIdentityDocumentV10;
+use dubp_user_docs::documents::membership::v10::CompactPoolMembershipDoc;
 use dup_crypto::hashs::Hash;
 use std::str;
 
diff --git a/lib/modules/ws2p/ws2p-protocol/Cargo.toml b/lib/modules/ws2p/ws2p-protocol/Cargo.toml
index 0c44f5fb7657af2305cc3f417b4a20b2ec501654..7a726293b9c84b813b70edc1b189ee30a2356444 100644
--- a/lib/modules/ws2p/ws2p-protocol/Cargo.toml
+++ b/lib/modules/ws2p/ws2p-protocol/Cargo.toml
@@ -12,7 +12,7 @@ path = "src/lib.rs"
 [dependencies]
 dubp-common-doc = { path = "../../../dubp/common-doc"} #, version = "0.1.0" }
 dubp-currency-params = { path = "../../../dubp/currency-params" }
-dubp-documents= { path = "../../../dubp/documents" }
+dubp-user-docs= { path = "../../../dubp/user-docs" }
 durs-common-tools = { path = "../../../tools/common-tools" }
 dup-crypto = { path = "../../../crypto" }
 durs-module = { path = "../../../core/module" }
diff --git a/lib/modules/ws2p/ws2p/Cargo.toml b/lib/modules/ws2p/ws2p/Cargo.toml
index 00ac896841a888feef5c6ef372e996208dc21a20..81b770bbac2ea8b36aa2ae7e8443d76fbed8707a 100644
--- a/lib/modules/ws2p/ws2p/Cargo.toml
+++ b/lib/modules/ws2p/ws2p/Cargo.toml
@@ -13,7 +13,7 @@ path = "src/lib.rs"
 bincode = "1.0.*"
 dubp-common-doc = { path = "../../../dubp/common-doc"} #, version = "0.1.0" }
 dubp-currency-params = { path = "../../../dubp/currency-params" }
-dubp-documents= { path = "../../../dubp/documents" }
+dubp-user-docs= { path = "../../../dubp/user-docs" }
 durs-network-documents = { path = "../../../dunp/network-documents" }
 durs-common-tools = { path = "../../../tools/common-tools" }
 dup-crypto = { path = "../../../crypto" }
diff --git a/lib/tests-tools/documents-tests-tools/Cargo.toml b/lib/tests-tools/user-docs-tests-tools/Cargo.toml
similarity index 70%
rename from lib/tests-tools/documents-tests-tools/Cargo.toml
rename to lib/tests-tools/user-docs-tests-tools/Cargo.toml
index 3e4251bb7f163b6dcf75cf5eb84650986a1b2651..5906780fd37c1a1663874a7abbcb98ce41a64f90 100644
--- a/lib/tests-tools/documents-tests-tools/Cargo.toml
+++ b/lib/tests-tools/user-docs-tests-tools/Cargo.toml
@@ -1,8 +1,8 @@
 [package]
-name = "dubp-documents-tests-tools"
+name = "dubp-user-docs-tests-tools"
 version = "0.1.0"
 authors = ["elois <elois@duniter.org>"]
-description = "Crypto tests tools for projects use dubp-documents."
+description = "Crypto tests tools for projects use dubp-user-docs."
 repository = "https://git.duniter.org/nodes/rust/duniter-rs"
 readme = "README.md"
 keywords = ["rust", "test", "tools"]
@@ -13,9 +13,10 @@ edition = "2018"
 path = "src/lib.rs"
 
 [dependencies]
+dubp-block-doc = { path = "../../dubp/block-doc"} #, version = "0.1.0" }
 dubp-common-doc = { path = "../../dubp/common-doc"} #, version = "0.1.0" }
 dubp-currency-params = { path = "../../dubp/currency-params" }
-dubp-documents = { path = "../../dubp/documents" }
+dubp-user-docs = { path = "../../dubp/user-docs" }
 dup-crypto = { path = "../../crypto" }
 dup-crypto-tests-tools = { path = "../crypto-tests-tools" }
 
diff --git a/lib/tests-tools/documents-tests-tools/src/lib.rs b/lib/tests-tools/user-docs-tests-tools/src/lib.rs
similarity index 94%
rename from lib/tests-tools/documents-tests-tools/src/lib.rs
rename to lib/tests-tools/user-docs-tests-tools/src/lib.rs
index cd46bff0e7f0fde6919c12892ad75675ae81b518..ada0d47dbd0d067ec5d890d5e15b18fc8d7295df 100644
--- a/lib/tests-tools/documents-tests-tools/src/lib.rs
+++ b/lib/tests-tools/user-docs-tests-tools/src/lib.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/>.
 
-//! Crypto tests tools for projects use dubp-documents.
+//! Crypto tests tools for projects use dubp-user-docs.
 
 #![deny(
     missing_docs,
diff --git a/lib/tests-tools/documents-tests-tools/src/mocks/identity.rs b/lib/tests-tools/user-docs-tests-tools/src/mocks/identity.rs
similarity index 89%
rename from lib/tests-tools/documents-tests-tools/src/mocks/identity.rs
rename to lib/tests-tools/user-docs-tests-tools/src/mocks/identity.rs
index cd3c19fe5711a5d1ca78d0c4e251a82de0c025b2..a424081e3f17bd4e6f687790298a514ad993adae 100644
--- a/lib/tests-tools/documents-tests-tools/src/mocks/identity.rs
+++ b/lib/tests-tools/user-docs-tests-tools/src/mocks/identity.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/>.
 
-//! Mocks for projects use dubp-documents
+//! Mocks for projects use dubp-user-docs
 
 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_user_docs::documents::identity::v10::IdentityDocumentV10Builder;
+use dubp_user_docs::documents::identity::*;
 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/user-docs-tests-tools/src/mocks/mod.rs
similarity index 96%
rename from lib/tests-tools/documents-tests-tools/src/mocks/mod.rs
rename to lib/tests-tools/user-docs-tests-tools/src/mocks/mod.rs
index ec6f19155b679bac08a44413f93527273bee5546..160cb73886dc8987439ce7b4ac9f75118ea12b82 100644
--- a/lib/tests-tools/documents-tests-tools/src/mocks/mod.rs
+++ b/lib/tests-tools/user-docs-tests-tools/src/mocks/mod.rs
@@ -13,14 +13,15 @@
 // 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/>.
 
-//! Mocks for projects use dubp-documents
+//! Mocks for projects use dubp-user-docs
 
 pub mod identity;
+pub mod tx;
 
+use dubp_block_doc::{BlockDocument, BlockDocumentV10};
 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 dup_crypto::hashs::Hash;
 
 /// Generate n mock blockstamps
diff --git a/lib/tests-tools/user-docs-tests-tools/src/mocks/tx.rs b/lib/tests-tools/user-docs-tests-tools/src/mocks/tx.rs
new file mode 100644
index 0000000000000000000000000000000000000000..5ed6cbcf637f899d10bafb63167d384fd3ac773f
--- /dev/null
+++ b/lib/tests-tools/user-docs-tests-tools/src/mocks/tx.rs
@@ -0,0 +1,57 @@
+//  Copyright (C) 2019  Éloïs SANCHEZ
+//
+// 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/>.
+
+//! Mocks for projects use dubp-user-docs
+
+use dubp_common_doc::traits::DocumentBuilder;
+use dubp_common_doc::Blockstamp;
+use dubp_user_docs::documents::transaction::*;
+use dup_crypto::keys::*;
+use std::str::FromStr;
+
+/// Generate first G1 transaction !
+pub fn first_g1_tx_doc() -> TransactionDocument {
+    let expected_tx_builder = TransactionDocumentBuilder {
+        currency: &"g1",
+        blockstamp: &Blockstamp::from_string(
+            "50-00001DAA4559FEDB8320D1040B0F22B631459F36F237A0D9BC1EB923C12A12E7",
+        )
+        .expect("Fail to parse blockstamp"),
+        locktime: &0,
+        issuers: &vec![PubKey::Ed25519(
+            ed25519::PublicKey::from_base58("2ny7YAdmzReQxAayyJZsyVYwYhVyax2thKcGknmQy5nQ")
+                .expect("Fail to parse issuer !"),
+        )],
+        inputs: &vec![TransactionInput::from_str(
+            "1000:0:D:2ny7YAdmzReQxAayyJZsyVYwYhVyax2thKcGknmQy5nQ:1",
+        )
+        .expect("Fail to parse inputs")],
+        unlocks: &vec![
+            TransactionInputUnlocks::from_str("0:SIG(0)").expect("Fail to parse unlocks")
+        ],
+        outputs: &vec![
+            TransactionOutput::from_str("1:0:SIG(Com8rJukCozHZyFao6AheSsfDQdPApxQRnz7QYFf64mm)")
+                .expect("Fail to parse outputs"),
+            TransactionOutput::from_str("999:0:SIG(2ny7YAdmzReQxAayyJZsyVYwYhVyax2thKcGknmQy5nQ)")
+                .expect("Fail to parse outputs"),
+        ],
+        comment: "TEST",
+        hash: None,
+    };
+
+    expected_tx_builder.build_with_signature(vec![Sig::Ed25519(
+                ed25519::Signature::from_base64("fAH5Gor+8MtFzQZ++JaJO6U8JJ6+rkqKtPrRr/iufh3MYkoDGxmjzj6jCADQL+hkWBt8y8QzlgRkz0ixBcKHBw==").expect("Fail to parse sig !")
+            )])
+}