OK. We're both thinking it. Why is all this crap going straight in **PongFEGame.cs**? And there's magic values everywhere! You are absolutely right. Encompass actually has a built-in abstraction Engine for creating new Entities called a Spawner for just this purpose. Let's create one.
First off, we need a spawn message. There's nothing particularly special about a spawn message, just create one that has the parameters you think you'll need to spawn a particular sort of entity.
Spawners aren't very complicated. They have one required method: *Spawn*. Any time a message of the given type is sent, Spawn will run once for that message. When we create the BallSpawner, we give it a BallTexture so it can attach the texture to the ball entities it creates.
[ERROR] FATAL UNHANDLED EXCEPTION: Encompass.Exceptions.EngineWriteConflictException: Multiple Engines write the same Component without declaring priority:
PositionComponent written by: MotionEngine, BallSpawner
To resolve the conflict, add priority arguments to the Writes declarations or use a DefaultWritePriority attribute.
```
Oh no!!! It's yelling at us! That's ok though. Encompass lets us know exactly what the problem is: we have two different Engines that both try to write PositionComponent. Think about why this is bad... if two engines write the same component to the same entity on the same frame, only one of those values is gonna get through, right? That could surprise us and make the game harder to understand. I hate surprises.
The Writes attribute allows you to specify a priority value, to allow one engine's component writes to take priority over another's. In this case, however, it is unnecessary, because we have access to a special variant of **SetComponent**, called **AddComponent**.
**AddComponent** is only valid when an entity has been created in the same context as it was called. This makes it ideal for spawning new entities. It means you don't have to worry about write priority, because the entity must have been newly created.