Resource library

QA How-To

How to Test WCAG 2.2 Dragging Movements (2026)

Learn to test WCAG 2 2 dragging movements with manual checks, touch and keyboard alternatives, exception analysis, and runnable Playwright tests in 2026.

22 min read | 3,043 words

TL;DR

To test WCAG 2.2 dragging movements, identify every operation that requires a pointer to follow a path while pressed, then complete the same result with a click or tap alternative. Confirm all destinations, state changes, error handling, touch behavior, and focus behavior; use automation for stable controls and manual testing for physical usability.

Key Takeaways

  • WCAG 2.2 Success Criterion 2.5.7 requires a non-dragging single-pointer method unless dragging is essential or user-agent controlled.
  • Test the alternative with click, tap, and a realistic touch target, not only with a keyboard.
  • Verify that the alternative reaches every valid destination and preserves the same business result as dragging.
  • Do not treat keyboard support alone as proof because the criterion protects people who use a pointer but cannot perform a path-based gesture.
  • Use Playwright to protect deterministic alternative controls while retaining manual checks for effort, discoverability, and touch usability.
  • Record the exact component, input mode, destination, result, and exception analysis in every defect.

To test WCAG 2 2 dragging movements, find every feature where a user must hold a pointer down, move it along a path, and release it. For each one, verify that the same functionality can be completed with a single-pointer action that does not depend on movement, such as selecting an item and then tapping a destination, clicking move buttons, or entering a value. WCAG 2.2 Success Criterion 2.5.7 is Level AA and applies unless dragging is essential or the behavior is controlled by the browser or assistive technology.

This tutorial turns that rule into an auditable workflow. You will test a sortable task board manually, define its expected behavior, and add Playwright checks for its click-based alternative. If you need the broader standard first, read WCAG 2.2 for testers, then return to this focused procedure.

TL;DR

Question Passing evidence Common false positive
Does the feature require dragging? Pointer stays pressed while the item moves to a destination A single swipe that only triggers at a threshold
Is there a non-dragging alternative? Select then click, tap buttons, or enter a value Keyboard-only support with no pointer alternative
Is the result equivalent? Every valid destination and business effect is reachable Alternative moves only one position when drag supports any position
Is an exception valid? Dragging is intrinsic to the activity, not merely the chosen UI The team says drag is expected or convenient
Can automation help? Stable controls, state, announcements, and persistence are asserted A scripted drag is mistaken for criterion coverage

The shortest reliable test is: perform the drag, note its outcome, reload clean state, and reproduce that outcome without holding and moving the pointer. Repeat for every destination and supported pointer viewport.

What You Will Build

You will create a small Playwright test suite around a three-column task board. The board supports conventional drag and drop, plus an accessible alternative: select a task, then activate a destination button. By the end, you will have:

  • an inventory that distinguishes dragging from other pointer gestures;
  • manual cases for mouse, touch, keyboard, zoom, and error recovery;
  • a runnable local HTML fixture with equivalent drag and click paths;
  • Playwright assertions for destinations, status announcements, and persistence;
  • a defect template that captures enough evidence for remediation;
  • a clear boundary between automatable conformance checks and human judgment.

The fixture is intentionally small. In a production audit, apply the same checks to kanban cards, sliders, map pins, file organizers, diagram nodes, reorder lists, crop handles, split panes, and any custom control that tracks pointer movement while a button remains pressed.

Prerequisites

Use Node.js 22 LTS, npm 10 or newer, and @playwright/test 1.55.0 for the commands in this tutorial. Run the suite in Chromium, then repeat the manual portion in the other browser and assistive technology combinations your product supports.

Create a clean project:

mkdir wcag-dragging-test
cd wcag-dragging-test
npm init -y
npm install --save-dev @playwright/test@1.55.0
npx playwright install chromium

You also need a mouse or trackpad and a touch device, or a browser connected to a real mobile device. Device emulation is useful for layout coverage, but it does not reproduce grip strength, tremor, switch access, or the difficulty of maintaining contact. Review testing keyboard navigation and keep an accessibility testing checklist beside your test notes.

Verify the setup: run npx playwright --version. It should print Version 1.55.0. Then run node --version and confirm the major version is 22.

Step 1: Test WCAG 2 2 Dragging Movements by Inventorying Interactions

