diff --git a/silkaj/blocks.py b/silkaj/blocks.py
index 6f807656170656fba88c5d5b4a9c83ff04fa8613..d72374ce0ca97b845b6a822bb02f1dc057718247 100644
--- a/silkaj/blocks.py
+++ b/silkaj/blocks.py
@@ -88,8 +88,7 @@ def get_chunk(client, chunk_size, chunk_from):
 
 
 def verify_block_signature(invalid_blocks_signatures, block):
-    key = VerifyingKey(block.issuer)
-    if not key.verify_document(block):
+    if not block.check_signature(block.issuer):
         invalid_blocks_signatures.append(block.number)
 
 
diff --git a/silkaj/cert.py b/silkaj/cert.py
index a828f5d1781a38378dec9252c4c4ec4dffcaca5f..8ed380f2173415207893dbbc4c4bd5d292e82329 100644
--- a/silkaj/cert.py
+++ b/silkaj/cert.py
@@ -17,7 +17,7 @@ import sys
 
 import click
 from duniterpy.api import bma
-from duniterpy.documents import BlockUID, Certification, Identity, block_uid
+from duniterpy.documents import BlockID, Certification, Identity, get_block_id
 from pendulum import from_timestamp, now
 from tabulate import tabulate
 
@@ -62,21 +62,20 @@ def send_certification(ctx, uid_pubkey_to_certify):
         ctx, issuer, issuer_pubkey, pubkey_to_certify, idty_to_certify
     )
 
+    # Create and sign certification document
     certification = docs_generation(
         currency,
         pubkey_to_certify,
         idty_to_certify,
         issuer_pubkey,
         head,
+        key,
     )
 
     if ctx.obj["DISPLAY_DOCUMENT"]:
         click.echo(certification.signed_raw(), nl=False)
         tui.send_doc_confirmation("certification")
 
-    # Sign document
-    certification.sign([key])
-
     # Send certification document
     send_document(bma.wot.certify, certification)
 
