A few years ago I reviewed a checkout page that looked fine in Chrome, but a screen reader user reported something unsettling: the “IMPORTANT” shipping note was read with the same priority as the rest of the paragraph. The developer had used everywhere because it “makes things bold.” Visually, the message popped. Semantically, it was just… ordinary text wearing a louder font.
That’s the core tension in HTML text formatting: you’re not just painting pixels; you’re encoding meaning. When you choose the right tag, you help browsers, assistive tech, translation tools, indexing systems, and even internal search treat your content the way you intended. When you choose the wrong one, your UI may still look correct, but your document becomes harder to understand and harder to maintain.
If you build anything that people read—docs, product pages, dashboards, emails rendered in the browser—these tags matter. I’ll walk through the formatting elements you’ll actually use, how I decide between semantic vs purely visual formatting, what to avoid, and a couple runnable examples you can paste into a file and open locally.
Text formatting is semantics first, styling second
HTML gives you two broad “families” of text formatting:
- Semantic (logical) formatting: tags that describe meaning (importance, stress emphasis, edits). The browser typically applies a default style, but that style is not the point.
- Presentational (physical) formatting: tags that primarily affect appearance (bold, italic) without promising meaning.
I like a simple rule: if you’d still want the meaning to survive after all CSS is removed, pick a semantic tag.
Here’s a quick map of the common formatting tags and what they communicate:
What it means
I reach for it when…
—
—
strong importance/urgency
the content is important even if not bold
stress emphasis (spoken emphasis)
changing emphasis changes meaning
stylistic offset (no added importance)
keywords, labels, product names in a sentence
stylistic offset (no stress emphasis)
foreign words, thoughts, taxonomy terms
highlight as relevant
search hits, “recent change” highlight
side notes / fine print
disclaimers, legal qualifiers, metadata
inserted content
change tracking, “new policy text”
removed content
change tracking, deprecated info
subscript
chemical formulas, indices
superscript
exponents, footnote markersA key point: default rendering is not a contract. is commonly bold, but you can style it however you want and it still signals importance. Same with and italics.
A modern workflow note (2026)
Today’s editors and CI pipelines can flag semantic mistakes automatically. I often run an HTML linter plus an accessibility checker as part of pre-commit (or in CI), and I’ll ask an AI code assistant to review diffs specifically for semantic correctness. The goal isn’t to “make the text bold.” The goal is to make the document accurate.
Emphasis and importance: how I choose vs
and are the two tags I consider “default” for meaning-driven formatting.
: importance, urgency, seriousness
I use when the text should be treated as important regardless of how it looks.
Examples where is usually correct:
- Safety warnings: “Do not mix with bleach.”
- Irreversible actions: “Deleting this key cannot be undone.”
- Required constraints: “You must verify your email to continue.”
Runnable example:
strong vs b
body { font: 16px/1.5 system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif; padding: 24px; }
.note { border-left: 4px solid #c0392b; padding: 12px 16px; background: #fff6f6; }
/ Intentionally NOT styling strong as bold, to prove the meaning still exists /
strong { font-weight: 600; color: #8e1b10; }
Important: Regenerating this API key invalidates the old key immediately.
Here’s a stylistic label using b in a sentence: SKU is the internal inventory identifier.
Notice what I did: I styled for emphasis, but I could have styled it neutrally and the markup would still be correct.
: stress emphasis (like spoken emphasis)
means the writer is stressing a word or phrase. If you read the sentence aloud, it’s the part you’d emphasize.
This matters because emphasis can change meaning:
- “I didn’t say you shipped it.”
- “I didn’t say you shipped it.”
- “I didn’t say you shipped it.”
Same words, different implication.
Runnable example with nested emphasis:
em emphasis
body { font: 16px/1.5 system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif; padding: 24px; }
em { font-style: italic; }
/ Nested emphasis is allowed; browsers typically increase the emphasis level /
em em { font-style: normal; text-decoration: underline; }
You can cancel the subscription at any time, but you must do it from the billing page.
If you keep the service running, you agree to the updated terms today.
I’m not telling you to nest often. I’m showing that HTML has a concept of “levels” of emphasis and that you should treat emphasis as meaning, not italics.
My decision shortcut
When I’m deciding between tags, I ask myself:
- “Is this word stressed in the sentence?” →
- “Is this message more important than surrounding content?” →
- “Do I only want a typographic offset?” → maybe
or, or a class on a
Presentational tags: when I still use and (and when I don’t)
People sometimes treat and as “legacy.” I don’t. I treat them as specific tools with a narrow job: stylistic offset without semantic emphasis.
: stylistic offset, not importance
I use for:
- Inline labels in prose: “Set
ENVtoproduction.” - Keywords in an explanation: “A
nonceis used once.” - Summary lists where bold is purely visual and does not change meaning.
I do not use for warnings, errors, or required actions. That’s territory.
: alternate voice or mood
I use for:
- Foreign words or phrases: “The term raison d’être…”
- Thoughts or internal monologue (in narrative content)
- Taxonomy or scientific names (common pattern)
I do not use when the purpose is actual stress emphasis. That’s .
Traditional vs modern pattern (what I recommend)
Here’s how I draw the line in real projects:
Traditional approach
—
Warning:
Warning: + CSS if needed must
must token
token or token Save
) + CSS One detail I care about: if the text is really a UI control or a heading, don’t format a
until it looks like one. Use the correct structural element (
, , ) and then style it.
Editing markup: and for changes that people must notice
and for changes that people must notice and are formatting tags with real semantic weight: they represent edits. When used carefully, they make updates obvious and machine-readable.
: content removed
I use when I want to show that something used to be true or valid, but is no longer.
Examples:
- Changelog excerpts
- Policy changes
- Documentation updates where showing the previous text helps users migrate
The old endpoint /v1/payments/charge is no longer supported.
Use /v2/charges instead.
: content inserted
I use to mark added text as a deliberate insertion.
We now support passkeys for signing in on compatible devices.
A practical caution
Browsers usually underline . Underlines are visually close to links. If you have a design system with lots of links, consider styling inserted text to reduce confusion (for example: a subtle green background) while keeping it clearly distinct.
Also, don’t use as a cheap way to make a “sale price.” If you’re marking a discounted price, that’s usually better expressed with real pricing semantics in your component structure (and potentially structured data) rather than pretending the text was edited.
Highlights and fine print: and without making a mess
These two tags are easy to overuse because they “look nice” out of the box. I use them with restraint.
: highlight relevant text
is perfect for:
- Highlighting search results
- Highlighting a phrase after a filter is applied
- Showing what changed after an update
Runnable example (search highlight):
mark highlight
body { font: 16px/1.5 system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif; padding: 24px; }
mark { background: #fff2a8; padding: 0 0.15em; border-radius: 0.2em; }
Search results
Showing results for "rate limit":
When you hit a rate limit, your client should back off and retry.
My advice: reserve for “this is relevant right now.” If everything is highlighted, nothing is.
: side notes and secondary metadata
is a semantic hint that the text is “small print” in meaning, not just size.
Good uses:
- Legal qualifiers
- Time stamps, version metadata
- Secondary explanations
This feature is in preview.
Limits: typically 50-200 requests per minute per account during preview.
Be careful with readability: smaller text can hurt accessibility if contrast or size drops too far. If your design system sets base font to 14px, making much smaller may become uncomfortable on mobile.
Subscripts and superscripts: and for science, math, and footnotes
These tags look trivial until you ship a dashboard for healthcare, energy, manufacturing, education, or finance. Then you realize: correct typography prevents misunderstanding.
: subscripts
Classic examples:
- Water:
H2O - Indices:
an
The battery chemistry is often written as LiCoO2 in simplified form.
: superscripts
Classic examples:
- Exponents:
m2 - Famous formula:
E = mc2 - Footnote markers (with care)
The lab measured an area of 12.4 cm2.
Footnotes: don’t stop at
If you’re using superscripts as footnote references, I recommend you also make them links that point to the footnote, and include a clear label.
Runnable example (simple, accessible-enough footnote pattern):
footnotes
body { font: 16px/1.6 system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif; padding: 24px; max-width: 80ch; }
.footnotes { margin-top: 24px; padding-top: 12px; border-top: 1px solid #ddd; }
.footnotes li { margin: 8px 0; }
sup a { text-decoration: none; }
sup a:focus-visible { outline: 2px solid #1d4ed8; outline-offset: 2px; border-radius: 4px; }
Passkeys reduce phishing risk by avoiding shared secrets1.
-
Passkeys rely on public-key cryptography; the private key stays on the device.
Back
In production, I usually avoid history.back() because it can behave oddly if users land directly on the footnote. A more robust pattern uses explicit “back to ref” anchors, but the example above stays runnable and illustrates the idea.
A single, runnable page that demonstrates the core formatting tags
When I teach this, I like to show formatting in a context that resembles real UI copy, not a list of isolated tags. Paste the following into formatting-demo.html and open it in your browser.
HTML Text Formatting Demo :root {
--bg: #0b1220;
--card: #0f1b33;
--text: #e8eefc;
--muted: #b6c2e2;
--accent: #7dd3fc;
--warn: #fb7185;
--ok: #86efac;
--mark: #fde68a;
}
body {
margin: 0;
padding: 32px 16px;
background: radial-gradient(900px 500px at 20% 10%, #162a52 0%, transparent 60%),
radial-gradient(800px 500px at 80% 20%, #1b2b4a 0%, transparent 55%),
var(--bg);
color: var(--text);
font: 16px/1.65 system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
}
main {
max-width: 90ch;
margin: 0 auto;
}
header {
margin-bottom: 20px;
}
h1 {
font-size: 28px;
margin: 0 0 8px 0;
letter-spacing: 0.2px;
}
p {
margin: 12px 0;
}
a { color: var(--accent); }
a:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 6px; }
.card {
background: color-mix(in oklab, var(--card) 92%, black);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 14px;
padding: 18px 18px;
box-shadow: 0 10px 30px rgba(0,0,0,0.35);
}
.kicker {
color: var(--muted);
margin: 0;
}
.row {
display: grid;
gap: 12px;
grid-template-columns: 1fr;
margin-top: 14px;
}
@media (min-width: 860px) {
.row { grid-template-columns: 1fr 1fr; }
}
.panel {
border: 1px solid rgba(255,255,255,0.08);
border-radius: 12px;
padding: 14px 14px;
background: rgba(255,255,255,0.03);
}
.badge {
display: inline-block;
padding: 2px 10px;
border-radius: 999px;
font-size: 12px;
color: var(--muted);
border: 1px solid rgba(255,255,255,0.12);
margin-bottom: 8px;
}
strong {
font-weight: 700;
color: color-mix(in oklab, var(--warn) 82%, white);
}
em {
font-style: italic;
color: color-mix(in oklab, var(--accent) 65%, white);
}
b {
font-weight: 700;
color: var(--text);
}
i {
font-style: italic;
color: var(--muted);
}
mark {
background: var(--mark);
color: #1a1a1a;
padding: 0 0.16em;
border-radius: 0.22em;
}
small {
color: var(--muted);
font-size: 0.9em;
}
del { color: color-mix(in oklab, var(--warn) 65%, white); }
ins {
text-decoration: none;
border-bottom: 2px solid color-mix(in oklab, var(--ok) 70%, white);
padding-bottom: 1px;
}
code {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
font-size: 0.95em;
background: rgba(255,255,255,0.06);
border: 1px solid rgba(255,255,255,0.08);
padding: 0.1em 0.35em;
border-radius: 8px;
}
pre {
overflow: auto;
padding: 12px;
border-radius: 12px;
border: 1px solid rgba(255,255,255,0.1);
background: rgba(0,0,0,0.25);
}
pre code {
background: transparent;
border: 0;
padding: 0;
display: block;
}
.note {
border-left: 4px solid var(--warn);
padding: 10px 12px;
background: rgba(251, 113, 133, 0.08);
border-radius: 10px;
}
.ok {
border-left: 4px solid var(--ok);
padding: 10px 12px;
background: rgba(134, 239, 172, 0.08);
border-radius: 10px;
}
sup a { text-decoration: none; }
sup a:hover { text-decoration: underline; }
sup a:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 6px; }
Text Formatting Demo
A single page that shows meaning-driven formatting (and what it feels like in UI copy).
Importance vs StylingImportant: Regenerating your API key invalidates the old key immediately.
In this sentence, SKU is just a visual label (not a warning).
The phrase right now is stressed because it changes the meaning.
You can highlight a search match with mark, and you can add a qualifier in small print.
Edits + Science
Docs sometimes need visible edits: the endpoint
/v1/payments/chargeis replaced by /v2/charges.
Chemistry and math read better when formatted: H2O, E = mc2.
Good markup stays meaningful even if the design changes later.
(That’s why I don’t treat text formatting as “just CSS.”)Code Snippet
When you reference code inline, use
<code>:set
ENV=productionand restart the service.// This is code formatting, not emphasis.function backoff(attempt) {
return Math.min(1000 2 * attempt, 15000);
}
FootnotePasskeys reduce phishing risk by avoiding shared secrets1.
- Passkeys use public-key cryptography; the private key stays on the device.
If you want a quick self-check, remove the CSS entirely and reload. The page will be uglier, but the meaning should still be intact: warnings still read as warnings, emphasis still reads as emphasis, and edits still read as edits.
Text formatting vs document structure (the mistake I see most)
Formatting tags are not structural tags. If you only remember one thing from this whole topic, I’d pick this:
- Formatting tags (
,,, etc.) work inside real structure. - Structure tags (
–
,,,,,,) describe the shape of the document.
When someone says “make this look like a header,” the right answer is rarely “wrap it in .” It’s usually “it is a header, so use a header element.” That gives you:
- Better keyboard navigation (many assistive tech tools have heading shortcuts)
- Better outline, indexing, and internal linking
- Less CSS complexity later
Practical examples:
- If it’s a section title: use
, not
....
- If it’s a button label: use
, notSave. - If it’s a form label: use
, not an italicized.
If your markup uses formatting tags to impersonate structure, you’ll end up with a document that looks correct but behaves wrong.
“I just need it bold”: choosing between tags and CSS
Sometimes you genuinely don’t want semantics. You want a style. That’s okay. The mistake is pretending it’s semantics when it isn’t.
Here’s how I decide:
- If there is a matching semantic element: use it (
,,,, etc.). - If there is no matching semantic element: use a neutral wrapper (
or) with a class.Example: “We want to style product feature names in documentation.” That’s not inherently emphasis or importance, so I’ll do something like:
Enable Instant Sync to keep devices aligned.
And then in CSS:
.feature { font-weight: 650; letter-spacing: 0.1px; }This reads boring, but boring is good here. It’s an honest representation: a styling hook, not a claim about meaning.
The maintainability payoff
When you choose semantics correctly, the markup survives refactors. I’ve watched teams:
- Change the entire typography system
- Add a new theme
- Ship a PDF export
- Build a search indexer
…and the semantic tags continue doing their job without forcing rewrites.
Code-related text formatting:
,,,,If you write technical content, these tags are the difference between “readable docs” and “a wall of characters.” They also help tooling: copy buttons, syntax highlighting, and even search can make smarter decisions.
: inline code fragmentsI use
for short, inline tokens:- File names:
config.json - Environment variables:
NODE_ENV - Inline commands:
npm run build - Identifiers:
retryAfterMs
Example:
Set
LOG_LEVEL=debugtemporarily, then restart the server.I avoid
for long blocks. Long blocks belong in....
+: preformatted blockspreserves whitespace (including newlines and indentation). The combois for longer content that stands apart.is the standard pattern for code blocks.Two practical tips that save pain:
1) Don’t put “code block styling” on
alone; style theinside too, because not all blocks are code.2) Watch mobile overflow. A 200-character line will break your layout unless you allow horizontal scroll.
Example:
curl -H "Authorization: Bearer $TOKEN" \https://api.example.com/v1/profile
: user input (keyboard or device)is great for instructions:- “Press Ctrl + K.”
- “Type yes to confirm.”
Example:
Open the command palette with Ctrl + K, then search for Format Document.
This is one of those tags that improves comprehension immediately.
: sample outputis for program output (terminal output, logs, responses). This helps separate “what you type” from “what you see.”Example:
You should see Server listening on :8080 in the logs.
: variables in math or programming explanationsis underused. I like it for documentation that mixes math and code.Example:
Let n be the number of retries. The delay is 2n seconds.
A “real-world” snippet combining them
This is the kind of block I’ll include in docs:
Press Ctrl + C to stop the server. If shutdown succeeds, you’ll see bye.
node server.jsoutput:
Server listening on http://localhost:3000
It reads cleanly because each piece declares what it is.
Quotes and attribution:
,, andText formatting isn’t only bold/italic. It also includes “voice”: quotes, excerpts, and titles.
: inline quotationsI use
for short, inline quotes inside a sentence.The error message said
Invalid signature
, which usually means the token expired.Browsers often add quotation marks automatically, which is why
is nice: you don’t have to type smart quotes and you avoid inconsistent punctuation.: longer quotationsIf you can’t explain a system without showing the UI, the semantics are probably missing.
A practical habit: I prefer putting the quoted text in real block elements like
inside the blockquote. That keeps spacing consistent and improves styling control.
: title of a work, not “the person I’m quoting”This is subtle:
represents the title of a work (book, article, film, etc.). People often wrap the speaker’s name in, but that’s not what the element is for.A more correct pattern is:
Make the meaning machine-readable, then make it beautiful.
— A teammate, in Design Review Notes
I’m not being pedantic here. These distinctions matter when content is repurposed: print styles, exports, summaries, and search all behave better with accurate markup.
Abbreviations and definitions:
andThese two elements add clarity without cluttering the page.
: abbreviations and acronymsis for abbreviations like “CSS” or “TTL.” Thetitleattribute can provide the expansion.We set a TTL of 24 hours for session tokens.
Two practical notes:
- I don’t put
titleon everything. It can be noisy. I use it when I think the audience may not know the term. - If you’re building a design system, consider styling
with a subtle dotted underline and a tooltip behavior that works on touch devices (because nativetitleisn’t great on mobile).
: defining a termWhen you introduce a term with a specific meaning,
makes it explicit.A nonce is a value used once to prevent replay attacks.
This is especially useful in glossaries or documentation sites where you might later auto-link definitions.
Dates and times:
is formatting with meaningDates look like plain text, but they’re a classic example of “formatting vs meaning.” People will write “Feb 3” and move on. Then they build sorting, filtering, and localization, and regret everything.
lets you display whatever looks best while preserving a machine-readabledatetimevalue.Last updated Feb 3, 2026.
Why I like this:
- Search and indexing can interpret it more reliably
- Your future self can parse it without regex
- You can swap display formats per locale without changing meaning
If you ever show time ranges,
becomes even more valuable:Maintenance window: 02:00 UTC–02:30 UTC.
Line breaks, wrapping, and whitespace:
,, and the “don’t fight text” ruleWhitespace is part of formatting, and it’s also where I see developers accidentally turn HTML into a layout engine.
: line breaks (use sparingly)is a line break, not a paragraph. I use it for:- Addresses
- Poetry/lyrics (careful with copyright if you’re publishing)
- Very compact UI copy where the break is part of the presentation
Example (address):
123 Example St
Suite 400
Springfield, USA
I do not use
to “add spacing.” Spacing is CSS. Separate ideas are separate paragraphs.: word break opportunityWhen you have long tokens (URLs, IDs, long file names), you can give the browser safe “break points” with
.Example:
Error ID: 8f3d2c9a-1b24-4a19-8a11-e7a5c3e0b9fa
This prevents mobile layouts from exploding without forcing weird hyphenation.
Soft hyphen
(a cautious tool)Soft hyphens can help with very long words, but I treat them as a last resort because they can create copy/paste quirks. If I need consistent wrapping in product UI, I usually prefer CSS strategies (like
overflow-wrap:anywhere) or insertingin known-safe places.“Other” formatting tags you’ll encounter:
,, andNot every formatting tag is part of the “big 10,” but you’ll see these in real codebases.
: underline (with meaning, not just decoration)represents “unarticulated annotation” in HTML (think misspellings or proper-name annotations), but most people use it as “make it underlined.”I avoid
for general underlining because users associate underlines with links. If you want underlined text for style, I prefer CSS on a.: no longer accurate or relevantis for content that’s no longer correct (not “deleted,” just “outdated”).Example:
Status:
AvailableSold outCompared to
, which is more explicitly “removed from the document,”is a lighter semantic signal: “this statement is no longer true.”: the honest fallbackis your safe, neutral wrapper. I use it when:- I need a styling hook
- There is no semantic element that matches
- The text is inline (and a would be incorrect)
But I also impose a constraint: if I’m sprinkling
everywhere, I ask myself whether I’m missing a better structure (like a list, a definition list, a table, or an actual component).Practical scenarios: what I use in real UI copy
Here are a few patterns I ship regularly.
Inline field requirements
If you’re marking something as required, that’s importance. I prefer
or a structural pattern (like “Required” in the label).If your design system visually uses an asterisk, remember: the asterisk is not meaning. It’s a symbol. The meaning should exist in text.
Error messages
Errors are not “bold text.” They’re messages that should be discoverable.
Error: The code has expired. Request a new code.
Even if you style
.error strongto look subtle, the semantic clue remains.Search results
I like
for active query matches.Searching for "cache": clear your cache and refresh.
But I only highlight the minimal match. Highlighting entire paragraphs turns into visual noise fast.
“Fine print” without punishing readability
This is where
shines, but I keep it within reasonable size/contrast.Free trial available.
Trials convert to paid plans unless canceled before the end date.If you need the fine print to be legally prominent, don’t shrink it. Use normal size and different layout instead.
Common pitfalls (and what I do instead)
I’ve made most of these mistakes myself. Here’s how I avoid repeating them.
Pitfall: Using
for everything “important”What breaks: screen readers treat it as normal text; “important” stops being detectable.
What I do instead: use
for importance,for stylistic labels.Pitfall: Using italics to mean “required”
What breaks: italics is not meaning; it can also harm readability for some users.
What I do instead: use explicit words like “required” and semantic structure.
Pitfall: Over-nesting
andWhat breaks: text becomes hard to read and styling becomes unpredictable.
What I do instead: if I need multiple visual layers, I usually keep semantics minimal and add a class.
Pitfall: Formatting to fake a list
What breaks: screen readers don’t announce item counts; keyboard navigation tools lose structure.
What I do instead: use
- /
- Prefer semantic tags when they match meaning.
- Use a single wrapper with a class instead of multiple wrappers.
- Keep semantics in HTML
- Keep presentation in CSS
- Use a lint/check step to prevent regressions
- Is anything pretending to be a heading or a button? If yes, replace it with a structural element.
- Are warnings and required actions marked with
(or an equivalent semantic pattern)? - Is emphasis (
) used only where stress changes meaning? - Are
/used only for stylistic offsets, not importance? - Are “edits” represented as edits (
,, maybe), not as random red/green spans? - Are code tokens in
, and blocks in? - Are long tokens wrapped safely (
or CSS) so mobile doesn’t break?
and style the bullets/numbers.Pitfall: Using
as layoutWhat breaks: inconsistent spacing; impossible to adapt to different screen sizes.
What I do instead: use paragraphs, lists, and CSS margin.
Performance and maintainability considerations (yes, even for formatting)
Text formatting itself isn’t usually a performance bottleneck, but patterns around it can be.
Keep the DOM honest
A paragraph with a dozen nested spans is harder to maintain than a paragraph with two semantic tags.
Avoid formatting as a substitute for components
If you have repeating patterns like “Warning:” blocks, don’t hand-format them each time with
++ random spans. Make a component pattern (even if it’s just a documented HTML snippet) so the semantics stay consistent.Choose patterns that survive redesigns
A redesign can change font weights and colors overnight. If your “importance” is encoded as
, it will survive. If your “importance” is encoded as, it might not.I’ve seen the best long-term results when teams:
A quick checklist I use before shipping text-heavy UI
I do this mental pass any time I’m reviewing a page with lots of copy.
Closing thought: treat formatting tags as part of your content model
I don’t think of text formatting as “tiny tags you memorize.” I think of it as part of the content model of your product. When you make semantics explicit, you make your product easier to read, easier to audit, easier to translate, and easier to evolve.
And that takes you right back to the story at the start: a bold warning that looks correct isn’t enough. The document has to be correct, too.