Start with behavior, not HTML attributes. A dragging movement occurs when the user engages a pointer at one location, maintains contact or button pressure, moves along a path, and releases elsewhere. Native HTML drag events are one implementation, but custom pointermove, canvas, SVG, and touch handlers can create the same user demand.

Walk through each screen at desktop and mobile widths. Search requirements and analytics event names for words such as drag, drop, reorder, resize, scrub, pan, draw, swipe, move, arrange, and slider. For every candidate, record the start object, valid destinations, invalid destinations, visible result, saved result, and available alternative.

Do not automatically classify every gesture as dragging. A tap, double-click, long press without movement, and path-independent swipe do not necessarily meet the definition. A slider thumb does: the pointer is held and moved to set a value. A carousel swipe may be path-based, but next and previous buttons can already provide its alternative. Browser scrolling and operating-system window movement are user-agent behaviors and are outside the authored-content requirement.

Use this inventory format:

ID: DRAG-BOARD-01
Control: Task card "Review API contract"
Drag outcomes: To Do -> In Progress or Done
Alternative: Select card, then click destination button
Persistence: Column survives page reload
Exception claimed: No
Viewports: 1440x900, 390x844
Pointers: mouse, touch

Verify the step: compare the inventory with product routes and component names. Every drag-capable component must have an owner and at least one test ID. If a candidate has no alternative, mark it for failure testing rather than silently excluding it.

Step 2: Define Equivalent Single-Pointer Outcomes

The alternative must use a single pointer without dragging. "Single pointer" includes mouse clicks, taps, stylus taps, head pointers, and similar input. It does not mean one click total. A two-step pattern, click the object and then click its destination, is valid because neither action requires holding contact while tracing a path.

Build an outcome matrix before executing tests:

Drag function Acceptable alternative Equivalence assertion
Reorder card to any index Select card, then choose exact position Same card order is saved
Move card between columns Select card, then click a column button Same status and side effects occur
Set price range Numeric inputs or increment buttons Same minimum and maximum values submit
Resize a panel Preset size buttons or numeric width input Same supported sizes are available
Place a map pin Search or coordinate entry Same location can be chosen
Connect diagram nodes Select source, then select target Same valid connections can be created

Check completeness, not superficial availability. If dragging a card can place it at positions 1 through 20, an alternative that can only move it one step upward may technically reach those positions through repetition, but excessive activation creates a serious usability cost. Record the number of actions and discuss a direct "Move to position" control when the list is long. If dragging triggers validation, pricing, notifications, or undo history, the click path must trigger the same rules.

Keyboard operation supports WCAG 2.1.1, but it is not a substitute for the pointer alternative required here. A user may operate a mouse with limited precision yet not use a keyboard. Test both requirements independently.

Verify the step: choose each drag outcome in the matrix and trace an alternative action sequence to the identical persisted state. Any blank alternative or unreachable destination is a test failure candidate.

Step 3: Create a Runnable Accessible Board Fixture

Create tests/dragging.spec.ts. The fixture below uses real browser events and accessible buttons. It intentionally exposes both paths so later tests can compare their final state.

import { test, expect, Page } from '@playwright/test';

const boardHtml = `
<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><title>Accessible task board</title></head>
<body>
  <h1>Tasks</h1>
  <p id="instructions">Select a task, then choose a destination.</p>
  <div id="status" role="status" aria-live="polite"></div>
  <button class="task" id="task-a" aria-pressed="false" draggable="true">Review API contract</button>
  <div aria-label="Move selected task">
    <button data-destination="todo">Move to To Do</button>
    <button data-destination="progress">Move to In Progress</button>
    <button data-destination="done">Move to Done</button>
  </div>
  <section id="todo" aria-label="To Do"><h2>To Do</h2></section>
  <section id="progress" aria-label="In Progress"><h2>In Progress</h2></section>
  <section id="done" aria-label="Done"><h2>Done</h2></section>
<script>
  const task = document.querySelector('#task-a');
  const status = document.querySelector('#status');
  let selected = false;
  function moveTask(destination) {
    document.querySelector('#' + destination).append(task);
    localStorage.setItem('task-a-column', destination);
    status.textContent = 'Review API contract moved to ' +
      document.querySelector('#' + destination + ' h2').textContent;
  }
  task.addEventListener('click', () => {
    selected = !selected;
    task.setAttribute('aria-pressed', String(selected));
    status.textContent = selected ? 'Review API contract selected' : 'Selection cleared';
  });
  document.querySelectorAll('[data-destination]').forEach(button => {
    button.addEventListener('click', () => {
      if (!selected) { status.textContent = 'Select a task first'; return; }
      moveTask(button.dataset.destination);
      selected = false;
      task.setAttribute('aria-pressed', 'false');
    });
  });
  task.addEventListener('dragstart', event => event.dataTransfer.setData('text/plain', task.id));
  document.querySelectorAll('section').forEach(column => {
    column.addEventListener('dragover', event => event.preventDefault());
    column.addEventListener('drop', event => { event.preventDefault(); moveTask(column.id); });
  });
  const saved = localStorage.getItem('task-a-column');
  if (saved) document.querySelector('#' + saved).append(task);
</script>
</body></html>`;

