diff --git a/lib/modules-lib/bc-db-reader/src/indexes/identities.rs b/lib/modules-lib/bc-db-reader/src/indexes/identities.rs
index 3a8ef7e097eeabe1f63020999b8d957a953c2215..ca1d11729bcde5c791d94d60b58decc2cb97b7bd 100644
--- a/lib/modules-lib/bc-db-reader/src/indexes/identities.rs
+++ b/lib/modules-lib/bc-db-reader/src/indexes/identities.rs
@@ -284,7 +284,7 @@ mod test {
                     wot_id as u32,
                     &KvFileDbHandler::db_value(&idty_bin)?,
                 )?;
-                Ok(w)
+                Ok(WriteResp::from(w))
             })?;
             wot_id += 1;
         }
@@ -296,7 +296,7 @@ mod test {
                 CurrentMetaDataKey::NextWotId.to_u32(),
                 &DbValue::U64(wot_id),
             )?;
-            Ok(w)
+            Ok(WriteResp::from(w))
         })?;
 
         // Test default filters
diff --git a/lib/modules-lib/bc-db-reader/src/lib.rs b/lib/modules-lib/bc-db-reader/src/lib.rs
index 7b63de381ba6fd9f4e4eef1bbc36d6be1df57258..143f4fe5a7499ddf09b4ab3573e80b00efc6185d 100644
--- a/lib/modules-lib/bc-db-reader/src/lib.rs
+++ b/lib/modules-lib/bc-db-reader/src/lib.rs
@@ -40,7 +40,7 @@ pub mod traits;
 pub use durs_dbs_tools::kv_db_old::{
     from_db_value, KvFileDbRead as DbReadable, KvFileDbReader as Reader,
     KvFileDbRoHandler as BcDbRo, KvFileDbSchema, KvFileDbStoreType, KvFileDbValue as DbValue,
-    Readable as DbReader,
+    Readable as DbReader, WriteResp,
 };
 pub use durs_dbs_tools::DbError;
 #[cfg(feature = "mock")]
diff --git a/lib/modules/blockchain/bc-db-writer/src/indexes/transactions.rs b/lib/modules/blockchain/bc-db-writer/src/indexes/transactions.rs
index f6ac03136c9a5a3b7f3ddc8677e23ae8ca3ff0e9..260dc8b9158ea9771e6fdf50f6f176cfacdb6ca1 100644
--- a/lib/modules/blockchain/bc-db-writer/src/indexes/transactions.rs
+++ b/lib/modules/blockchain/bc-db-writer/src/indexes/transactions.rs
@@ -282,7 +282,7 @@ mod tests {
                 &vec![tx_doc.issuers()[0], tortue_pubkey],
                 false,
             )?;
-            Ok(w)
+            Ok(WriteResp::from(w))
         })?;
 
         db.write(|mut w| {
@@ -299,7 +299,7 @@ mod tests {
             )?;
             // Apply first g1 transaction
             apply_and_write_tx(&db, &mut w, &tx_doc, true)?;
-            Ok(w)
+            Ok(WriteResp::from(w))
         })?;
         // Check new UTXOS
         // TODO
@@ -319,7 +319,7 @@ mod tests {
             } else {
                 panic!(dbg!("No block consumed sources"));
             }
-            Ok(w)
+            Ok(WriteResp::from(w))
         })?;
 
         // UTXOS must be empty
diff --git a/lib/modules/blockchain/bc-db-writer/src/lib.rs b/lib/modules/blockchain/bc-db-writer/src/lib.rs
index b48b1570a8fdfbdb9f72c8de39df896d57216a03..76dff17f2c4d59448611857ac7d21062072674be 100644
--- a/lib/modules/blockchain/bc-db-writer/src/lib.rs
+++ b/lib/modules/blockchain/bc-db-writer/src/lib.rs
@@ -39,7 +39,7 @@ pub mod writers;
 
 pub use durs_dbs_tools::kv_db_old::{
     KvFileDbHandler, KvFileDbRead as DbReadable, KvFileDbRoHandler, KvFileDbSchema,
-    KvFileDbStoreType, KvFileDbValue, KvFileDbWriter as DbWriter,
+    KvFileDbStoreType, KvFileDbValue, KvFileDbWriter as DbWriter, WriteResp,
 };
 pub use durs_dbs_tools::{
     open_free_struct_db, open_free_struct_file_db, open_free_struct_memory_db,
diff --git a/lib/modules/blockchain/blockchain/src/dunp/receiver.rs b/lib/modules/blockchain/blockchain/src/dunp/receiver.rs
index dc969299cba74e0fd3a596648c5f22f04a4b0dd2..0a9678eda15fd333b9c8f88805511ce6055015ef 100644
--- a/lib/modules/blockchain/blockchain/src/dunp/receiver.rs
+++ b/lib/modules/blockchain/blockchain/src/dunp/receiver.rs
@@ -136,7 +136,7 @@ pub fn receive_blocks(bc: &mut BlockchainModule, blocks: Vec<BlockDocument>) {
                     }
                 },
             }
