diff --git a/index.bs b/index.bs
index 29be67e4..66a6a2db 100644
--- a/index.bs
+++ b/index.bs
@@ -2556,12 +2556,37 @@ as it implies that it's possible to dispatch an event asynchronously.
All events are dispatched synchronously.
What is more often implied by "asynchronous event" is to defer firing an event.
-
Use plain {{Event}}s for state
+Put state on {{Event/target}} objects rather than {{Event}}s
-Where possible, use a plain {{Event}} with a specified `type`,
-and capture any state information in the {{Event/target}} object.
+Put state on the {{Event/target}}
+and use events to signal updates to that state,
+rather than having state on {{Event}} objects.
-It's usually not necessary to create new subclasses of {{Event}}.
+
+Having state on the {{Event/target}} object can used to determine the current state,
+without waiting for the next event.
+This is particularly useful if there's a final state,
+where there will be no further events.
+
+
+It's usually not necessary to create new subclasses of {{Event}},
+but they can be used to provide information relating to how the state change occurred.
+
+
+Properties on {{HTMLInputElement}},
+such as {{HTMLInputElement/value}},
+provide the state of the input.
+Properties on {{InputEvent}},
+such as {{InputEvent/inputType}},
+describe the nature of an update to the state.
+
+
+In some exceptional cases, where maintaining state on an object is expensive,
+the state may be placed on the {{Event}} instances,
+allowing {{EventTarget/addEventListener}} and {{EventTarget/removeEventListener}} to signal interest/disinterest in this state.
+Although, other patterns should be considered,
+such as retuning an {{EventTarget}} from a function,
+where the function call is a similar signal of interest.
Use Events and Observers appropriately