async function openBoard(page: Page) {
  await page.route('http://board.test/', route =>
    route.fulfill({ contentType: 'text/html', body: boardHtml })
  );
  await page.goto('http://board.test/');
}

test('alternative moves a selected task without dragging', async ({ page }) => {
  await openBoard(page);
  await page.getByRole('button', { name: 'Review API contract' }).click();
  await page.getByRole('button', { name: 'Move to Done' }).click();
  await expect(page.getByRole('region', { name: 'Done' })
    .getByRole('button', { name: 'Review API contract' })).toBeVisible();
});

The task exposes selected state with aria-pressed. The destination controls remain ordinary buttons, which work with a click, tap, Enter, or Space. The live region reports selection errors and successful movement without making status text the only visible evidence.

Verify the step: run npx playwright test tests/dragging.spec.ts --project=chromium. Expect one passing test. If Playwright says the project does not exist, omit --project=chromium; its default configuration will still launch the installed browser.

Step 4: Test Every Destination and Persistent Result

A single happy-path destination proves only that one path exists. Use data-driven tests to exercise all columns, then reload and confirm that the business state survives. Add these tests below the first test in the same file:

for (const destination of [
  { button: 'Move to To Do', region: 'To Do', key: 'todo' },
  { button: 'Move to In Progress', region: 'In Progress', key: 'progress' },
  { button: 'Move to Done', region: 'Done', key: 'done' },
]) {
  test(`click alternative moves and saves task in ${destination.region}`, async ({ page }) => {
    await openBoard(page);
    await page.getByRole('button', { name: 'Review API contract' }).click();
    await page.getByRole('button', { name: destination.button }).click();

    const target = page.getByRole('region', { name: destination.region });
    await expect(target.getByRole('button', { name: 'Review API contract' })).toBeVisible();
    await expect(page.getByRole('status')).toHaveText(
      `Review API contract moved to ${destination.region}`
    );
    await expect(page.getByRole('button', { name: 'Review API contract' }))
      .toHaveAttribute('aria-pressed', 'false');
    expect(await page.evaluate(() => localStorage.getItem('task-a-column')))
      .toBe(destination.key);
  });
}

In a real application, assert the network response or reload the routed page after movement. Do not rely only on DOM position when a failed API call could snap the item back later. If the drag path permits dropping before, after, or between items, expand the data table to cover every position class, boundary, and disabled target.

Also compare side effects. A move to Done may set a completion timestamp, update a count, trigger an audit event, or require confirmation. Exercise those effects through both interaction paths. Equivalent functionality means equivalent product behavior, not merely a visually similar card location.

Verify the step: rerun npx playwright test tests/dragging.spec.ts. Expect four passing tests. Inspect the report with npx playwright show-report and confirm that To Do, In Progress, and Done appear as separate cases.

Step 5: Test Selection, Errors, Focus, and Announcements

Accessible alternatives need understandable state. Test what happens when no object is selected, when selection is canceled, when a move fails, and when the destination is unavailable. A silent no-op forces users to guess whether the tap registered.

Add these assertions:

test('explains that a task must be selected', async ({ page }) => {
  await openBoard(page);
  await page.getByRole('button', { name: 'Move to Done' }).click();
  await expect(page.getByRole('status')).toHaveText('Select a task first');
  await expect(page.getByRole('region', { name: 'Done' })
    .getByRole('button', { name: 'Review API contract' })).toHaveCount(0);
});

