diff --git a/include/libcamera/internal/media_object.h b/include/libcamera/internal/media_object.h
index 90c63598..48616a43 100644
--- a/include/libcamera/internal/media_object.h
+++ b/include/libcamera/internal/media_object.h
@@ -104,6 +104,9 @@ public:
 	unsigned int deviceMinor() const { return minor_; }
 
 	const std::vector<MediaPad *> &pads() const { return pads_; }
+	const std::vector<MediaEntity *> ancillaryEntities() const {return ancillaryEntities_; }
+
+	void addAncillaryEntity(MediaEntity *ancillaryEntity);
 
 	const MediaPad *getPadByIndex(unsigned int index) const;
 	const MediaPad *getPadById(unsigned int id) const;
@@ -129,6 +132,7 @@ private:
 	unsigned int minor_;
 
 	std::vector<MediaPad *> pads_;
+	std::vector<MediaEntity *> ancillaryEntities_;
 };
 
 } /* namespace libcamera */
diff --git a/src/libcamera/media_object.cpp b/src/libcamera/media_object.cpp
index f425d044..42b26b07 100644
--- a/src/libcamera/media_object.cpp
+++ b/src/libcamera/media_object.cpp
@@ -326,6 +326,22 @@ void MediaPad::addLink(MediaLink *link)
  * \return The list of the entity's pads
  */
 
+/**
+ * \fn MediaEntity::ancillaryEntities()
+ * \brief Retrieve all ancillary entities of the entity
+ * \return The list of the entity's ancillary entities
+ */
+
+/**
+ * \brief Add a MediaEntity to the list of ancillary entities
+ * \param[in] ancillaryEntity the instance of MediaEntity to add
+ * \return void
+ */
+void MediaEntity::addAncillaryEntity(MediaEntity *ancillaryEntity)
+{
+	ancillaryEntities_.push_back(ancillaryEntity);
+}
+
 /**
  * \brief Get a pad in this entity by its index
  * \param[in] index The 0-based pad index
