diff --git a/demo/demo/rollball.cpp b/demo/demo/rollball.cpp
index 0838fffb1816f267fae5abf80e81beec42b718ae..55f86311a4ca27a8e96c5824a0c441dcba10833f 100644
--- a/demo/demo/rollball.cpp
+++ b/demo/demo/rollball.cpp
@@ -85,7 +85,7 @@ namespace demo {
 
 		// asset loader
 		auto* assetLoader = m_owner.service<fggl::assets::Loader>();
-		assetLoader->load("rollball.yml", fggl::entity::PROTOTYPE_ASSET);
+		assetLoader->load("rollball.yml", fggl::entity::PROTOTYPE_ASSET, entFactory);
 		assetLoader->load("rollball.yml", fggl::entity::SCENE, this);
 
 		// collectable callbacks
diff --git a/fggl/entity/loader/loader.cpp b/fggl/entity/loader/loader.cpp
index 4baa79016a395cb6a797a2fa1ca8d9775e8fa8b7..ba19af30f43814aa2b9b94f8df919df758faa3e8 100644
--- a/fggl/entity/loader/loader.cpp
+++ b/fggl/entity/loader/loader.cpp
@@ -77,7 +77,7 @@ namespace fggl::entity {
 		return nullptr;
 	}
 
-	assets::AssetRefRaw load_prototype(assets::Loader* loader, EntityFactory *factory, const assets::AssetGUID &guid, assets::AssetData data) {
+	assets::AssetRefRaw load_prototype(assets::Loader* loader, const assets::AssetGUID &guid, assets::AssetData data, EntityFactory* factory) {
 		auto *filePath = std::get<assets::AssetPath *>(data);
 
 		// We need to process the prototypes, and load them into the asset system.
diff --git a/fggl/entity/module.cpp b/fggl/entity/module.cpp
index d6447e42c7f68ffe32f9bacff60f3ea11415951e..22cf0a0f727d833d09320c45eff5e0bc11dd8df4 100644
--- a/fggl/entity/module.cpp
+++ b/fggl/entity/module.cpp
@@ -45,7 +45,11 @@ namespace fggl::entity {
 			// we are responsible for prefabs...
 			auto *assetLoader = services.get<assets::Loader>();
 			assetLoader->setFactory(PROTOTYPE_ASSET, [factory](assets::Loader* loader, const assets::AssetGUID &a, assets::AssetData b, void* ptr) {
-				return load_prototype(loader, factory, a, b);
+				EntityFactory* facPtr = factory;
+				if ( ptr != nullptr ) {
+					facPtr = (EntityFactory*)ptr;
+				}
+				return load_prototype(loader, a, b, facPtr);
 			}, assets::LoadType::PATH);
 			assetLoader->setFactory(SCENE, load_scene, assets::LoadType::PATH);
 
diff --git a/include/fggl/entity/loader/loader.hpp b/include/fggl/entity/loader/loader.hpp
index 9a816dda7acd1869f15a7dfdb0362638683c2c23..322b76c97981d8e0ccad7bbaef4cf9c3207bcad1 100644
--- a/include/fggl/entity/loader/loader.hpp
+++ b/include/fggl/entity/loader/loader.hpp
@@ -173,7 +173,7 @@ namespace fggl::entity {
 			}
 	};
 
-	assets::AssetRefRaw load_prototype(assets::Loader* loader, EntityFactory *factory, const assets::AssetGUID &guid, assets::AssetData data);
+	assets::AssetRefRaw load_prototype(assets::Loader* loader, const assets::AssetGUID &guid, assets::AssetData data, EntityFactory* factory);
 	assets::AssetRefRaw load_scene(assets::Loader* loader, const assets::AssetGUID& asset, assets::AssetData data, void* ptr);
 
 } // namespace fggl::entity