test('supports selection and cancellation with visible state', async ({ page }) => {
  await openBoard(page);
  const taskButton = page.getByRole('button', { name: 'Review API contract' });
  await taskButton.focus();
  await page.keyboard.press('Enter');
  await expect(taskButton).toHaveAttribute('aria-pressed', 'true');
  await expect(page.getByRole('status')).toHaveText('Review API contract selected');
  await page.keyboard.press('Enter');
  await expect(taskButton).toHaveAttribute('aria-pressed', 'false');
  await expect(page.getByRole('status')).toHaveText('Selection cleared');
});

After a successful move, decide focus behavior deliberately. Keeping focus on the moved task is often useful because the user can continue working with it. Moving focus to a status region is usually disruptive; a polite live region can announce the result without taking focus. For dialogs that ask for a destination, return focus to the moved item or a logical nearby control when the dialog closes.

Automation can check roles, names, state, and focus, but it cannot prove that an announcement is concise in every screen reader. Perform a human pass using the workflow in testing with a screen reader. Listen for duplicate announcements, missing destination names, and stale selection state.

Verify the step: run npx playwright test tests/dragging.spec.ts -g "selection|selected". Expect the selection-related tests to pass. Then run the manual sequence with your supported screen reader and save the spoken output in the test evidence.

Step 6: Perform Mouse, Touch, Zoom, and Keyboard Checks

Now validate physical usability on the product, not only the fixture. With a mouse, drag the item to each valid destination, then repeat using only clicks. Confirm that the alternative is visible without hovering and that its labels identify both the action and destination. An unlabeled ellipsis menu may be technically operable but difficult to discover.

On a real touch screen, use one finger. Tap the object, lift your finger, and tap the destination control. Rotate the device, increase browser zoom to 200%, and repeat. The controls must not become clipped, obscured by sticky content, or dependent on horizontal dragging. Check that scrolling the page does not accidentally move the item and that selecting an item does not suppress normal page scrolling.

Use the keyboard as a separate accessibility check. Tab to the task, activate it, reach every destination control in a sensible order, activate the choice, and confirm visible focus throughout. This does not replace the single-pointer check, but it catches adjacent failures and prevents the remediation from helping one group while blocking another.

For touch targets, evaluate WCAG 2.2 Success Criterion 2.5.8 separately. A tiny click alternative might satisfy the movement mechanism while failing target size. Also check contrast, accessible names, instructions, and status messages as independent criteria. The Playwright accessibility testing guide can help automate part of this wider regression.

Verify the step: capture a result matrix with rows for mouse click, touch tap, keyboard, 200% zoom, portrait, and landscape. Each row must record outcome, focus or selection feedback, and defects. Do not mark the step complete from emulation alone.

Step 7: Test WCAG 2 2 Dragging Movements Exceptions and Report Defects

Apply exceptions narrowly. The criterion does not require a non-dragging alternative when dragging is essential to the functionality, meaning the path-based movement is fundamental and removing it would change the activity. Freehand drawing is a strong example because the path itself is the output. Moving a puzzle piece may qualify when manipulation is the purpose of the puzzle. Reordering work items, adjusting a slider, resizing a pane, and positioning a map marker usually have viable non-dragging alternatives, so implementation convenience is not enough.

The other boundary covers functionality controlled by the user agent rather than authored content. Browser scrollbars and browser-native window movement are not your component. A styled slider, custom scroll region, or JavaScript canvas is authored content and remains in scope. Ask who supplied the interaction and whether your team can change it.

Write failures in reproducible terms:

Title: Task cards cannot be moved without a dragging movement
Criterion: WCAG 2.2 SC 2.5.7, Level AA
Environment: iPhone, Safari, portrait, 200% zoom
Steps: Open Board; tap Review API contract; inspect available actions
Actual: No destination controls appear. Moving requires touch-down, path movement, and release.
Expected: A single-pointer method without dragging moves the card to every valid column.
Impact: Users who cannot maintain contact or control a path cannot change task status.
Evidence: Video, DOM snapshot, destination matrix, screen reader notes
Suggested pattern: Select the card, then expose labeled destination buttons.

Avoid prescribing a specific UI when several designs can work. State the missing capability and required outcomes. Let design choose buttons, a menu, a dialog, numeric input, or another understandable control.