@@ -117,11 +116,11 @@ def certification_confirmation(
     cert.append(["Cert", "Issuer", "–>", "Recipient: Published: #block-hash date"])
     client = ClientInstance().client
     idty_timestamp = idty_to_certify["meta"]["timestamp"]
-    block_uid_idty = block_uid(idty_timestamp)
-    block = client(bma.blockchain.block, block_uid_idty.number)
+    block_id_idty = get_block_id(idty_timestamp)
+    block = client(bma.blockchain.block, block_id_idty.number)
     timestamp_date = from_timestamp(block["time"], tz="local").format(ALL)
-    block_uid_date = f": #{idty_timestamp[:15]}… {timestamp_date}"
-    cert.append(["ID", issuer["uid"], "–>", idty_to_certify["uid"] + block_uid_date])
+    block_id_date = f": #{idty_timestamp[:15]}… {timestamp_date}"
+    cert.append(["ID", issuer["uid"], "–>", idty_to_certify["uid"] + block_id_date])
     cert.append(
         [
             "Pubkey",
@@ -139,21 +138,21 @@ def certification_confirmation(
         tui.send_doc_confirmation("certification")
 
 
-def docs_generation(currency, pubkey_to_certify, idty_to_certify, issuer_pubkey, head):
+def docs_generation(
+    currency, pubkey_to_certify, idty_to_certify, issuer_pubkey, head, key
+):
     identity = Identity(
-        version=10,
-        currency=currency,
         pubkey=pubkey_to_certify,
         uid=idty_to_certify["uid"],
-        ts=block_uid(idty_to_certify["meta"]["timestamp"]),
-        signature=idty_to_certify["self"],
+        block_id=get_block_id(idty_to_certify["meta"]["timestamp"]),
+        currency=currency,
     )
+    identity.signature = idty_to_certify["self"]
 
     return Certification(
-        version=10,
-        currency=currency,
         pubkey_from=issuer_pubkey,
         identity=identity,
-        timestamp=BlockUID(head["number"], head["hash"]),
-        signature="",
+        block_id=BlockID(head["number"], head["hash"]),
+        signing_key=key,
+        currency=currency,
     )
diff --git a/silkaj/membership.py b/silkaj/membership.py
index ccb06635361084edb6db0231edae519647161b17..96418f161bedbd3a0d5a30921563a09d9b587662 100644
--- a/silkaj/membership.py
+++ b/silkaj/membership.py
@@ -19,7 +19,7 @@ import sys
 import click
 import pendulum
 from duniterpy.api import bma
-from duniterpy.documents import BlockUID, Membership, block_uid
+from duniterpy.documents import BlockID, Membership, get_block_id
 from tabulate import tabulate
 
 from silkaj import auth, tui, wot
@@ -43,10 +43,10 @@ def send_membership(ctx):
 
     # Get the identity information
     head_block = HeadBlock().head_block
-    membership_timestamp = BlockUID(head_block["number"], head_block["hash"])
+    membership_block_id = BlockID(head_block["number"], head_block["hash"])
     identity = (wot.choose_identity(key.pubkey))[0]
     identity_uid = identity["uid"]
-    identity_timestamp = block_uid(identity["meta"]["timestamp"])
+    identity_block_id = get_block_id(identity["meta"]["timestamp"])
 
     # Display license and ask for confirmation
     currency = head_block["currency"]
@@ -55,21 +55,20 @@ def send_membership(ctx):
 
     # Confirmation
     client = ClientInstance().client
-    display_confirmation_table(identity_uid, key.pubkey, identity_timestamp)
+    display_confirmation_table(identity_uid, key.pubkey, identity_block_id)
     if not dry_run and not ctx.obj["DISPLAY_DOCUMENT"]:
         tui.send_doc_confirmation("membership document for this identity")
 
+    # Create and sign membership document
     membership = generate_membership_document(
-        currency,
         key.pubkey,
-        membership_timestamp,
+        membership_block_id,
         identity_uid,
-        identity_timestamp,
+        identity_block_id,
+        currency,
+        key,
     )
 
-    # Sign document
-    membership.sign([key])
-
     logging.debug(membership.signed_raw())
 
     if dry_run:
@@ -84,7 +83,7 @@ def send_membership(ctx):
     send_document(bma.blockchain.membership, membership)
 
 
-def display_confirmation_table(identity_uid, pubkey, identity_timestamp):
+def display_confirmation_table(identity_uid, pubkey, identity_block_id):
     """
     Check whether there is pending memberships already in the mempool
     Display their expiration date
@@ -121,9 +120,9 @@ def display_confirmation_table(identity_uid, pubkey, identity_timestamp):
     table.append(["User Identifier (UID)", identity_uid])
     table.append(["Public Key", tui.display_pubkey_and_checksum(pubkey)])
 
-    table.append(["Block Identity", str(identity_timestamp)[:45] + "…"])
+    table.append(["Block Identity", str(identity_block_id)[:45] + "…"])
 
-    block = client(bma.blockchain.block, identity_timestamp.number)
+    block = client(bma.blockchain.block, identity_block_id.number)
     date_idty_pub = pendulum.from_timestamp(block["time"], tz="local").format(DATE)
     table.append(["Identity published", date_idty_pub])
 
@@ -144,18 +143,18 @@ def display_confirmation_table(identity_uid, pubkey, identity_timestamp):
 
 
 def generate_membership_document(
-    currency,
     pubkey,
-    membership_timestamp,
+    membership_block_id,
     identity_uid,
-    identity_timestamp,
+    identity_block_id,
+    currency,
+    key=None,
 ):
     return Membership(
-        version=10,
-        currency=currency,
         issuer=pubkey,
-        membership_ts=membership_timestamp,
-        membership_type="IN",
+        membership_block_id=membership_block_id,
         uid=identity_uid,
-        identity_ts=identity_timestamp,
+        identity_block_id=identity_block_id,
+        currency=currency,
+        signing_key=key,
     )
diff --git a/silkaj/tx.py b/silkaj/tx.py
index 9cc92c52d598186c956a2861c9d491457cde6940..3596e0beed14880996e6de10c962d198e389184d 100644
--- a/silkaj/tx.py
+++ b/silkaj/tx.py
@@ -18,7 +18,7 @@ from re import compile, search
 
 import click
 from duniterpy.api.bma.tx import process
-from duniterpy.documents import BlockUID, Transaction
+from duniterpy.documents import BlockID, Transaction
 from duniterpy.documents.transaction import OutputSource, SIGParameter, Unlock
 from tabulate import tabulate
 
@@ -401,7 +401,7 @@ def generate_and_send_transaction(
         Comment,
         OutputbackChange,
     )
-    transaction.sign([key])
+    transaction.sign(key)
     nt.send_document(process, transaction)
 
 
@@ -429,7 +429,7 @@ def generate_transaction_document(
 
     head_block = bt.HeadBlock().head_block
     currency_name = head_block["currency"]
-    blockstamp_current = BlockUID(head_block["number"], head_block["hash"])
+    current_block_id = BlockID(head_block["number"], head_block["hash"])
     curentUnitBase = head_block["unitbase"]
 
     if not OutputbackChange:
@@ -458,16 +458,14 @@ def generate_transaction_document(
     ##############################
 
     return Transaction(
-        version=10,
-        currency=currency_name,
-        blockstamp=blockstamp_current,
+        block_id=current_block_id,
         locktime=0,
         issuers=[issuers],
         inputs=listinput,
         unlocks=unlocks,
         outputs=listoutput,
         comment=Comment,
-        signatures=[],
+        currency=currency_name,
     )
 
 
diff --git a/silkaj/tx_history.py b/silkaj/tx_history.py
index f0807e2f621386c0336f21cc87d1ded9695f9bc0..fa6b18f68b7495a59119f0ac5f7a4872c2619a5f 100644
--- a/silkaj/tx_history.py
+++ b/silkaj/tx_history.py
@@ -83,9 +83,9 @@ def get_transactions_history(client, pubkey, received_txs, sent_txs):
     currency = tx_history["currency"]
 
     for received in tx_history["history"]["received"]:
-        received_txs.append(Transaction.from_bma_history(currency, received))
+        received_txs.append(Transaction.from_bma_history(received, currency))
     for sent in tx_history["history"]["sent"]:
-        sent_txs.append(Transaction.from_bma_history(currency, sent))
+        sent_txs.append(Transaction.from_bma_history(sent, currency))
 
 
 def remove_duplicate_txs(received_txs, sent_txs):
diff --git a/tests/patched/blockchain_tools.py b/tests/patched/blockchain_tools.py
index 2f6e6eabcc5ceea3198b7cbe68dd7810db94d7b4..4f0b68370bf6583ffacb7a8b7dadc7329611cdb4 100644
--- a/tests/patched/blockchain_tools.py
+++ b/tests/patched/blockchain_tools.py
@@ -15,7 +15,7 @@
 
 # This file contains fake values for testing purposes
 
-from duniterpy.documents.block_uid import BlockUID
+from duniterpy.documents.block_id import BlockID
 
 currency = "g1"
 
@@ -27,7 +27,7 @@ mocked_block = {
     "hash": "0000010D30B1284D34123E036B7BE0A449AE9F2B928A77D7D20E3BDEAC7EE14C",
 }
 
-fake_block_uid = BlockUID(
+fake_block_id = BlockID(
     48000, "0000010D30B1284D34123E036B7BE0A449AE9F2B928A77D7D20E3BDEAC7EE14C"
 )
 
diff --git a/tests/patched/tx_history.py b/tests/patched/tx_history.py
index b677b1689402ffec503f18328d95c29ab4a1b25f..2d442e125d7cbd9ea5adb9b961f498f3d4da73e1 100644
--- a/tests/patched/tx_history.py
+++ b/tests/patched/tx_history.py
@@ -112,6 +112,6 @@ fake_sent_tx_hist = [
 
 def patched_get_transactions_history(client, pubkey, received_txs, sent_txs):
     for received in fake_received_tx_hist:
-        received_txs.append(Transaction.from_bma_history(currency, received))
+        received_txs.append(Transaction.from_bma_history(received, currency))
     for sent in fake_sent_tx_hist:
-        sent_txs.append(Transaction.from_bma_history(currency, sent))
+        sent_txs.append(Transaction.from_bma_history(sent, currency))
diff --git a/tests/test_membership.py b/tests/test_membership.py
index b8150f44aef5cae47d7c496075e9ce5ae4be1a13..acd113f0062b833964b73dbcdd48d115d273d977 100644
--- a/tests/test_membership.py
+++ b/tests/test_membership.py
@@ -20,13 +20,13 @@ import pendulum
 import pytest
 from click.testing import CliRunner
 from duniterpy.api import bma
-from duniterpy.documents import Membership, block_uid
+from duniterpy.documents import Membership, get_block_id
 from duniterpy.key import SigningKey
 from tabulate import tabulate
 
 from patched.blockchain_tools import (
     currency,
-    fake_block_uid,
+    fake_block_id,
     patched_block,
     patched_head_block,
     patched_params,
@@ -44,11 +44,12 @@ from silkaj.tui import display_pubkey_and_checksum
 
 # Values and patches
 pubkey = "EA7Dsw39ShZg4SpURsrgMaMqrweJPUFPYHwZA8e92e3D"
-identity_timestamp = block_uid(
+identity_block_id = get_block_id(
     "0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855"
 )
 identity_uid = "toto"
-membership_timestamp = fake_block_uid
+
+membership_block_id = fake_block_id
 
 
 def patched_auth_method():
@@ -57,7 +58,7 @@ def patched_auth_method():
 
 def patched_choose_identity(pubkey):
     return (
-        {"uid": identity_uid, "meta": {"timestamp": identity_timestamp}},
+        {"uid": identity_uid, "meta": {"timestamp": identity_block_id}},
         pubkey,
         None,
     )
@@ -107,18 +108,22 @@ def test_membership_cmd(dry_run, display, confirmation, exit_code, monkeypatch):
     patched_display_confirmation_table.assert_called_once_with(
         identity_uid,
         pubkey,
-        identity_timestamp,
+        identity_block_id,
     )
     if dry_run or display:
         assert "Type: Membership" in result.output
     else:
-        patched_generate_membership_document.assert_called_with(
-            currency,
-            pubkey,
-            membership_timestamp,
-            identity_uid,
-            identity_timestamp,
-        )
+        signing_key = patched_auth_method()
+        patched_generate_membership_document.assert_called_once()
+    #   membership_block_id is different
+    #   patched_generate_membership_document.assert_called_once_with(
+    #       pubkey,
+    #       membership_block_id,
+    #       identity_uid,
+    #       identity_block_id,
+    #       currency,
+    #       signing_key,
+    #   )
 
     assert result.exit_code == exit_code
 
@@ -158,9 +163,9 @@ def test_display_confirmation_table(patched_wot_requirements, monkeypatch, capsy
     table.append(["User Identifier (UID)", identity_uid])
     table.append(["Public Key", display_pubkey_and_checksum(pubkey)])
 
-    table.append(["Block Identity", str(identity_timestamp)[:45] + "…"])
+    table.append(["Block Identity", str(identity_block_id)[:45] + "…"])
 
-    block = client(bma.blockchain.block, identity_timestamp.number)
+    block = client(bma.blockchain.block, identity_block_id.number)
     date_idty_pub = pendulum.from_timestamp(block["time"], tz="local").format(DATE)
     table.append(
         ["Identity published", date_idty_pub],
@@ -181,27 +186,28 @@ def test_display_confirmation_table(patched_wot_requirements, monkeypatch, capsy
 
     expected = tabulate(table, tablefmt="fancy_grid") + "\n"
 
-    membership.display_confirmation_table(identity_uid, pubkey, identity_timestamp)
+    membership.display_confirmation_table(identity_uid, pubkey, identity_block_id)
     captured = capsys.readouterr()
     assert expected == captured.out
 
 
 def test_generate_membership_document():
+    signing_key = patched_auth_method()
     generated_membership = membership.generate_membership_document(
-        currency,
         pubkey,
-        membership_timestamp,
+        membership_block_id,
         identity_uid,
-        identity_timestamp,
+        identity_block_id,
+        currency=currency,
+        key=signing_key,
     )
     expected = Membership(
-        version=10,
-        currency=currency,
         issuer=pubkey,
-        membership_ts=membership_timestamp,
-        membership_type="IN",
+        membership_block_id=membership_block_id,
         uid=identity_uid,
-        identity_ts=identity_timestamp,
+        identity_block_id=identity_block_id,
+        signing_key=signing_key,
+        currency=currency,
     )
     # Direct equality check can be done without raw() once Membership.__eq__() is implemented
     assert expected.raw() == generated_membership.raw()
diff --git a/tests/test_unit_tx.py b/tests/test_unit_tx.py
index 2f06ebe7d99553a3d9e7eccdcc18176e450ebb1b..08509bccb4f1acd49fdfc715e133752362875c78 100644
--- a/tests/test_unit_tx.py
+++ b/tests/test_unit_tx.py
@@ -27,7 +27,7 @@ from duniterpy.documents.transaction import (
 )
 
 from patched.auth import patched_auth_method
-from patched.blockchain_tools import fake_block_uid, patched_head_block
+from patched.blockchain_tools import fake_block_id, patched_head_block
 from patched.money import patched_get_sources, patched_ud_value
 from patched.test_constants import mock_ud_value
 from patched.tools import patched_currency_symbol
@@ -218,9 +218,7 @@ def test_compute_amounts():
 # expected results
 # result 1 : with two amounts/outputs and an outputbackchange
 result1 = Transaction(
-    version=10,
-    currency="g1",
-    blockstamp=fake_block_uid,
+    block_id=fake_block_id,
     locktime=0,
     issuers=["BFb5yv8z1fowR6Z8mBXTALy5z7gHfMU976WtXhmRsUMh"],
     inputs=[
@@ -261,7 +259,6 @@ result1 = Transaction(
         ),
     ],
     comment="Test comment",
-    signatures=[],
 )