diff --git a/src/language/utils/BuiltinFunctionEmbedder.hpp b/src/language/utils/BuiltinFunctionEmbedder.hpp
index 460ec3e866be479633e5bf9a9a416c1f84fc09e6..251c39e6d5eb5dc46423e75dedea28947d1a29be 100644
--- a/src/language/utils/BuiltinFunctionEmbedder.hpp
+++ b/src/language/utils/BuiltinFunctionEmbedder.hpp
@@ -114,10 +114,21 @@ class BuiltinFunctionEmbedderBase<FX(Args...)> : public IBuiltinFunctionEmbedder
   }
 
   template <typename T>
-  PUGS_INLINE std::shared_ptr<IDataHandler>
+  PUGS_INLINE EmbeddedData
   _createHandler(std::shared_ptr<T> data) const
   {
-    return std::make_shared<DataHandler<T>>(data);
+    return EmbeddedData{std::make_shared<DataHandler<T>>(data)};
+  }
+
+  template <typename T>
+  PUGS_INLINE std::vector<EmbeddedData>
+  _createHandler(std::vector<std::shared_ptr<T>> data) const
+  {
+    std::vector<EmbeddedData> embedded(data.size());
+    for (size_t i_data = 0; i_data < data.size(); ++i_data) {
+      embedded[i_data] = EmbeddedData(std::make_shared<DataHandler<T>>(data[i_data]));
+    }
+    return embedded;
   }
 
   template <typename ResultT>
@@ -127,7 +138,7 @@ class BuiltinFunctionEmbedderBase<FX(Args...)> : public IBuiltinFunctionEmbedder
     if constexpr (is_data_variant_v<std::decay_t<ResultT>>) {
       return std::move(result);
     } else {
-      return EmbeddedData(_createHandler(std::move(result)));
+      return _createHandler(std::move(result));
     }
   }
 
@@ -327,7 +338,7 @@ class BuiltinFunctionEmbedder<FX(Args...)> : public BuiltinFunctionEmbedderBase<
       std::apply(m_f, t);
       return {};
     } else {
-      return EmbeddedData(this->template _createHandler(std::apply(m_f, t)));
+      return this->template _createHandler(std::apply(m_f, t));
     }
   }