Verify the step: have another tester reproduce the defect using only the written steps and evidence. Confirm that the report identifies every unreachable outcome and that any exception has documented product and accessibility review, not an informal comment.

Best Practices

  • Test authored behavior by observation. Do not search only for draggable="true", because pointer-event libraries and canvas controls can hide the demand from static scans.
  • Separate SC 2.5.7 from keyboard conformance. Report both when both fail, with distinct user impacts and reproduction steps.
  • Keep the alternative next to the object or in a clearly associated action menu. Discoverability matters during real use.
  • Preserve selection visually and programmatically. Use native buttons where possible and expose state such as aria-pressed only when it matches the interaction model.
  • Cover every destination, order position, boundary, disabled target, confirmation, undo path, and saved side effect.
  • Test with a real touch device. Desktop touch emulation changes events and viewport dimensions, but it cannot validate motor effort.
  • Use automation for regression, not as the sole conformance decision. A passing click script says little about target placement or whether a person can find the control.
  • Retest after responsive changes. Teams often hide overflow menus or destination buttons on small screens and accidentally restore a drag-only experience.

Troubleshooting

Problem: The alternative exists only on keyboard focus -> Make it discoverable to pointer users too. A keyboard shortcut can satisfy keyboard operation while still leaving SC 2.5.7 unmet. Add a visible button, menu, or select-then-tap path.

Problem: Playwright click tests pass, but touch users still cannot move items -> Run the sequence on physical hardware and inspect responsive CSS. The control may be hidden behind hover styles, too small, covered by an overlay, or replaced with a drag-only mobile layout.

Problem: The card moves visually but returns after reload -> Assert the API response and persisted model, not only DOM placement. Route both drag and alternative actions through the same application command so validation and saving cannot drift.

Problem: Selecting a card causes an immediate drag -> Separate activation from movement. Apply a movement threshold for drag initiation and keep a normal click or tap handler available for selection. Verify that tremor-sized pointer movement does not cancel the tap path.

Problem: The status message is announced twice -> Keep one polite live region and update its text once per state transition. Do not combine competing role="alert", focus movement, and live-region updates for an ordinary successful action.

Problem: The team claims every drag control is essential -> Ask whether the outcome can be expressed through buttons, coordinates, numeric values, menus, or source-then-destination selection. Document why the path itself, rather than only the final state, is fundamental before accepting an exception.

Interview Questions and Answers

Q: What does WCAG 2.2 Success Criterion 2.5.7 require?

It requires functionality that uses dragging movements to also work through a single pointer without dragging. The exceptions are dragging that is essential and behavior controlled by the user agent rather than the author. It is a Level AA criterion.

Q: Why is keyboard support not enough for dragging movements?

SC 2.5.7 specifically addresses users of single-pointer input who cannot execute controlled path movement. A person may use a mouse, head pointer, stylus, or touch input without using a keyboard. Keyboard support should still be tested separately under SC 2.1.1.

Q: How would you test a kanban board?

I would inventory every valid column and order position, record the effects of dragging, then reproduce each outcome with clicks or taps. I would verify selection feedback, accessible names, error handling, persistence, touch behavior, zoom, keyboard operation, and side effects such as status timestamps. I would automate stable outcome and state checks while retaining manual touch and discoverability testing.

Q: Can select-then-tap satisfy the criterion?

Yes. The criterion permits multiple single-pointer activations as long as the user does not need to maintain contact while moving along a path. The selected object and available destinations must be understandable, operable, and functionally equivalent.

Q: What is an essential dragging example?

Freehand drawing is a typical example because the movement path is the content being created. An exception should not be used merely because a drag interface is familiar or cheaper to retain. The team should document why a non-dragging method would fundamentally alter the activity.

Q: What should be automated?

Automate the alternative controls, reachable destinations, state exposure, validation, persistence, and business side effects. Do not claim full conformance from automation because physical effort, touch accuracy, visual discoverability, and assistive technology experience require human evaluation.

Where To Go Next

Turn the inventory and Playwright suite into a release gate, but keep a short manual pass for every changed drag-capable component. Start with the wider WCAG 2.2 testing guide, expand coverage with automated accessibility testing using axe-core, and validate the surrounding experience with the accessibility checklist.