-            Ok(w)
+            Ok(WriteResp::from(w))
         })
         .unwrap_or_else(|_| fatal_error!("Fail to check or apply block: {}.", blockstamp));
         bc.db = Some(db);
diff --git a/lib/modules/blockchain/blockchain/src/fork/fork_algo.rs b/lib/modules/blockchain/blockchain/src/fork/fork_algo.rs
index e7dd9f761d468a8d80707718b678d635e57509e4..72984cdfea49a8762ff34119ec530576f2ff1a89 100644
--- a/lib/modules/blockchain/blockchain/src/fork/fork_algo.rs
+++ b/lib/modules/blockchain/blockchain/src/fork/fork_algo.rs
@@ -133,7 +133,7 @@ mod tests {
                     },
                 )?;
             }
-            Ok(w)
+            Ok(WriteResp::from(w))
         })?;
 
         // Local blockchain must contain at least `fork_window_size +2` blocks
@@ -211,7 +211,7 @@ mod tests {
                     },
                 )?,
             );
-            Ok(w)
+            Ok(WriteResp::from(w))
         })?;
 
         // Must fork
@@ -287,7 +287,7 @@ mod tests {
                     )?,
                 );
             }
-            Ok(w)
+            Ok(WriteResp::from(w))
         })
     }
 }
diff --git a/lib/modules/blockchain/blockchain/src/fork/rollback.rs b/lib/modules/blockchain/blockchain/src/fork/rollback.rs
index 8b4cd210f39b670a5391babc9ce1e466a7bbef23..e045220cbaa4f2274b64063f9e45a60416e0f5d7 100644
--- a/lib/modules/blockchain/blockchain/src/fork/rollback.rs
+++ b/lib/modules/blockchain/blockchain/src/fork/rollback.rs
@@ -157,7 +157,7 @@ pub fn apply_rollback(bc: &mut BlockchainModule, new_bc_branch: Vec<Blockstamp>)
             }
             durs_bc_db_writer::blocks::fork_tree::save_fork_tree(&db, &mut w, &bc.fork_tree)?;
 
