diff --git a/docs/framework/token.md b/docs/framework/token.md
index aedf09f25b5e76de55df42b8c392e26c1e332067..94dbb764079b4a5cc8b2fd232b0c5d607777860b 100644
--- a/docs/framework/token.md
+++ b/docs/framework/token.md
@@ -1,6 +1,17 @@
 ## Introduction
 
-CiviCRM's [token functionality](https://docs.civicrm.org/user/en/latest/common-workflows/tokens-and-mail-merge/) originates in CiviMail, which focuses on writing and delivering newsletters to large constituencies. In its original form, the design placed heavy weight on:
+CiviCRM [tokens](https://docs.civicrm.org/user/en/latest/common-workflows/tokens-and-mail-merge/) enable one to generate personalized emails, reminders, print documents. etc. 
+
+When working with tokens as a developer, there are two major tasks:
+
+- *Composing a message* by evaluating a token expression (`Hello {contact.first_name}! How do you like {address.city}?`).
+- *Defining a token* and its content.
+
+For each task, there are a couple available patterns, and we'll explore them in more depth below. But first, it helps to put the functionality in context.
+
+## Background
+
+Token functionality originated in CiviMail, which focuses on writing and delivering newsletters to large constituencies. In its original form, the design placed heavy weight on:
 
 - **Performance**: Divide mail-composition into batches and split the batches among parallel workers. Moreover, when processing each batch, improve efficiency by minimizing the #SQL queries - i.e. fetch all records in a batch at once, and only fetch columns which are actually used.
 - **Security**: Do not trust email authors with a fully programmable language.
@@ -9,16 +20,9 @@ CiviCRM's [token functionality](https://docs.civicrm.org/user/en/latest/common-w
 
 Over time, the token functionality evolved:
 
-- Add optional support for more powerful templates with conditions and loops (Smarty). (In the case of CiviMail, this was still disabled by default as a security consideration, but in other use-cases it might be enabled by default.)
-- Add a hook for custom tokens.
-- Expand to other applications, such as individual mailings, print letters, receipts for contributions, and scheduled reminders.
-
-When working with tokens, there are two major tasks:
-
-- *Composing a message* by evaluating a token expression (`Hello {contact.first_name}! How do you like {address.city}?`).
-- *Registering a token* and defining its content.
-
-For each task, there are a couple available patterns, and we'll explore them in more depth below.
+- Add optional support for more powerful templates with conditions and loops (**Smarty**). (In the case of CiviMail, this was still disabled by default as a security consideration, but in other use-cases it might be enabled by default.)
+- Add a **hook for custom tokens**.
+- Expand to other applications, such as **individual mailings, print letters, receipts for contributions, and scheduled reminders**.
 
 ## Examples
 
@@ -36,8 +40,7 @@ For more examples of tokens and token replacement, see [User Guide: Common workf
 
 ### CRM_Utils_Token {:#crm-utils-token}
 
-For most of its history, CiviMail used a helper class, `CRM_Utils_Token`, with a number of static helper functions.  As the use-cases grew, the
-technique was duplicated and adapted, leading to a lengthy idiom which looks a bit like this:
+For most of its history, CiviMail used a helper class, `CRM_Utils_Token`, with a number of static helper functions.  As the more kinds of tokens were created for more use-cases, the technique was duplicated and adapted, leading to an idiom which looks a bit like this:
 
 ```php
 $subject = $template->subject;
@@ -116,11 +119,11 @@ foreach ($p->getRows() as $row) {
 }
 ```
 
-## Registering tokens
+## Defining tokens
 
 ### hook_civicrm_tokens
 
-The oldest and most broadly supported way to register a new token is to use [hook_civicrm_tokens](/hooks/hook_civicrm_tokens.md) and [hook_civicrm_tokenValues](/hooks/hook_civicrm_tokenValues.md). These hooks have been included with CiviCRM for a number of years, and they work with a range of mailing use-cases.
+The oldest and most broadly supported way to define a new token is to use [hook_civicrm_tokens](/hooks/hook_civicrm_tokens.md) and [hook_civicrm_tokenValues](/hooks/hook_civicrm_tokenValues.md). These hooks have been included with CiviCRM for a number of years, and they work with a range of mailing use-cases.
 
 However, these hooks have some limitations: