diff --git a/docs/04-plugins/dereferenceUses.mdx b/docs/04-plugins/dereferenceUses.mdx
new file mode 100644
index 000000000..dc4535f50
--- /dev/null
+++ b/docs/04-plugins/dereferenceUses.mdx
@@ -0,0 +1,15 @@
+---
+title: dereferenceUses
+svgo:
+ pluginId: dereferenceUses
+ defaultPlugin: false
+ parameters:
+ keepHref:
+ description: keep (xlink:)href attributes
+ default: false
+ symbolContainer:
+ description: browsers use as container of content (e.g. could also be used)
+ default: 'svg'
+---
+
+Dereferences elements.
diff --git a/lib/builtin.js b/lib/builtin.js
index 36248c12f..274dc05be 100644
--- a/lib/builtin.js
+++ b/lib/builtin.js
@@ -14,6 +14,7 @@ import * as convertPathData from '../plugins/convertPathData.js';
import * as convertShapeToPath from '../plugins/convertShapeToPath.js';
import * as convertStyleToAttrs from '../plugins/convertStyleToAttrs.js';
import * as convertTransform from '../plugins/convertTransform.js';
+import * as dereferenceUses from '../plugins/dereferenceUses.js';
import * as mergeStyles from '../plugins/mergeStyles.js';
import * as inlineStyles from '../plugins/inlineStyles.js';
import * as mergePaths from '../plugins/mergePaths.js';
@@ -70,6 +71,7 @@ export const builtin = Object.freeze([
convertShapeToPath,
convertStyleToAttrs,
convertTransform,
+ dereferenceUses,
inlineStyles,
mergePaths,
mergeStyles,
diff --git a/plugins/dereferenceUses.js b/plugins/dereferenceUses.js
new file mode 100644
index 000000000..5ee137c16
--- /dev/null
+++ b/plugins/dereferenceUses.js
@@ -0,0 +1,172 @@
+import * as csstree from 'css-tree';
+
+import { visitSkip, querySelector } from '../lib/xast.js';
+
+/**
+ * @typedef {import('../lib/types.js').XastElement} XastElement
+ * @typedef {import('../lib/types.js').XastParent} XastParent
+ */
+
+export const name = 'dereferenceUses';
+export const description = 'dereferences elements';
+
+export const params = {
+ keepHref: false, // keep (xlink:)href attributes
+ symbolContainer: 'svg', // browsers use as container of content (e.g. could also be used)
+};
+
+const OverridingUseAttributeNames = [
+ 'x',
+ 'y',
+ 'width',
+ 'height',
+ 'href',
+ 'xlink:href',
+];
+
+const HrefAttributeNames = [
+ 'href', // By spec, `href` has precedence over (deprecated) `xlink:href`
+ 'xlink:href',
+];
+
+/**
+ * Dereferences