Practice explaining the distinction between pointer alternatives and keyboard support in a mock scenario at /practice. If you are preparing evidence for a role, upload your resume at QAJobFit Resume Studio and describe this audit as an outcome-based accessibility project: interaction inventory, equivalence matrix, automated regression, physical-device testing, and developer-ready defect reports.

Conclusion

A sound test for WCAG 2.2 dragging movements does not ask whether drag and drop works. It asks whether every authored drag outcome is also available to someone who can point and activate but cannot hold, trace, and release accurately. Build an outcome matrix, execute the alternative with mouse and touch, verify saved behavior and feedback, and challenge exceptions with evidence.

Keep Playwright focused on repeatable controls and state. Keep human testing focused on discoverability, motor effort, touch behavior, zoom, and announcements. Together, those checks produce a defensible SC 2.5.7 result and a regression suite that protects the alternative after the first fix.

Interview Questions and Answers

How do you test WCAG 2.2 Success Criterion 2.5.7?

I inventory authored interactions that require holding a pointer while moving, list every supported outcome, and repeat each outcome using clicks or taps without dragging. I verify touch, mouse, responsive layouts, state feedback, errors, persistence, and side effects. I document essential and user-agent exceptions separately and automate the deterministic alternative paths.

What is the difference between a dragging movement and a swipe?

Dragging requires an engaged pointer to follow a path from a start point toward a destination. A swipe can be path-independent when only its direction or threshold matters, although implementations vary. I test the observed interaction demand rather than deciding from the component name.

Why does SC 2.5.7 require a pointer alternative when keyboard support exists?

The criterion covers people who use pointer devices but cannot maintain pressure or execute precise movement. They may not use a keyboard at all. Keyboard accessibility is still mandatory where applicable, but it is evaluated as a distinct requirement.

How would you automate accessible drag and drop testing?

I automate the non-dragging controls with role-based locators, cover every destination using data-driven cases, and assert visible state, programmatic state, API results, and persistence. I also compare important business side effects between drag and alternative paths. Manual testing remains responsible for touch effort, discoverability, and screen reader quality.

What evidence belongs in a dragging movements defect?

I include the criterion and level, device and input mode, exact object and destinations, steps that show dragging is required, unreachable outcomes, and the user impact. Video, DOM or accessibility snapshots, responsive viewport details, and exception analysis help developers reproduce and fix it.

When is dragging considered essential?

Dragging is essential when the path-based movement is intrinsic to the function and replacing it changes the activity, such as creating a freehand line. I do not accept convenience, convention, or implementation cost as evidence. The exception decision should be documented and reviewed rather than assumed.

Frequently Asked Questions

What is WCAG 2.2 dragging movements testing?

It is the process of finding functions that require a pointer to remain engaged while moving along a path, then checking for an equivalent single-pointer method without dragging. The tester verifies every outcome, input mode, and relevant exception under Success Criterion 2.5.7.

Is WCAG 2.5.7 Level A or AA?

Dragging Movements is WCAG 2.2 Success Criterion 2.5.7 at Level AA. Products targeting WCAG 2.2 AA should include it in design reviews, manual audits, and regression coverage.

Does keyboard drag and drop satisfy WCAG 2.5.7?

Not by itself. Keyboard operation addresses a different need, while SC 2.5.7 requires a single-pointer alternative that does not use dragging. A select-then-click or select-then-tap workflow can provide that pointer method.

Are sliders covered by the dragging movements criterion?

A slider operated by holding and moving its thumb uses dragging, so an alternative is needed unless an exception applies. Arrow keys help keyboard users, while numeric inputs, increment buttons, or clickable track positions can provide non-dragging pointer operation.

Can automated tools detect WCAG dragging failures?

Automation can identify known controls and verify alternative buttons, state, persistence, and destinations. It cannot reliably discover every custom path gesture or judge physical usability and discoverability, so manual interaction testing remains necessary.

What is a valid essential dragging exception?

Dragging may be essential when the movement path itself is fundamental, as in freehand drawing. Familiarity, design preference, limited sprint capacity, or the availability of a drag library do not make the gesture essential.

Should dragging still work after adding an accessible alternative?

Yes, it can remain as a convenient interaction. The goal is not to remove dragging, but to ensure users can reach the same supported outcomes through non-dragging single-pointer actions.

Related Guides