diff --git a/common/cpp/include/asapo/database/database.h b/common/cpp/include/asapo/database/database.h
index e21af48757b4774baf42d7435bb4b01a020c00ae..61c32e0dcec5a7867d0f6d9c87aff8fb3846657c 100644
--- a/common/cpp/include/asapo/database/database.h
+++ b/common/cpp/include/asapo/database/database.h
@@ -14,7 +14,8 @@ constexpr char kDBMetaCollectionName[] = "meta";
 class Database {
   public:
     virtual Error Connect(const std::string& address, const std::string& database) = 0;
-    virtual Error Insert(const std::string& collection, const MessageMeta& file, bool ignore_duplicates) const = 0;
+    virtual Error Insert(const std::string& collection, const MessageMeta& file, bool ignore_duplicates,
+                         uint64_t* id_inserted) const = 0;
     virtual Error InsertMeta(const std::string& collection, const std::string& id, const uint8_t* data, uint64_t size,
                              MetaIngestMode mode) const = 0;
     virtual Error InsertAsDatasetMessage(const std::string& collection, const MessageMeta& file,
diff --git a/common/cpp/include/asapo/unittests/MockDatabase.h b/common/cpp/include/asapo/unittests/MockDatabase.h
index f8c2464364c7eaf7ebec9c3d26fd622a3de3542b..b8f94b260fb13f4554ea86e71f59166a9b32b4bd 100644
--- a/common/cpp/include/asapo/unittests/MockDatabase.h
+++ b/common/cpp/include/asapo/unittests/MockDatabase.h
@@ -15,8 +15,9 @@ class MockDatabase : public Database {
         return Error{Connect_t(address, database)};
 
     }
-    Error Insert(const std::string& collection, const MessageMeta& file, bool ignore_duplicates) const override {
-        return Error{Insert_t(collection, file, ignore_duplicates)};
+    Error Insert(const std::string& collection, const MessageMeta& file, bool ignore_duplicates,
+                 uint64_t* id_inserted) const override {
+        return Error{Insert_t(collection, file, ignore_duplicates, id_inserted)};
     }
 
     Error InsertAsDatasetMessage(const std::string& collection, const MessageMeta& file,
@@ -25,7 +26,7 @@ class MockDatabase : public Database {
     }
 
     MOCK_METHOD2(Connect_t, ErrorInterface * (const std::string&, const std::string&));
-    MOCK_CONST_METHOD3(Insert_t, ErrorInterface * (const std::string&, const MessageMeta&, bool));
+    MOCK_CONST_METHOD4(Insert_t, ErrorInterface * (const std::string&, const MessageMeta&, bool, uint64_t*));
 
     MOCK_CONST_METHOD4(InsertAsDatasetMessage_t,
                        ErrorInterface * (const std::string&, const MessageMeta&, uint64_t, bool));
diff --git a/common/cpp/src/database/mongodb_client.cpp b/common/cpp/src/database/mongodb_client.cpp
index ab37394c0a6c7b2e3d43b07300df267fb368d9ad..423122f9aca51901b7792d61a30f5fd89f50001f 100644
--- a/common/cpp/src/database/mongodb_client.cpp
+++ b/common/cpp/src/database/mongodb_client.cpp
@@ -338,7 +338,7 @@ Error MongoDBClient::GetNextId(const std::string& stream, uint64_t* id) const {
 
 Error MongoDBClient::InsertWithAutoId(const MessageMeta& file,
                                       const std::string& collection,
-                                      bool ignore_duplicates) const {
+                                      uint64_t* id_inserted) const {
     bson_error_t error;
 
     uint64_t id;
@@ -349,10 +349,11 @@ Error MongoDBClient::InsertWithAutoId(const MessageMeta& file,
 
     auto meta_new = file;
     meta_new.id = id;
-    return Insert(current_collection_name_, meta_new, ignore_duplicates);
+    return Insert(current_collection_name_, meta_new, false, id_inserted);
 }
 
-Error MongoDBClient::Insert(const std::string& collection, const MessageMeta& file, bool ignore_duplicates) const {
+Error MongoDBClient::Insert(const std::string& collection, const MessageMeta& file, bool ignore_duplicates,
+                            uint64_t* id_inserted) const {
     if (!connected_) {
         return DBErrorTemplates::kNotConnected.Generate();
     }
@@ -363,7 +364,7 @@ Error MongoDBClient::Insert(const std::string& collection, const MessageMeta& fi
     }
 
     if (file.id == 0) {
-        return InsertWithAutoId(file, collection, ignore_duplicates);
+        return InsertWithAutoId(file, collection, id_inserted);
     }
 
     auto document = PrepareBsonDocument(file, &err);
@@ -371,7 +372,11 @@ Error MongoDBClient::Insert(const std::string& collection, const MessageMeta& fi
         return err;
     }
 
-    return InsertBsonDocument(document, ignore_duplicates);
+    err = InsertBsonDocument(document, ignore_duplicates);
+    if (!err && id_inserted) {
+        *id_inserted = file.id;
+    }
+    return err;
 }
 
 MongoDBClient::~MongoDBClient() {
diff --git a/common/cpp/src/database/mongodb_client.h b/common/cpp/src/database/mongodb_client.h
index d3801cdb3ba1b0f3f7c092ce450b34ce008fa841..d97bd21f2c38fa579a64032eccb1cedddd7feeb8 100644
--- a/common/cpp/src/database/mongodb_client.h
+++ b/common/cpp/src/database/mongodb_client.h
@@ -47,7 +47,8 @@ class MongoDBClient final : public Database {
   public:
     MongoDBClient();
     Error Connect(const std::string& address, const std::string& database) override;
-    Error Insert(const std::string& collection, const MessageMeta& file, bool ignore_duplicates) const override;
+    Error Insert(const std::string& collection, const MessageMeta& file, bool ignore_duplicates,
+                 uint64_t* id_inserted) const override;
     Error InsertAsDatasetMessage(const std::string& collection, const MessageMeta& file, uint64_t dataset_size,
                                  bool ignore_duplicates) const override;
     Error InsertMeta(const std::string& collection, const std::string& id, const uint8_t* data, uint64_t size,
@@ -84,7 +85,7 @@ class MongoDBClient final : public Database {
     Error DeleteCollection(const std::string& name) const;
     Error DeleteCollections(const std::string& prefix) const;
     Error DeleteDocumentsInCollection(const std::string& collection_name, const std::string& querystr) const;
-    Error InsertWithAutoId(const MessageMeta& file, const std::string& collection, bool ignore_duplicates) const;
+    Error InsertWithAutoId(const MessageMeta& file, const std::string& collection, uint64_t* id_inserted) const;
 };
 
 struct TransactionContext {
diff --git a/consumer/tools/folder_to_db/src/folder_db_importer.cpp b/consumer/tools/folder_to_db/src/folder_db_importer.cpp
index 833ade112f4e6aa09a6b19f4a732a7b6ac889230..ed0bdf12a3d7a8946f65c523ea3184745e6cfd6d 100644
--- a/consumer/tools/folder_to_db/src/folder_db_importer.cpp
+++ b/consumer/tools/folder_to_db/src/folder_db_importer.cpp
@@ -21,7 +21,7 @@ Error FolderToDbImporter::ConnectToDb(const std::unique_ptr<asapo::Database>& db
 
 Error FolderToDbImporter::ImportSingleFile(const std::unique_ptr<asapo::Database>& db,
                                            const MessageMeta& file) const {
-    return db->Insert(std::string(kDBDataCollectionNamePrefix) + "_default", file, ignore_duplicates_);
+    return db->Insert(std::string(kDBDataCollectionNamePrefix) + "_default", file, ignore_duplicates_, nullptr);
 }
 
 Error FolderToDbImporter::ImportFilelistChunk(const std::unique_ptr<asapo::Database>& db,
diff --git a/consumer/tools/folder_to_db/unittests/test_folder_to_db.cpp b/consumer/tools/folder_to_db/unittests/test_folder_to_db.cpp
index f14a72dd418cfac576bf864ed3b6434ce72a4442..59a46d881e99784a9dfc2c98a48ca998c059b46d 100644
--- a/consumer/tools/folder_to_db/unittests/test_folder_to_db.cpp
+++ b/consumer/tools/folder_to_db/unittests/test_folder_to_db.cpp
@@ -177,7 +177,7 @@ TEST_F(FolderDBConverterTests, ErrorWhenCannotGetFileList) {
 
 TEST_F(FolderDBConverterTests, PassesIgnoreDuplicates) {
 
-    EXPECT_CALL(*(mock_dbf->db[0]), Insert_t(expected_collection_name, _, true)).Times(3);
+    EXPECT_CALL(*(mock_dbf->db[0]), Insert_t(expected_collection_name, _, true, _)).Times(3);
 
     converter.IgnoreDuplicates(true);
     converter.Convert(uri, folder, db_name);
@@ -186,7 +186,7 @@ TEST_F(FolderDBConverterTests, PassesIgnoreDuplicates) {
 
 TEST_F(FolderDBConverterTests, ErrorWhenCannotImportFileListToDb) {
 
-    EXPECT_CALL(*(mock_dbf->db[0]), Insert_t(_, _, _)).
+    EXPECT_CALL(*(mock_dbf->db[0]), Insert_t(_, _, _, _)).
     WillOnce(testing::Return(asapo::DBErrorTemplates::kInsertError.Generate().release()));
 
     auto error = converter.Convert(uri, folder, db_name);
@@ -205,7 +205,7 @@ MATCHER_P(CompareMessageMeta, file, "") {
 TEST_F(FolderDBConverterTests, PassesFileListToInsert) {
 
     for (auto& file : message_metas) {
-        EXPECT_CALL(*(mock_dbf->db[0]), Insert_t(expected_collection_name, CompareMessageMeta(file), _)).
+        EXPECT_CALL(*(mock_dbf->db[0]), Insert_t(expected_collection_name, CompareMessageMeta(file), _, _)).
         WillOnce(testing::Return(nullptr));
     }
 
@@ -216,11 +216,11 @@ TEST_F(FolderDBConverterTests, PassesFileListToInsert) {
 
 TEST_F(FolderDBConverterTests, PassesFileListToInsertInParallel3by3) {
 
-    EXPECT_CALL(*(mock_dbf->db[0]), Insert_t(expected_collection_name, CompareMessageMeta(message_metas[0]), _)).
+    EXPECT_CALL(*(mock_dbf->db[0]), Insert_t(expected_collection_name, CompareMessageMeta(message_metas[0]), _, _)).
     WillOnce(testing::Return(nullptr));
-    EXPECT_CALL(*(mock_dbf->db[1]), Insert_t(expected_collection_name, CompareMessageMeta(message_metas[1]), _)).
+    EXPECT_CALL(*(mock_dbf->db[1]), Insert_t(expected_collection_name, CompareMessageMeta(message_metas[1]), _, _)).
     WillOnce(testing::Return(nullptr));
-    EXPECT_CALL(*(mock_dbf->db[2]), Insert_t(expected_collection_name, CompareMessageMeta(message_metas[2]), _)).
+    EXPECT_CALL(*(mock_dbf->db[2]), Insert_t(expected_collection_name, CompareMessageMeta(message_metas[2]), _, _)).
     WillOnce(testing::Return(nullptr));
 
     converter.SetNParallelTasks(3, false);
@@ -230,11 +230,11 @@ TEST_F(FolderDBConverterTests, PassesFileListToInsertInParallel3by3) {
 
 TEST_F(FolderDBConverterTests, PassesFileListToInsertInParallel3by2) {
 
-    EXPECT_CALL(*(mock_dbf->db[0]), Insert_t(expected_collection_name, CompareMessageMeta(message_metas[0]), _)).
+    EXPECT_CALL(*(mock_dbf->db[0]), Insert_t(expected_collection_name, CompareMessageMeta(message_metas[0]), _, _)).
     WillOnce(testing::Return(nullptr));
-    EXPECT_CALL(*(mock_dbf->db[0]), Insert_t(expected_collection_name, CompareMessageMeta(message_metas[1]), _)).
+    EXPECT_CALL(*(mock_dbf->db[0]), Insert_t(expected_collection_name, CompareMessageMeta(message_metas[1]), _, _)).
     WillOnce(testing::Return(nullptr));
-    EXPECT_CALL(*(mock_dbf->db[1]), Insert_t(expected_collection_name, CompareMessageMeta(message_metas[2]), _)).
+    EXPECT_CALL(*(mock_dbf->db[1]), Insert_t(expected_collection_name, CompareMessageMeta(message_metas[2]), _, _)).
     WillOnce(testing::Return(nullptr));
 
     converter.SetNParallelTasks(2, false);
@@ -244,7 +244,7 @@ TEST_F(FolderDBConverterTests, PassesFileListToInsertInParallel3by2) {
 
 TEST_F(FolderDBConverterTests, ComputesStatistics) {
 
-    EXPECT_CALL(*mock_dbf->db[0], Insert_t(_, _, false)).
+    EXPECT_CALL(*mock_dbf->db[0], Insert_t(_, _, false, _)).
     Times(message_metas.size()).
     WillRepeatedly(testing::Return(nullptr));
 
diff --git a/producer/api/cpp/include/asapo/producer/common.h b/producer/api/cpp/include/asapo/producer/common.h
index 5b2da89b06ec02a429928c484e516f1be3c1025b..7ea9293816fb3db9bdcbf36a6e4922706a916697 100644
--- a/producer/api/cpp/include/asapo/producer/common.h
+++ b/producer/api/cpp/include/asapo/producer/common.h
@@ -25,26 +25,29 @@ enum class RequestHandlerType {
     kFilesystem
 };
 
-
 struct MessageHeader {
     MessageHeader() {};
     MessageHeader(uint64_t message_id_i, uint64_t data_size_i, std::string file_name_i,
                   std::string user_metadata_i = "",
                   uint64_t dataset_substream_i = 0,
-                  uint64_t dataset_size_i = 0 ):
+                  uint64_t dataset_size_i = 0,
+                  bool auto_id_i = false):
         message_id{message_id_i}, data_size{data_size_i},
         file_name{std::move(file_name_i)},
         user_metadata{std::move(user_metadata_i)},
         dataset_substream{dataset_substream_i},
-        dataset_size{dataset_size_i} {};
+        dataset_size{dataset_size_i},
+        auto_id{auto_id_i} {};
     uint64_t message_id = 0;
     uint64_t data_size = 0;
     std::string file_name;
     std::string user_metadata;
     uint64_t dataset_substream = 0;
     uint64_t dataset_size = 0;
+    bool auto_id = false;
 };
 
+
 }
 
 #endif //ASAPO_PRODUCER_COMMON_H
diff --git a/producer/api/cpp/src/producer_impl.cpp b/producer/api/cpp/src/producer_impl.cpp
index a0f2c7477e40b883bf057697c7527e83cc5f8620..26ed89d549a99c83b6da4f8e254603982da299f0 100644
--- a/producer/api/cpp/src/producer_impl.cpp
+++ b/producer/api/cpp/src/producer_impl.cpp
@@ -69,12 +69,7 @@ Error CheckIngestMode(uint64_t ingest_mode) {
     return nullptr;
 }
 
-Error CheckProducerRequest(const MessageHeader& message_header, uint64_t ingest_mode, const std::string& stream) {
-
-    if (stream.empty()) {
-        return ProducerErrorTemplates::kWrongInput.Generate("stream empty");
-    }
-
+Error CheckFileNameInRequest(const MessageHeader& message_header) {
     if (message_header.file_name.size() > kMaxMessageSize) {
         return ProducerErrorTemplates::kWrongInput.Generate("too long filename");
     }
@@ -82,13 +77,53 @@ Error CheckProducerRequest(const MessageHeader& message_header, uint64_t ingest_
     if (message_header.file_name.empty()) {
         return ProducerErrorTemplates::kWrongInput.Generate("empty filename");
     }
+    return nullptr;
+}
+
+Error CheckDatasetInRequest(const MessageHeader& message_header) {
+    if (!message_header.dataset_substream) {
+        return nullptr;
+    }
 
-    if (message_header.dataset_substream > 0 && message_header.dataset_size == 0) {
+    if (message_header.dataset_size == 0) {
         return ProducerErrorTemplates::kWrongInput.Generate("dataset dimensions");
     }
 
-    if (message_header.message_id == 0) {
-        return ProducerErrorTemplates::kWrongInput.Generate("message id should be positive");
+    if (message_header.auto_id) {
+        return ProducerErrorTemplates::kWrongInput.Generate("auto id mode not implemented for datasets");
+    }
+
+    return nullptr;
+}
+
+Error CheckMessageIdInRequest(const MessageHeader& message_header) {
+    if (message_header.auto_id) {
+        if (message_header.message_id) {
+            return ProducerErrorTemplates::kWrongInput.Generate("message id should be 0 for auto id mode");
+        }
+    } else {
+        if (message_header.message_id == 0) {
+            return ProducerErrorTemplates::kWrongInput.Generate("message id should be positive");
+        }
+    }
+    return nullptr;
+}
+
+Error CheckProducerRequest(const MessageHeader& message_header, uint64_t ingest_mode, const std::string& stream) {
+    if (stream.empty()) {
+        return ProducerErrorTemplates::kWrongInput.Generate("stream empty");
+    }
+
+    if (auto err = CheckFileNameInRequest(message_header)) {
+        return err;
+    }
+
+    if (auto err = CheckDatasetInRequest(message_header)) {
+        return err;
+    }
+
+    if (auto err = CheckMessageIdInRequest(message_header)) {
+        return err;
     }
 
     return CheckIngestMode(ingest_mode);
@@ -161,12 +196,12 @@ Error ProducerImpl::Send(const MessageHeader& message_header,
     return HandleErrorFromPool(std::move(err), manage_data_memory);
 }
 
-bool WandTransferData(uint64_t ingest_mode) {
+bool WantTransferData(uint64_t ingest_mode) {
     return ingest_mode & IngestModeFlags::kTransferData;
 }
 
 Error CheckData(uint64_t ingest_mode, const MessageHeader& message_header, const MessageData* data) {
-    if (WandTransferData(ingest_mode)) {
+    if (WantTransferData(ingest_mode)) {
         if (*data == nullptr) {
             return ProducerErrorTemplates::kWrongInput.Generate("need data for this ingest mode");
         }
diff --git a/producer/api/cpp/unittests/test_producer_impl.cpp b/producer/api/cpp/unittests/test_producer_impl.cpp
index 216ac1a73ff0046adee313392c71dcc5b22391d4..667f3723a93914d6de35647ada6caf180c7df49d 100644
--- a/producer/api/cpp/unittests/test_producer_impl.cpp
+++ b/producer/api/cpp/unittests/test_producer_impl.cpp
@@ -164,6 +164,27 @@ TEST_F(ProducerImplTests, ErrorIfZeroDataSize) {
     ASSERT_THAT(err_data, Ne(nullptr));
 }
 
+TEST_F(ProducerImplTests, ErrorIfBothIdAndAutoIdSet) {
+    asapo::MessageData data = asapo::MessageData{new uint8_t[100]};
+    asapo::MessageHeader message_header{1, 100, expected_fullpath, "", 0, 0, true};
+    auto err = producer.Send(message_header, std::move(data), asapo::kDefaultIngestMode, "default", nullptr);
+    ASSERT_THAT(err, Eq(asapo::ProducerErrorTemplates::kWrongInput));
+    auto err_data = static_cast<asapo::OriginalData*>(err->GetCustomData());
+    ASSERT_THAT(err_data, Ne(nullptr));
+}
+
+TEST_F(ProducerImplTests, OkAutoId) {
+    asapo::MessageHeader message_header{0, 100, expected_fullpath, "", 0, 0, true};
+    auto err = producer.Send(message_header, nullptr, asapo::kTransferMetaDataOnly, "default", nullptr);
+    ASSERT_THAT(err, Eq(nullptr));
+}
+
+TEST_F(ProducerImplTests, ErrorIfAutoIdForSet) {
+    asapo::MessageHeader message_header{0, 0, expected_fullpath, "", 1, 1, true};
+    auto err = producer.Send(message_header, nullptr, asapo::kTransferMetaDataOnly, "default", nullptr);
+    ASSERT_THAT(err, Eq(asapo::ProducerErrorTemplates::kWrongInput));
+}
+
 TEST_F(ProducerImplTests, ErrorIfNoData) {
     asapo::MessageHeader message_header{1, 100, expected_fullpath};
     auto err = producer.Send(message_header, nullptr, asapo::kDefaultIngestMode, "default", nullptr);
diff --git a/receiver/src/request_handler/request_handler_db_write.cpp b/receiver/src/request_handler/request_handler_db_write.cpp
index db28504e4f66991a18f257362d8e6e76ade59795..d65e2237c40779cc366c8b3c20b340adb324daba 100644
--- a/receiver/src/request_handler/request_handler_db_write.cpp
+++ b/receiver/src/request_handler/request_handler_db_write.cpp
@@ -58,9 +58,10 @@ Error RequestHandlerDbWrite::InsertRecordToDb(const Request* request) const {
     auto col_name = collection_name_prefix_ + "_" + request->GetStream();
     Error err;
     if (op_code == Opcode::kOpcodeTransferData) {
-        err =  db_client__->Insert(col_name, message_meta, false);
+        uint64_t id_inserted;
+        err =  db_client__->Insert(col_name, message_meta, false, &id_inserted);
         if (!err) {
-            log__->Debug(std::string{"insert record id "} + std::to_string(message_meta.id) + " to " + col_name + " in " +
+            log__->Debug(std::string{"insert record id "} + std::to_string(id_inserted) + " to " + col_name + " in " +
                          db_name_ +
                          " at " + GetReceiverConfig()->database_uri);
         }
diff --git a/receiver/unittests/request_handler/test_request_handler_db_writer.cpp b/receiver/unittests/request_handler/test_request_handler_db_writer.cpp
index d12f6ef1f4863728cb4a557698ca3eb60a3e2f0d..14e8a1ca978bd2f63297fb539cc4e5001bd04df5 100644
--- a/receiver/unittests/request_handler/test_request_handler_db_writer.cpp
+++ b/receiver/unittests/request_handler/test_request_handler_db_writer.cpp
@@ -220,7 +220,7 @@ TEST_F(DbWriterHandlerTests, CallsInsert) {
     ExpectRequestParams(asapo::Opcode::kOpcodeTransferData, expected_data_source);
     auto message_meta = PrepareMessageMeta();
 
-    EXPECT_CALL(mock_db, Insert_t(expected_collection_name, CompareMessageMeta(message_meta), false)).
+    EXPECT_CALL(mock_db, Insert_t(expected_collection_name, CompareMessageMeta(message_meta), false, _)).
     WillOnce(testing::Return(nullptr));
     ExpectLogger();
 
@@ -246,7 +246,7 @@ void DbWriterHandlerTests::ExpectDuplicatedID() {
     ExpectRequestParams(asapo::Opcode::kOpcodeTransferData, expected_data_source);
     auto message_meta = PrepareMessageMeta();
 
-    EXPECT_CALL(mock_db, Insert_t(expected_collection_name, CompareMessageMeta(message_meta), false)).
+    EXPECT_CALL(mock_db, Insert_t(expected_collection_name, CompareMessageMeta(message_meta), false, _)).
     WillOnce(testing::Return(asapo::DBErrorTemplates::kDuplicateID.Generate().release()));
 }
 
diff --git a/tests/automatic/mongo_db/auto_id/auto_id.cpp b/tests/automatic/mongo_db/auto_id/auto_id.cpp
index d440b9b11ddc195a69734d4c64484d3962c66f8e..b138e88f6c38c96b518b1d88f34b401895fd6f51 100644
--- a/tests/automatic/mongo_db/auto_id/auto_id.cpp
+++ b/tests/automatic/mongo_db/auto_id/auto_id.cpp
@@ -64,11 +64,15 @@ void insert(const asapo::MongoDBClient& db, const std::string& name, asapo::Mess
         default:
             abort();
         }
-        Error err = db.Insert(std::string("data_") + name, fi, false);
+        uint64_t  inserted_id{0};
+        Error err = db.Insert(std::string("data_") + name, fi, false, &inserted_id);
         if (err != nullptr) {
             printf("%s\n", err->Explain().c_str());
 //            break;
         } else {
+            if (inserted_id == 0) {
+                M_AssertTrue(false);
+            }
             global_count++;
         }
     }
diff --git a/tests/automatic/mongo_db/insert_retrieve/insert_retrieve_mongodb.cpp b/tests/automatic/mongo_db/insert_retrieve/insert_retrieve_mongodb.cpp
index d21e7051fc7a4d70efb5aec0a0661e088a2187f1..68f790722ca2abc1d7d2219b68d560de3e02f557 100644
--- a/tests/automatic/mongo_db/insert_retrieve/insert_retrieve_mongodb.cpp
+++ b/tests/automatic/mongo_db/insert_retrieve/insert_retrieve_mongodb.cpp
@@ -68,11 +68,11 @@ int main(int argc, char* argv[]) {
         db.Connect("127.0.0.1", db_name);
     }
 
-    auto err = db.Insert(std::string("data_") + stream_name, fi, false);
+    auto err = db.Insert(std::string("data_") + stream_name, fi, false, nullptr);
 
     if (args.keyword == "DuplicateID") {
         Assert(err, "OK");
-        err = db.Insert(std::string("data_") + stream_name, fi, false);
+        err = db.Insert(std::string("data_") + stream_name, fi, false, nullptr);
     }
 
     std::this_thread::sleep_for(std::chrono::milliseconds(10));
@@ -83,8 +83,8 @@ int main(int argc, char* argv[]) {
     fi2.timestamp = std::chrono::system_clock::now() + std::chrono::minutes(1);
     fi2.name = asapo::kFinishStreamKeyword;
     fi2.metadata = R"({"next_stream":"ns"})";
-    db.Insert("data_test1", fi1, false);
-    db.Insert("data_test1", fi2, false);
+    db.Insert("data_test1", fi1, false, nullptr);
+    db.Insert("data_test1", fi2, false, nullptr);
 
     Assert(err, args.keyword);
 
@@ -112,10 +112,10 @@ int main(int argc, char* argv[]) {
         M_AssertEq("ns", info.next_stream);
 
 // delete stream
-        db.Insert(std::string("inprocess_") + stream_name + "_blabla", fi, false);
-        db.Insert(std::string("inprocess_") + stream_name + "_blabla1", fi, false);
-        db.Insert(std::string("acks_") + stream_name + "_blabla", fi, false);
-        db.Insert(std::string("acks_") + stream_name + "_blabla1", fi, false);
+        db.Insert(std::string("inprocess_") + stream_name + "_blabla", fi, false, nullptr);
+        db.Insert(std::string("inprocess_") + stream_name + "_blabla1", fi, false, nullptr);
+        db.Insert(std::string("acks_") + stream_name + "_blabla", fi, false, nullptr);
+        db.Insert(std::string("acks_") + stream_name + "_blabla1", fi, false, nullptr);
         db.DeleteStream(stream_name);
         err = db.GetStreamInfo(std::string("data_") + stream_name, &info);
         M_AssertTrue(info.last_id == 0);
@@ -140,7 +140,7 @@ int main(int argc, char* argv[]) {
 
     db1.Connect("127.0.0.1", db_name);
     auto long_stream_name = GenRandomString(120);
-    err = db1.Insert(long_stream_name, fi, true);
+    err = db1.Insert(long_stream_name, fi, true, nullptr);
     M_AssertTrue(err == asapo::DBErrorTemplates::kWrongInput);
 
 
diff --git a/tests/automatic/mongo_db/insert_retrieve_dataset/insert_retrieve_dataset_mongodb.cpp b/tests/automatic/mongo_db/insert_retrieve_dataset/insert_retrieve_dataset_mongodb.cpp
index 7e2f8e58042ffe1b34348f9296c9802934bb2bfe..b6ffe373fb29c8f97f9ad5cadd368383c218ea8a 100644
--- a/tests/automatic/mongo_db/insert_retrieve_dataset/insert_retrieve_dataset_mongodb.cpp
+++ b/tests/automatic/mongo_db/insert_retrieve_dataset/insert_retrieve_dataset_mongodb.cpp
@@ -87,7 +87,7 @@ int main(int argc, char* argv[]) {
         fi2.timestamp = std::chrono::system_clock::now() + std::chrono::minutes(1);
         fi2.name = asapo::kFinishStreamKeyword;
         fi2.metadata = R"({"next_stream":"ns"})";
-        db.Insert("data_test", fi2, false);
+        db.Insert("data_test", fi2, false, nullptr);
         err = db.GetLastStream(&info_last);
         M_AssertEq(nullptr, err);
         M_AssertEq("test", info_last.name);