W3C First Public Working Draft
Copyright © 2025 World Wide Web Consortium . W3C ® liability , trademark and permissive document license rules apply.
This specification describes an extension mechanism for the Verifiable Credential Data Model, that can be used to represent a Verifiable Credential through a visual, auditory, or haptic medium. It covers rendering a Verifiable Credential to a physical document, digital image, screen reader, or braille output.
This section describes the status of this document at the time of its publication. A list of current W3C publications and the latest revision of this technical report can be found in the W3C standards and drafts index .
This is an experimental specification and is undergoing regular revisions. It is not fit for production deployment.
This document was published by the Verifiable Credentials Working Group as a First Public Working Draft using the Recommendation track .
Publication as a First Public Working Draft does not imply endorsement by W3C and its Members.
This is a draft document and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to cite this document as other than a work in progress.
This document was produced by a group operating under the W3C Patent Policy . W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent that the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy .
This document is governed by the 18 August 2025 W3C Process Document .
Rendering methods can be used when the issuer has a specific way that they want to express a verifiable credential to an observer through a visual, auditory, or haptic mechanism. For example, an issuer of an employee badge credential might want to include rich imagery of their corporate logo and specific placement of employee information in specific areas of the badge. They might also want to provide an audio read out of the important aspects of the badge for individuals that have accessibility needs related to their eyesight.
The following terms are used to describe concepts in this specification.
Our definition of credential differs from, NIST's definitions of credential .
did:example:123456abcdef
.
verifiableCredential
.
These
properties
result
in
separate
graphs
that
contain
all
claims
defined
in
the
corresponding
JSON
objects.
As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.
The
key
words
MAY
,
MUST
,
OPTIONAL
,
RECOMMENDED
,
and
REQUIRED
,
and
SHOULD
in
this
document
are
to
be
interpreted
as
described
in
BCP
14
[
RFC2119
]
[
RFC8174
]
when,
and
only
when,
they
appear
in
all
capitals,
as
shown
here.
A conforming render method is any concrete expression of the data model that complies with the normative statements in this specification. Specifically, all relevant normative statements in Sections 2. Data Model and 3. Algorithms of this document MUST be enforced.
A conforming processor is any algorithm realized as software and/or hardware that generates or consumes a conforming render method . Conforming processors MUST produce errors when non-conforming documents are consumed.
This
document
also
contains
examples
that
contain
JSON
and
JSON-LD
content.
Some
of
these
examples
contain
characters
that
are
invalid
JSON,
such
as
inline
comments
(
//
)
and
the
use
of
ellipsis
(
...
)
to
denote
information
that
adds
little
value
to
the
example.
Implementers
are
cautioned
to
remove
this
content
if
they
desire
to
use
the
information
as
valid
JSON
or
JSON-LD.
The following sections outline the data model that is used by this specification for rendering methods
The
renderMethod
property
is
a
reserved
extension
point
in
the
Verifiable
Credentials
Data
Model
specification
[
VC-DATA-MODEL-2.0
].
An
issuer
can
utilize
this
property
in
a
verifiable
credential
to
express
one
or
more
preferred
render
methods.
renderMethod
property
MUST
specify
one
or
more
rendering
methods
that
can
be
used
by
software
to
express
the
verifiable
credential
using
a
visual,
auditory,
or
haptic
mechanism.
Each
renderMethod
value
MUST
specify
its
type
,
for
example,
TemplateRenderMethod
.
The
precise
contents
of
each
rendering
hint
is
determined
by
the
specific
renderMethod
type
definition.
When
an
issuer
desires
to
specify
template-based
rendering
instructions
for
a
verifiable
credential
,
they
MAY
add
a
renderMethod
property
that
uses
the
data
model
described
below.
| Property | Description | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| id | An OPTIONAL string that follows the URL Standard and, when fetched, dereferences to a render template. | ||||||||
| type |
A
REQUIRED
string
that
MUST
be
the
value
TemplateRenderMethod
.
|
||||||||
| renderSuite | A REQUIRED string that identifies the algorithms that are used for generating the concrete rendering. | ||||||||
| name | An OPTIONAL human-readable string that can be displayed to provide a hint to the type of rendering that will be performed. This property might be used in a graphical interface that enables an individual to select between multiple presentation modes. | ||||||||
| description |
An
OPTIONAL
human-readable
string
that
provides
a
more
involved
description
than
name
of
when
the
particular
rendering
might
be
useful.
|
||||||||
| renderProperty |
An
OPTIONAL
list
of
string
values
that
each
conform
to
the
JavaScript
Object
Notation
(JSON)
Pointer
syntax
that
specifies
which
properties
from
the
verifiable
credential
are
exposed
when
using
this
specific
render
method.
If
renderProperty
is
not
provided,
the
entire
verifiable
credential
is
presumed
to
be
shared
when
the
render
method
is
used.
|
||||||||
| template |
An
OPTIONAL
string
or
map
that
provides
the
template
that
will
be
used
to
perform
the
rendering.
If
the
value
is
a
string
,
it
MUST
be
a
URL.
If
the
value
is
a
map
,
it
MUST
conform
to
the
following
rules:
|
||||||||
| digestMultibase |
An
OPTIONAL
multibase-encoded
Multihash
of
the
render
method
referenced
if
id
is
specified.
The
multibase
value
MUST
be
u
(base64url-nopad)
and
the
multihash
value
MUST
be
SHA-2
with
256-bits
of
output
(
0x12
).
|
The data model shown above is expressed in a verifiable credential in the example below.
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2",
"https://w3id.org/vc/render-method/v1"
],
"id": "http://example.edu/credentials/3732",
"type": ["VerifiableCredential", "UniversityDegreeCredential"],
"issuer": "https://example.edu/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "BachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"renderMethod": {
"type": "TemplateRenderMethod",
"renderSuite": "svg-mustache",
"template": {
"id": "https://example.edu/credential-templates/BachelorDegree",
"mediaType": "image/svg+xml",
"digestMultibase": "zQmerWC85Wg6wFl9znFCwYxApG270iEu5h6JqWAPdhyxz2dR",
"renderProperty": [
"/issuer", "/validFrom", "/credentialSubject/degree/name"
]
}
}
}
In
the
example
above,
the
issuer
has
provided
a
Mustache-based
SVG
rendering
template
for
a
Bachelor's
degree
that
will
be
filled
in
with
specific
information
from
the
verifiable
credential
listed
in
renderProperty
.
The
svg-mustache
render
suite
uses
the
Mustache
templating
language
to
modify
an
SVG
file,
which
is
then
used
to
render
a
visual
representation
of
the
verifiable
credential
.
In the example below, a fully embedded SVG file is used as the rendering template.
{
...
"renderMethod": {
"type": "TemplateRenderMethod",
"renderSuite": "svg-mustache",
// the SVG file is embedded in the VC
"template": "data:image/svg+xml;base64,Qjei89...3jZpW"
}
}
The
next
example
links
to
the
SVG
file
on
the
Web
and
secures
it
against
modification
by
using
the
digestMultibase
property.
{
...
"renderMethod": {
"type": "TemplateRenderMethod",
"renderSuite": "svg-mustache",
"template": {
// this SVG file is fetched from the Web
"id": "https://degree.example/credential-templates/bachelors",
"mediaType": "image/svg+xml",
"digestMultibase": "zQmerWC85Wg6wFl9znFCwYxApG270iEu5h6JqWAPdhyxz2dR"
}
}
The
next
example
links
to
the
rendering
template
on
the
Web
and
secures
it
using
the
digestMultibase
property:
{
...
"renderMethod": {
// this render method is fetched from the Web
"id": "https://degrees.example/bachelors-svg.jsonld",
"mediaType": "application/ld+json",
"type": "TemplateRenderMethod",
"renderSuite": "svg-mustache",
"digestMultibase": "zQmG270iEu5h6JqWAPdhyxz2dRerWC85Wg6wFl9znFCwYxAp"
}
The
pdf-mustache
render
suite
uses
the
Mustache
templating
language
to
modify
a
PDF
file,
which
is
then
used
to
render
a
visual
representation
of
the
verifiable
credential
.
In the example below, a fully embedded PDF file is used as the rendering template.
{
...
"renderMethod": {
"type": "TemplateRenderMethod",
"renderSuite": "pdf-mustache",
// this PDF file is embedded in the VC
"template": "data:application/pdf;base64,k309SK...pwK83b"
}
}
The
next
example
links
to
the
PDF
file
on
the
Web
and
secures
it
against
modification
by
using
the
digestMultibase
property.
{
...
"renderMethod": {
"type": "TemplateRenderMethod",
"renderSuite": "pdf-mustache",
"template": {
// this PDF file is fetched from the Web
"id": "https://degree.example/bachelors.pdf",
"mediaType": "application/pdf",
"digestMultibase": "zQmznFCwYxApG270iEu5h6JqWAPdhyxz2dRerWC85Wg6wFl9"
}
}
The
next
example
links
to
the
rendering
template
on
the
Web
and
secures
it
using
the
digestMultibase
property:
{
...
"renderMethod": {
// this render method is fetched from the Web
"id": "https://degrees.example/bachelors-pdf.jsonld",
"type": "TemplateRenderMethod",
"renderSuite": "pdf-mustache",
"digestMultibase": "zQmEu5h6JqWAPdhyxmz2dRerWC85Wg6wFl9znFCwYxApG270"
}
The
json-card
render
suite
uses
JSON
templates
to
transform
a
verifiable
credential
into
a
standardized
JSON
card
format.
This
format
enables
wallets
to
display
credentials
in
a
responsive
card
layout
with
key
data
highlighted
and
configurable
additional
fields.
Wallets
that
implement
this
method
can
render
the
standardized
JSON
output
into
their
own
card
UI
designs,
allowing
credentials
to
be
displayed
even
when
a
wallet
doesn't
natively
support
a
specific
credential
type.
The template is a JSON object that matches the json-card output structure. String values in the template can be JSON pointer strings (as specified in JavaScript Object Notation (JSON) Pointer ) that reference fields in the verifiable credential . When processing the template, JSON pointer strings are evaluated against the credential data and replaced with the resolved values. The template MUST conform to the JSON template schema defined below, and the resulting output MUST conform to the json-card output schema. Compound data across multiple fields is not supported; each field references a single JSON pointer.
The
template
for
a
json-card
render
suite
MUST
be
a
JSON
object
that
conforms
to
the
following
structure.
The
template
structure
matches
the
output
structure,
but
string
values
can
be
either
literal
strings
or
JSON
pointer
strings
(starting
with
/
)
that
reference
fields
in
the
verifiable
credential
.
The
template
SHOULD
be
validated
against
this
schema
before
processing.
| Property | Type | Description |
|---|---|---|
| name | string |
A
REQUIRED
string
that
is
either
a
literal
display
name
or
a
JSON
pointer
string
(e.g.,
"/credentialSubject/degree/name"
)
that
references
the
credential
data.
|
| description | string | A REQUIRED string that is either a literal description or a JSON pointer string that references the credential data. |
| icon | string | An OPTIONAL string that is either a literal URL/data URI or a JSON pointer string that references the credential data. |
| theme | map | An OPTIONAL color theme object with the following properties: |
| fields | list | A REQUIRED ordered list of custom data fields. Each field is an object with: |
| issueDate | string | An OPTIONAL string that is either a literal ISO 8601 date or a JSON pointer string that references the credential data. |
| expirationDate | string | An OPTIONAL string that is either a literal ISO 8601 date or a JSON pointer string that references the credential data. |
The following JSON Schema implements the template structure rules defined above:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": ["name", "description", "fields"],
"properties": {
"name": {
"type": "string",
"description": "Display name as a literal string or JSON pointer (e.g., \"/credentialSubject/degree/name\")"
},
"description": {
"type": "string",
"description": "Description as a literal string or JSON pointer"
},
"icon": {
"type": "string",
"description": "Icon URL/data URI as a literal string or JSON pointer"
},
"theme": {
"type": "object",
"properties": {
"primaryColor": {
"type": "string",
"description": "Primary color as a literal string or JSON pointer"
},
"accentColor": {
"type": "string",
"description": "Accent color as a literal string or JSON pointer"
}
},
"additionalProperties": false
},
"fields": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["label", "value"],
"properties": {
"label": {
"type": "string",
"description": "Field label (MUST be a literal string, not a JSON pointer)"
},
"value": {
"type": "string",
"pattern": "^/",
"description": "Field value as a JSON pointer string (MUST start with \"/\")"
}
},
"additionalProperties": false
}
},
"issueDate": {
"type": "string",
"description": "Issue date as a literal ISO 8601 date string or JSON pointer"
},
"expirationDate": {
"type": "string",
"description": "Expiration date as a literal ISO 8601 date string or JSON pointer"
}
},
"additionalProperties": false
}
The following example shows a valid json-card template with JSON pointer strings:
{
"name": "/credentialSubject/degree/name",
"description": "University Degree Credential",
"icon": "/credentialSubject/icon",
"theme": {
"primaryColor": "#1a5490",
"accentColor": "/credentialSubject/theme/accentColor"
},
"fields": [
{
"label": "Institution",
"value": "/issuer"
},
{
"label": "Degree Type",
"value": "/credentialSubject/degree/type"
},
{
"label": "Issue Date",
"value": "/validFrom"
}
],
"issueDate": "/validFrom",
"expirationDate": "/validUntil"
}
The
output
of
a
json-card
template
MUST
be
a
JSON
object
that
conforms
to
the
following
structure:
| Property | Type | Description |
|---|---|---|
| name | string | A REQUIRED display name for the credential card. |
| description | string | A REQUIRED description text for the credential card. |
| icon | string | An OPTIONAL URL or data URI for an icon or image to display on the card. |
| theme | map | An OPTIONAL color theme object with the following properties: |
| fields | list | A REQUIRED ordered list of custom data fields. Each field is an object with: |
| issueDate | string | An OPTIONAL ISO 8601 date string indicating when the credential was issued. |
| expirationDate | string | An OPTIONAL ISO 8601 date string indicating when the credential expires. |
The following example shows a valid json-card output:
{
"name": "Bachelor of Science and Arts",
"description": "University Degree Credential",
"icon": "https://example.edu/icons/degree.svg",
"theme": {
"primaryColor": "#1a5490",
"accentColor": "#4a90e2"
},
"fields": [
{
"label": "Institution",
"value": "Example University"
},
{
"label": "Degree Type",
"value": "BachelorDegree"
},
{
"label": "Graduation Date",
"value": "2010-05-15"
}
],
"issueDate": "2010-01-01T19:23:24Z",
"expirationDate": null
}
When
processing
a
json-card
template,
the
following
steps
MUST
be
performed:
/
(indicating
it
is
a
JSON
pointer),
evaluate
it
using
the
JSON
Pointer
algorithm
JavaScript
Object
Notation
(JSON)
Pointer
against
the
verifiable
credential
as
the
target
document.
null
,
the
behavior
is
implementation-specific.
Implementations
MAY
use
an
empty
string,
leave
the
value
as
null
,
or
signal
an
error.
/
,
treat
it
as
a
literal
string
and
leave
it
unchanged.
Note that compound data across multiple fields is not supported. Each field in the template references a single JSON pointer that resolves to a single value from the credential.
In the example below, a fully embedded JSON template is used as the rendering template. The template uses JSON pointer strings to reference credential data.
{ ...
"renderMethod": {
"type": "TemplateRenderMethod",
"renderSuite": "json-card",
// the JSON template is embedded in the VC
"template": "data:application/json;base64,eyJuYW1lIjogIi9jcmVkZW50aWFsU3ViamVjdC9kZWdyZWUvbmFtZSIsICJkZXNjcmlwdGlvbiI6ICJVbml2ZXJzaXR5IERlZ3JlZSBDcmVkZW50aWFsIiwgImZpZWxkcyI6IFt7ImxhYmVsIjogIkluc3RpdHV0aW9uIiwgInZhbHVlIjogIi9pc3N1ZXIifV19"
}
}
The
next
example
links
to
the
JSON
template
on
the
Web
and
secures
it
against
modification
by
using
the
digestMultibase
property.
{...
"renderMethod": {
"type": "TemplateRenderMethod",
"renderSuite": "json-card",
"template": {
// this JSON template is fetched from the Web
"id": "https://degree.example/credential-templates/bachelors.json",
"mediaType": "application/json",
"digestMultibase": "zQmerWC85Wg6wFl9znFCwYxApG270iEu5h6JqWAPdhyxz2dR"
}
}
The
next
example
links
to
the
rendering
template
on
the
Web
and
secures
it
using
the
digestMultibase
property:
{...
"renderMethod": {
// this render method is fetched from the Web
"id": "https://degrees.example/bachelors-json-card.jsonld",
"mediaType": "application/ld+json",
"type": "TemplateRenderMethod",
"renderSuite": "json-card",
"digestMultibase": "zQmG270iEu5h6JqWAPdhyxz2dRerWC85Wg6wFl9znFCwYxAp"
}
The
nfc
render
suite
transmits
a
binary
payload
representing
the
verifiable
credential
over
a
wireless
NFC
connection.
In the example below, a fully embedded NFC payload is used as the rendering template, which only discloses the barcode identifier associated with the credential.
{
...
"renderMethod": {
"type": "TemplateRenderMethod",
"renderSuite": "nfc",
"name": "Tap to send",
// the NFC payload is embedded
"template": "data:application/octet-stream;base64,2QZkpQGDG...G8XJWnROcY4Biw",
// only the barcode is transmitted over NFC
"renderProperty": ["/credentialSubject/barcode"]
}
}
OpenAttestationEmbeddedRenderer
is
used
by
an
issuer
to
render
a
verifiable
credential.
The
verifiable
credential
is
rendered
in
HTML
within
an
embedded
<iframe>
through
a
Template
Renderer
website
referenced
in
the
document.
This
arrangement
allows
for
interactive
selective
disclosure
using
OpenAttestationMerkleProofSignature2018.
The Template Renderer is a web application embedded in an iframe. It renders verifiable credentials based on selected templates and must listen for specific messages from the Host application to facilitate the rendering process.
There currently exists a number of OpenAttestationEmbeddedRenderer issuers and decentralized renderer implementations.
When
an
issuer
desires
to
specify
an
embedded
rendering
instructions
for
a
verifiable
credential
,
they
MAY
add
a
renderMethod
property
that
uses
the
data
model
described
below.
| Property | Description |
|---|---|
| id | A URL that locates a website that implements the OpenAttestationEmbeddedRenderer Action API. |
| type |
The
type
property
MUST
be
OpenAttestationEmbeddedRenderer
.
|
| renderName |
Name
of
the
template
used
by
the
website
specified
by
id
to
render
the
document.
A
different
template
can
be
used
for
the
decentralized
renderer
to
present
a
different
HTML
view
of
the
verifiable
credential.
|
The data model shown above is expressed in a verifiable credential in the example below.
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://schemata.openattestation.com/com/openattestation/4.0/alpha-context.json"
],
"type": ["VerifiableCredential", "OpenAttestationCredential"],
"validFrom": "2021-03-08T12:00:00+08:00",
"name": "Republic of Singapore Driving Licence",
"issuer": {
"id": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90",
"type": "OpenAttestationIssuer",
"name": "Government Technology Agency of Singapore (GovTech)",
"identityProof": { "identityProofType": "DNS-DID", "identifier": "example.openattestation.com" }
},
"credentialSubject": {
"id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42",
"type": ["DriversLicense"],
"name": "John Doe",
"address": "123 Choa Chu Kang Road, Singapore 123456",
"licenses": [
{
"class": "3",
"description": "Motor cars with unladen weight <= 3000kg",
"effectiveDate": "2013-05-16T00:00:00+08:00"
},
{
"class": "3A",
"description": "Motor cars with unladen weight <= 3000kg",
"effectiveDate": "2013-05-16T00:00:00+08:00"
}
]
},
"renderMethod": [{
"id": "https://demo-renderer.opencerts.io",
"type": "OpenAttestationEmbeddedRenderer",
"rendererName": "GOVTECH_DEMO"
}]
}
The
verifiable
credential
specifies
a
decentralized
renderer
at
https://demo-renderer.opencerts.io
,
using
the
template
named
GOVTECH_DEMO
.
The decentralized renderer can support different templates that can provide different views of the verifiable credentials. Below are two renderings of the same verifiable credential using different templates.
The
Host
is
the
application
that
displays
the
document
with
the
help
of
the
Template
Renderer.
The
Template
Renderer
MUST
be
a
web
application
embedded
within
an
iframe
specified
by
renderMethod
.
id
.
It
MUST
communicate
with
the
Host
application
using
postMessage
API
to
perform
actions.
All
actions
follow
the
same
structure.
They
are
composed
of
type
and
payload
:
type
indicates
the
kind
of
action
being
executed,
for
instance,
RENDER_DOCUMENT
means
rendering
a
document.
The
type
of
an
action
is
mandatory.
payload
indicates
optional
data
associated
to
the
type,
for
instance,
the
content
of
the
document
to
render.
An open source reference implementation is available on GitHub .
The interaction between the Host and the Template Renderer is illustrated in the following diagram.
When the iframe is first displayed, the host sends commands to the iframe to render the document. The 4 types of actions supported are described below.
| type | payload | action |
|---|---|---|
GET_TEMPLATES
|
|
Obtain a list of templates supported by the renderer for the given document. The list of templates is returned from UPDATE_TEMPLATES call from the iframe. |
SELECT_TEMPLATE
|
|
Select the template to be used for rendering. It should be from the list returned by GET_TEMPLATES. If not found, a default template is used. |
RENDER_DOCUMENT
|
|
Render the verifiable credential inside the IFRAME using the selected template. Document is JSON object form of the verifiable credential. |
PRINT
|
|
MUST show the print dialog so the contents of the IFRAME can be printed. |
These are used by the iframe to update the host to make adjustments on formatting, or selective redaction.
| type | payload | action |
|---|---|---|
OBFUSCATE
|
|
This is used for selective redaction. The Host is informed of the path of the field that has been obfuscated so that the host can create an updated version of the document with the selected field obfuscated. |
UPDATE_HEIGHT
|
|
Notify the Host of the height of the embedded iframe in pixels so the Host can adjust the size on the browser. |
UPDATE_TEMPLATES
|
|
Notify the Host of the list of template names that are usable from RENDER_METHOD, or GET_TEMPLATES calls. |
The following sections outline the algorithms that is used by this specification for rendering methods.
The
following
algorithm
is
used
to
transform
the
SVG
image
template
into
the
final
SVG
image
that
is
displayed.
The
inputs
to
the
algorithm
are
the
verifiable
credential
(
verifiableCredential
)
and
the
SVG
image
source
code
(
svgImage
).
The
output
is
a
SVG
image.
replacementMap
,
by
finding
all
strings
in
svgImage
that
start
with
{{
(double
open
braces)
and
end
with
}}
(double
close
braces).
For
each
string,
templateKey
,
that
is
found:
templateValue
,
by
evaluating
the
value
of
templateKey
(without
the
opening
or
closing
braces)
using
the
JSON
Pointer
[
RFC6901
]
algorithm
with
the
verifiableCredential
as
input
to
the
algorithm.
If
the
evaluation
is
null
,
set
templateValue
to
the
empty
string.
replacementMap
by
using
templateKey
and
associate
it
with
templateValue
.
replacementMap
,
replace
each
corresponding
string
in
svgImage
that
matches
the
key
with
the
associated
value
in
the
replacementMap
.
The list of security considerations listed below need to be converted into sections:
The list of privacy considerations listed below need to be converted into sections:
id
to
track
individuals.
These
values
should
be
aggressively
cached
client-side,
or
looked
up
using
a
mixnet
or
proxy
service.
The list of internationalization considerations listed below need to be converted into sections:
Referenced in:
Referenced in: