diff --git a/conanfile.txt b/conanfile.txt
index c05c8a050ed35900828a810c85820ed5c711b945..d61518d0c5b74645b75a9347b040f5f32a8452cc 100644
--- a/conanfile.txt
+++ b/conanfile.txt
@@ -1,5 +1,5 @@
 [requires]
-caosdb/0.0.7
+caosdb/0.0.8
 gtest/1.11.0
 
 [generators]
diff --git a/test/test_transaction.cpp b/test/test_transaction.cpp
index 6d71ea4dc3f22dc6b34b861a635fd18995d23e10..6c20e7492d820160ec62308843170b1c67d73a8c 100644
--- a/test/test_transaction.cpp
+++ b/test/test_transaction.cpp
@@ -30,7 +30,7 @@
 #include <iostream>                    // for endl, basic_ostream, cout
 #include <memory>                      // for unique_ptr, allocator, __shar...
 #include <string>                      // for string
-
+#include <vector>                      // for vector
 namespace caosdb::transaction {
 using caosdb::entity::Entity;
 using caosdb::entity::MessageCode;
@@ -395,4 +395,33 @@ TEST(test_transaction, insert_delete_with_property) {
   ASSERT_FALSE(prop_delete_status.IsError());
 }
 
+TEST(test_transaction, test_multi_retrieve) {
+  const auto &connection =
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
+
+  auto transaction(connection->CreateTransaction());
+
+  const std::vector<std::string> ids = {"20", "21", "22"};
+  transaction->RetrieveById(ids.begin(), ids.end());
+  transaction->ExecuteAsynchronously();
+
+  auto status = transaction->WaitForIt();
+
+  ASSERT_TRUE(status.IsTerminated());
+  ASSERT_FALSE(status.IsError());
+
+  const auto &result_set = transaction->GetResultSet();
+
+  EXPECT_EQ(result_set.Size(), 3);
+  EXPECT_EQ(result_set.At(1).GetId(), "21");
+  EXPECT_EQ(result_set.At(1).GetName(), "unit");
+  std::cout << result_set.At(1).ToString();
+  EXPECT_FALSE(result_set.At(1).HasErrors());
+
+  EXPECT_EQ(result_set.At(2).GetId(), "22");
+  EXPECT_TRUE(result_set.At(2).HasErrors());
+  EXPECT_EQ(result_set.At(2).GetErrors().At(0).GetCode(),
+            MessageCode::ENTITY_DOES_NOT_EXIST);
+}
+
 } // namespace caosdb::transaction