-            Ok(w)
+            Ok(WriteResp::from(w))
         } else {
             Err(DbError::WriteAbort {
                 reason: "Abort rollback: new branch is invalid.".to_owned(),
diff --git a/lib/modules/blockchain/blockchain/src/fork/stackable_blocks.rs b/lib/modules/blockchain/blockchain/src/fork/stackable_blocks.rs
index 946afaed8ae81158db62be9795d217ad67c5626e..b1ff85ad2e214e56d40256c6e011331c5d4b2475 100644
--- a/lib/modules/blockchain/blockchain/src/fork/stackable_blocks.rs
+++ b/lib/modules/blockchain/blockchain/src/fork/stackable_blocks.rs
@@ -77,12 +77,11 @@ pub fn apply_stackable_blocks(bc: &mut BlockchainModule) {
                         .expect("DB error : Fail to save fork tree !");
                         debug!("success to stackable_block({})", stackable_block_number);
 
-                        bc.current_blockstamp = stackable_block_blockstamp;
                         events::sent::send_event(
                             bc,
                             &BlockchainEvent::StackUpValidBlock(Box::new(new_current_block)),
                         );
-                        Ok(w)
+                        Ok(WriteResp::new(w, stackable_block_blockstamp))
                     }
                     Ok(re) => {
                         warn!(
@@ -105,8 +104,12 @@ pub fn apply_stackable_blocks(bc: &mut BlockchainModule) {
                 }
             });
             bc.db = Some(db);
+
             match db_write_result {
-                Ok(()) => continue 'blocks,
+                Ok(new_current_blockstamp) => {
+                    bc.current_blockstamp = new_current_blockstamp;
+                    continue 'blocks;
+                }
                 Err(e) => {
                     debug!(
                         "Invalid stackable block {}: {:?}",
diff --git a/lib/modules/blockchain/blockchain/src/sync/apply/blocks_worker.rs b/lib/modules/blockchain/blockchain/src/sync/apply/blocks_worker.rs
index 4f009c35628e50321ae024cdb2f4b62359509e68..ac7a77118515454732385c860e5e3a1e1b4d8901 100644
--- a/lib/modules/blockchain/blockchain/src/sync/apply/blocks_worker.rs
+++ b/lib/modules/blockchain/blockchain/src/sync/apply/blocks_worker.rs
@@ -58,7 +58,7 @@ pub fn execute(
                                 fork_window_size,
                                 Some(target_blockstamp),
                             )?;
-                            Ok(w)
+                            Ok(WriteResp::from(w))
                         })
                         .expect("Fatal error : Fail to apply BlocksDBsWriteQuery !");
 
@@ -91,7 +91,7 @@ pub fn execute(
         info!("Save db...");
         db.write(|mut w| {
             durs_bc_db_writer::blocks::fork_tree::save_fork_tree(&db, &mut w, &fork_tree)?;
-            Ok(w)
+            Ok(WriteResp::from(w))
         })
         .unwrap_or_else(|_| fatal_error!("DB corrupted, please reset data."));
 
diff --git a/lib/modules/blockchain/blockchain/src/sync/apply/mod.rs b/lib/modules/blockchain/blockchain/src/sync/apply/mod.rs
index 0d8b0f2b2eaca6319de2be2b0b4d3a2dede119fb..46bfd528d63a26cd482ff26e49046b3798552e0e 100644
--- a/lib/modules/blockchain/blockchain/src/sync/apply/mod.rs
+++ b/lib/modules/blockchain/blockchain/src/sync/apply/mod.rs
@@ -29,7 +29,7 @@ use dubp_currency_params::{CurrencyName, CurrencyParameters};
 use dup_crypto::keys::PubKey;
 use durs_bc_db_reader::BcDbRead;
 use durs_bc_db_writer::writers::requests::WotsDBsWriteQuery;
-use durs_bc_db_writer::WotsV10DBs;
+use durs_bc_db_writer::{WotsV10DBs, WriteResp};
 use durs_common_tools::fatal_error;
 use durs_network_documents::url::Url;
 use durs_wot::data::rusty::RustyWebOfTrust;
@@ -122,7 +122,7 @@ impl BlockApplicator {
                     &self.wot_databases.wot_db,
                     &expire_certs,
                 );
-                Ok(w)
+                Ok(WriteResp::from(w))
             })
             .expect("Fail to apply valid block.");
             self.db = Some(db);
diff --git a/lib/modules/blockchain/blockchain/src/sync/apply/txs_worker.rs b/lib/modules/blockchain/blockchain/src/sync/apply/txs_worker.rs
index 52ae0b285c534e325913c148d16cbcb9f7bfbfc7..19cd296139943587dca88d4d3741d62086707074 100644
--- a/lib/modules/blockchain/blockchain/src/sync/apply/txs_worker.rs
+++ b/lib/modules/blockchain/blockchain/src/sync/apply/txs_worker.rs
@@ -40,7 +40,7 @@ pub fn execute(
             // Apply db request
             db.write(|mut w| {
                 req.apply(&db, &mut w, None, in_fork_window)?;
-                Ok(w)
+                Ok(WriteResp::from(w))
             })
             .expect("Fatal error : Fail to apply CurrencyDBsWriteQuery !");
             wait_begin = Instant::now();
diff --git a/lib/modules/blockchain/blockchain/src/sync/apply/wot_worker.rs b/lib/modules/blockchain/blockchain/src/sync/apply/wot_worker.rs
index 2cb3c86b2568b24b6e824be6732894f4f4854899..1cef4417e5eea4a66189040cb00ae5c687edb115 100644
--- a/lib/modules/blockchain/blockchain/src/sync/apply/wot_worker.rs
+++ b/lib/modules/blockchain/blockchain/src/sync/apply/wot_worker.rs
@@ -38,7 +38,7 @@ pub fn execute(
                 SyncJobsMess::WotsDBsWriteQuery(blockstamp, currency_params, req) => {
                     db.write(|mut w| {
                         req.apply(&db, &mut w, &blockstamp, &currency_params.deref())?;
-                        Ok(w)
+                        Ok(WriteResp::from(w))
                     })
                     .unwrap_or_else(|_| {
                         fatal_error!("Fail to apply WotsDBsWriteQuery ({})", blockstamp)
diff --git a/lib/tests-tools/bc-db-tests-tools/src/mocks.rs b/lib/tests-tools/bc-db-tests-tools/src/mocks.rs
index e5742c3b14d9fada6ecdae094f4397eda8229a74..1323d8461a27a2227ac867235f808009bb64e2de 100644
--- a/lib/tests-tools/bc-db-tests-tools/src/mocks.rs
+++ b/lib/tests-tools/bc-db-tests-tools/src/mocks.rs
@@ -20,7 +20,7 @@ use durs_bc_db_reader::blocks::fork_tree::ForkTree;
 use durs_bc_db_reader::blocks::BlockDb;
 use durs_bc_db_writer::blocks::{insert_new_fork_block, insert_new_head_block};
 use durs_bc_db_writer::current_metadata::update_current_metadata;
-use durs_bc_db_writer::{Db, DbError};
+use durs_bc_db_writer::{Db, DbError, WriteResp};
 
 /// Warning : This function does not update the indexes and considers
 /// that your block is valid (so chainable on the main chain).
@@ -42,7 +42,7 @@ pub fn insert_main_block(
                 expire_certs: None,
             },
         )?;
-        Ok(w)
+        Ok(WriteResp::from(w))
     })
 }
 
@@ -63,7 +63,7 @@ pub fn insert_fork_block(
                 expire_certs: None,
             },
         )?;
-        Ok(w)
+        Ok(WriteResp::from(w))
     })?;
     Ok(orphan)
 }
