diff --git a/src/gaemstone/ECS/Game.cs b/src/gaemstone/ECS/Game.cs
index 608458b..4ab62a9 100644
--- a/src/gaemstone/ECS/Game.cs
+++ b/src/gaemstone/ECS/Game.cs
@@ -6,7 +6,7 @@ namespace gaemstone.ECS;
/// Entity for storing global game state and configuration.
/// Parameters can use to source this entity.
///
-[Entity]
+[Entity, Add]
public struct Game { }
/// Equivalent to .
diff --git a/src/gaemstone/ECS/Universe+Modules.cs b/src/gaemstone/ECS/Universe+Modules.cs
index 71f0da6..b6cd235 100644
--- a/src/gaemstone/ECS/Universe+Modules.cs
+++ b/src/gaemstone/ECS/Universe+Modules.cs
@@ -189,20 +189,18 @@ internal class ModuleInfo
var builder = path.IsAbsolute ? Universe.New(path) : Entity.NewChild(path);
if (!type.Has()) builder.Symbol(path.Name);
- foreach (var attr in type.GetMultiple())
- builder.Add(Universe.LookupOrThrow(attr.Entity));
- foreach (var attr in type.GetMultiple())
- builder.Add(Universe.LookupOrThrow(attr.Relation), Universe.LookupOrThrow(attr.Target));
-
var entity = builder.Build();
- if (type.Has())
- entity.Add(entity);
+ EntityRef Lookup(Type toLookup)
+ => (type != toLookup) ? Universe.LookupOrThrow(toLookup) : entity;
+ foreach (var attr in type.GetMultiple())
+ entity.Add(Lookup(attr.Entity));
+ foreach (var attr in type.GetMultiple())
+ entity.Add(Lookup(attr.Relation), Lookup(attr.Target));
- if (type.Has())
- entity.CreateComponent(proxyType);
- else
- entity.CreateLookup(proxyType);
+ if (type.Has()) entity.Add(entity);
+ if (type.Has()) entity.CreateComponent(proxyType);
+ else entity.CreateLookup(proxyType);
}
}