diff --git a/MantleAPI/include/MantleAPI/Traffic/i_entity_repository.h b/MantleAPI/include/MantleAPI/Traffic/i_entity_repository.h
index 38e865e312df890c6d103d1ae9078aed41daaa6a..ed103f04bd57c4b2d67a8ce519d2c1d9edd9e647 100644
--- a/MantleAPI/include/MantleAPI/Traffic/i_entity_repository.h
+++ b/MantleAPI/include/MantleAPI/Traffic/i_entity_repository.h
@@ -18,6 +18,8 @@
 #include <MantleAPI/Traffic/entity_properties.h>
 #include <MantleAPI/Traffic/i_entity.h>
 
+#include <functional>
+#include <optional>
 #include <string>
 #include <vector>
 
@@ -35,14 +37,18 @@ class IEntityRepository
     virtual IStaticObject& Create(UniqueId id, const std::string& name, const StaticObjectProperties& properties) = 0;
 
     virtual IVehicle& GetHost() = 0;
-    virtual IEntity& Get(const std::string& name) = 0;
-    virtual IEntity& Get(UniqueId id) = 0;
+    virtual std::optional<std::reference_wrapper<IEntity>> Get(const std::string& name) = 0;
+    virtual std::optional<std::reference_wrapper<IEntity>> Get(UniqueId id) = 0;
     virtual bool Contains(UniqueId id) const = 0;
 
     virtual void Delete(const std::string& name) = 0;
     virtual void Delete(UniqueId id) = 0;
 
     virtual const std::vector<std::unique_ptr<mantle_api::IEntity>>& GetEntities() const = 0;
+
+    virtual void RegisterEntityCreatedCallback(const std::function<void(IEntity&)>& callback) = 0;
+    virtual void RegisterEntityDeletedCallback(const std::function<void(const std::string&)>& callback) = 0;
+    virtual void RegisterEntityDeletedCallback(const std::function<void(UniqueId)>& callback) = 0;
 };
 
 }  // namespace mantle_api