diff --git a/lib/tools/dbs-tools/src/kv_db_old.rs b/lib/tools/dbs-tools/src/kv_db_old.rs
index 5d4b06825dd06ba8555f317f554e224e3f661d6e..a061e68766c683d52c11dc5befa7d8bfab2b6b2d 100644
--- a/lib/tools/dbs-tools/src/kv_db_old.rs
+++ b/lib/tools/dbs-tools/src/kv_db_old.rs
@@ -7,7 +7,7 @@ mod file;
 pub use file::MockKvFileDbReader;
 pub use file::{
     from_db_value, KvFileDbHandler, KvFileDbRead, KvFileDbReader, KvFileDbRoHandler,
-    KvFileDbSchema, KvFileDbStoreType, KvFileDbWriter,
+    KvFileDbSchema, KvFileDbStoreType, KvFileDbWriter, WriteResp,
 };
 pub use rkv::{
     store::multi::Iter, IntegerStore, MultiIntegerStore, MultiStore,
diff --git a/lib/tools/dbs-tools/src/kv_db_old/file.rs b/lib/tools/dbs-tools/src/kv_db_old/file.rs
index 24ba05bb9f85283b63b2b94e8cd9decb5eb05d5d..cd38a926bcf9a4c25ebe23fc7cf1e664e76d2901 100644
--- a/lib/tools/dbs-tools/src/kv_db_old/file.rs
+++ b/lib/tools/dbs-tools/src/kv_db_old/file.rs
@@ -410,18 +410,38 @@ impl KvFileDbHandler {
     }
     /// Write datas in database
     /// /!\ The written data are visible to readers but not persisted on the disk until a save() is performed.
-    pub fn write<F>(&self, f: F) -> Result<(), DbError>
+    pub fn write<D, F>(&self, f: F) -> Result<D, DbError>
     where
-        F: FnOnce(KvFileDbWriter) -> Result<KvFileDbWriter, DbError>,
+        F: FnOnce(KvFileDbWriter) -> Result<WriteResp<D>, DbError>,
     {
         f(KvFileDbWriter {
             buffer: Vec::with_capacity(0),
             writer: self.arc().read()?.write()?,
         })?
-        .writer
-        .commit()?;
+        .commit()
+    }
+}
 
-        Ok(())
+/// Write transaction response
+pub struct WriteResp<'w, D> {
+    writer: KvFileDbWriter<'w>,
+    datas: D,
+}
+
+impl<'w, D> WriteResp<'w, D> {
+    fn commit(self) -> Result<D, DbError> {
+        self.writer.writer.commit()?;
+        Ok(self.datas)
+    }
+    /// Instantiate WriteResp
+    pub fn new(writer: KvFileDbWriter<'w>, datas: D) -> WriteResp<'w, D> {
+        WriteResp { writer, datas }
+    }
+}
+
+impl<'w> From<KvFileDbWriter<'w>> for WriteResp<'w, ()> {
+    fn from(writer: KvFileDbWriter<'w>) -> WriteResp<'w, ()> {
+        WriteResp { writer, datas: () }
     }
 }
 
@@ -456,7 +476,7 @@ mod tests {
 
         db.write(|mut w| {
             store_test1.put(w.as_mut(), 3, &Value::Str("toto"))?;
-            Ok(w)
+            Ok(WriteResp::from(w))
         })?;
 
         let ro_db = KvFileDbRoHandler::open_db_ro(tmp_dir.path(), &schema)?;
@@ -468,7 +488,7 @@ mod tests {
 
         db.write(|mut w| {
             store_test1.put(w.as_mut(), 3, &Value::Str("titi"))?;
-            Ok(w)
+            Ok(WriteResp::from(w))
         })?;
 
         assert_eq!(
@@ -482,7 +502,7 @@ mod tests {
                 Some("titi".to_owned()),
                 get_int_store_str_val(&ro_db, "test1", 3)?
             );
-            Ok(w)
+            Ok(WriteResp::from(w))
         })?;
 
         let db_path = tmp_dir.path().to_owned();