anchor.diff:          subscriptionId
           event
           (callback : EcsCallback<'d, 's>) =
  -        match subscriptions.TryGetValue event.EventName with
  -        | (true, subscriptions) ->
  -            match subscriptions.TryGetValue event.EventType with
  -            | (true, subscriptions) ->
  -                subscriptions.Add (subscriptionId, this.BoxCallback<'d, 's> callback)
  -                subscriptionId
  -            | (false, _) ->
  -                let callbacks = dictPlus HashIdentity.Structural [(subscriptionId, this.BoxCallback<'d, 's> callback)]
  -                subscriptions.Add (event.EventType, callbacks)
  -                subscriptionId
  +        match subscriptions.TryGetValue event with
  +        | (true, callbacks) ->
  +            callbacks.Add (subscriptionId, this.BoxCallback<'d, 's> callback)
  +            subscriptionId
           | (false, _) ->
               let callbacks = dictPlus HashIdentity.Structural [(subscriptionId, this.BoxCallback<'d, 's> callback)]
  -            subscriptions.Add (event.EventName, dictPlus HashIdentity.Structural [(event.EventType, callbacks)])
  +            subscriptions.Add (event, callbacks)
               subscriptionId
   
       member this.Subscribe<'d, 's> event callback =
           this.SubscribePlus<'d, 's> this.SubscriptionId event callback |> ignore
   
       member this.Unsubscribe event subscriptionId =
  -        match subscriptions.TryGetValue event.EventName with
  -        | (true, subscriptions) ->
  -            match subscriptions.TryGetValue event.EventType with
  -            | (true, callbacks) -> callbacks.Remove subscriptionId
  -            | (false, _) -> false
  +        match subscriptions.TryGetValue event with
  +        | (true, callbacks) -> callbacks.Remove subscriptionId
           | (false, _) -> false
   
       member this.RegisterComponentType<'c when 'c : struct and 'c :> 'c Component> componentName =
  
positive.code: // TODO: 3D: remove any incidental allocation.
  // TODO: 3D: make sure to use proper collection comparer for string keys.
  // TODO: 3D: make sure to use TryAdd in the appropriate places.
  // TODO: 3D: combine eventName and event into a single key?
  // TODO: 3D: abstract ArchetypeId.
  
  /// Allows a value to always pass as equal with another of its same type.
  
negative.code:     let archetypes = dictPlus<ArchetypeId, Archetype> HashIdentity.Structural []
      let archetypeSlots = dictPlus<uint64, ArchetypeSlot> HashIdentity.Structural []
      let componentTypes = dictPlus<string, Type> HashIdentity.Structural []
      let subscriptions = dictPlus<EcsEvent, Dictionary<uint32, obj>> HashIdentity.Structural []
      let queries = List<IQuery> ()
  
      let createArchetype (archetypeId : ArchetypeId) =
  