Repository: kubernetes-sigs/gateway-api

Issue:
Update presentations and talks link in community page
**What would you like to be added**:

The last update to https://gateway-api.sigs.k8s.io/contributing/#presentations-and-talks was 5 years ago and needs to be updated with KubeCon talks and presentations.

**Why this is needed**:

We've had some great talks since then, and they should be added to help promote the project.  It would be nice to update this after every KubeCon, but at least once a year would suffice.


Discussion:
@kundan2707: /assign@kundan2707: I will find out all sessions and update this page@shaneutt: Thanks @candita and @kundan2707.

/triage accepted

(note: you'll be able to find _some_ of them here: https://github.com/kubernetes/community/pull/8356)

Solution patch:
diff --git a/.github/ISSUE_TEMPLATE/conformance.md b/.github/ISSUE_TEMPLATE/conformance-test.md
similarity index 87%
rename from .github/ISSUE_TEMPLATE/conformance.md
rename to .github/ISSUE_TEMPLATE/conformance-test.md
index 1643a02f..b0f0da64 100644
--- a/.github/ISSUE_TEMPLATE/conformance.md
+++ b/.github/ISSUE_TEMPLATE/conformance-test.md
@@ -1,7 +1,7 @@
 ---
 name: Conformance Test
 about: Suggest a new Conformance Test
-labels: area/conformance
+labels: area/conformance-test
 
 ---
 <!-- Please only use this template for submitting conformance test requests -->
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 41dc9f83..ccafa381 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -35,7 +35,8 @@ Optionally add one or more of the following kinds if applicable:
 /kind failing-test
 /kind flake
 /kind regression
-/area conformance
+/area conformance-test
+/area conformance-machinery
 -->
 
 **What this PR does / why we need it**:
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 7bd180c4..2746f0b9 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -30,17 +30,6 @@ updates:
       - ok-to-test
       - release-note-none
 
-  # Dependencies listed in .github/workflows/*.yml
-  - package-ecosystem: "github-actions"
-    directory: "/"
-    schedule:
-      interval: "weekly"
-    labels:
-      - github_actions
-      - dependencies
-      - ok-to-test
-      - release-note-none
-
   # Dependencies listed in Dockerfile
   - package-ecosystem: "docker"
     directory: "/"
@@ -54,7 +43,7 @@ updates:
 
   # Dependencies listed in requirements.txt
   - package-ecosystem: "pip"
-    directory: "/"
+    directory: "/hack/mkdocs/image"
     schedule:
       interval: "weekly"
     labels:
diff --git a/.gitignore b/.gitignore
index 4db4fef3..e85170b4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -56,4 +56,4 @@ go.work.sum
 /cache
 .venv/
 release/
-site-src/geps
+site-src/reference/spec.md
diff --git a/CHANGELOG/1.3-CHANGELOG.md b/CHANGELOG/1.3-CHANGELOG.md
new file mode 100644
index 00000000..2d1005f5
--- /dev/null
+++ b/CHANGELOG/1.3-CHANGELOG.md
@@ -0,0 +1,679 @@
+# v1.3 Changelog
+## Table of Contents
+
+- [v1.3.0](#v130)
+- [v1.3.0-rc.2](#v130-rc2)
+- [v1.3.0-rc.1](#v130-rc1)
+
+# v1.3.0
+
+## Changes since v1.3.0-rc.2
+
+- Fixed typo in Retry Budget configuration ([#3762](https://github.com/kubernetes-sigs/gateway-api/pull/3762),[@zirain](https://github.com/zirain))
+
+## Changes since v1.2.1
+
+### Noteworthy Changes for Implementors
+This section is intended to be a guide for API changes that might inspire or require implementation changes.
+None of these API changes represent breaking changes.
+
+#### OverlappingTLSConfig for Connection Coalescing
+A new `OverlappingTLSConfig` condition has been added to Gateway Listeners to indicate situations where
+Connection Coalescing could be problematic.  The Gateway specification for handling Hostname and SNI matching for HTTPS
+requests has been clarified and now recommends that implementations return 421 HTTP code responses in certain cases.
+
+- Implementation of GEP-3567 - TLS Updates for Connection Coalescing. ([#3630](https://github.com/kubernetes-sigs/gateway-api/pull/3630),[@robscott](https://github.com/robscott))
+- Add GEP-3567: Gateway TLS Updates for HTTP/2 Connection Coalescing. ([#3572](https://github.com/kubernetes-sigs/gateway-api/pull/3630),[@robscott](https://github.com/robscott))
+
+#### Move `BackendTLSPolicy` `SubjectAltNames` from Core to Extended
+- The `SubjectAltNames` field of `BackendTLSPolicy` changed from Core to Extended feature. ([#3591](https://github.com/kubernetes-sigs/gateway-api/pull/3591),[@mlavacca](https://github.com/mlavacca))
+
+#### The `backendRef` filter must send traffic to the correct backends when weighted routing is configured
+- A new conformance test was added to ensure `backendRef` filters don't affect weighted routing. ([#3604](https://github.com/kubernetes-sigs/gateway-api/pull/3604),[@dprotaso](https://github.com/dprotaso))
+
+#### Clarify reasons for certain object status conditions
+- Set proper reason for Gateway `parametersRef` `Accepted` condition when `parametersRef` is invalid. ([#3579](https://github.com/kubernetes-sigs/gateway-api/pull/3579),[@mlavacca](https://github.com/mlavacca))
+- Improve GatewayClass `GatewayClassReasonInvalidParameters` reason description. ([#3553](https://github.com/kubernetes-sigs/gateway-api/pull/3553),[@mlavacca](https://github.com/mlavacca))
+
+#### BackendTLSPolicy
+- CEL validation for target references in `BackendTLSPolicy`. ([#3496](https://github.com/kubernetes-sigs/gateway-api/pull/3496),[@snorwin](https://github.com/snorwin))
+
+#### GRPCRoute
+-  Increase the `GRPCRoute` match limit from 8 -> 64 ([#3601](https://github.com/kubernetes-sigs/gateway-api/pull/3601),[@EyalPazz](https://github.com/EyalPazz))
+
+#### Gateway.Spec.Addresses changes
+A new type `GatewaySpecAddress` replaces `GatewayAddress`.  In `GatewayAddress` the `Value` field was required.  In
+`GatewaySpecAddress` the `Value` field is **optional**.  When the `Value` is unspecified, if an implementation supports that,
+it SHOULD automatically assign an address.  If an implementation does not support an empty `Value`, it MUST set the
+`Programmed` condition in status to false with a reason of "AddressNotAssigned".  The `Addresses` field in
+`Gateway.Spec` has changed from type `[]GatewayAddress` to `[]GatewaySpecAddress`.
+
+- Make the `value` field in `Gateway.Spec.Addresses` array optional ([#3616](https://github.com/kubernetes-sigs/gateway-api/pull/3616),[@EyalPazz](https://github.com/EyalPazz))
+
+### Standard Channel Additions and Changes
+The Standard channel is Gateway API's set of maximally-stable install files.
+Only features with the best testing and support are added to the standard
+channel. This channel should be considered GA or stable, and future changes will
+be fully backwards compatible.
+
+#### Percentage-Based Request Mirroring 🎉
+This feature enhances the existing [request mirroring feature](https://gateway-api.sigs.k8s.io/guides/http-request-mirroring/)
+by allowing users to specify a percentage of requests to be mirrored in both `HTTPRoute`
+and `GRPCRoute` objects.
+
+This feature has graduated to Standard and is now considered GA or Stable.
+
+This feature's name for conformance tests (and GatewayClass status reporting) is
+`HTTPRouteRequestPercentageMirror`.
+
+This feature's status is **Extended**, meaning that it is _optional_ for
+implementations to support. If you're using Experimental Channel, you can refer
+to the `supportedFeatures` field in the `status` of any GatewayClass.
+
+Relevant PRs:
+- Promote percentage-based-request-mirroring GEP-3171 to standard ([#3638](https://github.com/kubernetes-sigs/gateway-api/pull/3638),[@LiorLieberman](https://github.com/LiorLieberman))
+- Add conformance tests for percentage-based request mirroring ([#3508](https://github.com/kubernetes-sigs/gateway-api/pull/3508),[@LiorLieberman](https://github.com/LiorLieberman))
+
+### Experimental Channel Additions and Changes
+
+The Experimental Channel is Gateway API's channel for testing out changes and
+gaining confidence with them before allowing them to go to Standard.
+
+**This channel may include features that are changed or removed later!**
+
+#### New experimental resources now start with "X"
+This release introduces 2 new experimental resources:
+
+* XBackendTrafficPolicy
+* XListenerSet
+
+Both of these resources are described in more detail below. As you may notice,
+these resource names start with `X` and are part of an effort to distinguish
+experimental channel resources from standard channel resources.
+
+In addition to the separate names, these resources are also part of the
+`x-k8s.io` API group instead of `k8s.io`, as a further effort to signal the
+experimental nature of these resources.
+
+In practice this means two things:
+
+1) These resources can coexist with standard channel resources
+2) Migrating to standard channel will require recreating these resources with
+   the standard channel names and API Group (both lacking the "x" prefix)
+
+For more context on this change, refer to the [related discussion](https://github.com/kubernetes-sigs/gateway-api/discussions/3497).
+
+#### CORS (Cross Origin Resource Sharing) Filter
+[GEP-1767](https://gateway-api.sigs.k8s.io/geps/gep-1767/) describes how to add
+configuration of CORS filters on HTTPRoute objects, and in this release, this change
+has moved to Experimental.
+
+Please see the GEP reference document or the API reference for the details.
+
+This feature has graduated to Experimental and should now be used for testing
+and verification purposes only. Experimental features may be changed or removed
+in a future version.
+
+This feature does not currently have a feature name defined.
+
+This feature's status is **Extended**, meaning that it is _optional_ for
+implementations to support.
+
+As there is no feature name or conformance testing available for this feature
+yet, please check your implementation's documentation to see if it is supported.
+
+Relevant PRs:
+- Implementing CORS Filter for `HTTPRoute` ([#3637](https://github.com/kubernetes-sigs/gateway-api/pull/3637),[@robscott](https://github.com/robscott))
+- Change `HTTPRouteFilter.CORS.AllowCredentials` to expect a boolean and not a string ([#3656](https://github.com/kubernetes-sigs/gateway-api/pull/3656),[@EyalPazz](https://github.com/EyalPazz))
+- Add CORS to `HTTPRouteFilterType` ([#3668](https://github.com/kubernetes-sigs/gateway-api/pull/3668),[@EyalPazz](https://github.com/EyalPazz))
+
+#### XListenerSets (Standard Mechanism to Merge Gateways)
+[GEP-1713](https://gateway-api.sigs.k8s.io/geps/gep-1713/) defines a new mechanism to merge listeners into a single
+Gateway, and in this release, this change has moved to Experimental.  Following a new naming convention, an
+experimental object name is prefaced with an **X**, thus `ListenerSet` has changed to `XListenerSet`.
+The object group name has changed from  `gateway.networking.k8s.io` to `gateway.networking.x-k8s.io`.
+
+Please see the GEP reference document or the API reference for the details.
+
+This feature has graduated to Experimental and should now be used for testing
+and verification purposes only. Experimental features may be changed or removed
+in a future version.
+
+This feature does not currently have a feature name defined.
+
+This feature's status is **Extended**, meaning that it is _optional_ for
+implementations to support.
+
+As there is no feature name or conformance testing available for this feature
+yet, please check your implementation's documentation to see if it is supported.
+
+Relevant PRs:
+- Clarified what it means for Gateway Listeners to be distinct ([#3477](https://github.com/kubernetes-sigs/gateway-api/pull/3477),[@youngnick](https://github.com/youngnick))
+- GEP-1713: Standard Mechanism to Merge Multiple Gateways ([#3213](https://github.com/kubernetes-sigs/gateway-api/pull/3213)),[@dprotaso](https://github.com/dprotaso))
+- Update GEP-1713 - Support attaching `ListenerSet`s across namespaces ([#3632](https://github.com/kubernetes-sigs/gateway-api/pull/3632),[@dprotaso](https://github.com/dprotaso))
+- GEP-1713: Standard Mechanism to Merge Multiple Gateways - move GEP Link to Experimental ([#3664](https://github.com/kubernetes-sigs/gateway-api/pull/3664)),[@gcs278](https://github.com/gcs278))
+- Refactor codegen scripts to make it easier to generate two clients ([#3589](https://github.com/kubernetes-sigs/gateway-api/pull/3589),[@dprotaso](https://github.com/dprotaso))
+- Add ListenerSet GEP-1713 to the website ([#3587](https://github.com/kubernetes-sigs/gateway-api/pull/3587),[@dprotaso](https://github.com/dprotaso))
+- Introduces `ListenerSet` API & Generate Clients (in the group gateway.networking.k8s-x.io) ([#3588](https://github.com/kubernetes-sigs/gateway-api/pull/3588),[@dprotaso](https://github.com/dprotaso))
+- The resource `ListenerSet` has been renamed to `XListenerSet`. The Resource `BackendTrafficPolicy` has been renamed to
+  `XBackendTrafficPolicy`. ([#3682](https://github.com/kubernetes-sigs/gateway-api/pull/3682),[@mlavacca](https://github.com/mlavacca))
+
+#### XBackendTrafficPolicy (Retry Budgets)
+[GEP-3388](https://gateway-api.sigs.k8s.io/geps/gep-3388/)
+specifies the configuration of a "retry budget" across all endpoints of a destination service in order to prevent
+additional client-side retries after reaching a configured threshold. The budget can be configured using a maximum
+percentage of active requests, or an interval during which requests will be considered. In this release, this change has
+moved to Experimental. Following a new naming convention, an experimental object name is prefaced with an **X**, thus
+`BackendTrafficPolicy` has changed to `XBackendTrafficPolicy`. The object group name has changed from
+`gateway.networking.k8s.io` to `gateway.networking.x-k8s.io`.
+
+Please see the GEP reference document or the API reference for the details.
+
+This feature has graduated to Experimental and should now be used for testing
+and verification purposes only. Experimental features may be changed or removed
+in a future version.
+
+This feature does not currently have a feature name defined.
+
+This feature's status is **Extended**, meaning that it is _optional_ for
+implementations to support.
+
+As there is no feature name or conformance testing available for this feature
+yet, please check your implementation's documentation to see if it is supported.
+
+Relevant PRs:
+- Adds a new `BackendTrafficPolicy` with ability to configure budgeted retries ([#3607](https://github.com/kubernetes-sigs/gateway-api/pull/3607),[@ericdbishop](https://github.com/ericdbishop))
+- Add GEP-3388 HTTP Retry Budget ([#3488](https://github.com/kubernetes-sigs/gateway-api/pull/3488),[@ericdbishop](https://github.com/ericdbishop))
+- The resource `ListenerSet` has been renamed to `XListenerSet`. The Resource `BackendTrafficPolicy` has been renamed to
+  `XBackendTrafficPolicy`. ([#3682](https://github.com/kubernetes-sigs/gateway-api/pull/3682),[@mlavacca](https://github.com/mlavacca))
+- Retry budget fields are now in their own struct, moving from `budgetPercent` and `budgetInterval` to `budget.percent`
+  and `budget.interval` respectively. ([#3695](https://github.com/kubernetes-sigs/gateway-api/pull/3695),[@youngnick](https://github.com/youngnick))
+
+#### BackendLBPolicy has been replaced by XBackendTrafficPolicy
+
+In the interest of combining similar concepts in a single policy, we've decided
+to merge the contents of BackendLBPolicy (session persistence) into
+XBackendTrafficPolicy (retry budgets).
+
+- BackendLBPolicy has been renamed to XBackendTrafficPolicy ([#3692](https://github.com/kubernetes-sigs/gateway-api/pull/3692),[@robscott](https://github.com/robscott))
+
+
+## GEPs
+- Initial draft of Auth GEP-1494 ([#3500](https://github.com/kubernetes-sigs/gateway-api/pull/3500),[@youngnick](https://github.com/youngnick))
+
+## Documentation
+- For the Gateway infrastructure stanza, the `InvalidParameters` reason SHOULD be used with the `Accepted` condition in case the object referenced does not exist, is of an unsupported kind, or is malformed. ([#3579](https://github.com/kubernetes-sigs/gateway-api/pull/3579),[@mlavacca](https://github.com/mlavacca))
+- Specify default type for `sessionPersistence.cookieConfig.lifetimeType` ([#3540](https://github.com/kubernetes-sigs/gateway-api/pull/3540),[@arkodg](https://github.com/arkodg))
+- Updates docs for the Kuadrant implementation ([#3598](https://github.com/kubernetes-sigs/gateway-api/pull/3598),[@jasonmadigan](https://github.com/jasonmadigan))
+- Updates comparison of Gateway API and API Gateway to use the CNCF's definition of the latter ([#3653](https://github.com/kubernetes-sigs/gateway-api/pull/3653),[@craigbox](https://github.com/craigbox))
+- Fix 'mkdocs serve' endless build loop ([#3662](https://github.com/kubernetes-sigs/gateway-api/pull/3662),[@blake](https://github.com/blake))
+- Fix several MkDocs info and warning messages ([#3663](https://github.com/kubernetes-sigs/gateway-api/pull/3663),[@blake](https://github.com/blake))
+- Fix broken links and spelling ([#3655](https://github.com/kubernetes-sigs/gateway-api/pull/3655),[@blake](https://github.com/blake)), ([#3615](https://github.com/kubernetes-sigs/gateway-api/pull/3615),[@jsoref](https://github.com/jsoref)),
+([#3657](https://github.com/kubernetes-sigs/gateway-api/pull/3657),[@blake](https://github.com/blake)),
+  ([#3400](https://github.com/kubernetes-sigs/gateway-api/pull/3400),[@jsoref](https://github.com/jsoref)),
+  ([#3626](https://github.com/kubernetes-sigs/gateway-api/pull/3626),[@zirain](https://github.com/zirain)),
+  ([#3565](https://github.com/kubernetes-sigs/gateway-api/pull/3565/files),[@Vaniog](https://github.com/Vaniog)),
+  ([#3485](https://github.com/kubernetes-sigs/gateway-api/pull/3485),[@fatsheep9146](https://github.com/fatsheep9146))
+- GRPCRoute name is not set ([#3639](https://github.com/kubernetes-sigs/gateway-api/pull/3639),[@Xunhuo](https://github.com/Xunzhuo))
+- Update GEPs in navbar ([#3634](https://github.com/kubernetes-sigs/gateway-api/pull/3634),[@blake](https://github.com/blake))
+- Remove experimental callout on GRPCRoute guide ([#3595](https://github.com/kubernetes-sigs/gateway-api/pull/3595),[@blake](https://github.com/blake))
+- Fix GRPCRoute structure definition error in the document ([#3344](https://github.com/kubernetes-sigs/gateway-api/pull/3344),[@0xff-dev](https://github.com/0xff-dev))
+- Add Gateway For Mesh section to the GEP template ([#3577](https://github.com/kubernetes-sigs/gateway-api/pull/3577),[@LiorLieberman](https://github.com/LiorLieberman))
+- Fix group description in `LocalObjectReference` (empty string infers core API group) ([#3597](https://github.com/kubernetes-sigs/gateway-api/pull/3597),[@EyalPazz](https://github.com/EyalPazz))
+- Remove "experimental" language from gamma implementations ([#3580](https://github.com/kubernetes-sigs/gateway-api/pull/3580),[@LiorLieberman](https://github.com/LiorLieberman))
+- Clarify frontend/backend relationship in GEP-91 ([#3571](https://github.com/kubernetes-sigs/gateway-api/pull/3571),[@htuch](https://github.com/htuch))
+
+## Cleanup
+- Remove mkdocs-material-extensions from requirements.txt ([#3666](https://github.com/kubernetes-sigs/gateway-api/pull/3666), [@gcs278](https://github.com/gcs278))
+- Remove extra newlines and format descriptions of items for code generation ([#3574](https://github.com/kubernetes-sigs/gateway-api/pull/3574),[@snorwin](https://github.com/snorwin))
+- Fix mkdocs so at least 3 conformance reports are uploaded before update ([#3549](https://github.com/kubernetes-sigs/gateway-api/pull/3549),[@xtineskim](https://github.com/xtineskim))
+- Dependencies have been upgraded to Kubernetes v1.32 and Go v1.24 ([#3697](https://github.com/kubernetes-sigs/gateway-api/pull/3697),[@robscott](https://github.com/robscott))
+
+## Bug or Regression
+- Sort api versions when updating clientset during code generation ([#3652](https://github.com/kubernetes-sigs/gateway-api/pull/3652),[@bentheelder](https://github.com/BenTheElder))
+- Retry failed calls when waiting for namespace ready in tests ([#3627](https://github.com/kubernetes-sigs/gateway-api/pull/3627),[@aojea](https://github.com/aojea))
+- Some tests are not formatted properly ([#3610](https://github.com/kubernetes-sigs/gateway-api/pull/3610),[@EyalPazz](https://github.com/EyalPazz))
+- Doesn't allow a user to provide both an asterisk and another method/s along with it in `HTTPCORSFilter.AllowMethods`
+ ([#3667](https://github.com/kubernetes-sigs/gateway-api/pull/3667),[@EyalPazz](https://github.com/EyalPazz))
+
+## Dependencies
+
+### Added
+- github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp: [v1.25.0](https://github.com/GoogleCloudPlatform/opentelemetry-operations-go/tree/detectors/gcp/v1.25.0)
+- github.com/Masterminds/goutils: [v1.1.1](https://github.com/Masterminds/goutils/tree/v1.1.1)
+- github.com/Masterminds/semver: [v1.5.0](https://github.com/Masterminds/semver/tree/v1.5.0)
+- github.com/Masterminds/sprig: [v2.22.0+incompatible](https://github.com/Masterminds/sprig/tree/v2.22.0)
+- github.com/elastic/crd-ref-docs: [v0.1.0](https://github.com/elastic/crd-ref-docs/tree/v0.1.0)
+- github.com/envoyproxy/go-control-plane/envoy: [v1.32.4](https://github.com/envoyproxy/go-control-plane/tree/envoy/v1.32.4)
+- github.com/envoyproxy/go-control-plane/ratelimit: [v0.1.0](https://github.com/envoyproxy/go-control-plane/tree/ratelimit/v0.1.0)
+- github.com/go-playground/locales: [v0.13.0](https://github.com/go-playground/locales/tree/v0.13.0)
+- github.com/go-playground/universal-translator: [v0.17.0](https://github.com/go-playground/universal-translator/tree/v0.17.0)
+- github.com/go-playground/validator/v10: [v10.4.1](https://github.com/go-playground/validator/tree/v10.4.1)
+- github.com/goccy/go-yaml: [v1.11.3](https://github.com/goccy/go-yaml/tree/v1.11.3)
+- github.com/huandu/xstrings: [v1.3.3](https://github.com/huandu/xstrings/tree/v1.3.3)
+- github.com/leodido/go-urn: [v1.2.0](https://github.com/leodido/go-urn/tree/v1.2.0)
+- github.com/mitchellh/copystructure: [v1.2.0](https://github.com/mitchellh/copystructure/tree/v1.2.0)
+- github.com/mitchellh/reflectwalk: [v1.0.2](https://github.com/mitchellh/reflectwalk/tree/v1.0.2)
+- go.opentelemetry.io/auto/sdk: v1.1.0
+- go.opentelemetry.io/contrib/detectors/gcp: v1.34.0
+- go.opentelemetry.io/otel/sdk/metric: v1.34.0
+
+### Changed
+- cel.dev/expr: v0.16.0 → v0.19.1
+- cloud.google.com/go/compute/metadata: v0.5.0 → v0.6.0
+- github.com/cncf/xds/go: [024c85f → cff3c89](https://github.com/cncf/xds/compare/024c85f...cff3c89)
+- github.com/envoyproxy/go-control-plane: [v0.13.0 → v0.13.4](https://github.com/envoyproxy/go-control-plane/compare/v0.13.0...v0.13.4)
+- github.com/envoyproxy/protoc-gen-validate: [v1.1.0 → v1.2.1](https://github.com/envoyproxy/protoc-gen-validate/compare/v1.1.0...v1.2.1)
+- github.com/evanphx/json-patch/v5: [v5.9.0 → v5.9.11](https://github.com/evanphx/json-patch/compare/v5.9.0...v5.9.11)
+- github.com/golang/glog: [v1.2.2 → v1.2.4](https://github.com/golang/glog/compare/v1.2.2...v1.2.4)
+- github.com/google/btree: [v1.0.1 → v1.1.3](https://github.com/google/btree/compare/v1.0.1...v1.1.3)
+- github.com/google/cel-go: [v0.20.1 → v0.22.0](https://github.com/google/cel-go/compare/v0.20.1...v0.22.0)
+- github.com/google/pprof: [4bfdf5a → d1b30fe](https://github.com/google/pprof/compare/4bfdf5a...d1b30fe)
+- github.com/gregjones/httpcache: [9cad4c3 → 901d907](https://github.com/gregjones/httpcache/compare/9cad4c3...901d907)
+- github.com/imdario/mergo: [v0.3.16 → v0.3.11](https://github.com/imdario/mergo/compare/v0.3.16...v0.3.11)
+- github.com/jessevdk/go-flags: [v1.4.0 → v1.6.1](https://github.com/jessevdk/go-flags/compare/v1.4.0...v1.6.1)
+- github.com/jonboulle/clockwork: [v0.2.2 → v0.4.0](https://github.com/jonboulle/clockwork/compare/v0.2.2...v0.4.0)
+- github.com/miekg/dns: [v1.1.62 → v1.1.64](https://github.com/miekg/dns/compare/v1.1.62...v1.1.64)
+- github.com/moby/spdystream: [v0.4.0 → v0.5.0](https://github.com/moby/spdystream/compare/v0.4.0...v0.5.0)
+- github.com/onsi/ginkgo/v2: [v2.19.0 → v2.22.0](https://github.com/onsi/ginkgo/compare/v2.19.0...v2.22.0)
+- github.com/onsi/gomega: [v1.34.2 → v1.36.2](https://github.com/onsi/gomega/compare/v1.34.2...v1.36.2)
+- github.com/spf13/pflag: [v1.0.5 → v1.0.6](https://github.com/spf13/pflag/compare/v1.0.5...v1.0.6)
+- github.com/stoewer/go-strcase: [v1.2.0 → v1.3.0](https://github.com/stoewer/go-strcase/compare/v1.2.0...v1.3.0)
+- github.com/xiang90/probing: [43a291a → a49e3df](https://github.com/xiang90/probing/compare/43a291a...a49e3df)
+- go.etcd.io/bbolt: v1.3.9 → v1.3.11
+- go.etcd.io/etcd/api/v3: v3.5.14 → v3.5.16
+- go.etcd.io/etcd/client/pkg/v3: v3.5.14 → v3.5.16
+- go.etcd.io/etcd/client/v2: v2.305.13 → v2.305.16
+- go.etcd.io/etcd/client/v3: v3.5.14 → v3.5.16
+- go.etcd.io/etcd/pkg/v3: v3.5.13 → v3.5.16
+- go.etcd.io/etcd/raft/v3: v3.5.13 → v3.5.16
+- go.etcd.io/etcd/server/v3: v3.5.13 → v3.5.16
+- go.opentelemetry.io/otel/metric: v1.28.0 → v1.34.0
+- go.opentelemetry.io/otel/sdk: v1.28.0 → v1.34.0
+- go.opentelemetry.io/otel/trace: v1.28.0 → v1.34.0
+- go.opentelemetry.io/otel: v1.28.0 → v1.34.0
+- go.uber.org/zap: v1.26.0 → v1.27.0
+- golang.org/x/crypto: v0.29.0 → v0.33.0
+- golang.org/x/exp: fe59bbe → 8a7402a
+- golang.org/x/mod: v0.21.0 → v0.23.0
+- golang.org/x/net: v0.31.0 → v0.35.0
+- golang.org/x/oauth2: v0.22.0 → v0.25.0
+- golang.org/x/sync: v0.9.0 → v0.11.0
+- golang.org/x/sys: v0.27.0 → v0.30.0
+- golang.org/x/term: v0.26.0 → v0.29.0
+- golang.org/x/text: v0.20.0 → v0.22.0
+- golang.org/x/time: v0.5.0 → v0.7.0
+- golang.org/x/tools: v0.26.0 → v0.30.0
+- golang.org/x/xerrors: 04be3eb → 104605a
+- google.golang.org/genproto: b8732ec → ef43131
+- google.golang.org/genproto/googleapis/api: ddb44da → 5f5ef82
+- google.golang.org/genproto/googleapis/rpc: ddb44da → 1a7da9e
+- google.golang.org/grpc: v1.67.1 → v1.71.0
+- google.golang.org/protobuf: v1.35.2 → v1.36.5
+- k8s.io/api: v0.31.3 → v0.32.2
+- k8s.io/apiextensions-apiserver: v0.31.3 → v0.32.2
+- k8s.io/apimachinery: v0.31.3 → v0.32.2
+- k8s.io/apiserver: v0.31.3 → v0.32.2
+- k8s.io/client-go: v0.31.3 → v0.32.2
+- k8s.io/code-generator: v0.31.3 → v0.32.2
+- k8s.io/component-base: v0.31.3 → v0.32.2
+- k8s.io/gengo/v2: 51d4e06 → 2b36238
+- k8s.io/kms: v0.31.3 → v0.32.2
+  k8s.io/kube-openapi: 8948a66 → 32ad38e
+- k8s.io/utils: 18e509b → 3ea5e8c
+- sigs.k8s.io/apiserver-network-proxy/konnectivity-client: v0.30.3 → v0.31.0
+- sigs.k8s.io/controller-runtime: v0.19.1 → v0.20.3
+- sigs.k8s.io/controller-tools: v0.16.5 → v0.17.2
+- sigs.k8s.io/json: bc3834c → 9aa6b5e
+- sigs.k8s.io/structured-merge-diff/v4: v4.4.3 → v4.5.0
+
+### Removed
+- github.com/ahmetb/gen-crd-api-reference-docs: [v0.3.0](https://github.com/ahmetb/gen-crd-api-reference-docs/tree/v0.3.0)
+- github.com/census-instrumentation/opencensus-proto: [v0.4.1](https://github.com/census-instrumentation/opencensus-proto/tree/v0.4.1)
+- github.com/golang/groupcache: [41bb18b](https://github.com/golang/groupcache/tree/41bb18b)
+- github.com/kr/pty: [v1.1.1](https://github.com/kr/pty/tree/v1.1.1)
+- github.com/shurcooL/sanitized_anchor_name: [v1.0.0](https://github.com/shurcooL/sanitized_anchor_name/tree/v1.0.0)
+- k8s.io/gengo: 9cce18d
+- k8s.io/klog: v0.2.0
+
+# v1.3.0-rc.2
+- _start-sha: b316db57e63e9a58058880982750dc035a347d6_
+- _end-sha: 703048161530940bcd3425bc51f21d034b4b6880_
+
+We expect that this release candidate is quite close to the final v1.3.0
+release. However, subsequent breaking API changes are still possible.
+
+This release candidate is suitable for implementors, but we do not recommend
+shipping products based on a release candidate API due to the possibility of
+incompatible changes prior to the final release. The following represents the
+changes since v1.3.0-rc.1:
+
+## Changes by Kind
+
+### API
+
+* `None` has been removed as option for Route Namespaces (was added in rc.1 as
+  accidental part of ListenerSet additions). ([#3748](https://github.com/kubernetes-sigs/gateway-api/pull/3748),[@robscott](https://github.com/robscott))
+* XListenerSet Port is required. (It was already effectively required due to 0
+  being an invalid value, but had been marked optional).
+  ([#3753](https://github.com/kubernetes-sigs/gateway-api/pull/3753),[@robscott](https://github.com/robscott))
+
+
+### Conformance
+
+* Fixes flake in ExpectMirroredRequest test ([#3708](https://github.com/kubernetes-sigs/gateway-api/pull/3708),[@mhofstetter](https://github.com/mhofstetter))
+* Revert change to mirror threshold (back to v1.2 state) ([#3727](https://github.com/kubernetes-sigs/gateway-api/pull/3727),[@howardjohn](https://github.com/howardjohn))
+* GatewayInfrastructure feature has been marked as "Standard" ([#3710](https://github.com/kubernetes-sigs/gateway-api/pull/3710),[@mlavacca](https://github.com/mlavacca))
+* GatewayEmptyAddress feature has been marked as "Standard" ([#3711](https://github.com/kubernetes-sigs/gateway-api/pull/3711),[@mlavacca](https://github.com/mlavacca))
+
+### Docs
+
+* Small clarification to HTTPRouteMatch rules ([#3741](https://github.com/kubernetes-sigs/gateway-api/pull/3741),[@vehagn](https://github.com/vehagn))
+
+
+# v1.3.0-rc.1
+- _start-sha: 066411e5d45ea58c954bc144b88f82f534355a63_
+- _end-sha: b316db57e63e9a58058880982750dc035a347d6_
+
+We expect that this release candidate is quite close to the final v1.3.0
+release. However, subsequent breaking API changes are still possible.
+
+This release candidate is suitable for implementors, but we do not recommend
+shipping products based on a release candidate API due to the possibility of
+incompatible changes prior to the final release. The following represents the
+changes since v1.2.0:
+
+## Changes by Kind
+
+### Noteworthy Changes for Implementors
+This section is intended to be a guide for API changes that might inspire or require implementation changes.
+None of these API changes represent breaking changes.
+
+#### OverlappingTLSConfig for Connection Coalescing
+A new `OverlappingTLSConfig` condition has been added to Gateway Listeners to indicate situations where
+Connection Coalescing could be problematic.  The Gateway specification for handling Hostname and SNI matching for HTTPS
+requests has been clarified and now recommends that implementations return 421 HTTP code responses in certain cases.
+
+- Implementation of GEP-3567 - TLS Updates for Connection Coalescing. ([#3630](https://github.com/kubernetes-sigs/gateway-api/pull/3630),[@robscott](https://github.com/robscott))
+- Add GEP-3567: Gateway TLS Updates for HTTP/2 Connection Coalescing. ([#3572](https://github.com/kubernetes-sigs/gateway-api/pull/3630),[@robscott](https://github.com/robscott))
+
+#### Move `BackendTLSPolicy` `SubjectAltNames` from Core to Extended
+- The `SubjectAltNames` field of `BackendTLSPolicy` changed from Core to Extended feature. ([#3591](https://github.com/kubernetes-sigs/gateway-api/pull/3591),[@mlavacca](https://github.com/mlavacca))
+
+#### The `backendRef` filter must send traffic to the correct backends when weighted routing is configured
+- A new conformance test was added to ensure `backendRef` filters don't affect weighted routing. ([#3604](https://github.com/kubernetes-sigs/gateway-api/pull/3604),[@dprotaso](https://github.com/dprotaso))
+
+#### Clarify reasons for certain object status conditions
+- Set proper reason for Gateway `parametersRef` `Accepted` condition when `parametersRef` is invalid. ([#3579](https://github.com/kubernetes-sigs/gateway-api/pull/3579),[@mlavacca](https://github.com/mlavacca))
+- Improve GatewayClass `GatewayClassReasonInvalidParameters` reason description. ([#3553](https://github.com/kubernetes-sigs/gateway-api/pull/3553),[@mlavacca](https://github.com/mlavacca))
+
+#### BackendTLSPolicy
+- CEL validation for target references in `BackendTLSPolicy`. ([#3496](https://github.com/kubernetes-sigs/gateway-api/pull/3496),[@snorwin](https://github.com/snorwin))
+
+#### GRPCRoute
+-  Increase the `GRPCRoute` match limit from 8 -> 64 ([#3601](https://github.com/kubernetes-sigs/gateway-api/pull/3601),[@EyalPazz](https://github.com/EyalPazz))
+
+#### Gateway.Spec.Addresses changes
+A new type `GatewaySpecAddress` replaces `GatewayAddress`.  In `GatewayAddress` the `Value` field was required.  In
+`GatewaySpecAddress` the `Value` field is **optional**.  When the `Value` is unspecified, if an implementation supports that,
+it SHOULD automatically assign an address.  If an implementation does not support an empty `Value`, it MUST set the
+`Programmed` condition in status to false with a reason of "AddressNotAssigned".  The `Addresses` field in
+`Gateway.Spec` has changed from type `[]GatewayAddress` to `[]GatewaySpecAddress`.
+
+- Make the `value` field in `Gateway.Spec.Addresses` array optional ([#3616](https://github.com/kubernetes-sigs/gateway-api/pull/3616),[@EyalPazz](https://github.com/EyalPazz))
+
+### Standard Channel Additions and Changes
+The Standard channel is Gateway API's set of maximally-stable install files.
+Only features with the best testing and support are added to the standard
+channel. This channel should be considered GA or stable, and future changes will
+be fully backwards compatible.
+
+#### Percentage-Based Request Mirroring 🎉
+This feature enhances the existing [request mirroring feature](https://gateway-api.sigs.k8s.io/guides/http-request-mirroring/)
+by allowing users to specify a percentage of requests to be mirrored in both `HTTPRoute`
+and `GRPCRoute` objects.
+
+This feature has graduated to Standard and is now considered GA or Stable.
+
+This feature's name for conformance tests (and GatewayClass status reporting) is
+`HTTPRouteRequestPercentageMirror`.
+
+This feature's status is **Extended**, meaning that it is _optional_ for
+implementations to support. If you're using Experimental Channel, you can refer
+to the `supportedFeatures` field in the `status` of any GatewayClass.
+
+Relevant PRs:
+- Promote percentage-based-request-mirroring GEP-3171 to standard ([#3638](https://github.com/kubernetes-sigs/gateway-api/pull/3638),[@LiorLieberman](https://github.com/LiorLieberman))
+- Add conformance tests for percentage-based request mirroring ([#3508](https://github.com/kubernetes-sigs/gateway-api/pull/3508),[@LiorLieberman](https://github.com/LiorLieberman))
+
+### Experimental Channel Additions and Changes
+
+The Experimental Channel is Gateway API's channel for testing out changes and
+gaining confidence with them before allowing them to go to Standard.
+
+**This channel may include features that are changed or removed later!**
+
+#### CORS (Cross Origin Resource Sharing) Filter
+[GEP-1767](https://gateway-api.sigs.k8s.io/geps/gep-1767/) describes how to add
+configuration of CORS filters on HTTPRoute objects, and in this release, this change
+has moved to Experimental.
+
+Please see the GEP reference document or the API reference for the details.
+
+This feature has graduated to Experimental and should now be used for testing
+and verification purposes only. Experimental features may be changed or removed
+in a future version.
+
+This feature does not currently have a feature name defined.
+
+This feature's status is **Extended**, meaning that it is _optional_ for
+implementations to support.
+
+As there is no feature name or conformance testing available for this feature
+yet, please check your implementation's documentation to see if it is supported.
+
+Relevant PRs:
+- Implementing CORS Filter for `HTTPRoute` ([#3637](https://github.com/kubernetes-sigs/gateway-api/pull/3637),[@robscott](https://github.com/robscott))
+- Change `HTTPRouteFilter.CORS.AllowCredentials` to expect a boolean and not a string ([#3656](https://github.com/kubernetes-sigs/gateway-api/pull/3656),[@EyalPazz](https://github.com/EyalPazz))
+- Add CORS to `HTTPRouteFilterType` ([#3668](https://github.com/kubernetes-sigs/gateway-api/pull/3668),[@EyalPazz](https://github.com/EyalPazz))
+
+#### XListenerSets (Standard Mechanism to Merge Gateways)
+[GEP-1713](https://gateway-api.sigs.k8s.io/geps/gep-1713/) defines a new mechanism to merge listeners into a single
+Gateway, and in this release, this change has moved to Experimental.  Following a new naming convention, an
+experimental object name is prefaced with an **X**, thus `ListenerSet` has changed to `XListenerSet`.
+The object group name has changed from  `gateway.networking.k8s.io` to `gateway.networking.x-k8s.io`.
+
+Please see the GEP reference document or the API reference for the details.
+
+This feature has graduated to Experimental and should now be used for testing
+and verification purposes only. Experimental features may be changed or removed
+in a future version.
+
+This feature does not currently have a feature name defined.
+
+This feature's status is **Extended**, meaning that it is _optional_ for
+implementations to support.
+
+As there is no feature name or conformance testing available for this feature
+yet, please check your implementation's documentation to see if it is supported.
+
+Relevant PRs:
+- Clarified what it means for Gateway Listeners to be distinct ([#3477](https://github.com/kubernetes-sigs/gateway-api/pull/3477),[@youngnick](https://github.com/youngnick))
+- GEP-1713: Standard Mechanism to Merge Multiple Gateways ([#3213](https://github.com/kubernetes-sigs/gateway-api/pull/3213)),[@dprotaso](https://github.com/dprotaso))
+- Update GEP-1713 - Support attaching `ListenerSet`s across namespaces ([#3632](https://github.com/kubernetes-sigs/gateway-api/pull/3632),[@dprotaso](https://github.com/dprotaso))
+- GEP-1713: Standard Mechanism to Merge Multiple Gateways - move GEP Link to Experimental ([#3664](https://github.com/kubernetes-sigs/gateway-api/pull/3664)),[@gcs278](https://github.com/gcs278))
+- Refactor codegen scripts to make it easier to generate two clients ([#3589](https://github.com/kubernetes-sigs/gateway-api/pull/3589),[@dprotaso](https://github.com/dprotaso))
+- Add ListenerSet GEP-1713 to the website ([#3587](https://github.com/kubernetes-sigs/gateway-api/pull/3587),[@dprotaso](https://github.com/dprotaso))
+- Introduces `ListenerSet` API & Generate Clients (in the group gateway.networking.k8s-x.io) ([#3588](https://github.com/kubernetes-sigs/gateway-api/pull/3588),[@dprotaso](https://github.com/dprotaso))
+- The resource `ListenerSet` has been renamed to `XListenerSet`. The Resource `BackendTrafficPolicy` has been renamed to
+  `XBackendTrafficPolicy`. ([#3682](https://github.com/kubernetes-sigs/gateway-api/pull/3682),[@mlavacca](https://github.com/mlavacca))
+
+#### XBackendTrafficPolicy (Retry Budgets)
+[GEP-3388](https://gateway-api.sigs.k8s.io/geps/gep-3388/)
+specifies the configuration of a "retry budget" across all endpoints of a destination service in order to prevent
+additional client-side retries after reaching a configured threshold. The budget can be configured using a maximum
+percentage of active requests, or an interval during which requests will be considered. In this release, this change has
+moved to Experimental. Following a new naming convention, an experimental object name is prefaced with an **X**, thus
+`BackendTrafficPolicy` has changed to `XBackendTrafficPolicy`. The object group name has changed from
+`gateway.networking.k8s.io` to `gateway.networking.x-k8s.io`.
+
+Please see the GEP reference document or the API reference for the details.
+
+This feature has graduated to Experimental and should now be used for testing
+and verification purposes only. Experimental features may be changed or removed
+in a future version.
+
+This feature does not currently have a feature name defined.
+
+This feature's status is **Extended**, meaning that it is _optional_ for
+implementations to support.
+
+As there is no feature name or conformance testing available for this feature
+yet, please check your implementation's documentation to see if it is supported.
+
+Relevant PRs:
+- Adds a new `BackendTrafficPolicy` with ability to configure budgeted retries ([#3607](https://github.com/kubernetes-sigs/gateway-api/pull/3607),[@ericdbishop](https://github.com/ericdbishop))
+- Add GEP-3388 HTTP Retry Budget ([#3488](https://github.com/kubernetes-sigs/gateway-api/pull/3488),[@ericdbishop](https://github.com/ericdbishop))
+- The resource `ListenerSet` has been renamed to `XListenerSet`. The Resource `BackendTrafficPolicy` has been renamed to
+  `XBackendTrafficPolicy`. ([#3682](https://github.com/kubernetes-sigs/gateway-api/pull/3682),[@mlavacca](https://github.com/mlavacca))
+- BackendLBPolicy has been renamed to XBackendTrafficPolicy ([#3692](https://github.com/kubernetes-sigs/gateway-api/pull/3692),[@robscott](https://github.com/robscott))
+- Retry budget fields are now in their own struct, moving from `budgetPercent` and `budgetInterval` to `budget.percent`
+  and `budget.interval` respectively. ([#3695](https://github.com/kubernetes-sigs/gateway-api/pull/3695),[@youngnick](https://github.com/youngnick))
+
+## GEPs
+- Initial draft of Auth GEP-1494 ([#3500](https://github.com/kubernetes-sigs/gateway-api/pull/3500),[@youngnick](https://github.com/youngnick))
+
+## Documentation
+- For the Gateway infrastructure stanza, the `InvalidParameters` reason SHOULD be used with the `Accepted` condition in case the object referenced does not exist, is of an unsupported kind, or is malformed. ([#3579](https://github.com/kubernetes-sigs/gateway-api/pull/3579),[@mlavacca](https://github.com/mlavacca))
+- Specify default type for `sessionPersistence.cookieConfig.lifetimeType` ([#3540](https://github.com/kubernetes-sigs/gateway-api/pull/3540),[@arkodg](https://github.com/arkodg))
+- Updates docs for the Kuadrant implementation ([#3598](https://github.com/kubernetes-sigs/gateway-api/pull/3598),[@jasonmadigan](https://github.com/jasonmadigan))
+- Updates comparison of Gateway API and API Gateway to use the CNCF's definition of the latter ([#3653](https://github.com/kubernetes-sigs/gateway-api/pull/3653),[@craigbox](https://github.com/craigbox))
+- Fix 'mkdocs serve' endless build loop ([#3662](https://github.com/kubernetes-sigs/gateway-api/pull/3662),[@blake](https://github.com/blake))
+- Fix several MkDocs info and warning messages ([#3663](https://github.com/kubernetes-sigs/gateway-api/pull/3663),[@blake](https://github.com/blake))
+- Fix broken links and spelling ([#3655](https://github.com/kubernetes-sigs/gateway-api/pull/3655),[@blake](https://github.com/blake)), ([#3615](https://github.com/kubernetes-sigs/gateway-api/pull/3615),[@jsoref](https://github.com/jsoref)),
+([#3657](https://github.com/kubernetes-sigs/gateway-api/pull/3657),[@blake](https://github.com/blake)),
+  ([#3400](https://github.com/kubernetes-sigs/gateway-api/pull/3400),[@jsoref](https://github.com/jsoref)),
+  ([#3626](https://github.com/kubernetes-sigs/gateway-api/pull/3626),[@zirain](https://github.com/zirain)),
+  ([#3565](https://github.com/kubernetes-sigs/gateway-api/pull/3565/files),[@Vaniog](https://github.com/Vaniog)),
+  ([#3485](https://github.com/kubernetes-sigs/gateway-api/pull/3485),[@fatsheep9146](https://github.com/fatsheep9146))
+- GRPCRoute name is not set ([#3639](https://github.com/kubernetes-sigs/gateway-api/pull/3639),[@Xunhuo](https://github.com/Xunzhuo))
+- Update GEPs in navbar ([#3634](https://github.com/kubernetes-sigs/gateway-api/pull/3634),[@blake](https://github.com/blake))
+- Remove experimental callout on GRPCRoute guide ([#3595](https://github.com/kubernetes-sigs/gateway-api/pull/3595),[@blake](https://github.com/blake))
+- Fix GRPCRoute structure definition error in the document ([#3344](https://github.com/kubernetes-sigs/gateway-api/pull/3344),[@0xff-dev](https://github.com/0xff-dev))
+- Add Gateway For Mesh section to the GEP template ([#3577](https://github.com/kubernetes-sigs/gateway-api/pull/3577),[@LiorLieberman](https://github.com/LiorLieberman))
+- Fix group description in `LocalObjectReference` (empty string infers core API group) ([#3597](https://github.com/kubernetes-sigs/gateway-api/pull/3597),[@EyalPazz](https://github.com/EyalPazz))
+- Remove "experimental" language from gamma implementations ([#3580](https://github.com/kubernetes-sigs/gateway-api/pull/3580),[@LiorLieberman](https://github.com/LiorLieberman))
+- Clarify frontend/backend relationship in GEP-91 ([#3571](https://github.com/kubernetes-sigs/gateway-api/pull/3571),[@htuch](https://github.com/htuch))
+
+## Cleanup
+- Remove mkdocs-material-extensions from requirements.txt ([#3666](https://github.com/kubernetes-sigs/gateway-api/pull/3666), [@gcs278](https://github.com/gcs278))
+- Remove extra newlines and format descriptions of items for code generation ([#3574](https://github.com/kubernetes-sigs/gateway-api/pull/3574),[@snorwin](https://github.com/snorwin))
+- Fix mkdocs so at least 3 conformance reports are uploaded before update ([#3549](https://github.com/kubernetes-sigs/gateway-api/pull/3549),[@xtineskim](https://github.com/xtineskim))
+- Dependencies have been upgraded to Kubernetes v1.32 and Go v1.24 ([#3697](https://github.com/kubernetes-sigs/gateway-api/pull/3697),[@robscott](https://github.com/robscott))
+
+## Bug or Regression
+- Sort api versions when updating clientset during code generation ([#3652](https://github.com/kubernetes-sigs/gateway-api/pull/3652),[@bentheelder](https://github.com/BenTheElder))
+- Retry failed calls when waiting for namespace ready in tests ([#3627](https://github.com/kubernetes-sigs/gateway-api/pull/3627),[@aojea](https://github.com/aojea))
+- Some tests are not formatted properly ([#3610](https://github.com/kubernetes-sigs/gateway-api/pull/3610),[@EyalPazz](https://github.com/EyalPazz))
+- Doesn't allow a user to provide both an asterisk and another method/s along with it in `HTTPCORSFilter.AllowMethods`
+ ([#3667](https://github.com/kubernetes-sigs/gateway-api/pull/3667),[@EyalPazz](https://github.com/EyalPazz))
+
+## Dependencies
+
+### Added
+- github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp: [v1.25.0](https://github.com/GoogleCloudPlatform/opentelemetry-operations-go/tree/detectors/gcp/v1.25.0)
+- github.com/Masterminds/goutils: [v1.1.1](https://github.com/Masterminds/goutils/tree/v1.1.1)
+- github.com/Masterminds/semver: [v1.5.0](https://github.com/Masterminds/semver/tree/v1.5.0)
+- github.com/Masterminds/sprig: [v2.22.0+incompatible](https://github.com/Masterminds/sprig/tree/v2.22.0)
+- github.com/elastic/crd-ref-docs: [v0.1.0](https://github.com/elastic/crd-ref-docs/tree/v0.1.0)
+- github.com/envoyproxy/go-control-plane/envoy: [v1.32.4](https://github.com/envoyproxy/go-control-plane/tree/envoy/v1.32.4)
+- github.com/envoyproxy/go-control-plane/ratelimit: [v0.1.0](https://github.com/envoyproxy/go-control-plane/tree/ratelimit/v0.1.0)
+- github.com/go-playground/locales: [v0.13.0](https://github.com/go-playground/locales/tree/v0.13.0)
+- github.com/go-playground/universal-translator: [v0.17.0](https://github.com/go-playground/universal-translator/tree/v0.17.0)
+- github.com/go-playground/validator/v10: [v10.4.1](https://github.com/go-playground/validator/tree/v10.4.1)
+- github.com/goccy/go-yaml: [v1.11.3](https://github.com/goccy/go-yaml/tree/v1.11.3)
+- github.com/huandu/xstrings: [v1.3.3](https://github.com/huandu/xstrings/tree/v1.3.3)
+- github.com/leodido/go-urn: [v1.2.0](https://github.com/leodido/go-urn/tree/v1.2.0)
+- github.com/mitchellh/copystructure: [v1.2.0](https://github.com/mitchellh/copystructure/tree/v1.2.0)
+- github.com/mitchellh/reflectwalk: [v1.0.2](https://github.com/mitchellh/reflectwalk/tree/v1.0.2)
+- go.opentelemetry.io/auto/sdk: v1.1.0
+- go.opentelemetry.io/contrib/detectors/gcp: v1.34.0
+- go.opentelemetry.io/otel/sdk/metric: v1.34.0
+
+### Changed
+- cel.dev/expr: v0.16.0 → v0.19.1
+- cloud.google.com/go/compute/metadata: v0.5.0 → v0.6.0
+- github.com/cncf/xds/go: [024c85f → cff3c89](https://github.com/cncf/xds/compare/024c85f...cff3c89)
+- github.com/envoyproxy/go-control-plane: [v0.13.0 → v0.13.4](https://github.com/envoyproxy/go-control-plane/compare/v0.13.0...v0.13.4)
+- github.com/envoyproxy/protoc-gen-validate: [v1.1.0 → v1.2.1](https://github.com/envoyproxy/protoc-gen-validate/compare/v1.1.0...v1.2.1)
+- github.com/evanphx/json-patch/v5: [v5.9.0 → v5.9.11](https://github.com/evanphx/json-patch/compare/v5.9.0...v5.9.11)
+- github.com/golang/glog: [v1.2.2 → v1.2.4](https://github.com/golang/glog/compare/v1.2.2...v1.2.4)
+- github.com/google/btree: [v1.0.1 → v1.1.3](https://github.com/google/btree/compare/v1.0.1...v1.1.3)
+- github.com/google/cel-go: [v0.20.1 → v0.22.0](https://github.com/google/cel-go/compare/v0.20.1...v0.22.0)
+- github.com/google/pprof: [4bfdf5a → d1b30fe](https://github.com/google/pprof/compare/4bfdf5a...d1b30fe)
+- github.com/gregjones/httpcache: [9cad4c3 → 901d907](https://github.com/gregjones/httpcache/compare/9cad4c3...901d907)
+- github.com/imdario/mergo: [v0.3.16 → v0.3.11](https://github.com/imdario/mergo/compare/v0.3.16...v0.3.11)
+- github.com/jessevdk/go-flags: [v1.4.0 → v1.6.1](https://github.com/jessevdk/go-flags/compare/v1.4.0...v1.6.1)
+- github.com/jonboulle/clockwork: [v0.2.2 → v0.4.0](https://github.com/jonboulle/clockwork/compare/v0.2.2...v0.4.0)
+- github.com/miekg/dns: [v1.1.62 → v1.1.64](https://github.com/miekg/dns/compare/v1.1.62...v1.1.64)
+- github.com/moby/spdystream: [v0.4.0 → v0.5.0](https://github.com/moby/spdystream/compare/v0.4.0...v0.5.0)
+- github.com/onsi/ginkgo/v2: [v2.19.0 → v2.22.0](https://github.com/onsi/ginkgo/compare/v2.19.0...v2.22.0)
+- github.com/onsi/gomega: [v1.34.2 → v1.36.2](https://github.com/onsi/gomega/compare/v1.34.2...v1.36.2)
+- github.com/spf13/pflag: [v1.0.5 → v1.0.6](https://github.com/spf13/pflag/compare/v1.0.5...v1.0.6)
+- github.com/stoewer/go-strcase: [v1.2.0 → v1.3.0](https://github.com/stoewer/go-strcase/compare/v1.2.0...v1.3.0)
+- github.com/xiang90/probing: [43a291a → a49e3df](https://github.com/xiang90/probing/compare/43a291a...a49e3df)
+- go.etcd.io/bbolt: v1.3.9 → v1.3.11
+- go.etcd.io/etcd/api/v3: v3.5.14 → v3.5.16
+- go.etcd.io/etcd/client/pkg/v3: v3.5.14 → v3.5.16
+- go.etcd.io/etcd/client/v2: v2.305.13 → v2.305.16
+- go.etcd.io/etcd/client/v3: v3.5.14 → v3.5.16
+- go.etcd.io/etcd/pkg/v3: v3.5.13 → v3.5.16
+- go.etcd.io/etcd/raft/v3: v3.5.13 → v3.5.16
+- go.etcd.io/etcd/server/v3: v3.5.13 → v3.5.16
+- go.opentelemetry.io/otel/metric: v1.28.0 → v1.34.0
+- go.opentelemetry.io/otel/sdk: v1.28.0 → v1.34.0
+- go.opentelemetry.io/otel/trace: v1.28.0 → v1.34.0
+- go.opentelemetry.io/otel: v1.28.0 → v1.34.0
+- go.uber.org/zap: v1.26.0 → v1.27.0
+- golang.org/x/crypto: v0.29.0 → v0.33.0
+- golang.org/x/exp: fe59bbe → 8a7402a
+- golang.org/x/mod: v0.21.0 → v0.23.0
+- golang.org/x/net: v0.31.0 → v0.35.0
+- golang.org/x/oauth2: v0.22.0 → v0.25.0
+- golang.org/x/sync: v0.9.0 → v0.11.0
+- golang.org/x/sys: v0.27.0 → v0.30.0
+- golang.org/x/term: v0.26.0 → v0.29.0
+- golang.org/x/text: v0.20.0 → v0.22.0
+- golang.org/x/time: v0.5.0 → v0.7.0
+- golang.org/x/tools: v0.26.0 → v0.30.0
+- golang.org/x/xerrors: 04be3eb → 104605a
+- google.golang.org/genproto: b8732ec → ef43131
+- google.golang.org/genproto/googleapis/api: ddb44da → 5f5ef82
+- google.golang.org/genproto/googleapis/rpc: ddb44da → 1a7da9e
+- google.golang.org/grpc: v1.67.1 → v1.71.0
+- google.golang.org/protobuf: v1.35.2 → v1.36.5
+- k8s.io/api: v0.31.3 → v0.32.2
+- k8s.io/apiextensions-apiserver: v0.31.3 → v0.32.2
+- k8s.io/apimachinery: v0.31.3 → v0.32.2
+- k8s.io/apiserver: v0.31.3 → v0.32.2
+- k8s.io/client-go: v0.31.3 → v0.32.2
+- k8s.io/code-generator: v0.31.3 → v0.32.2
+- k8s.io/component-base: v0.31.3 → v0.32.2
+- k8s.io/gengo/v2: 51d4e06 → 2b36238
+- k8s.io/kms: v0.31.3 → v0.32.2
+  k8s.io/kube-openapi: 8948a66 → 32ad38e
+- k8s.io/utils: 18e509b → 3ea5e8c
+- sigs.k8s.io/apiserver-network-proxy/konnectivity-client: v0.30.3 → v0.31.0
+- sigs.k8s.io/controller-runtime: v0.19.1 → v0.20.3
+- sigs.k8s.io/controller-tools: v0.16.5 → v0.17.2
+- sigs.k8s.io/json: bc3834c → 9aa6b5e
+- sigs.k8s.io/structured-merge-diff/v4: v4.4.3 → v4.5.0
+
+### Removed
+- github.com/ahmetb/gen-crd-api-reference-docs: [v0.3.0](https://github.com/ahmetb/gen-crd-api-reference-docs/tree/v0.3.0)
+- github.com/census-instrumentation/opencensus-proto: [v0.4.1](https://github.com/census-instrumentation/opencensus-proto/tree/v0.4.1)
+- github.com/golang/groupcache: [41bb18b](https://github.com/golang/groupcache/tree/41bb18b)
+- github.com/kr/pty: [v1.1.1](https://github.com/kr/pty/tree/v1.1.1)
+- github.com/shurcooL/sanitized_anchor_name: [v1.0.0](https://github.com/shurcooL/sanitized_anchor_name/tree/v1.0.0)
+- k8s.io/gengo: 9cce18d
+- k8s.io/klog: v0.2.0
diff --git a/CHANGELOG/1.3-TEAM.md b/CHANGELOG/1.3-TEAM.md
new file mode 100644
index 00000000..8306cdd2
--- /dev/null
+++ b/CHANGELOG/1.3-TEAM.md
@@ -0,0 +1,9 @@
+# v1.3 Release Team
+
+| Enhancement | Leads |
+| - | - |
+| Percentage-Based Request Mirroring | @LiorLieberman, @jakebennert |
+| CORS (Cross Origin Resource Sharing) Filter | @liangli, @EyalPazz, @robscott |
+| XListenerSets (Standard Mechanism to Merge Gateways)| @dprotaso |
+| XBackendTrafficPolicy (Retry Budgets) | @ericdbishop |
+
diff --git a/Makefile b/Makefile
index 4bde1cc5..8328ea21 100644
--- a/Makefile
+++ b/Makefile
@@ -91,7 +91,7 @@ test.crds-validation:
 .PHONY: conformance
 conformance:
 	go test ${GO_TEST_FLAGS} -v ./conformance -run TestConformance -args ${CONFORMANCE_FLAGS}
-	
+
 # Install CRD's and example resources to a preexisting cluster.
 .PHONY: install
 install: crd example
@@ -159,14 +159,33 @@ image.multiarch.setup: image.buildx.verify
 release-staging: image.multiarch.setup
 	hack/build-and-push.sh
 
-# Generate a virtualenv install, which is useful for hacking on the
-# docs since it installs mkdocs and all the right dependencies.
-#
-# On Ubuntu, this requires the python3-venv package.
-virtualenv: .venv
-.venv: requirements.txt
-	@echo Creating a virtualenv in $@"... "
-	@python3 -m venv $@ || (rm -rf $@ && exit 1)
-	@echo Installing packages in $@"... "
-	@$@/bin/python3 -m pip install -q -r requirements.txt || (rm -rf $@ && exit 1)
-	@echo To enter the virtualenv type \"source $@/bin/activate\",  to exit type \"deactivate\"
+# Docs
+
+.PHONY: build-docs
+build-docs:
+	docker build --pull -t gaie/mkdocs hack/mkdocs/image
+	docker run --rm -v ${PWD}:/docs gaie/mkdocs build
+
+.PHONY: build-docs-netlify
+build-docs-netlify:
+	hack/mkdocs/generate.sh
+	pip install -r hack/mkdocs/image/requirements.txt
+	python -m mkdocs build
+
+.PHONY: live-docs
+live-docs:
+	docker build -t gw/mkdocs hack/mkdocs/image
+	docker run --rm -it -p 3000:3000 -v ${PWD}:/docs gw/mkdocs
+
+.PHONY: api-ref-docs
+api-ref-docs:
+	crd-ref-docs \
+		--source-path=${PWD}/apis \
+		--config=crd-ref-docs.yaml \
+		--renderer=markdown \
+		--output-path=${PWD}/site-src/reference/spec.md
+	crd-ref-docs \
+		--source-path=${PWD}/apisx \
+		--config=crd-ref-docs.yaml \
+		--renderer=markdown \
+		--output-path=${PWD}/site-src/reference/specx.md
diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES
index 8bdeafe2..207dd1d7 100644
--- a/OWNERS_ALIASES
+++ b/OWNERS_ALIASES
@@ -26,15 +26,14 @@ aliases:
     - howardjohn
     - mikemorris
     - kflynn
+    - LiorLieberman
 
   emeritus-gateway-api-mesh-leads:
     - keithmattix
 
   gateway-api-conformance-reviewers:
     - candita
-    - michaelbeaumont
     - sunjayBhatia
-    - xunzhuo
 
   gateway-api-conformance-approvers:
     - arkodg
diff --git a/README.md b/README.md
index 7f4151a3..e8ebd1ad 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ the specification and Custom Resource Definitions (CRDs).
 ## Status
 
 The latest supported version is `v1` as released by
-the [v1.2.1 release][gh_release] of this project.
+the [v1.3.0 release][gh_release] of this project.
 
 This version of the API is has GA level support for the following resources:
 
@@ -71,7 +71,7 @@ Participation in the Kubernetes community is governed by the
 [spec]: https://gateway-api.sigs.k8s.io/reference/spec/
 [concepts]: https://gateway-api.sigs.k8s.io/concepts/api-overview
 [security-model]: https://gateway-api.sigs.k8s.io/concepts/security-model
-[gh_release]: https://github.com/kubernetes-sigs/gateway-api/releases/tag/v1.2.1
+[gh_release]: https://github.com/kubernetes-sigs/gateway-api/releases/tag/v1.3.0
 [godoc]: https://pkg.go.dev/sigs.k8s.io/gateway-api
 [conformance-docs]: https://gateway-api.sigs.k8s.io/concepts/conformance/
 [reports-readme]: ./conformance/reports/README.md
diff --git a/RELEASE.md b/RELEASE.md
index d7275836..fc8053cd 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -1,5 +1,8 @@
 # Release Process
 
+This details how releases of Gateway API are delivered. This process is
+exercised by a [Release Manager](/RELEASE_MANAGEMENT.md).
+
 ## Overview
 
 The Gateway API project is an API project that has the following two components:
diff --git a/RELEASE_MANAGEMENT.md b/RELEASE_MANAGEMENT.md
new file mode 100644
index 00000000..94e2c724
--- /dev/null
+++ b/RELEASE_MANAGEMENT.md
@@ -0,0 +1,115 @@
+# Release Management
+
+Major and minor releases for Gateway API are managed by a "Release Manager".
+The responsibilities of the release manager include:
+
+* Creating and managing a GitHub Milestone for the release.
+* Creating and managing a GitHub Project board for the release.
+* Creating and managing a GitHub Discussion Boards announcement for the release.
+  * This includes discussions to handle scoping for each release _channel_ as well.
+* Working through the [Release Cycle](#release-phases) for the release.
+
+This management process ultimately results in the manager of the release
+shipping the release as per the [Release Process]. We will go into more detail
+about this in the sections that follow.
+
+> **Note**: Patch releases need someone assigned to them as well, however they
+> just happen organically, and as soon as possible. We currently we don't bother
+> sending patch releases through this entire process.
+
+[Release Cycle]:https://gateway-api.sigs.k8s.io/contributing/release-cycle/
+[Release Process]:/RELEASE.md
+
+## Assigning a Release Manager
+
+The [maintainers] will find and assign a release managers for upcoming
+releases. A release manager can be a community member on the contributor ladder
+who volunteers (at the discretion of the maintainers), or otherwise the
+responsibility falls back to the maintainers.
+
+[maintainers]:/OWNERS_ALIASES
+
+## GitHub Milestone
+
+Once a manager is assigned for the release, they must create a [GitHub
+Milestone] for the release, where the name of the milestone is the eventual tag
+that will be cut (e.g., `v1.0.0`).
+
+The release manager must mark themselves as the manager for the release at the
+top of the milestone's description, and add any description to the milestone
+that communicates to the community any major themes in the release, and
+important notes:
+
+```console
+release-manager: @<name>
+
+This milestone introduces the following new experimental features:
+
+* <experimental-feature-1>
+* <experimental-feature-2>
+* <experimental-feature-3>
+
+This milestone graduates the following features:
+
+* <GA-feature-1>
+* <GA-feature-2>
+
+feature-freeze: <mm-dd-yy>
+```
+
+> **Note**: The GitHub Milestone may change over time, as things are added or
+> removed.
+
+The release manager must assign a due date for the milestone, to communicate to
+the community the intended date to ship the release.
+
+> **Note**: The due date may change as well, but it's valuable to try and
+> communicate dates in this way as many implementations and community members
+> plan their releases on ours. We will make every effort to avoid changes to the
+> release date.
+
+[GitHub Milestone]:https://github.com/kubernetes-sigs/gateway-api/milestones
+
+## GitHub Project Board
+
+The release manager must create a [project board] for the release, which will
+be used to help track the work in the [milestone](#github-milestone) over time
+to refine and analyze progress as the release is ongoing. The columns for this
+board should generally align with the [Release Cycle].
+
+> **Note**: Changes to this board should be shared via updates on the community
+> syncs as well.
+
+[project board]:https://github.com/kubernetes-sigs/gateway-api/projects
+[Release Cycle]:https://gateway-api.sigs.k8s.io/contributing/release-cycle/
+
+## Release Cycle
+
+The release manager is responsible for tracking and managing the release
+through several phases, ultimately resulting in shipping the release. That
+cycle is outlined in the [Release Cycle] documentation and should be followed
+according to that.
+
+The release manager is responsible for communicating with the community and
+seeking volunteers for features to be included in the release, and thus the
+release will be considered a **feature release**. If there are few or no
+volunteers the release may simply end being a smaller **maintenance release**.
+
+> **Note**: Updates on the community sync and discussion boards about the
+> release process should be communicated regularly. We recommend bi-weekly
+> unless there's a clear reason to do more, or less.
+
+> **Note**: Communicating whether a release is expected to be a **feature
+> release** or a **maintenance release** is largely done via the [Milestone].
+> However, the final GitHub release should also make note of this in the
+> release description.
+
+Release candidates--and the eventual final release--must utilize the [Release
+Process](/RELEASE.md) for delivery.
+
+As the release nears completion, the release-manager should proactively reach
+out to implementations to get them ready to send conformance reports for the
+final release when it is cut.
+
+[Release Cycle]:https://gateway-api.sigs.k8s.io/contributing/release-cycle/
+[Milestone]:#github-milestone
diff --git a/apis/v1/gateway_types.go b/apis/v1/gateway_types.go
index e2cf5967..f54e5d10 100644
--- a/apis/v1/gateway_types.go
+++ b/apis/v1/gateway_types.go
@@ -264,7 +264,7 @@ type GatewaySpec struct {
 	// +kubebuilder:validation:MaxItems=16
 	// +kubebuilder:validation:XValidation:message="IPAddress values must be unique",rule="self.all(a1, a1.type == 'IPAddress' ? self.exists_one(a2, a2.type == a1.type && a2.value == a1.value) : true )"
 	// +kubebuilder:validation:XValidation:message="Hostname values must be unique",rule="self.all(a1, a1.type == 'Hostname' ? self.exists_one(a2, a2.type == a1.type && a2.value == a1.value) : true )"
-	Addresses []GatewayAddress `json:"addresses,omitempty"`
+	Addresses []GatewaySpecAddress `json:"addresses,omitempty"`
 
 	// Infrastructure defines infrastructure level attributes about this Gateway instance.
 	//
@@ -315,6 +315,7 @@ type ListenerNamespaces struct {
 	//
 	// +optional
 	// +kubebuilder:default=None
+	// +kubebuilder:validation:Enum=All;Selector;Same;None
 	From *FromNamespaces `json:"from,omitempty"`
 
 	// Selector must be specified when From is set to "Selector". In that case,
@@ -669,8 +670,6 @@ type AllowedRoutes struct {
 
 // FromNamespaces specifies namespace from which Routes/ListenerSets may be attached to a
 // Gateway.
-//
-// +kubebuilder:validation:Enum=All;Selector;Same;None
 type FromNamespaces string
 
 const (
@@ -700,6 +699,7 @@ type RouteNamespaces struct {
 	//
 	// +optional
 	// +kubebuilder:default=Same
+	// +kubebuilder:validation:Enum=All;Selector;Same
 	From *FromNamespaces `json:"from,omitempty"`
 
 	// Selector must be specified when From is set to "Selector". In that case,
@@ -724,24 +724,27 @@ type RouteGroupKind struct {
 	Kind Kind `json:"kind"`
 }
 
-// GatewayAddress describes an address that can be bound to a Gateway.
+// GatewaySpecAddress describes an address that can be bound to a Gateway.
 //
 // +kubebuilder:validation:XValidation:message="Hostname value must only contain valid characters (matching ^(\\*\\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$)",rule="self.type == 'Hostname' ? self.value.matches(r\"\"\"^(\\*\\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$\"\"\"): true"
-type GatewayAddress struct {
+type GatewaySpecAddress struct {
 	// Type of the address.
 	//
 	// +optional
 	// +kubebuilder:default=IPAddress
 	Type *AddressType `json:"type,omitempty"`
 
-	// Value of the address. The validity of the values will depend
-	// on the type and support by the controller.
+	// When a value is unspecified, an implementation SHOULD automatically
+	// assign an address matching the requested type if possible.
+	//
+	// If an implementation does not support an empty value, they MUST set the
+	// "Programmed" condition in status to False with a reason of "AddressNotAssigned".
 	//
 	// Examples: `1.2.3.4`, `128::1`, `my-ip-address`.
 	//
-	// +kubebuilder:validation:MinLength=1
+	// +optional
 	// +kubebuilder:validation:MaxLength=253
-	Value string `json:"value"`
+	Value string `json:"value,omitempty"`
 }
 
 // GatewayStatusAddress describes a network address that is bound to a Gateway.
@@ -1059,6 +1062,37 @@ const (
 	GatewayReasonListenersNotReady GatewayConditionReason = "ListenersNotReady"
 )
 
+const (
+	// AttachedListenerSets is a condition that is true when the Gateway has
+	// at least one ListenerSet attached to it.
+	//
+	// Possible reasons for this condition to be True are:
+	//
+	// * "ListenerSetsAttached"
+	//
+	// Possible reasons for this condition to be False are:
+	//
+	// * "NoListenerSetsAttached"
+	// * "ListenerSetsNotAllowed"
+	//
+	// Controllers may raise this condition with other reasons,
+	// but should prefer to use the reasons listed above to improve
+	// interoperability.
+	GatewayConditionAttachedListenerSets GatewayConditionType = "AttachedListenerSets"
+
+	// This reason is used with the "AttachedListenerSets" condition when the
+	// Gateway has at least one ListenerSet attached to it.
+	GatewayReasonListenerSetsAttached GatewayConditionReason = "ListenerSetsAttached"
+
+	// This reason is used with the "AttachedListenerSets" condition when the
+	// Gateway has no ListenerSets attached to it.
+	GatewayReasonNoListenerSetsAttached GatewayConditionReason = "NoListenerSetsAttached"
+
+	// This reason is used with the "AttachedListenerSets" condition when the
+	// Gateway has ListenerSets attached to it, but the ListenerSets are not allowed.
+	GatewayReasonListenerSetsNotAllowed GatewayConditionReason = "ListenerSetsNotAllowed"
+)
+
 // ListenerStatus is the status associated with a Listener.
 type ListenerStatus struct {
 	// Name is the name of the Listener that this status corresponds to.
diff --git a/apis/v1/grpcroute_types.go b/apis/v1/grpcroute_types.go
index 43615a01..c6eeb0f3 100644
--- a/apis/v1/grpcroute_types.go
+++ b/apis/v1/grpcroute_types.go
@@ -156,7 +156,6 @@ type GRPCRouteRule struct {
 	//
 	// Support: Extended
 	// +optional
-	// <gateway:experimental>
 	Name *SectionName `json:"name,omitempty"`
 
 	// Matches define conditions used for matching the rule against incoming
@@ -210,7 +209,7 @@ type GRPCRouteRule struct {
 	// the above criteria.
 	//
 	// +optional
-	// +kubebuilder:validation:MaxItems=8
+	// +kubebuilder:validation:MaxItems=64
 	Matches []GRPCRouteMatch `json:"matches,omitempty"`
 
 	// Filters define the filters that are applied to requests that match
diff --git a/apis/v1/httproute_types.go b/apis/v1/httproute_types.go
index a8ee6ba1..f0aa5505 100644
--- a/apis/v1/httproute_types.go
+++ b/apis/v1/httproute_types.go
@@ -138,7 +138,6 @@ type HTTPRouteRule struct {
 	//
 	// Support: Extended
 	// +optional
-	// <gateway:experimental>
 	Name *SectionName `json:"name,omitempty"`
 
 	// Matches define conditions used for matching the rule against incoming
@@ -830,6 +829,7 @@ type HTTPRouteFilter struct {
 	//
 	// +unionDiscriminator
 	// +kubebuilder:validation:Enum=RequestHeaderModifier;ResponseHeaderModifier;RequestMirror;RequestRedirect;URLRewrite;ExtensionRef
+	// <gateway:experimental:validation:Enum=RequestHeaderModifier;ResponseHeaderModifier;RequestMirror;RequestRedirect;URLRewrite;ExtensionRef;CORS>
 	Type HTTPRouteFilterType `json:"type"`
 
 	// RequestHeaderModifier defines a schema for a filter that modifies request
@@ -987,11 +987,11 @@ type HTTPHeader struct {
 }
 
 // HTTPHeaderFilter defines a filter that modifies the headers of an HTTP
-// request or response. Only one action for a given header name is permitted.
-// Filters specifying multiple actions of the same or different type for any one
-// header name are invalid and will be rejected by CRD validation.
-// Configuration to set or add multiple values for a header must use RFC 7230
-// header value formatting, separating each value with a comma.
+// request or response. Only one action for a given header name is
+// permitted. Filters specifying multiple actions of the same or different
+// type for any one header name are invalid. Configuration to set or add
+// multiple values for a header must use RFC 7230 header value formatting,
+// separating each value with a comma.
 type HTTPHeaderFilter struct {
 	// Set overwrites the request with the given header (name, value)
 	// before the action.
@@ -1416,6 +1416,7 @@ type HTTPCORSFilter struct {
 	//
 	// +listType=set
 	// +kubebuilder:validation:MaxItems=9
+	// +kubebuilder:validation:XValidation:message="AllowMethods cannot contain '*' alongside other methods",rule="!('*' in self && self.size() > 1)"
 	AllowMethods []HTTPMethodWithWildcard `json:"allowMethods,omitempty"`
 
 	// AllowHeaders indicates which HTTP request headers are supported for
diff --git a/apis/v1/zz_generated.deepcopy.go b/apis/v1/zz_generated.deepcopy.go
index f0c7e1f8..0f32a067 100644
--- a/apis/v1/zz_generated.deepcopy.go
+++ b/apis/v1/zz_generated.deepcopy.go
@@ -523,26 +523,6 @@ func (in *Gateway) DeepCopyObject() runtime.Object {
 	return nil
 }
 
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *GatewayAddress) DeepCopyInto(out *GatewayAddress) {
-	*out = *in
-	if in.Type != nil {
-		in, out := &in.Type, &out.Type
-		*out = new(AddressType)
-		**out = **in
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GatewayAddress.
-func (in *GatewayAddress) DeepCopy() *GatewayAddress {
-	if in == nil {
-		return nil
-	}
-	out := new(GatewayAddress)
-	in.DeepCopyInto(out)
-	return out
-}
-
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *GatewayBackendTLS) DeepCopyInto(out *GatewayBackendTLS) {
 	*out = *in
@@ -752,7 +732,7 @@ func (in *GatewaySpec) DeepCopyInto(out *GatewaySpec) {
 	}
 	if in.Addresses != nil {
 		in, out := &in.Addresses, &out.Addresses
-		*out = make([]GatewayAddress, len(*in))
+		*out = make([]GatewaySpecAddress, len(*in))
 		for i := range *in {
 			(*in)[i].DeepCopyInto(&(*out)[i])
 		}
@@ -784,6 +764,26 @@ func (in *GatewaySpec) DeepCopy() *GatewaySpec {
 	return out
 }
 
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *GatewaySpecAddress) DeepCopyInto(out *GatewaySpecAddress) {
+	*out = *in
+	if in.Type != nil {
+		in, out := &in.Type, &out.Type
+		*out = new(AddressType)
+		**out = **in
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GatewaySpecAddress.
+func (in *GatewaySpecAddress) DeepCopy() *GatewaySpecAddress {
+	if in == nil {
+		return nil
+	}
+	out := new(GatewaySpecAddress)
+	in.DeepCopyInto(out)
+	return out
+}
+
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *GatewayStatus) DeepCopyInto(out *GatewayStatus) {
 	*out = *in
diff --git a/apis/v1/zz_generated.register.go b/apis/v1/zz_generated.register.go
index 9c8db216..115de0a1 100644
--- a/apis/v1/zz_generated.register.go
+++ b/apis/v1/zz_generated.register.go
@@ -22,16 +22,16 @@ limitations under the License.
 package v1
 
 import (
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/runtime/schema"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	runtime "k8s.io/apimachinery/pkg/runtime"
+	schema "k8s.io/apimachinery/pkg/runtime/schema"
 )
 
 // GroupName specifies the group name used to register the objects.
 const GroupName = "gateway.networking.k8s.io"
 
 // GroupVersion specifies the group and the version used to register the objects.
-var GroupVersion = v1.GroupVersion{Group: GroupName, Version: "v1"}
+var GroupVersion = metav1.GroupVersion{Group: GroupName, Version: "v1"}
 
 // SchemeGroupVersion is group version used to register these objects
 // Deprecated: use GroupVersion instead.
@@ -71,6 +71,6 @@ func addKnownTypes(scheme *runtime.Scheme) error {
 		&HTTPRouteList{},
 	)
 	// AddToGroupVersion allows the serialization of client types like ListOptions.
-	v1.AddToGroupVersion(scheme, SchemeGroupVersion)
+	metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
 	return nil
 }
diff --git a/apis/v1alpha2/backendlbpolicy_types.go b/apis/v1alpha2/backendlbpolicy_types.go
deleted file mode 100644
index 83cd69a0..00000000
--- a/apis/v1alpha2/backendlbpolicy_types.go
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-Copyright 2024 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package v1alpha2
-
-import (
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// +genclient
-// +kubebuilder:object:root=true
-// +kubebuilder:subresource:status
-// +kubebuilder:storageversion
-// +kubebuilder:resource:categories=gateway-api,shortName=blbpolicy
-// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`
-//
-// BackendLBPolicy is a Direct Attached Policy.
-// +kubebuilder:metadata:labels="gateway.networking.k8s.io/policy=Direct"
-
-// BackendLBPolicy provides a way to define load balancing rules
-// for a backend.
-type BackendLBPolicy struct {
-	metav1.TypeMeta   `json:",inline"`
-	metav1.ObjectMeta `json:"metadata,omitempty"`
-
-	// Spec defines the desired state of BackendLBPolicy.
-	Spec BackendLBPolicySpec `json:"spec"`
-
-	// Status defines the current state of BackendLBPolicy.
-	Status PolicyStatus `json:"status,omitempty"`
-}
-
-// +kubebuilder:object:root=true
-// BackendLBPolicyList contains a list of BackendLBPolicies
-type BackendLBPolicyList struct {
-	metav1.TypeMeta `json:",inline"`
-	metav1.ListMeta `json:"metadata,omitempty"`
-	Items           []BackendLBPolicy `json:"items"`
-}
-
-// BackendLBPolicySpec defines the desired state of
-// BackendLBPolicy.
-// Note: there is no Override or Default policy configuration.
-type BackendLBPolicySpec struct {
-	// TargetRef identifies an API object to apply policy to.
-	// Currently, Backends (i.e. Service, ServiceImport, or any
-	// implementation-specific backendRef) are the only valid API
-	// target references.
-	// +listType=map
-	// +listMapKey=group
-	// +listMapKey=kind
-	// +listMapKey=name
-	// +kubebuilder:validation:MinItems=1
-	// +kubebuilder:validation:MaxItems=16
-	TargetRefs []LocalPolicyTargetReference `json:"targetRefs"`
-
-	// SessionPersistence defines and configures session persistence
-	// for the backend.
-	//
-	// Support: Extended
-	//
-	// +optional
-	SessionPersistence *SessionPersistence `json:"sessionPersistence,omitempty"`
-}
diff --git a/apis/v1alpha2/zz_generated.deepcopy.go b/apis/v1alpha2/zz_generated.deepcopy.go
index 5306ca13..8b09c2d7 100644
--- a/apis/v1alpha2/zz_generated.deepcopy.go
+++ b/apis/v1alpha2/zz_generated.deepcopy.go
@@ -21,95 +21,10 @@ limitations under the License.
 package v1alpha2
 
 import (
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
-	"sigs.k8s.io/gateway-api/apis/v1"
 )
 
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *BackendLBPolicy) DeepCopyInto(out *BackendLBPolicy) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	in.Spec.DeepCopyInto(&out.Spec)
-	in.Status.DeepCopyInto(&out.Status)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BackendLBPolicy.
-func (in *BackendLBPolicy) DeepCopy() *BackendLBPolicy {
-	if in == nil {
-		return nil
-	}
-	out := new(BackendLBPolicy)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *BackendLBPolicy) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *BackendLBPolicyList) DeepCopyInto(out *BackendLBPolicyList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ListMeta.DeepCopyInto(&out.ListMeta)
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]BackendLBPolicy, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BackendLBPolicyList.
-func (in *BackendLBPolicyList) DeepCopy() *BackendLBPolicyList {
-	if in == nil {
-		return nil
-	}
-	out := new(BackendLBPolicyList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *BackendLBPolicyList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *BackendLBPolicySpec) DeepCopyInto(out *BackendLBPolicySpec) {
-	*out = *in
-	if in.TargetRefs != nil {
-		in, out := &in.TargetRefs, &out.TargetRefs
-		*out = make([]LocalPolicyTargetReference, len(*in))
-		copy(*out, *in)
-	}
-	if in.SessionPersistence != nil {
-		in, out := &in.SessionPersistence, &out.SessionPersistence
-		*out = new(v1.SessionPersistence)
-		(*in).DeepCopyInto(*out)
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BackendLBPolicySpec.
-func (in *BackendLBPolicySpec) DeepCopy() *BackendLBPolicySpec {
-	if in == nil {
-		return nil
-	}
-	out := new(BackendLBPolicySpec)
-	in.DeepCopyInto(out)
-	return out
-}
-
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *GRPCRoute) DeepCopyInto(out *GRPCRoute) {
 	*out = *in
@@ -187,10 +102,10 @@ func (in *LocalPolicyTargetReference) DeepCopy() *LocalPolicyTargetReference {
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *LocalPolicyTargetReferenceWithSectionName) DeepCopyInto(out *LocalPolicyTargetReferenceWithSectionName) {
 	*out = *in
-	out.LocalPolicyTargetReference = in.LocalPolicyTargetReference
+	in.LocalPolicyTargetReference.DeepCopyInto(&out.LocalPolicyTargetReference)
 	if in.SectionName != nil {
 		in, out := &in.SectionName, &out.SectionName
-		*out = new(v1.SectionName)
+		*out = new(SectionName)
 		**out = **in
 	}
 }
@@ -210,7 +125,7 @@ func (in *NamespacedPolicyTargetReference) DeepCopyInto(out *NamespacedPolicyTar
 	*out = *in
 	if in.Namespace != nil {
 		in, out := &in.Namespace, &out.Namespace
-		*out = new(v1.Namespace)
+		*out = new(Namespace)
 		**out = **in
 	}
 }
@@ -231,7 +146,7 @@ func (in *PolicyAncestorStatus) DeepCopyInto(out *PolicyAncestorStatus) {
 	in.AncestorRef.DeepCopyInto(&out.AncestorRef)
 	if in.Conditions != nil {
 		in, out := &in.Conditions, &out.Conditions
-		*out = make([]metav1.Condition, len(*in))
+		*out = make([]v1.Condition, len(*in))
 		for i := range *in {
 			(*in)[i].DeepCopyInto(&(*out)[i])
 		}
@@ -392,12 +307,12 @@ func (in *TCPRouteRule) DeepCopyInto(out *TCPRouteRule) {
 	*out = *in
 	if in.Name != nil {
 		in, out := &in.Name, &out.Name
-		*out = new(v1.SectionName)
+		*out = new(SectionName)
 		**out = **in
 	}
 	if in.BackendRefs != nil {
 		in, out := &in.BackendRefs, &out.BackendRefs
-		*out = make([]v1.BackendRef, len(*in))
+		*out = make([]BackendRef, len(*in))
 		for i := range *in {
 			(*in)[i].DeepCopyInto(&(*out)[i])
 		}
@@ -517,12 +432,12 @@ func (in *TLSRouteRule) DeepCopyInto(out *TLSRouteRule) {
 	*out = *in
 	if in.Name != nil {
 		in, out := &in.Name, &out.Name
-		*out = new(v1.SectionName)
+		*out = new(SectionName)
 		**out = **in
 	}
 	if in.BackendRefs != nil {
 		in, out := &in.BackendRefs, &out.BackendRefs
-		*out = make([]v1.BackendRef, len(*in))
+		*out = make([]BackendRef, len(*in))
 		for i := range *in {
 			(*in)[i].DeepCopyInto(&(*out)[i])
 		}
@@ -545,7 +460,7 @@ func (in *TLSRouteSpec) DeepCopyInto(out *TLSRouteSpec) {
 	in.CommonRouteSpec.DeepCopyInto(&out.CommonRouteSpec)
 	if in.Hostnames != nil {
 		in, out := &in.Hostnames, &out.Hostnames
-		*out = make([]v1.Hostname, len(*in))
+		*out = make([]Hostname, len(*in))
 		copy(*out, *in)
 	}
 	if in.Rules != nil {
@@ -647,12 +562,12 @@ func (in *UDPRouteRule) DeepCopyInto(out *UDPRouteRule) {
 	*out = *in
 	if in.Name != nil {
 		in, out := &in.Name, &out.Name
-		*out = new(v1.SectionName)
+		*out = new(SectionName)
 		**out = **in
 	}
 	if in.BackendRefs != nil {
 		in, out := &in.BackendRefs, &out.BackendRefs
-		*out = make([]v1.BackendRef, len(*in))
+		*out = make([]BackendRef, len(*in))
 		for i := range *in {
 			(*in)[i].DeepCopyInto(&(*out)[i])
 		}
diff --git a/apis/v1alpha2/zz_generated.register.go b/apis/v1alpha2/zz_generated.register.go
index bb133e5d..473b7573 100644
--- a/apis/v1alpha2/zz_generated.register.go
+++ b/apis/v1alpha2/zz_generated.register.go
@@ -23,8 +23,8 @@ package v1alpha2
 
 import (
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/runtime/schema"
+	runtime "k8s.io/apimachinery/pkg/runtime"
+	schema "k8s.io/apimachinery/pkg/runtime/schema"
 )
 
 // GroupName specifies the group name used to register the objects.
@@ -61,8 +61,6 @@ func init() {
 // Adds the list of known types to Scheme.
 func addKnownTypes(scheme *runtime.Scheme) error {
 	scheme.AddKnownTypes(SchemeGroupVersion,
-		&BackendLBPolicy{},
-		&BackendLBPolicyList{},
 		&GRPCRoute{},
 		&GRPCRouteList{},
 		&ReferenceGrant{},
diff --git a/apis/v1alpha3/zz_generated.register.go b/apis/v1alpha3/zz_generated.register.go
index eaa37ed4..d1caca01 100644
--- a/apis/v1alpha3/zz_generated.register.go
+++ b/apis/v1alpha3/zz_generated.register.go
@@ -23,8 +23,8 @@ package v1alpha3
 
 import (
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/runtime/schema"
+	runtime "k8s.io/apimachinery/pkg/runtime"
+	schema "k8s.io/apimachinery/pkg/runtime/schema"
 )
 
 // GroupName specifies the group name used to register the objects.
diff --git a/apis/v1beta1/gateway_types.go b/apis/v1beta1/gateway_types.go
index 2834915c..1998c2ac 100644
--- a/apis/v1beta1/gateway_types.go
+++ b/apis/v1beta1/gateway_types.go
@@ -131,9 +131,9 @@ type RouteNamespaces = v1.RouteNamespaces
 // +k8s:deepcopy-gen=false
 type RouteGroupKind = v1.RouteGroupKind
 
-// GatewayAddress describes an address that can be bound to a Gateway.
+// GatewaySpecAddress describes an address that can be bound to a Gateway.
 // +k8s:deepcopy-gen=false
-type GatewayAddress = v1.GatewayAddress
+type GatewaySpecAddress = v1.GatewaySpecAddress
 
 // GatewayStatus defines the observed state of Gateway.
 // +k8s:deepcopy-gen=false
diff --git a/apis/v1beta1/zz_generated.deepcopy.go b/apis/v1beta1/zz_generated.deepcopy.go
index 5f266543..0b298456 100644
--- a/apis/v1beta1/zz_generated.deepcopy.go
+++ b/apis/v1beta1/zz_generated.deepcopy.go
@@ -22,7 +22,6 @@ package v1beta1
 
 import (
 	runtime "k8s.io/apimachinery/pkg/runtime"
-	"sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@@ -281,7 +280,9 @@ func (in *ReferenceGrantSpec) DeepCopyInto(out *ReferenceGrantSpec) {
 	if in.From != nil {
 		in, out := &in.From, &out.From
 		*out = make([]ReferenceGrantFrom, len(*in))
-		copy(*out, *in)
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
 	}
 	if in.To != nil {
 		in, out := &in.To, &out.To
@@ -307,7 +308,7 @@ func (in *ReferenceGrantTo) DeepCopyInto(out *ReferenceGrantTo) {
 	*out = *in
 	if in.Name != nil {
 		in, out := &in.Name, &out.Name
-		*out = new(v1.ObjectName)
+		*out = new(ObjectName)
 		**out = **in
 	}
 }
diff --git a/apis/v1beta1/zz_generated.register.go b/apis/v1beta1/zz_generated.register.go
index b20c2acc..887689b3 100644
--- a/apis/v1beta1/zz_generated.register.go
+++ b/apis/v1beta1/zz_generated.register.go
@@ -23,8 +23,8 @@ package v1beta1
 
 import (
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/runtime/schema"
+	runtime "k8s.io/apimachinery/pkg/runtime"
+	schema "k8s.io/apimachinery/pkg/runtime/schema"
 )
 
 // GroupName specifies the group name used to register the objects.
diff --git a/apisx/v1alpha1/backendtrafficpolicy_types.go b/apisx/v1alpha1/xbackendtrafficpolicy_types.go
similarity index 81%
rename from apisx/v1alpha1/backendtrafficpolicy_types.go
rename to apisx/v1alpha1/xbackendtrafficpolicy_types.go
index 802decd4..b2dcba69 100644
--- a/apisx/v1alpha1/backendtrafficpolicy_types.go
+++ b/apisx/v1alpha1/xbackendtrafficpolicy_types.go
@@ -24,15 +24,15 @@ import (
 // +kubebuilder:object:root=true
 // +kubebuilder:subresource:status
 // +kubebuilder:storageversion
-// +kubebuilder:resource:categories=gateway-api,shortName=btrafficpolicy
+// +kubebuilder:resource:categories=gateway-api,shortName=xbtrafficpolicy
 // +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`
 //
 // BackendTrafficPolicy is a Direct Attached Policy.
 // +kubebuilder:metadata:labels="gateway.networking.k8s.io/policy=Direct"
 
-// BackendTrafficPolicy defines the configuration for how traffic to a
+// XBackendTrafficPolicy defines the configuration for how traffic to a
 // target backend should be handled.
-type BackendTrafficPolicy struct {
+type XBackendTrafficPolicy struct {
 	// Support: Extended
 	//
 	// +optional
@@ -47,12 +47,12 @@ type BackendTrafficPolicy struct {
 	Status PolicyStatus `json:"status,omitempty"`
 }
 
-// BackendTrafficPolicyList contains a list of BackendTrafficPolicies
+// XBackendTrafficPolicyList contains a list of BackendTrafficPolicies
 // +kubebuilder:object:root=true
-type BackendTrafficPolicyList struct {
+type XBackendTrafficPolicyList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
-	Items           []BackendTrafficPolicy `json:"items"`
+	Items           []XBackendTrafficPolicy `json:"items"`
 }
 
 // BackendTrafficPolicySpec define the desired state of BackendTrafficPolicy
@@ -119,26 +119,11 @@ type BackendTrafficPolicySpec struct {
 
 // RetryConstraint defines the configuration for when to retry a request.
 type RetryConstraint struct {
-	// BudgetPercent defines the maximum percentage of active requests that may
-	// be made up of retries.
-	//
-	// Support: Extended
+	// Budget holds the details of the retry budget configuration.
 	//
 	// +optional
-	// +kubebuilder:default=20
-	// +kubebuilder:validation:Minimum=0
-	// +kubebuilder:validation:Maximum=100
-	BudgetPercent *int `json:"budgetPercent,omitempty"`
-
-	// BudgetInterval defines the duration in which requests will be considered
-	// for calculating the budget for retries.
-	//
-	// Support: Extended
-	//
-	// +optional
-	// +kubebuilder:default="10s"
-	// +kubebuilder:validation:XValidation:message="budgetInterval can not be greater than one hour or less than one second",rule="!(duration(self) < duration('1s') || duration(self) > duration('1h'))"
-	BudgetInterval *Duration `json:"budgetInterval,omitempty"`
+	// +kubebuilder:default={percent: 20, interval: "10s"}
+	Budget *BudgetDetails `json:"budget,omitempty"`
 
 	// MinRetryRate defines the minimum rate of retries that will be allowable
 	// over a specified duration of time.
@@ -157,3 +142,29 @@ type RetryConstraint struct {
 	// +kubebuilder:default={count: 10, interval: "1s"}
 	MinRetryRate *RequestRate `json:"minRetryRate,omitempty"`
 }
+
+// BudgetDetails specifies the details of the budget configuration, like
+// the percentage of requests in the budget, and the interval between
+// checks.
+type BudgetDetails struct {
+	// Percent defines the maximum percentage of active requests that may
+	// be made up of retries.
+	//
+	// Support: Extended
+	//
+	// +optional
+	// +kubebuilder:default=20
+	// +kubebuilder:validation:Minimum=0
+	// +kubebuilder:validation:Maximum=100
+	Percent *int `json:"percent,omitempty"`
+
+	// Interval defines the duration in which requests will be considered
+	// for calculating the budget for retries.
+	//
+	// Support: Extended
+	//
+	// +optional
+	// +kubebuilder:default="10s"
+	// +kubebuilder:validation:XValidation:message="interval can not be greater than one hour or less than one second",rule="!(duration(self) < duration('1s') || duration(self) > duration('1h'))"
+	Interval *Duration `json:"interval,omitempty"`
+}
diff --git a/apisx/v1alpha1/listenerset_types.go b/apisx/v1alpha1/xlistenerset_types.go
similarity index 93%
rename from apisx/v1alpha1/listenerset_types.go
rename to apisx/v1alpha1/xlistenerset_types.go
index a46cc3ab..92cca1b7 100644
--- a/apisx/v1alpha1/listenerset_types.go
+++ b/apisx/v1alpha1/xlistenerset_types.go
@@ -29,9 +29,34 @@ import (
 // +kubebuilder:printcolumn:name="Programmed",type=string,JSONPath=`.status.conditions[?(@.type=="Programmed")].status`
 // +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`
 
-// ListenerSet defines a set of additional listeners
-// to attach to an existing Gateway.
-type ListenerSet struct {
+// XListenerSet defines a set of additional listeners to attach to an existing Gateway.
+// This resource provides a mechanism to merge multiple listeners into a single Gateway.
+//
+// The parent Gateway must explicitly allow ListenerSet attachment through its
+// AllowedListeners configuration. By default, Gateways do not allow ListenerSet
+// attachment.
+//
+// Routes can attach to a ListenerSet by specifying it as a parentRef, and can
+// optionally target specific listeners using the sectionName field.
+//
+// Policy Attachment:
+// - Policies that attach to a ListenerSet apply to all listeners defined in that resource
+// - Policies do not impact listeners in the parent Gateway
+// - Different ListenerSets attached to the same Gateway can have different policies
+// - If an implementation cannot apply a policy to specific listeners, it should reject the policy
+//
+// ReferenceGrant Semantics:
+// - ReferenceGrants applied to a Gateway are not inherited by child ListenerSets
+// - ReferenceGrants applied to a ListenerSet do not grant permission to the parent Gateway's listeners
+// - A ListenerSet can reference secrets/backends in its own namespace without a ReferenceGrant
+//
+// Gateway Integration:
+// - The parent Gateway's status will include an "AttachedListenerSets" condition
+// - This condition will be:
+//   - True: when AllowedListeners is set and at least one child ListenerSet is attached
+//   - False: when AllowedListeners is set but no valid listeners are attached, or when AllowedListeners is not set or false
+//   - Unknown: when no AllowedListeners config is present
+type XListenerSet struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 
@@ -63,10 +88,10 @@ type ListenerSetSpec struct {
 	//
 	// 1. "parent" Gateway
 	// 2. ListenerSet ordered by creation time (oldest first)
-	// 3. ListenerSet ordered alphabetically by “{namespace}/{name}”.
+	// 3. ListenerSet ordered alphabetically by "{namespace}/{name}".
 	//
 	// An implementation MAY reject listeners by setting the ListenerEntryStatus
-	// `Accepted`` condition to False with the Reason `TooManyListeners`
+	// `Accepted` condition to False with the Reason `TooManyListeners`
 	//
 	// If a listener has a conflict, this will be reported in the
 	// Status.ListenerEntryStatus setting the `Conflicted` condition to True.
@@ -127,9 +152,7 @@ type ListenerEntry struct {
 
 	// Port is the network port. Multiple listeners may use the
 	// same port, subject to the Listener compatibility rules.
-	//
-	// +optional
-	Port PortNumber `json:"port,omitempty"`
+	Port PortNumber `json:"port"`
 
 	// Protocol specifies the network protocol this listener expects to receive.
 	Protocol ProtocolType `json:"protocol"`
@@ -582,8 +605,8 @@ const (
 )
 
 // +kubebuilder:object:root=true
-type ListenerSetList struct {
+type XListenerSetList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
-	Items           []ListenerSet `json:"items"`
+	Items           []XListenerSet `json:"items"`
 }
diff --git a/apisx/v1alpha1/zz_generated.deepcopy.go b/apisx/v1alpha1/zz_generated.deepcopy.go
index 985d4b3a..bd534869 100644
--- a/apisx/v1alpha1/zz_generated.deepcopy.go
+++ b/apisx/v1alpha1/zz_generated.deepcopy.go
@@ -21,97 +21,63 @@ limitations under the License.
 package v1alpha1
 
 import (
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
-	"sigs.k8s.io/gateway-api/apis/v1"
-	"sigs.k8s.io/gateway-api/apis/v1alpha2"
 )
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *BackendTrafficPolicy) DeepCopyInto(out *BackendTrafficPolicy) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	in.Spec.DeepCopyInto(&out.Spec)
-	in.Status.DeepCopyInto(&out.Status)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BackendTrafficPolicy.
-func (in *BackendTrafficPolicy) DeepCopy() *BackendTrafficPolicy {
-	if in == nil {
-		return nil
-	}
-	out := new(BackendTrafficPolicy)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *BackendTrafficPolicy) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *BackendTrafficPolicyList) DeepCopyInto(out *BackendTrafficPolicyList) {
+func (in *BackendTrafficPolicySpec) DeepCopyInto(out *BackendTrafficPolicySpec) {
 	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ListMeta.DeepCopyInto(&out.ListMeta)
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]BackendTrafficPolicy, len(*in))
+	if in.TargetRefs != nil {
+		in, out := &in.TargetRefs, &out.TargetRefs
+		*out = make([]LocalPolicyTargetReference, len(*in))
 		for i := range *in {
 			(*in)[i].DeepCopyInto(&(*out)[i])
 		}
 	}
+	if in.RetryConstraint != nil {
+		in, out := &in.RetryConstraint, &out.RetryConstraint
+		*out = new(RetryConstraint)
+		(*in).DeepCopyInto(*out)
+	}
+	if in.SessionPersistence != nil {
+		in, out := &in.SessionPersistence, &out.SessionPersistence
+		*out = new(SessionPersistence)
+		(*in).DeepCopyInto(*out)
+	}
 }
 
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BackendTrafficPolicyList.
-func (in *BackendTrafficPolicyList) DeepCopy() *BackendTrafficPolicyList {
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BackendTrafficPolicySpec.
+func (in *BackendTrafficPolicySpec) DeepCopy() *BackendTrafficPolicySpec {
 	if in == nil {
 		return nil
 	}
-	out := new(BackendTrafficPolicyList)
+	out := new(BackendTrafficPolicySpec)
 	in.DeepCopyInto(out)
 	return out
 }
 
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *BackendTrafficPolicyList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *BackendTrafficPolicySpec) DeepCopyInto(out *BackendTrafficPolicySpec) {
+func (in *BudgetDetails) DeepCopyInto(out *BudgetDetails) {
 	*out = *in
-	if in.TargetRefs != nil {
-		in, out := &in.TargetRefs, &out.TargetRefs
-		*out = make([]v1alpha2.LocalPolicyTargetReference, len(*in))
-		copy(*out, *in)
-	}
-	if in.RetryConstraint != nil {
-		in, out := &in.RetryConstraint, &out.RetryConstraint
-		*out = new(RetryConstraint)
-		(*in).DeepCopyInto(*out)
+	if in.Percent != nil {
+		in, out := &in.Percent, &out.Percent
+		*out = new(int)
+		**out = **in
 	}
-	if in.SessionPersistence != nil {
-		in, out := &in.SessionPersistence, &out.SessionPersistence
-		*out = new(v1.SessionPersistence)
-		(*in).DeepCopyInto(*out)
+	if in.Interval != nil {
+		in, out := &in.Interval, &out.Interval
+		*out = new(Duration)
+		**out = **in
 	}
 }
 
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BackendTrafficPolicySpec.
-func (in *BackendTrafficPolicySpec) DeepCopy() *BackendTrafficPolicySpec {
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BudgetDetails.
+func (in *BudgetDetails) DeepCopy() *BudgetDetails {
 	if in == nil {
 		return nil
 	}
-	out := new(BackendTrafficPolicySpec)
+	out := new(BudgetDetails)
 	in.DeepCopyInto(out)
 	return out
 }
@@ -121,17 +87,17 @@ func (in *ListenerEntry) DeepCopyInto(out *ListenerEntry) {
 	*out = *in
 	if in.Hostname != nil {
 		in, out := &in.Hostname, &out.Hostname
-		*out = new(v1.Hostname)
+		*out = new(Hostname)
 		**out = **in
 	}
 	if in.TLS != nil {
 		in, out := &in.TLS, &out.TLS
-		*out = new(v1.GatewayTLSConfig)
+		*out = new(GatewayTLSConfig)
 		(*in).DeepCopyInto(*out)
 	}
 	if in.AllowedRoutes != nil {
 		in, out := &in.AllowedRoutes, &out.AllowedRoutes
-		*out = new(v1.AllowedRoutes)
+		*out = new(AllowedRoutes)
 		(*in).DeepCopyInto(*out)
 	}
 }
@@ -151,14 +117,14 @@ func (in *ListenerEntryStatus) DeepCopyInto(out *ListenerEntryStatus) {
 	*out = *in
 	if in.SupportedKinds != nil {
 		in, out := &in.SupportedKinds, &out.SupportedKinds
-		*out = make([]v1.RouteGroupKind, len(*in))
+		*out = make([]RouteGroupKind, len(*in))
 		for i := range *in {
 			(*in)[i].DeepCopyInto(&(*out)[i])
 		}
 	}
 	if in.Conditions != nil {
 		in, out := &in.Conditions, &out.Conditions
-		*out = make([]metav1.Condition, len(*in))
+		*out = make([]v1.Condition, len(*in))
 		for i := range *in {
 			(*in)[i].DeepCopyInto(&(*out)[i])
 		}
@@ -175,65 +141,6 @@ func (in *ListenerEntryStatus) DeepCopy() *ListenerEntryStatus {
 	return out
 }
 
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ListenerSet) DeepCopyInto(out *ListenerSet) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	in.Spec.DeepCopyInto(&out.Spec)
-	in.Status.DeepCopyInto(&out.Status)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ListenerSet.
-func (in *ListenerSet) DeepCopy() *ListenerSet {
-	if in == nil {
-		return nil
-	}
-	out := new(ListenerSet)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *ListenerSet) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ListenerSetList) DeepCopyInto(out *ListenerSetList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ListMeta.DeepCopyInto(&out.ListMeta)
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]ListenerSet, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ListenerSetList.
-func (in *ListenerSetList) DeepCopy() *ListenerSetList {
-	if in == nil {
-		return nil
-	}
-	out := new(ListenerSetList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *ListenerSetList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *ListenerSetSpec) DeepCopyInto(out *ListenerSetSpec) {
 	*out = *in
@@ -262,7 +169,7 @@ func (in *ListenerSetStatus) DeepCopyInto(out *ListenerSetStatus) {
 	*out = *in
 	if in.Conditions != nil {
 		in, out := &in.Conditions, &out.Conditions
-		*out = make([]metav1.Condition, len(*in))
+		*out = make([]v1.Condition, len(*in))
 		for i := range *in {
 			(*in)[i].DeepCopyInto(&(*out)[i])
 		}
@@ -291,17 +198,17 @@ func (in *ParentGatewayReference) DeepCopyInto(out *ParentGatewayReference) {
 	*out = *in
 	if in.Group != nil {
 		in, out := &in.Group, &out.Group
-		*out = new(v1.Group)
+		*out = new(Group)
 		**out = **in
 	}
 	if in.Kind != nil {
 		in, out := &in.Kind, &out.Kind
-		*out = new(v1.Kind)
+		*out = new(Kind)
 		**out = **in
 	}
 	if in.Namespace != nil {
 		in, out := &in.Namespace, &out.Namespace
-		*out = new(v1.Namespace)
+		*out = new(Namespace)
 		**out = **in
 	}
 }
@@ -326,7 +233,7 @@ func (in *RequestRate) DeepCopyInto(out *RequestRate) {
 	}
 	if in.Interval != nil {
 		in, out := &in.Interval, &out.Interval
-		*out = new(v1.Duration)
+		*out = new(Duration)
 		**out = **in
 	}
 }
@@ -344,15 +251,10 @@ func (in *RequestRate) DeepCopy() *RequestRate {
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *RetryConstraint) DeepCopyInto(out *RetryConstraint) {
 	*out = *in
-	if in.BudgetPercent != nil {
-		in, out := &in.BudgetPercent, &out.BudgetPercent
-		*out = new(int)
-		**out = **in
-	}
-	if in.BudgetInterval != nil {
-		in, out := &in.BudgetInterval, &out.BudgetInterval
-		*out = new(v1.Duration)
-		**out = **in
+	if in.Budget != nil {
+		in, out := &in.Budget, &out.Budget
+		*out = new(BudgetDetails)
+		(*in).DeepCopyInto(*out)
 	}
 	if in.MinRetryRate != nil {
 		in, out := &in.MinRetryRate, &out.MinRetryRate
@@ -370,3 +272,121 @@ func (in *RetryConstraint) DeepCopy() *RetryConstraint {
 	in.DeepCopyInto(out)
 	return out
 }
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *XBackendTrafficPolicy) DeepCopyInto(out *XBackendTrafficPolicy) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	in.Spec.DeepCopyInto(&out.Spec)
+	in.Status.DeepCopyInto(&out.Status)
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new XBackendTrafficPolicy.
+func (in *XBackendTrafficPolicy) DeepCopy() *XBackendTrafficPolicy {
+	if in == nil {
+		return nil
+	}
+	out := new(XBackendTrafficPolicy)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *XBackendTrafficPolicy) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *XBackendTrafficPolicyList) DeepCopyInto(out *XBackendTrafficPolicyList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]XBackendTrafficPolicy, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new XBackendTrafficPolicyList.
+func (in *XBackendTrafficPolicyList) DeepCopy() *XBackendTrafficPolicyList {
+	if in == nil {
+		return nil
+	}
+	out := new(XBackendTrafficPolicyList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *XBackendTrafficPolicyList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *XListenerSet) DeepCopyInto(out *XListenerSet) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	in.Spec.DeepCopyInto(&out.Spec)
+	in.Status.DeepCopyInto(&out.Status)
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new XListenerSet.
+func (in *XListenerSet) DeepCopy() *XListenerSet {
+	if in == nil {
+		return nil
+	}
+	out := new(XListenerSet)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *XListenerSet) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *XListenerSetList) DeepCopyInto(out *XListenerSetList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]XListenerSet, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new XListenerSetList.
+func (in *XListenerSetList) DeepCopy() *XListenerSetList {
+	if in == nil {
+		return nil
+	}
+	out := new(XListenerSetList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *XListenerSetList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
diff --git a/apisx/v1alpha1/zz_generated.register.go b/apisx/v1alpha1/zz_generated.register.go
index ecbd1092..fc131e21 100644
--- a/apisx/v1alpha1/zz_generated.register.go
+++ b/apisx/v1alpha1/zz_generated.register.go
@@ -23,8 +23,8 @@ package v1alpha1
 
 import (
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/runtime/schema"
+	runtime "k8s.io/apimachinery/pkg/runtime"
+	schema "k8s.io/apimachinery/pkg/runtime/schema"
 )
 
 // GroupName specifies the group name used to register the objects.
@@ -61,10 +61,10 @@ func init() {
 // Adds the list of known types to Scheme.
 func addKnownTypes(scheme *runtime.Scheme) error {
 	scheme.AddKnownTypes(SchemeGroupVersion,
-		&BackendTrafficPolicy{},
-		&BackendTrafficPolicyList{},
-		&ListenerSet{},
-		&ListenerSetList{},
+		&XBackendTrafficPolicy{},
+		&XBackendTrafficPolicyList{},
+		&XListenerSet{},
+		&XListenerSetList{},
 	)
 	// AddToGroupVersion allows the serialization of client types like ListOptions.
 	v1.AddToGroupVersion(scheme, SchemeGroupVersion)
diff --git a/applyconfiguration/apis/v1/backendobjectreference.go b/applyconfiguration/apis/v1/backendobjectreference.go
index a8d9c663..58337304 100644
--- a/applyconfiguration/apis/v1/backendobjectreference.go
+++ b/applyconfiguration/apis/v1/backendobjectreference.go
@@ -19,17 +19,17 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // BackendObjectReferenceApplyConfiguration represents a declarative configuration of the BackendObjectReference type for use
 // with apply.
 type BackendObjectReferenceApplyConfiguration struct {
-	Group     *v1.Group      `json:"group,omitempty"`
-	Kind      *v1.Kind       `json:"kind,omitempty"`
-	Name      *v1.ObjectName `json:"name,omitempty"`
-	Namespace *v1.Namespace  `json:"namespace,omitempty"`
-	Port      *v1.PortNumber `json:"port,omitempty"`
+	Group     *apisv1.Group      `json:"group,omitempty"`
+	Kind      *apisv1.Kind       `json:"kind,omitempty"`
+	Name      *apisv1.ObjectName `json:"name,omitempty"`
+	Namespace *apisv1.Namespace  `json:"namespace,omitempty"`
+	Port      *apisv1.PortNumber `json:"port,omitempty"`
 }
 
 // BackendObjectReferenceApplyConfiguration constructs a declarative configuration of the BackendObjectReference type for use with
@@ -41,7 +41,7 @@ func BackendObjectReference() *BackendObjectReferenceApplyConfiguration {
 // WithGroup sets the Group field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Group field is set to the value of the last call.
-func (b *BackendObjectReferenceApplyConfiguration) WithGroup(value v1.Group) *BackendObjectReferenceApplyConfiguration {
+func (b *BackendObjectReferenceApplyConfiguration) WithGroup(value apisv1.Group) *BackendObjectReferenceApplyConfiguration {
 	b.Group = &value
 	return b
 }
@@ -49,7 +49,7 @@ func (b *BackendObjectReferenceApplyConfiguration) WithGroup(value v1.Group) *Ba
 // WithKind sets the Kind field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
-func (b *BackendObjectReferenceApplyConfiguration) WithKind(value v1.Kind) *BackendObjectReferenceApplyConfiguration {
+func (b *BackendObjectReferenceApplyConfiguration) WithKind(value apisv1.Kind) *BackendObjectReferenceApplyConfiguration {
 	b.Kind = &value
 	return b
 }
@@ -57,7 +57,7 @@ func (b *BackendObjectReferenceApplyConfiguration) WithKind(value v1.Kind) *Back
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *BackendObjectReferenceApplyConfiguration) WithName(value v1.ObjectName) *BackendObjectReferenceApplyConfiguration {
+func (b *BackendObjectReferenceApplyConfiguration) WithName(value apisv1.ObjectName) *BackendObjectReferenceApplyConfiguration {
 	b.Name = &value
 	return b
 }
@@ -65,7 +65,7 @@ func (b *BackendObjectReferenceApplyConfiguration) WithName(value v1.ObjectName)
 // WithNamespace sets the Namespace field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Namespace field is set to the value of the last call.
-func (b *BackendObjectReferenceApplyConfiguration) WithNamespace(value v1.Namespace) *BackendObjectReferenceApplyConfiguration {
+func (b *BackendObjectReferenceApplyConfiguration) WithNamespace(value apisv1.Namespace) *BackendObjectReferenceApplyConfiguration {
 	b.Namespace = &value
 	return b
 }
@@ -73,7 +73,7 @@ func (b *BackendObjectReferenceApplyConfiguration) WithNamespace(value v1.Namesp
 // WithPort sets the Port field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Port field is set to the value of the last call.
-func (b *BackendObjectReferenceApplyConfiguration) WithPort(value v1.PortNumber) *BackendObjectReferenceApplyConfiguration {
+func (b *BackendObjectReferenceApplyConfiguration) WithPort(value apisv1.PortNumber) *BackendObjectReferenceApplyConfiguration {
 	b.Port = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/backendref.go b/applyconfiguration/apis/v1/backendref.go
index c30007dc..838dd6f6 100644
--- a/applyconfiguration/apis/v1/backendref.go
+++ b/applyconfiguration/apis/v1/backendref.go
@@ -39,7 +39,7 @@ func BackendRef() *BackendRefApplyConfiguration {
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Group field is set to the value of the last call.
 func (b *BackendRefApplyConfiguration) WithGroup(value apisv1.Group) *BackendRefApplyConfiguration {
-	b.Group = &value
+	b.BackendObjectReferenceApplyConfiguration.Group = &value
 	return b
 }
 
@@ -47,7 +47,7 @@ func (b *BackendRefApplyConfiguration) WithGroup(value apisv1.Group) *BackendRef
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *BackendRefApplyConfiguration) WithKind(value apisv1.Kind) *BackendRefApplyConfiguration {
-	b.Kind = &value
+	b.BackendObjectReferenceApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -55,7 +55,7 @@ func (b *BackendRefApplyConfiguration) WithKind(value apisv1.Kind) *BackendRefAp
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *BackendRefApplyConfiguration) WithName(value apisv1.ObjectName) *BackendRefApplyConfiguration {
-	b.Name = &value
+	b.BackendObjectReferenceApplyConfiguration.Name = &value
 	return b
 }
 
@@ -63,7 +63,7 @@ func (b *BackendRefApplyConfiguration) WithName(value apisv1.ObjectName) *Backen
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *BackendRefApplyConfiguration) WithNamespace(value apisv1.Namespace) *BackendRefApplyConfiguration {
-	b.Namespace = &value
+	b.BackendObjectReferenceApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -71,7 +71,7 @@ func (b *BackendRefApplyConfiguration) WithNamespace(value apisv1.Namespace) *Ba
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Port field is set to the value of the last call.
 func (b *BackendRefApplyConfiguration) WithPort(value apisv1.PortNumber) *BackendRefApplyConfiguration {
-	b.Port = &value
+	b.BackendObjectReferenceApplyConfiguration.Port = &value
 	return b
 }
 
diff --git a/applyconfiguration/apis/v1/cookieconfig.go b/applyconfiguration/apis/v1/cookieconfig.go
index 9280ddce..59d549fe 100644
--- a/applyconfiguration/apis/v1/cookieconfig.go
+++ b/applyconfiguration/apis/v1/cookieconfig.go
@@ -19,13 +19,13 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // CookieConfigApplyConfiguration represents a declarative configuration of the CookieConfig type for use
 // with apply.
 type CookieConfigApplyConfiguration struct {
-	LifetimeType *v1.CookieLifetimeType `json:"lifetimeType,omitempty"`
+	LifetimeType *apisv1.CookieLifetimeType `json:"lifetimeType,omitempty"`
 }
 
 // CookieConfigApplyConfiguration constructs a declarative configuration of the CookieConfig type for use with
@@ -37,7 +37,7 @@ func CookieConfig() *CookieConfigApplyConfiguration {
 // WithLifetimeType sets the LifetimeType field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the LifetimeType field is set to the value of the last call.
-func (b *CookieConfigApplyConfiguration) WithLifetimeType(value v1.CookieLifetimeType) *CookieConfigApplyConfiguration {
+func (b *CookieConfigApplyConfiguration) WithLifetimeType(value apisv1.CookieLifetimeType) *CookieConfigApplyConfiguration {
 	b.LifetimeType = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/gateway.go b/applyconfiguration/apis/v1/gateway.go
index 965ae383..98ee1b9a 100644
--- a/applyconfiguration/apis/v1/gateway.go
+++ b/applyconfiguration/apis/v1/gateway.go
@@ -19,21 +19,21 @@ limitations under the License.
 package v1
 
 import (
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	managedfields "k8s.io/apimachinery/pkg/util/managedfields"
-	v1 "k8s.io/client-go/applyconfigurations/meta/v1"
-	gatewayapiapisv1 "sigs.k8s.io/gateway-api/apis/v1"
+	metav1 "k8s.io/client-go/applyconfigurations/meta/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 	internal "sigs.k8s.io/gateway-api/applyconfiguration/internal"
 )
 
 // GatewayApplyConfiguration represents a declarative configuration of the Gateway type for use
 // with apply.
 type GatewayApplyConfiguration struct {
-	v1.TypeMetaApplyConfiguration    `json:",inline"`
-	*v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
-	Spec                             *GatewaySpecApplyConfiguration   `json:"spec,omitempty"`
-	Status                           *GatewayStatusApplyConfiguration `json:"status,omitempty"`
+	metav1.TypeMetaApplyConfiguration    `json:",inline"`
+	*metav1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
+	Spec                                 *GatewaySpecApplyConfiguration   `json:"spec,omitempty"`
+	Status                               *GatewayStatusApplyConfiguration `json:"status,omitempty"`
 }
 
 // Gateway constructs a declarative configuration of the Gateway type for use with
@@ -58,18 +58,18 @@ func Gateway(name, namespace string) *GatewayApplyConfiguration {
 // Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously
 // applied if another fieldManager has updated or force applied any of the previously applied fields.
 // Experimental!
-func ExtractGateway(gateway *gatewayapiapisv1.Gateway, fieldManager string) (*GatewayApplyConfiguration, error) {
+func ExtractGateway(gateway *apisv1.Gateway, fieldManager string) (*GatewayApplyConfiguration, error) {
 	return extractGateway(gateway, fieldManager, "")
 }
 
 // ExtractGatewayStatus is the same as ExtractGateway except
 // that it extracts the status subresource applied configuration.
 // Experimental!
-func ExtractGatewayStatus(gateway *gatewayapiapisv1.Gateway, fieldManager string) (*GatewayApplyConfiguration, error) {
+func ExtractGatewayStatus(gateway *apisv1.Gateway, fieldManager string) (*GatewayApplyConfiguration, error) {
 	return extractGateway(gateway, fieldManager, "status")
 }
 
-func extractGateway(gateway *gatewayapiapisv1.Gateway, fieldManager string, subresource string) (*GatewayApplyConfiguration, error) {
+func extractGateway(gateway *apisv1.Gateway, fieldManager string, subresource string) (*GatewayApplyConfiguration, error) {
 	b := &GatewayApplyConfiguration{}
 	err := managedfields.ExtractInto(gateway, internal.Parser().Type("io.k8s.sigs.gateway-api.apis.v1.Gateway"), fieldManager, b, subresource)
 	if err != nil {
@@ -87,7 +87,7 @@ func extractGateway(gateway *gatewayapiapisv1.Gateway, fieldManager string, subr
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithKind(value string) *GatewayApplyConfiguration {
-	b.Kind = &value
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -95,7 +95,7 @@ func (b *GatewayApplyConfiguration) WithKind(value string) *GatewayApplyConfigur
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithAPIVersion(value string) *GatewayApplyConfiguration {
-	b.APIVersion = &value
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
@@ -104,7 +104,7 @@ func (b *GatewayApplyConfiguration) WithAPIVersion(value string) *GatewayApplyCo
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithName(value string) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
@@ -113,7 +113,7 @@ func (b *GatewayApplyConfiguration) WithName(value string) *GatewayApplyConfigur
 // If called multiple times, the GenerateName field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithGenerateName(value string) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
@@ -122,7 +122,7 @@ func (b *GatewayApplyConfiguration) WithGenerateName(value string) *GatewayApply
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithNamespace(value string) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -131,7 +131,7 @@ func (b *GatewayApplyConfiguration) WithNamespace(value string) *GatewayApplyCon
 // If called multiple times, the UID field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithUID(value types.UID) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
@@ -140,7 +140,7 @@ func (b *GatewayApplyConfiguration) WithUID(value types.UID) *GatewayApplyConfig
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithResourceVersion(value string) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
@@ -149,25 +149,25 @@ func (b *GatewayApplyConfiguration) WithResourceVersion(value string) *GatewayAp
 // If called multiple times, the Generation field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithGeneration(value int64) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
 // WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
-func (b *GatewayApplyConfiguration) WithCreationTimestamp(value metav1.Time) *GatewayApplyConfiguration {
+func (b *GatewayApplyConfiguration) WithCreationTimestamp(value apismetav1.Time) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
 // WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
-func (b *GatewayApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *GatewayApplyConfiguration {
+func (b *GatewayApplyConfiguration) WithDeletionTimestamp(value apismetav1.Time) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
@@ -176,7 +176,7 @@ func (b *GatewayApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *Ga
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -186,11 +186,11 @@ func (b *GatewayApplyConfiguration) WithDeletionGracePeriodSeconds(value int64)
 // overwriting an existing map entries in Labels field with the same key.
 func (b *GatewayApplyConfiguration) WithLabels(entries map[string]string) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -201,11 +201,11 @@ func (b *GatewayApplyConfiguration) WithLabels(entries map[string]string) *Gatew
 // overwriting an existing map entries in Annotations field with the same key.
 func (b *GatewayApplyConfiguration) WithAnnotations(entries map[string]string) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -213,13 +213,13 @@ func (b *GatewayApplyConfiguration) WithAnnotations(entries map[string]string) *
 // WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, values provided by each call will be appended to the OwnerReferences field.
-func (b *GatewayApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *GatewayApplyConfiguration {
+func (b *GatewayApplyConfiguration) WithOwnerReferences(values ...*metav1.OwnerReferenceApplyConfiguration) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -230,14 +230,14 @@ func (b *GatewayApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerRefer
 func (b *GatewayApplyConfiguration) WithFinalizers(values ...string) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
 
 func (b *GatewayApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
 	if b.ObjectMetaApplyConfiguration == nil {
-		b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{}
+		b.ObjectMetaApplyConfiguration = &metav1.ObjectMetaApplyConfiguration{}
 	}
 }
 
@@ -260,5 +260,5 @@ func (b *GatewayApplyConfiguration) WithStatus(value *GatewayStatusApplyConfigur
 // GetName retrieves the value of the Name field in the declarative configuration.
 func (b *GatewayApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/apis/v1/gatewayclass.go b/applyconfiguration/apis/v1/gatewayclass.go
index a356c501..fa6792f3 100644
--- a/applyconfiguration/apis/v1/gatewayclass.go
+++ b/applyconfiguration/apis/v1/gatewayclass.go
@@ -19,21 +19,21 @@ limitations under the License.
 package v1
 
 import (
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	managedfields "k8s.io/apimachinery/pkg/util/managedfields"
-	v1 "k8s.io/client-go/applyconfigurations/meta/v1"
-	gatewayapiapisv1 "sigs.k8s.io/gateway-api/apis/v1"
+	metav1 "k8s.io/client-go/applyconfigurations/meta/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 	internal "sigs.k8s.io/gateway-api/applyconfiguration/internal"
 )
 
 // GatewayClassApplyConfiguration represents a declarative configuration of the GatewayClass type for use
 // with apply.
 type GatewayClassApplyConfiguration struct {
-	v1.TypeMetaApplyConfiguration    `json:",inline"`
-	*v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
-	Spec                             *GatewayClassSpecApplyConfiguration   `json:"spec,omitempty"`
-	Status                           *GatewayClassStatusApplyConfiguration `json:"status,omitempty"`
+	metav1.TypeMetaApplyConfiguration    `json:",inline"`
+	*metav1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
+	Spec                                 *GatewayClassSpecApplyConfiguration   `json:"spec,omitempty"`
+	Status                               *GatewayClassStatusApplyConfiguration `json:"status,omitempty"`
 }
 
 // GatewayClass constructs a declarative configuration of the GatewayClass type for use with
@@ -57,18 +57,18 @@ func GatewayClass(name string) *GatewayClassApplyConfiguration {
 // Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously
 // applied if another fieldManager has updated or force applied any of the previously applied fields.
 // Experimental!
-func ExtractGatewayClass(gatewayClass *gatewayapiapisv1.GatewayClass, fieldManager string) (*GatewayClassApplyConfiguration, error) {
+func ExtractGatewayClass(gatewayClass *apisv1.GatewayClass, fieldManager string) (*GatewayClassApplyConfiguration, error) {
 	return extractGatewayClass(gatewayClass, fieldManager, "")
 }
 
 // ExtractGatewayClassStatus is the same as ExtractGatewayClass except
 // that it extracts the status subresource applied configuration.
 // Experimental!
-func ExtractGatewayClassStatus(gatewayClass *gatewayapiapisv1.GatewayClass, fieldManager string) (*GatewayClassApplyConfiguration, error) {
+func ExtractGatewayClassStatus(gatewayClass *apisv1.GatewayClass, fieldManager string) (*GatewayClassApplyConfiguration, error) {
 	return extractGatewayClass(gatewayClass, fieldManager, "status")
 }
 
-func extractGatewayClass(gatewayClass *gatewayapiapisv1.GatewayClass, fieldManager string, subresource string) (*GatewayClassApplyConfiguration, error) {
+func extractGatewayClass(gatewayClass *apisv1.GatewayClass, fieldManager string, subresource string) (*GatewayClassApplyConfiguration, error) {
 	b := &GatewayClassApplyConfiguration{}
 	err := managedfields.ExtractInto(gatewayClass, internal.Parser().Type("io.k8s.sigs.gateway-api.apis.v1.GatewayClass"), fieldManager, b, subresource)
 	if err != nil {
@@ -85,7 +85,7 @@ func extractGatewayClass(gatewayClass *gatewayapiapisv1.GatewayClass, fieldManag
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithKind(value string) *GatewayClassApplyConfiguration {
-	b.Kind = &value
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -93,7 +93,7 @@ func (b *GatewayClassApplyConfiguration) WithKind(value string) *GatewayClassApp
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithAPIVersion(value string) *GatewayClassApplyConfiguration {
-	b.APIVersion = &value
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
@@ -102,7 +102,7 @@ func (b *GatewayClassApplyConfiguration) WithAPIVersion(value string) *GatewayCl
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithName(value string) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
@@ -111,7 +111,7 @@ func (b *GatewayClassApplyConfiguration) WithName(value string) *GatewayClassApp
 // If called multiple times, the GenerateName field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithGenerateName(value string) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
@@ -120,7 +120,7 @@ func (b *GatewayClassApplyConfiguration) WithGenerateName(value string) *Gateway
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithNamespace(value string) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -129,7 +129,7 @@ func (b *GatewayClassApplyConfiguration) WithNamespace(value string) *GatewayCla
 // If called multiple times, the UID field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithUID(value types.UID) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
@@ -138,7 +138,7 @@ func (b *GatewayClassApplyConfiguration) WithUID(value types.UID) *GatewayClassA
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithResourceVersion(value string) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
@@ -147,25 +147,25 @@ func (b *GatewayClassApplyConfiguration) WithResourceVersion(value string) *Gate
 // If called multiple times, the Generation field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithGeneration(value int64) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
 // WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
-func (b *GatewayClassApplyConfiguration) WithCreationTimestamp(value metav1.Time) *GatewayClassApplyConfiguration {
+func (b *GatewayClassApplyConfiguration) WithCreationTimestamp(value apismetav1.Time) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
 // WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
-func (b *GatewayClassApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *GatewayClassApplyConfiguration {
+func (b *GatewayClassApplyConfiguration) WithDeletionTimestamp(value apismetav1.Time) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
@@ -174,7 +174,7 @@ func (b *GatewayClassApplyConfiguration) WithDeletionTimestamp(value metav1.Time
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -184,11 +184,11 @@ func (b *GatewayClassApplyConfiguration) WithDeletionGracePeriodSeconds(value in
 // overwriting an existing map entries in Labels field with the same key.
 func (b *GatewayClassApplyConfiguration) WithLabels(entries map[string]string) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -199,11 +199,11 @@ func (b *GatewayClassApplyConfiguration) WithLabels(entries map[string]string) *
 // overwriting an existing map entries in Annotations field with the same key.
 func (b *GatewayClassApplyConfiguration) WithAnnotations(entries map[string]string) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -211,13 +211,13 @@ func (b *GatewayClassApplyConfiguration) WithAnnotations(entries map[string]stri
 // WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, values provided by each call will be appended to the OwnerReferences field.
-func (b *GatewayClassApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *GatewayClassApplyConfiguration {
+func (b *GatewayClassApplyConfiguration) WithOwnerReferences(values ...*metav1.OwnerReferenceApplyConfiguration) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -228,14 +228,14 @@ func (b *GatewayClassApplyConfiguration) WithOwnerReferences(values ...*v1.Owner
 func (b *GatewayClassApplyConfiguration) WithFinalizers(values ...string) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
 
 func (b *GatewayClassApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
 	if b.ObjectMetaApplyConfiguration == nil {
-		b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{}
+		b.ObjectMetaApplyConfiguration = &metav1.ObjectMetaApplyConfiguration{}
 	}
 }
 
@@ -258,5 +258,5 @@ func (b *GatewayClassApplyConfiguration) WithStatus(value *GatewayClassStatusApp
 // GetName retrieves the value of the Name field in the declarative configuration.
 func (b *GatewayClassApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/apis/v1/gatewayclassspec.go b/applyconfiguration/apis/v1/gatewayclassspec.go
index 8591cd21..fda9be71 100644
--- a/applyconfiguration/apis/v1/gatewayclassspec.go
+++ b/applyconfiguration/apis/v1/gatewayclassspec.go
@@ -19,13 +19,13 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // GatewayClassSpecApplyConfiguration represents a declarative configuration of the GatewayClassSpec type for use
 // with apply.
 type GatewayClassSpecApplyConfiguration struct {
-	ControllerName *v1.GatewayController                  `json:"controllerName,omitempty"`
+	ControllerName *apisv1.GatewayController              `json:"controllerName,omitempty"`
 	ParametersRef  *ParametersReferenceApplyConfiguration `json:"parametersRef,omitempty"`
 	Description    *string                                `json:"description,omitempty"`
 }
@@ -39,7 +39,7 @@ func GatewayClassSpec() *GatewayClassSpecApplyConfiguration {
 // WithControllerName sets the ControllerName field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the ControllerName field is set to the value of the last call.
-func (b *GatewayClassSpecApplyConfiguration) WithControllerName(value v1.GatewayController) *GatewayClassSpecApplyConfiguration {
+func (b *GatewayClassSpecApplyConfiguration) WithControllerName(value apisv1.GatewayController) *GatewayClassSpecApplyConfiguration {
 	b.ControllerName = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/gatewayclassstatus.go b/applyconfiguration/apis/v1/gatewayclassstatus.go
index fb3fa8df..746da3ba 100644
--- a/applyconfiguration/apis/v1/gatewayclassstatus.go
+++ b/applyconfiguration/apis/v1/gatewayclassstatus.go
@@ -19,13 +19,13 @@ limitations under the License.
 package v1
 
 import (
-	v1 "k8s.io/client-go/applyconfigurations/meta/v1"
+	metav1 "k8s.io/client-go/applyconfigurations/meta/v1"
 )
 
 // GatewayClassStatusApplyConfiguration represents a declarative configuration of the GatewayClassStatus type for use
 // with apply.
 type GatewayClassStatusApplyConfiguration struct {
-	Conditions        []v1.ConditionApplyConfiguration     `json:"conditions,omitempty"`
+	Conditions        []metav1.ConditionApplyConfiguration `json:"conditions,omitempty"`
 	SupportedFeatures []SupportedFeatureApplyConfiguration `json:"supportedFeatures,omitempty"`
 }
 
@@ -38,7 +38,7 @@ func GatewayClassStatus() *GatewayClassStatusApplyConfiguration {
 // WithConditions adds the given value to the Conditions field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, values provided by each call will be appended to the Conditions field.
-func (b *GatewayClassStatusApplyConfiguration) WithConditions(values ...*v1.ConditionApplyConfiguration) *GatewayClassStatusApplyConfiguration {
+func (b *GatewayClassStatusApplyConfiguration) WithConditions(values ...*metav1.ConditionApplyConfiguration) *GatewayClassStatusApplyConfiguration {
 	for i := range values {
 		if values[i] == nil {
 			panic("nil value passed to WithConditions")
diff --git a/applyconfiguration/apis/v1/gatewayinfrastructure.go b/applyconfiguration/apis/v1/gatewayinfrastructure.go
index 0bed1ad2..3d6716db 100644
--- a/applyconfiguration/apis/v1/gatewayinfrastructure.go
+++ b/applyconfiguration/apis/v1/gatewayinfrastructure.go
@@ -19,15 +19,15 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // GatewayInfrastructureApplyConfiguration represents a declarative configuration of the GatewayInfrastructure type for use
 // with apply.
 type GatewayInfrastructureApplyConfiguration struct {
-	Labels        map[v1.LabelKey]v1.LabelValue               `json:"labels,omitempty"`
-	Annotations   map[v1.AnnotationKey]v1.AnnotationValue     `json:"annotations,omitempty"`
-	ParametersRef *LocalParametersReferenceApplyConfiguration `json:"parametersRef,omitempty"`
+	Labels        map[apisv1.LabelKey]apisv1.LabelValue           `json:"labels,omitempty"`
+	Annotations   map[apisv1.AnnotationKey]apisv1.AnnotationValue `json:"annotations,omitempty"`
+	ParametersRef *LocalParametersReferenceApplyConfiguration     `json:"parametersRef,omitempty"`
 }
 
 // GatewayInfrastructureApplyConfiguration constructs a declarative configuration of the GatewayInfrastructure type for use with
@@ -40,9 +40,9 @@ func GatewayInfrastructure() *GatewayInfrastructureApplyConfiguration {
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, the entries provided by each call will be put on the Labels field,
 // overwriting an existing map entries in Labels field with the same key.
-func (b *GatewayInfrastructureApplyConfiguration) WithLabels(entries map[v1.LabelKey]v1.LabelValue) *GatewayInfrastructureApplyConfiguration {
+func (b *GatewayInfrastructureApplyConfiguration) WithLabels(entries map[apisv1.LabelKey]apisv1.LabelValue) *GatewayInfrastructureApplyConfiguration {
 	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[v1.LabelKey]v1.LabelValue, len(entries))
+		b.Labels = make(map[apisv1.LabelKey]apisv1.LabelValue, len(entries))
 	}
 	for k, v := range entries {
 		b.Labels[k] = v
@@ -54,9 +54,9 @@ func (b *GatewayInfrastructureApplyConfiguration) WithLabels(entries map[v1.Labe
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, the entries provided by each call will be put on the Annotations field,
 // overwriting an existing map entries in Annotations field with the same key.
-func (b *GatewayInfrastructureApplyConfiguration) WithAnnotations(entries map[v1.AnnotationKey]v1.AnnotationValue) *GatewayInfrastructureApplyConfiguration {
+func (b *GatewayInfrastructureApplyConfiguration) WithAnnotations(entries map[apisv1.AnnotationKey]apisv1.AnnotationValue) *GatewayInfrastructureApplyConfiguration {
 	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[v1.AnnotationKey]v1.AnnotationValue, len(entries))
+		b.Annotations = make(map[apisv1.AnnotationKey]apisv1.AnnotationValue, len(entries))
 	}
 	for k, v := range entries {
 		b.Annotations[k] = v
diff --git a/applyconfiguration/apis/v1/gatewayspec.go b/applyconfiguration/apis/v1/gatewayspec.go
index 9ba7ecb2..bdfeba84 100644
--- a/applyconfiguration/apis/v1/gatewayspec.go
+++ b/applyconfiguration/apis/v1/gatewayspec.go
@@ -19,15 +19,15 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // GatewaySpecApplyConfiguration represents a declarative configuration of the GatewaySpec type for use
 // with apply.
 type GatewaySpecApplyConfiguration struct {
-	GatewayClassName *v1.ObjectName                           `json:"gatewayClassName,omitempty"`
+	GatewayClassName *apisv1.ObjectName                       `json:"gatewayClassName,omitempty"`
 	Listeners        []ListenerApplyConfiguration             `json:"listeners,omitempty"`
-	Addresses        []GatewayAddressApplyConfiguration       `json:"addresses,omitempty"`
+	Addresses        []GatewaySpecAddressApplyConfiguration   `json:"addresses,omitempty"`
 	Infrastructure   *GatewayInfrastructureApplyConfiguration `json:"infrastructure,omitempty"`
 	BackendTLS       *GatewayBackendTLSApplyConfiguration     `json:"backendTLS,omitempty"`
 	AllowedListeners *AllowedListenersApplyConfiguration      `json:"allowedListeners,omitempty"`
@@ -42,7 +42,7 @@ func GatewaySpec() *GatewaySpecApplyConfiguration {
 // WithGatewayClassName sets the GatewayClassName field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the GatewayClassName field is set to the value of the last call.
-func (b *GatewaySpecApplyConfiguration) WithGatewayClassName(value v1.ObjectName) *GatewaySpecApplyConfiguration {
+func (b *GatewaySpecApplyConfiguration) WithGatewayClassName(value apisv1.ObjectName) *GatewaySpecApplyConfiguration {
 	b.GatewayClassName = &value
 	return b
 }
@@ -63,7 +63,7 @@ func (b *GatewaySpecApplyConfiguration) WithListeners(values ...*ListenerApplyCo
 // WithAddresses adds the given value to the Addresses field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, values provided by each call will be appended to the Addresses field.
-func (b *GatewaySpecApplyConfiguration) WithAddresses(values ...*GatewayAddressApplyConfiguration) *GatewaySpecApplyConfiguration {
+func (b *GatewaySpecApplyConfiguration) WithAddresses(values ...*GatewaySpecAddressApplyConfiguration) *GatewaySpecApplyConfiguration {
 	for i := range values {
 		if values[i] == nil {
 			panic("nil value passed to WithAddresses")
diff --git a/applyconfiguration/apis/v1/gatewayaddress.go b/applyconfiguration/apis/v1/gatewayspecaddress.go
similarity index 61%
rename from applyconfiguration/apis/v1/gatewayaddress.go
rename to applyconfiguration/apis/v1/gatewayspecaddress.go
index 28821a7a..ac796e11 100644
--- a/applyconfiguration/apis/v1/gatewayaddress.go
+++ b/applyconfiguration/apis/v1/gatewayspecaddress.go
@@ -19,26 +19,26 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
-// GatewayAddressApplyConfiguration represents a declarative configuration of the GatewayAddress type for use
+// GatewaySpecAddressApplyConfiguration represents a declarative configuration of the GatewaySpecAddress type for use
 // with apply.
-type GatewayAddressApplyConfiguration struct {
-	Type  *v1.AddressType `json:"type,omitempty"`
-	Value *string         `json:"value,omitempty"`
+type GatewaySpecAddressApplyConfiguration struct {
+	Type  *apisv1.AddressType `json:"type,omitempty"`
+	Value *string             `json:"value,omitempty"`
 }
 
-// GatewayAddressApplyConfiguration constructs a declarative configuration of the GatewayAddress type for use with
+// GatewaySpecAddressApplyConfiguration constructs a declarative configuration of the GatewaySpecAddress type for use with
 // apply.
-func GatewayAddress() *GatewayAddressApplyConfiguration {
-	return &GatewayAddressApplyConfiguration{}
+func GatewaySpecAddress() *GatewaySpecAddressApplyConfiguration {
+	return &GatewaySpecAddressApplyConfiguration{}
 }
 
 // WithType sets the Type field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Type field is set to the value of the last call.
-func (b *GatewayAddressApplyConfiguration) WithType(value v1.AddressType) *GatewayAddressApplyConfiguration {
+func (b *GatewaySpecAddressApplyConfiguration) WithType(value apisv1.AddressType) *GatewaySpecAddressApplyConfiguration {
 	b.Type = &value
 	return b
 }
@@ -46,7 +46,7 @@ func (b *GatewayAddressApplyConfiguration) WithType(value v1.AddressType) *Gatew
 // WithValue sets the Value field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Value field is set to the value of the last call.
-func (b *GatewayAddressApplyConfiguration) WithValue(value string) *GatewayAddressApplyConfiguration {
+func (b *GatewaySpecAddressApplyConfiguration) WithValue(value string) *GatewaySpecAddressApplyConfiguration {
 	b.Value = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/gatewaystatusaddress.go b/applyconfiguration/apis/v1/gatewaystatusaddress.go
index a40b5441..6e46a5da 100644
--- a/applyconfiguration/apis/v1/gatewaystatusaddress.go
+++ b/applyconfiguration/apis/v1/gatewaystatusaddress.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // GatewayStatusAddressApplyConfiguration represents a declarative configuration of the GatewayStatusAddress type for use
 // with apply.
 type GatewayStatusAddressApplyConfiguration struct {
-	Type  *v1.AddressType `json:"type,omitempty"`
-	Value *string         `json:"value,omitempty"`
+	Type  *apisv1.AddressType `json:"type,omitempty"`
+	Value *string             `json:"value,omitempty"`
 }
 
 // GatewayStatusAddressApplyConfiguration constructs a declarative configuration of the GatewayStatusAddress type for use with
@@ -38,7 +38,7 @@ func GatewayStatusAddress() *GatewayStatusAddressApplyConfiguration {
 // WithType sets the Type field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Type field is set to the value of the last call.
-func (b *GatewayStatusAddressApplyConfiguration) WithType(value v1.AddressType) *GatewayStatusAddressApplyConfiguration {
+func (b *GatewayStatusAddressApplyConfiguration) WithType(value apisv1.AddressType) *GatewayStatusAddressApplyConfiguration {
 	b.Type = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/gatewaytlsconfig.go b/applyconfiguration/apis/v1/gatewaytlsconfig.go
index 57c76b2e..896e3e56 100644
--- a/applyconfiguration/apis/v1/gatewaytlsconfig.go
+++ b/applyconfiguration/apis/v1/gatewaytlsconfig.go
@@ -19,16 +19,16 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // GatewayTLSConfigApplyConfiguration represents a declarative configuration of the GatewayTLSConfig type for use
 // with apply.
 type GatewayTLSConfigApplyConfiguration struct {
-	Mode               *v1.TLSModeType                           `json:"mode,omitempty"`
-	CertificateRefs    []SecretObjectReferenceApplyConfiguration `json:"certificateRefs,omitempty"`
-	FrontendValidation *FrontendTLSValidationApplyConfiguration  `json:"frontendValidation,omitempty"`
-	Options            map[v1.AnnotationKey]v1.AnnotationValue   `json:"options,omitempty"`
+	Mode               *apisv1.TLSModeType                             `json:"mode,omitempty"`
+	CertificateRefs    []SecretObjectReferenceApplyConfiguration       `json:"certificateRefs,omitempty"`
+	FrontendValidation *FrontendTLSValidationApplyConfiguration        `json:"frontendValidation,omitempty"`
+	Options            map[apisv1.AnnotationKey]apisv1.AnnotationValue `json:"options,omitempty"`
 }
 
 // GatewayTLSConfigApplyConfiguration constructs a declarative configuration of the GatewayTLSConfig type for use with
@@ -40,7 +40,7 @@ func GatewayTLSConfig() *GatewayTLSConfigApplyConfiguration {
 // WithMode sets the Mode field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Mode field is set to the value of the last call.
-func (b *GatewayTLSConfigApplyConfiguration) WithMode(value v1.TLSModeType) *GatewayTLSConfigApplyConfiguration {
+func (b *GatewayTLSConfigApplyConfiguration) WithMode(value apisv1.TLSModeType) *GatewayTLSConfigApplyConfiguration {
 	b.Mode = &value
 	return b
 }
@@ -70,9 +70,9 @@ func (b *GatewayTLSConfigApplyConfiguration) WithFrontendValidation(value *Front
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, the entries provided by each call will be put on the Options field,
 // overwriting an existing map entries in Options field with the same key.
-func (b *GatewayTLSConfigApplyConfiguration) WithOptions(entries map[v1.AnnotationKey]v1.AnnotationValue) *GatewayTLSConfigApplyConfiguration {
+func (b *GatewayTLSConfigApplyConfiguration) WithOptions(entries map[apisv1.AnnotationKey]apisv1.AnnotationValue) *GatewayTLSConfigApplyConfiguration {
 	if b.Options == nil && len(entries) > 0 {
-		b.Options = make(map[v1.AnnotationKey]v1.AnnotationValue, len(entries))
+		b.Options = make(map[apisv1.AnnotationKey]apisv1.AnnotationValue, len(entries))
 	}
 	for k, v := range entries {
 		b.Options[k] = v
diff --git a/applyconfiguration/apis/v1/grpcbackendref.go b/applyconfiguration/apis/v1/grpcbackendref.go
index ed8bd4ed..75465480 100644
--- a/applyconfiguration/apis/v1/grpcbackendref.go
+++ b/applyconfiguration/apis/v1/grpcbackendref.go
@@ -39,7 +39,7 @@ func GRPCBackendRef() *GRPCBackendRefApplyConfiguration {
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Group field is set to the value of the last call.
 func (b *GRPCBackendRefApplyConfiguration) WithGroup(value apisv1.Group) *GRPCBackendRefApplyConfiguration {
-	b.Group = &value
+	b.BackendObjectReferenceApplyConfiguration.Group = &value
 	return b
 }
 
@@ -47,7 +47,7 @@ func (b *GRPCBackendRefApplyConfiguration) WithGroup(value apisv1.Group) *GRPCBa
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *GRPCBackendRefApplyConfiguration) WithKind(value apisv1.Kind) *GRPCBackendRefApplyConfiguration {
-	b.Kind = &value
+	b.BackendObjectReferenceApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -55,7 +55,7 @@ func (b *GRPCBackendRefApplyConfiguration) WithKind(value apisv1.Kind) *GRPCBack
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *GRPCBackendRefApplyConfiguration) WithName(value apisv1.ObjectName) *GRPCBackendRefApplyConfiguration {
-	b.Name = &value
+	b.BackendObjectReferenceApplyConfiguration.Name = &value
 	return b
 }
 
@@ -63,7 +63,7 @@ func (b *GRPCBackendRefApplyConfiguration) WithName(value apisv1.ObjectName) *GR
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *GRPCBackendRefApplyConfiguration) WithNamespace(value apisv1.Namespace) *GRPCBackendRefApplyConfiguration {
-	b.Namespace = &value
+	b.BackendObjectReferenceApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -71,7 +71,7 @@ func (b *GRPCBackendRefApplyConfiguration) WithNamespace(value apisv1.Namespace)
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Port field is set to the value of the last call.
 func (b *GRPCBackendRefApplyConfiguration) WithPort(value apisv1.PortNumber) *GRPCBackendRefApplyConfiguration {
-	b.Port = &value
+	b.BackendObjectReferenceApplyConfiguration.Port = &value
 	return b
 }
 
@@ -79,7 +79,7 @@ func (b *GRPCBackendRefApplyConfiguration) WithPort(value apisv1.PortNumber) *GR
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Weight field is set to the value of the last call.
 func (b *GRPCBackendRefApplyConfiguration) WithWeight(value int32) *GRPCBackendRefApplyConfiguration {
-	b.Weight = &value
+	b.BackendRefApplyConfiguration.Weight = &value
 	return b
 }
 
diff --git a/applyconfiguration/apis/v1/grpcheadermatch.go b/applyconfiguration/apis/v1/grpcheadermatch.go
index 868f4048..20b59b12 100644
--- a/applyconfiguration/apis/v1/grpcheadermatch.go
+++ b/applyconfiguration/apis/v1/grpcheadermatch.go
@@ -19,15 +19,15 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // GRPCHeaderMatchApplyConfiguration represents a declarative configuration of the GRPCHeaderMatch type for use
 // with apply.
 type GRPCHeaderMatchApplyConfiguration struct {
-	Type  *v1.GRPCHeaderMatchType `json:"type,omitempty"`
-	Name  *v1.GRPCHeaderName      `json:"name,omitempty"`
-	Value *string                 `json:"value,omitempty"`
+	Type  *apisv1.GRPCHeaderMatchType `json:"type,omitempty"`
+	Name  *apisv1.GRPCHeaderName      `json:"name,omitempty"`
+	Value *string                     `json:"value,omitempty"`
 }
 
 // GRPCHeaderMatchApplyConfiguration constructs a declarative configuration of the GRPCHeaderMatch type for use with
@@ -39,7 +39,7 @@ func GRPCHeaderMatch() *GRPCHeaderMatchApplyConfiguration {
 // WithType sets the Type field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Type field is set to the value of the last call.
-func (b *GRPCHeaderMatchApplyConfiguration) WithType(value v1.GRPCHeaderMatchType) *GRPCHeaderMatchApplyConfiguration {
+func (b *GRPCHeaderMatchApplyConfiguration) WithType(value apisv1.GRPCHeaderMatchType) *GRPCHeaderMatchApplyConfiguration {
 	b.Type = &value
 	return b
 }
@@ -47,7 +47,7 @@ func (b *GRPCHeaderMatchApplyConfiguration) WithType(value v1.GRPCHeaderMatchTyp
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *GRPCHeaderMatchApplyConfiguration) WithName(value v1.GRPCHeaderName) *GRPCHeaderMatchApplyConfiguration {
+func (b *GRPCHeaderMatchApplyConfiguration) WithName(value apisv1.GRPCHeaderName) *GRPCHeaderMatchApplyConfiguration {
 	b.Name = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/grpcmethodmatch.go b/applyconfiguration/apis/v1/grpcmethodmatch.go
index 26e08045..fd84f59c 100644
--- a/applyconfiguration/apis/v1/grpcmethodmatch.go
+++ b/applyconfiguration/apis/v1/grpcmethodmatch.go
@@ -19,15 +19,15 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // GRPCMethodMatchApplyConfiguration represents a declarative configuration of the GRPCMethodMatch type for use
 // with apply.
 type GRPCMethodMatchApplyConfiguration struct {
-	Type    *v1.GRPCMethodMatchType `json:"type,omitempty"`
-	Service *string                 `json:"service,omitempty"`
-	Method  *string                 `json:"method,omitempty"`
+	Type    *apisv1.GRPCMethodMatchType `json:"type,omitempty"`
+	Service *string                     `json:"service,omitempty"`
+	Method  *string                     `json:"method,omitempty"`
 }
 
 // GRPCMethodMatchApplyConfiguration constructs a declarative configuration of the GRPCMethodMatch type for use with
@@ -39,7 +39,7 @@ func GRPCMethodMatch() *GRPCMethodMatchApplyConfiguration {
 // WithType sets the Type field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Type field is set to the value of the last call.
-func (b *GRPCMethodMatchApplyConfiguration) WithType(value v1.GRPCMethodMatchType) *GRPCMethodMatchApplyConfiguration {
+func (b *GRPCMethodMatchApplyConfiguration) WithType(value apisv1.GRPCMethodMatchType) *GRPCMethodMatchApplyConfiguration {
 	b.Type = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/grpcroute.go b/applyconfiguration/apis/v1/grpcroute.go
index 5728e583..d7e0568e 100644
--- a/applyconfiguration/apis/v1/grpcroute.go
+++ b/applyconfiguration/apis/v1/grpcroute.go
@@ -19,21 +19,21 @@ limitations under the License.
 package v1
 
 import (
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	managedfields "k8s.io/apimachinery/pkg/util/managedfields"
-	v1 "k8s.io/client-go/applyconfigurations/meta/v1"
-	gatewayapiapisv1 "sigs.k8s.io/gateway-api/apis/v1"
+	metav1 "k8s.io/client-go/applyconfigurations/meta/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 	internal "sigs.k8s.io/gateway-api/applyconfiguration/internal"
 )
 
 // GRPCRouteApplyConfiguration represents a declarative configuration of the GRPCRoute type for use
 // with apply.
 type GRPCRouteApplyConfiguration struct {
-	v1.TypeMetaApplyConfiguration    `json:",inline"`
-	*v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
-	Spec                             *GRPCRouteSpecApplyConfiguration   `json:"spec,omitempty"`
-	Status                           *GRPCRouteStatusApplyConfiguration `json:"status,omitempty"`
+	metav1.TypeMetaApplyConfiguration    `json:",inline"`
+	*metav1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
+	Spec                                 *GRPCRouteSpecApplyConfiguration   `json:"spec,omitempty"`
+	Status                               *GRPCRouteStatusApplyConfiguration `json:"status,omitempty"`
 }
 
 // GRPCRoute constructs a declarative configuration of the GRPCRoute type for use with
@@ -58,18 +58,18 @@ func GRPCRoute(name, namespace string) *GRPCRouteApplyConfiguration {
 // Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously
 // applied if another fieldManager has updated or force applied any of the previously applied fields.
 // Experimental!
-func ExtractGRPCRoute(gRPCRoute *gatewayapiapisv1.GRPCRoute, fieldManager string) (*GRPCRouteApplyConfiguration, error) {
+func ExtractGRPCRoute(gRPCRoute *apisv1.GRPCRoute, fieldManager string) (*GRPCRouteApplyConfiguration, error) {
 	return extractGRPCRoute(gRPCRoute, fieldManager, "")
 }
 
 // ExtractGRPCRouteStatus is the same as ExtractGRPCRoute except
 // that it extracts the status subresource applied configuration.
 // Experimental!
-func ExtractGRPCRouteStatus(gRPCRoute *gatewayapiapisv1.GRPCRoute, fieldManager string) (*GRPCRouteApplyConfiguration, error) {
+func ExtractGRPCRouteStatus(gRPCRoute *apisv1.GRPCRoute, fieldManager string) (*GRPCRouteApplyConfiguration, error) {
 	return extractGRPCRoute(gRPCRoute, fieldManager, "status")
 }
 
-func extractGRPCRoute(gRPCRoute *gatewayapiapisv1.GRPCRoute, fieldManager string, subresource string) (*GRPCRouteApplyConfiguration, error) {
+func extractGRPCRoute(gRPCRoute *apisv1.GRPCRoute, fieldManager string, subresource string) (*GRPCRouteApplyConfiguration, error) {
 	b := &GRPCRouteApplyConfiguration{}
 	err := managedfields.ExtractInto(gRPCRoute, internal.Parser().Type("io.k8s.sigs.gateway-api.apis.v1.GRPCRoute"), fieldManager, b, subresource)
 	if err != nil {
@@ -87,7 +87,7 @@ func extractGRPCRoute(gRPCRoute *gatewayapiapisv1.GRPCRoute, fieldManager string
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithKind(value string) *GRPCRouteApplyConfiguration {
-	b.Kind = &value
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -95,7 +95,7 @@ func (b *GRPCRouteApplyConfiguration) WithKind(value string) *GRPCRouteApplyConf
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithAPIVersion(value string) *GRPCRouteApplyConfiguration {
-	b.APIVersion = &value
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
@@ -104,7 +104,7 @@ func (b *GRPCRouteApplyConfiguration) WithAPIVersion(value string) *GRPCRouteApp
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithName(value string) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
@@ -113,7 +113,7 @@ func (b *GRPCRouteApplyConfiguration) WithName(value string) *GRPCRouteApplyConf
 // If called multiple times, the GenerateName field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithGenerateName(value string) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
@@ -122,7 +122,7 @@ func (b *GRPCRouteApplyConfiguration) WithGenerateName(value string) *GRPCRouteA
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithNamespace(value string) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -131,7 +131,7 @@ func (b *GRPCRouteApplyConfiguration) WithNamespace(value string) *GRPCRouteAppl
 // If called multiple times, the UID field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithUID(value types.UID) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
@@ -140,7 +140,7 @@ func (b *GRPCRouteApplyConfiguration) WithUID(value types.UID) *GRPCRouteApplyCo
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithResourceVersion(value string) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
@@ -149,25 +149,25 @@ func (b *GRPCRouteApplyConfiguration) WithResourceVersion(value string) *GRPCRou
 // If called multiple times, the Generation field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithGeneration(value int64) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
 // WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
-func (b *GRPCRouteApplyConfiguration) WithCreationTimestamp(value metav1.Time) *GRPCRouteApplyConfiguration {
+func (b *GRPCRouteApplyConfiguration) WithCreationTimestamp(value apismetav1.Time) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
 // WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
-func (b *GRPCRouteApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *GRPCRouteApplyConfiguration {
+func (b *GRPCRouteApplyConfiguration) WithDeletionTimestamp(value apismetav1.Time) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
@@ -176,7 +176,7 @@ func (b *GRPCRouteApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -186,11 +186,11 @@ func (b *GRPCRouteApplyConfiguration) WithDeletionGracePeriodSeconds(value int64
 // overwriting an existing map entries in Labels field with the same key.
 func (b *GRPCRouteApplyConfiguration) WithLabels(entries map[string]string) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -201,11 +201,11 @@ func (b *GRPCRouteApplyConfiguration) WithLabels(entries map[string]string) *GRP
 // overwriting an existing map entries in Annotations field with the same key.
 func (b *GRPCRouteApplyConfiguration) WithAnnotations(entries map[string]string) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -213,13 +213,13 @@ func (b *GRPCRouteApplyConfiguration) WithAnnotations(entries map[string]string)
 // WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, values provided by each call will be appended to the OwnerReferences field.
-func (b *GRPCRouteApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *GRPCRouteApplyConfiguration {
+func (b *GRPCRouteApplyConfiguration) WithOwnerReferences(values ...*metav1.OwnerReferenceApplyConfiguration) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -230,14 +230,14 @@ func (b *GRPCRouteApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerRef
 func (b *GRPCRouteApplyConfiguration) WithFinalizers(values ...string) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
 
 func (b *GRPCRouteApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
 	if b.ObjectMetaApplyConfiguration == nil {
-		b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{}
+		b.ObjectMetaApplyConfiguration = &metav1.ObjectMetaApplyConfiguration{}
 	}
 }
 
@@ -260,5 +260,5 @@ func (b *GRPCRouteApplyConfiguration) WithStatus(value *GRPCRouteStatusApplyConf
 // GetName retrieves the value of the Name field in the declarative configuration.
 func (b *GRPCRouteApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/apis/v1/grpcroutefilter.go b/applyconfiguration/apis/v1/grpcroutefilter.go
index 80f94c94..7b531ef7 100644
--- a/applyconfiguration/apis/v1/grpcroutefilter.go
+++ b/applyconfiguration/apis/v1/grpcroutefilter.go
@@ -19,13 +19,13 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // GRPCRouteFilterApplyConfiguration represents a declarative configuration of the GRPCRouteFilter type for use
 // with apply.
 type GRPCRouteFilterApplyConfiguration struct {
-	Type                   *v1.GRPCRouteFilterType                    `json:"type,omitempty"`
+	Type                   *apisv1.GRPCRouteFilterType                `json:"type,omitempty"`
 	RequestHeaderModifier  *HTTPHeaderFilterApplyConfiguration        `json:"requestHeaderModifier,omitempty"`
 	ResponseHeaderModifier *HTTPHeaderFilterApplyConfiguration        `json:"responseHeaderModifier,omitempty"`
 	RequestMirror          *HTTPRequestMirrorFilterApplyConfiguration `json:"requestMirror,omitempty"`
@@ -41,7 +41,7 @@ func GRPCRouteFilter() *GRPCRouteFilterApplyConfiguration {
 // WithType sets the Type field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Type field is set to the value of the last call.
-func (b *GRPCRouteFilterApplyConfiguration) WithType(value v1.GRPCRouteFilterType) *GRPCRouteFilterApplyConfiguration {
+func (b *GRPCRouteFilterApplyConfiguration) WithType(value apisv1.GRPCRouteFilterType) *GRPCRouteFilterApplyConfiguration {
 	b.Type = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/grpcrouterule.go b/applyconfiguration/apis/v1/grpcrouterule.go
index 447a9ccc..f03ab7db 100644
--- a/applyconfiguration/apis/v1/grpcrouterule.go
+++ b/applyconfiguration/apis/v1/grpcrouterule.go
@@ -19,13 +19,13 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // GRPCRouteRuleApplyConfiguration represents a declarative configuration of the GRPCRouteRule type for use
 // with apply.
 type GRPCRouteRuleApplyConfiguration struct {
-	Name               *v1.SectionName                       `json:"name,omitempty"`
+	Name               *apisv1.SectionName                   `json:"name,omitempty"`
 	Matches            []GRPCRouteMatchApplyConfiguration    `json:"matches,omitempty"`
 	Filters            []GRPCRouteFilterApplyConfiguration   `json:"filters,omitempty"`
 	BackendRefs        []GRPCBackendRefApplyConfiguration    `json:"backendRefs,omitempty"`
@@ -41,7 +41,7 @@ func GRPCRouteRule() *GRPCRouteRuleApplyConfiguration {
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *GRPCRouteRuleApplyConfiguration) WithName(value v1.SectionName) *GRPCRouteRuleApplyConfiguration {
+func (b *GRPCRouteRuleApplyConfiguration) WithName(value apisv1.SectionName) *GRPCRouteRuleApplyConfiguration {
 	b.Name = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/grpcroutespec.go b/applyconfiguration/apis/v1/grpcroutespec.go
index 70c1e637..00c567e5 100644
--- a/applyconfiguration/apis/v1/grpcroutespec.go
+++ b/applyconfiguration/apis/v1/grpcroutespec.go
@@ -44,7 +44,7 @@ func (b *GRPCRouteSpecApplyConfiguration) WithParentRefs(values ...*ParentRefere
 		if values[i] == nil {
 			panic("nil value passed to WithParentRefs")
 		}
-		b.ParentRefs = append(b.ParentRefs, *values[i])
+		b.CommonRouteSpecApplyConfiguration.ParentRefs = append(b.CommonRouteSpecApplyConfiguration.ParentRefs, *values[i])
 	}
 	return b
 }
diff --git a/applyconfiguration/apis/v1/httpbackendref.go b/applyconfiguration/apis/v1/httpbackendref.go
index 3110537f..28fda8dd 100644
--- a/applyconfiguration/apis/v1/httpbackendref.go
+++ b/applyconfiguration/apis/v1/httpbackendref.go
@@ -39,7 +39,7 @@ func HTTPBackendRef() *HTTPBackendRefApplyConfiguration {
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Group field is set to the value of the last call.
 func (b *HTTPBackendRefApplyConfiguration) WithGroup(value apisv1.Group) *HTTPBackendRefApplyConfiguration {
-	b.Group = &value
+	b.BackendObjectReferenceApplyConfiguration.Group = &value
 	return b
 }
 
@@ -47,7 +47,7 @@ func (b *HTTPBackendRefApplyConfiguration) WithGroup(value apisv1.Group) *HTTPBa
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *HTTPBackendRefApplyConfiguration) WithKind(value apisv1.Kind) *HTTPBackendRefApplyConfiguration {
-	b.Kind = &value
+	b.BackendObjectReferenceApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -55,7 +55,7 @@ func (b *HTTPBackendRefApplyConfiguration) WithKind(value apisv1.Kind) *HTTPBack
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *HTTPBackendRefApplyConfiguration) WithName(value apisv1.ObjectName) *HTTPBackendRefApplyConfiguration {
-	b.Name = &value
+	b.BackendObjectReferenceApplyConfiguration.Name = &value
 	return b
 }
 
@@ -63,7 +63,7 @@ func (b *HTTPBackendRefApplyConfiguration) WithName(value apisv1.ObjectName) *HT
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *HTTPBackendRefApplyConfiguration) WithNamespace(value apisv1.Namespace) *HTTPBackendRefApplyConfiguration {
-	b.Namespace = &value
+	b.BackendObjectReferenceApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -71,7 +71,7 @@ func (b *HTTPBackendRefApplyConfiguration) WithNamespace(value apisv1.Namespace)
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Port field is set to the value of the last call.
 func (b *HTTPBackendRefApplyConfiguration) WithPort(value apisv1.PortNumber) *HTTPBackendRefApplyConfiguration {
-	b.Port = &value
+	b.BackendObjectReferenceApplyConfiguration.Port = &value
 	return b
 }
 
@@ -79,7 +79,7 @@ func (b *HTTPBackendRefApplyConfiguration) WithPort(value apisv1.PortNumber) *HT
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Weight field is set to the value of the last call.
 func (b *HTTPBackendRefApplyConfiguration) WithWeight(value int32) *HTTPBackendRefApplyConfiguration {
-	b.Weight = &value
+	b.BackendRefApplyConfiguration.Weight = &value
 	return b
 }
 
diff --git a/applyconfiguration/apis/v1/httpcorsfilter.go b/applyconfiguration/apis/v1/httpcorsfilter.go
index 9addcf95..c2cf023c 100644
--- a/applyconfiguration/apis/v1/httpcorsfilter.go
+++ b/applyconfiguration/apis/v1/httpcorsfilter.go
@@ -19,18 +19,18 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // HTTPCORSFilterApplyConfiguration represents a declarative configuration of the HTTPCORSFilter type for use
 // with apply.
 type HTTPCORSFilterApplyConfiguration struct {
-	AllowOrigins     []v1.AbsoluteURI            `json:"allowOrigins,omitempty"`
-	AllowCredentials *v1.TrueField               `json:"allowCredentials,omitempty"`
-	AllowMethods     []v1.HTTPMethodWithWildcard `json:"allowMethods,omitempty"`
-	AllowHeaders     []v1.HTTPHeaderName         `json:"allowHeaders,omitempty"`
-	ExposeHeaders    []v1.HTTPHeaderName         `json:"exposeHeaders,omitempty"`
-	MaxAge           *int32                      `json:"maxAge,omitempty"`
+	AllowOrigins     []apisv1.AbsoluteURI            `json:"allowOrigins,omitempty"`
+	AllowCredentials *apisv1.TrueField               `json:"allowCredentials,omitempty"`
+	AllowMethods     []apisv1.HTTPMethodWithWildcard `json:"allowMethods,omitempty"`
+	AllowHeaders     []apisv1.HTTPHeaderName         `json:"allowHeaders,omitempty"`
+	ExposeHeaders    []apisv1.HTTPHeaderName         `json:"exposeHeaders,omitempty"`
+	MaxAge           *int32                          `json:"maxAge,omitempty"`
 }
 
 // HTTPCORSFilterApplyConfiguration constructs a declarative configuration of the HTTPCORSFilter type for use with
@@ -42,7 +42,7 @@ func HTTPCORSFilter() *HTTPCORSFilterApplyConfiguration {
 // WithAllowOrigins adds the given value to the AllowOrigins field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, values provided by each call will be appended to the AllowOrigins field.
-func (b *HTTPCORSFilterApplyConfiguration) WithAllowOrigins(values ...v1.AbsoluteURI) *HTTPCORSFilterApplyConfiguration {
+func (b *HTTPCORSFilterApplyConfiguration) WithAllowOrigins(values ...apisv1.AbsoluteURI) *HTTPCORSFilterApplyConfiguration {
 	for i := range values {
 		b.AllowOrigins = append(b.AllowOrigins, values[i])
 	}
@@ -52,7 +52,7 @@ func (b *HTTPCORSFilterApplyConfiguration) WithAllowOrigins(values ...v1.Absolut
 // WithAllowCredentials sets the AllowCredentials field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the AllowCredentials field is set to the value of the last call.
-func (b *HTTPCORSFilterApplyConfiguration) WithAllowCredentials(value v1.TrueField) *HTTPCORSFilterApplyConfiguration {
+func (b *HTTPCORSFilterApplyConfiguration) WithAllowCredentials(value apisv1.TrueField) *HTTPCORSFilterApplyConfiguration {
 	b.AllowCredentials = &value
 	return b
 }
@@ -60,7 +60,7 @@ func (b *HTTPCORSFilterApplyConfiguration) WithAllowCredentials(value v1.TrueFie
 // WithAllowMethods adds the given value to the AllowMethods field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, values provided by each call will be appended to the AllowMethods field.
-func (b *HTTPCORSFilterApplyConfiguration) WithAllowMethods(values ...v1.HTTPMethodWithWildcard) *HTTPCORSFilterApplyConfiguration {
+func (b *HTTPCORSFilterApplyConfiguration) WithAllowMethods(values ...apisv1.HTTPMethodWithWildcard) *HTTPCORSFilterApplyConfiguration {
 	for i := range values {
 		b.AllowMethods = append(b.AllowMethods, values[i])
 	}
@@ -70,7 +70,7 @@ func (b *HTTPCORSFilterApplyConfiguration) WithAllowMethods(values ...v1.HTTPMet
 // WithAllowHeaders adds the given value to the AllowHeaders field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, values provided by each call will be appended to the AllowHeaders field.
-func (b *HTTPCORSFilterApplyConfiguration) WithAllowHeaders(values ...v1.HTTPHeaderName) *HTTPCORSFilterApplyConfiguration {
+func (b *HTTPCORSFilterApplyConfiguration) WithAllowHeaders(values ...apisv1.HTTPHeaderName) *HTTPCORSFilterApplyConfiguration {
 	for i := range values {
 		b.AllowHeaders = append(b.AllowHeaders, values[i])
 	}
@@ -80,7 +80,7 @@ func (b *HTTPCORSFilterApplyConfiguration) WithAllowHeaders(values ...v1.HTTPHea
 // WithExposeHeaders adds the given value to the ExposeHeaders field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, values provided by each call will be appended to the ExposeHeaders field.
-func (b *HTTPCORSFilterApplyConfiguration) WithExposeHeaders(values ...v1.HTTPHeaderName) *HTTPCORSFilterApplyConfiguration {
+func (b *HTTPCORSFilterApplyConfiguration) WithExposeHeaders(values ...apisv1.HTTPHeaderName) *HTTPCORSFilterApplyConfiguration {
 	for i := range values {
 		b.ExposeHeaders = append(b.ExposeHeaders, values[i])
 	}
diff --git a/applyconfiguration/apis/v1/httpheader.go b/applyconfiguration/apis/v1/httpheader.go
index 9a4bfc8b..16eebb3f 100644
--- a/applyconfiguration/apis/v1/httpheader.go
+++ b/applyconfiguration/apis/v1/httpheader.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // HTTPHeaderApplyConfiguration represents a declarative configuration of the HTTPHeader type for use
 // with apply.
 type HTTPHeaderApplyConfiguration struct {
-	Name  *v1.HTTPHeaderName `json:"name,omitempty"`
-	Value *string            `json:"value,omitempty"`
+	Name  *apisv1.HTTPHeaderName `json:"name,omitempty"`
+	Value *string                `json:"value,omitempty"`
 }
 
 // HTTPHeaderApplyConfiguration constructs a declarative configuration of the HTTPHeader type for use with
@@ -38,7 +38,7 @@ func HTTPHeader() *HTTPHeaderApplyConfiguration {
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *HTTPHeaderApplyConfiguration) WithName(value v1.HTTPHeaderName) *HTTPHeaderApplyConfiguration {
+func (b *HTTPHeaderApplyConfiguration) WithName(value apisv1.HTTPHeaderName) *HTTPHeaderApplyConfiguration {
 	b.Name = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/httpheadermatch.go b/applyconfiguration/apis/v1/httpheadermatch.go
index e2ce954a..d76dd3df 100644
--- a/applyconfiguration/apis/v1/httpheadermatch.go
+++ b/applyconfiguration/apis/v1/httpheadermatch.go
@@ -19,15 +19,15 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // HTTPHeaderMatchApplyConfiguration represents a declarative configuration of the HTTPHeaderMatch type for use
 // with apply.
 type HTTPHeaderMatchApplyConfiguration struct {
-	Type  *v1.HeaderMatchType `json:"type,omitempty"`
-	Name  *v1.HTTPHeaderName  `json:"name,omitempty"`
-	Value *string             `json:"value,omitempty"`
+	Type  *apisv1.HeaderMatchType `json:"type,omitempty"`
+	Name  *apisv1.HTTPHeaderName  `json:"name,omitempty"`
+	Value *string                 `json:"value,omitempty"`
 }
 
 // HTTPHeaderMatchApplyConfiguration constructs a declarative configuration of the HTTPHeaderMatch type for use with
@@ -39,7 +39,7 @@ func HTTPHeaderMatch() *HTTPHeaderMatchApplyConfiguration {
 // WithType sets the Type field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Type field is set to the value of the last call.
-func (b *HTTPHeaderMatchApplyConfiguration) WithType(value v1.HeaderMatchType) *HTTPHeaderMatchApplyConfiguration {
+func (b *HTTPHeaderMatchApplyConfiguration) WithType(value apisv1.HeaderMatchType) *HTTPHeaderMatchApplyConfiguration {
 	b.Type = &value
 	return b
 }
@@ -47,7 +47,7 @@ func (b *HTTPHeaderMatchApplyConfiguration) WithType(value v1.HeaderMatchType) *
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *HTTPHeaderMatchApplyConfiguration) WithName(value v1.HTTPHeaderName) *HTTPHeaderMatchApplyConfiguration {
+func (b *HTTPHeaderMatchApplyConfiguration) WithName(value apisv1.HTTPHeaderName) *HTTPHeaderMatchApplyConfiguration {
 	b.Name = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/httppathmatch.go b/applyconfiguration/apis/v1/httppathmatch.go
index ca21e6df..d1c3f670 100644
--- a/applyconfiguration/apis/v1/httppathmatch.go
+++ b/applyconfiguration/apis/v1/httppathmatch.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // HTTPPathMatchApplyConfiguration represents a declarative configuration of the HTTPPathMatch type for use
 // with apply.
 type HTTPPathMatchApplyConfiguration struct {
-	Type  *v1.PathMatchType `json:"type,omitempty"`
-	Value *string           `json:"value,omitempty"`
+	Type  *apisv1.PathMatchType `json:"type,omitempty"`
+	Value *string               `json:"value,omitempty"`
 }
 
 // HTTPPathMatchApplyConfiguration constructs a declarative configuration of the HTTPPathMatch type for use with
@@ -38,7 +38,7 @@ func HTTPPathMatch() *HTTPPathMatchApplyConfiguration {
 // WithType sets the Type field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Type field is set to the value of the last call.
-func (b *HTTPPathMatchApplyConfiguration) WithType(value v1.PathMatchType) *HTTPPathMatchApplyConfiguration {
+func (b *HTTPPathMatchApplyConfiguration) WithType(value apisv1.PathMatchType) *HTTPPathMatchApplyConfiguration {
 	b.Type = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/httppathmodifier.go b/applyconfiguration/apis/v1/httppathmodifier.go
index 888f3c7f..e0aec0d1 100644
--- a/applyconfiguration/apis/v1/httppathmodifier.go
+++ b/applyconfiguration/apis/v1/httppathmodifier.go
@@ -19,15 +19,15 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // HTTPPathModifierApplyConfiguration represents a declarative configuration of the HTTPPathModifier type for use
 // with apply.
 type HTTPPathModifierApplyConfiguration struct {
-	Type               *v1.HTTPPathModifierType `json:"type,omitempty"`
-	ReplaceFullPath    *string                  `json:"replaceFullPath,omitempty"`
-	ReplacePrefixMatch *string                  `json:"replacePrefixMatch,omitempty"`
+	Type               *apisv1.HTTPPathModifierType `json:"type,omitempty"`
+	ReplaceFullPath    *string                      `json:"replaceFullPath,omitempty"`
+	ReplacePrefixMatch *string                      `json:"replacePrefixMatch,omitempty"`
 }
 
 // HTTPPathModifierApplyConfiguration constructs a declarative configuration of the HTTPPathModifier type for use with
@@ -39,7 +39,7 @@ func HTTPPathModifier() *HTTPPathModifierApplyConfiguration {
 // WithType sets the Type field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Type field is set to the value of the last call.
-func (b *HTTPPathModifierApplyConfiguration) WithType(value v1.HTTPPathModifierType) *HTTPPathModifierApplyConfiguration {
+func (b *HTTPPathModifierApplyConfiguration) WithType(value apisv1.HTTPPathModifierType) *HTTPPathModifierApplyConfiguration {
 	b.Type = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/httpqueryparammatch.go b/applyconfiguration/apis/v1/httpqueryparammatch.go
index ccbdfe94..a53206ad 100644
--- a/applyconfiguration/apis/v1/httpqueryparammatch.go
+++ b/applyconfiguration/apis/v1/httpqueryparammatch.go
@@ -19,15 +19,15 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // HTTPQueryParamMatchApplyConfiguration represents a declarative configuration of the HTTPQueryParamMatch type for use
 // with apply.
 type HTTPQueryParamMatchApplyConfiguration struct {
-	Type  *v1.QueryParamMatchType `json:"type,omitempty"`
-	Name  *v1.HTTPHeaderName      `json:"name,omitempty"`
-	Value *string                 `json:"value,omitempty"`
+	Type  *apisv1.QueryParamMatchType `json:"type,omitempty"`
+	Name  *apisv1.HTTPHeaderName      `json:"name,omitempty"`
+	Value *string                     `json:"value,omitempty"`
 }
 
 // HTTPQueryParamMatchApplyConfiguration constructs a declarative configuration of the HTTPQueryParamMatch type for use with
@@ -39,7 +39,7 @@ func HTTPQueryParamMatch() *HTTPQueryParamMatchApplyConfiguration {
 // WithType sets the Type field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Type field is set to the value of the last call.
-func (b *HTTPQueryParamMatchApplyConfiguration) WithType(value v1.QueryParamMatchType) *HTTPQueryParamMatchApplyConfiguration {
+func (b *HTTPQueryParamMatchApplyConfiguration) WithType(value apisv1.QueryParamMatchType) *HTTPQueryParamMatchApplyConfiguration {
 	b.Type = &value
 	return b
 }
@@ -47,7 +47,7 @@ func (b *HTTPQueryParamMatchApplyConfiguration) WithType(value v1.QueryParamMatc
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *HTTPQueryParamMatchApplyConfiguration) WithName(value v1.HTTPHeaderName) *HTTPQueryParamMatchApplyConfiguration {
+func (b *HTTPQueryParamMatchApplyConfiguration) WithName(value apisv1.HTTPHeaderName) *HTTPQueryParamMatchApplyConfiguration {
 	b.Name = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/httprequestredirectfilter.go b/applyconfiguration/apis/v1/httprequestredirectfilter.go
index 3a0c8600..a9d82b90 100644
--- a/applyconfiguration/apis/v1/httprequestredirectfilter.go
+++ b/applyconfiguration/apis/v1/httprequestredirectfilter.go
@@ -19,16 +19,16 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // HTTPRequestRedirectFilterApplyConfiguration represents a declarative configuration of the HTTPRequestRedirectFilter type for use
 // with apply.
 type HTTPRequestRedirectFilterApplyConfiguration struct {
 	Scheme     *string                             `json:"scheme,omitempty"`
-	Hostname   *v1.PreciseHostname                 `json:"hostname,omitempty"`
+	Hostname   *apisv1.PreciseHostname             `json:"hostname,omitempty"`
 	Path       *HTTPPathModifierApplyConfiguration `json:"path,omitempty"`
-	Port       *v1.PortNumber                      `json:"port,omitempty"`
+	Port       *apisv1.PortNumber                  `json:"port,omitempty"`
 	StatusCode *int                                `json:"statusCode,omitempty"`
 }
 
@@ -49,7 +49,7 @@ func (b *HTTPRequestRedirectFilterApplyConfiguration) WithScheme(value string) *
 // WithHostname sets the Hostname field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Hostname field is set to the value of the last call.
-func (b *HTTPRequestRedirectFilterApplyConfiguration) WithHostname(value v1.PreciseHostname) *HTTPRequestRedirectFilterApplyConfiguration {
+func (b *HTTPRequestRedirectFilterApplyConfiguration) WithHostname(value apisv1.PreciseHostname) *HTTPRequestRedirectFilterApplyConfiguration {
 	b.Hostname = &value
 	return b
 }
@@ -65,7 +65,7 @@ func (b *HTTPRequestRedirectFilterApplyConfiguration) WithPath(value *HTTPPathMo
 // WithPort sets the Port field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Port field is set to the value of the last call.
-func (b *HTTPRequestRedirectFilterApplyConfiguration) WithPort(value v1.PortNumber) *HTTPRequestRedirectFilterApplyConfiguration {
+func (b *HTTPRequestRedirectFilterApplyConfiguration) WithPort(value apisv1.PortNumber) *HTTPRequestRedirectFilterApplyConfiguration {
 	b.Port = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/httproute.go b/applyconfiguration/apis/v1/httproute.go
index ee961e01..31863abd 100644
--- a/applyconfiguration/apis/v1/httproute.go
+++ b/applyconfiguration/apis/v1/httproute.go
@@ -19,21 +19,21 @@ limitations under the License.
 package v1
 
 import (
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	managedfields "k8s.io/apimachinery/pkg/util/managedfields"
-	v1 "k8s.io/client-go/applyconfigurations/meta/v1"
-	gatewayapiapisv1 "sigs.k8s.io/gateway-api/apis/v1"
+	metav1 "k8s.io/client-go/applyconfigurations/meta/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 	internal "sigs.k8s.io/gateway-api/applyconfiguration/internal"
 )
 
 // HTTPRouteApplyConfiguration represents a declarative configuration of the HTTPRoute type for use
 // with apply.
 type HTTPRouteApplyConfiguration struct {
-	v1.TypeMetaApplyConfiguration    `json:",inline"`
-	*v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
-	Spec                             *HTTPRouteSpecApplyConfiguration   `json:"spec,omitempty"`
-	Status                           *HTTPRouteStatusApplyConfiguration `json:"status,omitempty"`
+	metav1.TypeMetaApplyConfiguration    `json:",inline"`
+	*metav1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
+	Spec                                 *HTTPRouteSpecApplyConfiguration   `json:"spec,omitempty"`
+	Status                               *HTTPRouteStatusApplyConfiguration `json:"status,omitempty"`
 }
 
 // HTTPRoute constructs a declarative configuration of the HTTPRoute type for use with
@@ -58,18 +58,18 @@ func HTTPRoute(name, namespace string) *HTTPRouteApplyConfiguration {
 // Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously
 // applied if another fieldManager has updated or force applied any of the previously applied fields.
 // Experimental!
-func ExtractHTTPRoute(hTTPRoute *gatewayapiapisv1.HTTPRoute, fieldManager string) (*HTTPRouteApplyConfiguration, error) {
+func ExtractHTTPRoute(hTTPRoute *apisv1.HTTPRoute, fieldManager string) (*HTTPRouteApplyConfiguration, error) {
 	return extractHTTPRoute(hTTPRoute, fieldManager, "")
 }
 
 // ExtractHTTPRouteStatus is the same as ExtractHTTPRoute except
 // that it extracts the status subresource applied configuration.
 // Experimental!
-func ExtractHTTPRouteStatus(hTTPRoute *gatewayapiapisv1.HTTPRoute, fieldManager string) (*HTTPRouteApplyConfiguration, error) {
+func ExtractHTTPRouteStatus(hTTPRoute *apisv1.HTTPRoute, fieldManager string) (*HTTPRouteApplyConfiguration, error) {
 	return extractHTTPRoute(hTTPRoute, fieldManager, "status")
 }
 
-func extractHTTPRoute(hTTPRoute *gatewayapiapisv1.HTTPRoute, fieldManager string, subresource string) (*HTTPRouteApplyConfiguration, error) {
+func extractHTTPRoute(hTTPRoute *apisv1.HTTPRoute, fieldManager string, subresource string) (*HTTPRouteApplyConfiguration, error) {
 	b := &HTTPRouteApplyConfiguration{}
 	err := managedfields.ExtractInto(hTTPRoute, internal.Parser().Type("io.k8s.sigs.gateway-api.apis.v1.HTTPRoute"), fieldManager, b, subresource)
 	if err != nil {
@@ -87,7 +87,7 @@ func extractHTTPRoute(hTTPRoute *gatewayapiapisv1.HTTPRoute, fieldManager string
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithKind(value string) *HTTPRouteApplyConfiguration {
-	b.Kind = &value
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -95,7 +95,7 @@ func (b *HTTPRouteApplyConfiguration) WithKind(value string) *HTTPRouteApplyConf
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithAPIVersion(value string) *HTTPRouteApplyConfiguration {
-	b.APIVersion = &value
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
@@ -104,7 +104,7 @@ func (b *HTTPRouteApplyConfiguration) WithAPIVersion(value string) *HTTPRouteApp
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithName(value string) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
@@ -113,7 +113,7 @@ func (b *HTTPRouteApplyConfiguration) WithName(value string) *HTTPRouteApplyConf
 // If called multiple times, the GenerateName field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithGenerateName(value string) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
@@ -122,7 +122,7 @@ func (b *HTTPRouteApplyConfiguration) WithGenerateName(value string) *HTTPRouteA
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithNamespace(value string) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -131,7 +131,7 @@ func (b *HTTPRouteApplyConfiguration) WithNamespace(value string) *HTTPRouteAppl
 // If called multiple times, the UID field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithUID(value types.UID) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
@@ -140,7 +140,7 @@ func (b *HTTPRouteApplyConfiguration) WithUID(value types.UID) *HTTPRouteApplyCo
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithResourceVersion(value string) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
@@ -149,25 +149,25 @@ func (b *HTTPRouteApplyConfiguration) WithResourceVersion(value string) *HTTPRou
 // If called multiple times, the Generation field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithGeneration(value int64) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
 // WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
-func (b *HTTPRouteApplyConfiguration) WithCreationTimestamp(value metav1.Time) *HTTPRouteApplyConfiguration {
+func (b *HTTPRouteApplyConfiguration) WithCreationTimestamp(value apismetav1.Time) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
 // WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
-func (b *HTTPRouteApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *HTTPRouteApplyConfiguration {
+func (b *HTTPRouteApplyConfiguration) WithDeletionTimestamp(value apismetav1.Time) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
@@ -176,7 +176,7 @@ func (b *HTTPRouteApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -186,11 +186,11 @@ func (b *HTTPRouteApplyConfiguration) WithDeletionGracePeriodSeconds(value int64
 // overwriting an existing map entries in Labels field with the same key.
 func (b *HTTPRouteApplyConfiguration) WithLabels(entries map[string]string) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -201,11 +201,11 @@ func (b *HTTPRouteApplyConfiguration) WithLabels(entries map[string]string) *HTT
 // overwriting an existing map entries in Annotations field with the same key.
 func (b *HTTPRouteApplyConfiguration) WithAnnotations(entries map[string]string) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -213,13 +213,13 @@ func (b *HTTPRouteApplyConfiguration) WithAnnotations(entries map[string]string)
 // WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, values provided by each call will be appended to the OwnerReferences field.
-func (b *HTTPRouteApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *HTTPRouteApplyConfiguration {
+func (b *HTTPRouteApplyConfiguration) WithOwnerReferences(values ...*metav1.OwnerReferenceApplyConfiguration) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -230,14 +230,14 @@ func (b *HTTPRouteApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerRef
 func (b *HTTPRouteApplyConfiguration) WithFinalizers(values ...string) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
 
 func (b *HTTPRouteApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
 	if b.ObjectMetaApplyConfiguration == nil {
-		b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{}
+		b.ObjectMetaApplyConfiguration = &metav1.ObjectMetaApplyConfiguration{}
 	}
 }
 
@@ -260,5 +260,5 @@ func (b *HTTPRouteApplyConfiguration) WithStatus(value *HTTPRouteStatusApplyConf
 // GetName retrieves the value of the Name field in the declarative configuration.
 func (b *HTTPRouteApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/apis/v1/httproutefilter.go b/applyconfiguration/apis/v1/httproutefilter.go
index 647b1dba..2a46046b 100644
--- a/applyconfiguration/apis/v1/httproutefilter.go
+++ b/applyconfiguration/apis/v1/httproutefilter.go
@@ -19,13 +19,13 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // HTTPRouteFilterApplyConfiguration represents a declarative configuration of the HTTPRouteFilter type for use
 // with apply.
 type HTTPRouteFilterApplyConfiguration struct {
-	Type                   *v1.HTTPRouteFilterType                      `json:"type,omitempty"`
+	Type                   *apisv1.HTTPRouteFilterType                  `json:"type,omitempty"`
 	RequestHeaderModifier  *HTTPHeaderFilterApplyConfiguration          `json:"requestHeaderModifier,omitempty"`
 	ResponseHeaderModifier *HTTPHeaderFilterApplyConfiguration          `json:"responseHeaderModifier,omitempty"`
 	RequestMirror          *HTTPRequestMirrorFilterApplyConfiguration   `json:"requestMirror,omitempty"`
@@ -44,7 +44,7 @@ func HTTPRouteFilter() *HTTPRouteFilterApplyConfiguration {
 // WithType sets the Type field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Type field is set to the value of the last call.
-func (b *HTTPRouteFilterApplyConfiguration) WithType(value v1.HTTPRouteFilterType) *HTTPRouteFilterApplyConfiguration {
+func (b *HTTPRouteFilterApplyConfiguration) WithType(value apisv1.HTTPRouteFilterType) *HTTPRouteFilterApplyConfiguration {
 	b.Type = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/httprouteretry.go b/applyconfiguration/apis/v1/httprouteretry.go
index 7528bcce..71c6ec1c 100644
--- a/applyconfiguration/apis/v1/httprouteretry.go
+++ b/applyconfiguration/apis/v1/httprouteretry.go
@@ -19,15 +19,15 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // HTTPRouteRetryApplyConfiguration represents a declarative configuration of the HTTPRouteRetry type for use
 // with apply.
 type HTTPRouteRetryApplyConfiguration struct {
-	Codes    []v1.HTTPRouteRetryStatusCode `json:"codes,omitempty"`
-	Attempts *int                          `json:"attempts,omitempty"`
-	Backoff  *v1.Duration                  `json:"backoff,omitempty"`
+	Codes    []apisv1.HTTPRouteRetryStatusCode `json:"codes,omitempty"`
+	Attempts *int                              `json:"attempts,omitempty"`
+	Backoff  *apisv1.Duration                  `json:"backoff,omitempty"`
 }
 
 // HTTPRouteRetryApplyConfiguration constructs a declarative configuration of the HTTPRouteRetry type for use with
@@ -39,7 +39,7 @@ func HTTPRouteRetry() *HTTPRouteRetryApplyConfiguration {
 // WithCodes adds the given value to the Codes field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, values provided by each call will be appended to the Codes field.
-func (b *HTTPRouteRetryApplyConfiguration) WithCodes(values ...v1.HTTPRouteRetryStatusCode) *HTTPRouteRetryApplyConfiguration {
+func (b *HTTPRouteRetryApplyConfiguration) WithCodes(values ...apisv1.HTTPRouteRetryStatusCode) *HTTPRouteRetryApplyConfiguration {
 	for i := range values {
 		b.Codes = append(b.Codes, values[i])
 	}
@@ -57,7 +57,7 @@ func (b *HTTPRouteRetryApplyConfiguration) WithAttempts(value int) *HTTPRouteRet
 // WithBackoff sets the Backoff field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Backoff field is set to the value of the last call.
-func (b *HTTPRouteRetryApplyConfiguration) WithBackoff(value v1.Duration) *HTTPRouteRetryApplyConfiguration {
+func (b *HTTPRouteRetryApplyConfiguration) WithBackoff(value apisv1.Duration) *HTTPRouteRetryApplyConfiguration {
 	b.Backoff = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/httprouterule.go b/applyconfiguration/apis/v1/httprouterule.go
index b7ac89a7..57300a31 100644
--- a/applyconfiguration/apis/v1/httprouterule.go
+++ b/applyconfiguration/apis/v1/httprouterule.go
@@ -19,13 +19,13 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // HTTPRouteRuleApplyConfiguration represents a declarative configuration of the HTTPRouteRule type for use
 // with apply.
 type HTTPRouteRuleApplyConfiguration struct {
-	Name               *v1.SectionName                       `json:"name,omitempty"`
+	Name               *apisv1.SectionName                   `json:"name,omitempty"`
 	Matches            []HTTPRouteMatchApplyConfiguration    `json:"matches,omitempty"`
 	Filters            []HTTPRouteFilterApplyConfiguration   `json:"filters,omitempty"`
 	BackendRefs        []HTTPBackendRefApplyConfiguration    `json:"backendRefs,omitempty"`
@@ -43,7 +43,7 @@ func HTTPRouteRule() *HTTPRouteRuleApplyConfiguration {
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *HTTPRouteRuleApplyConfiguration) WithName(value v1.SectionName) *HTTPRouteRuleApplyConfiguration {
+func (b *HTTPRouteRuleApplyConfiguration) WithName(value apisv1.SectionName) *HTTPRouteRuleApplyConfiguration {
 	b.Name = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/httproutespec.go b/applyconfiguration/apis/v1/httproutespec.go
index e1251614..439ddbd9 100644
--- a/applyconfiguration/apis/v1/httproutespec.go
+++ b/applyconfiguration/apis/v1/httproutespec.go
@@ -44,7 +44,7 @@ func (b *HTTPRouteSpecApplyConfiguration) WithParentRefs(values ...*ParentRefere
 		if values[i] == nil {
 			panic("nil value passed to WithParentRefs")
 		}
-		b.ParentRefs = append(b.ParentRefs, *values[i])
+		b.CommonRouteSpecApplyConfiguration.ParentRefs = append(b.CommonRouteSpecApplyConfiguration.ParentRefs, *values[i])
 	}
 	return b
 }
diff --git a/applyconfiguration/apis/v1/httproutetimeouts.go b/applyconfiguration/apis/v1/httproutetimeouts.go
index 98a1a990..0e77bb21 100644
--- a/applyconfiguration/apis/v1/httproutetimeouts.go
+++ b/applyconfiguration/apis/v1/httproutetimeouts.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // HTTPRouteTimeoutsApplyConfiguration represents a declarative configuration of the HTTPRouteTimeouts type for use
 // with apply.
 type HTTPRouteTimeoutsApplyConfiguration struct {
-	Request        *v1.Duration `json:"request,omitempty"`
-	BackendRequest *v1.Duration `json:"backendRequest,omitempty"`
+	Request        *apisv1.Duration `json:"request,omitempty"`
+	BackendRequest *apisv1.Duration `json:"backendRequest,omitempty"`
 }
 
 // HTTPRouteTimeoutsApplyConfiguration constructs a declarative configuration of the HTTPRouteTimeouts type for use with
@@ -38,7 +38,7 @@ func HTTPRouteTimeouts() *HTTPRouteTimeoutsApplyConfiguration {
 // WithRequest sets the Request field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Request field is set to the value of the last call.
-func (b *HTTPRouteTimeoutsApplyConfiguration) WithRequest(value v1.Duration) *HTTPRouteTimeoutsApplyConfiguration {
+func (b *HTTPRouteTimeoutsApplyConfiguration) WithRequest(value apisv1.Duration) *HTTPRouteTimeoutsApplyConfiguration {
 	b.Request = &value
 	return b
 }
@@ -46,7 +46,7 @@ func (b *HTTPRouteTimeoutsApplyConfiguration) WithRequest(value v1.Duration) *HT
 // WithBackendRequest sets the BackendRequest field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the BackendRequest field is set to the value of the last call.
-func (b *HTTPRouteTimeoutsApplyConfiguration) WithBackendRequest(value v1.Duration) *HTTPRouteTimeoutsApplyConfiguration {
+func (b *HTTPRouteTimeoutsApplyConfiguration) WithBackendRequest(value apisv1.Duration) *HTTPRouteTimeoutsApplyConfiguration {
 	b.BackendRequest = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/httpurlrewritefilter.go b/applyconfiguration/apis/v1/httpurlrewritefilter.go
index 9761c24c..07d45ad2 100644
--- a/applyconfiguration/apis/v1/httpurlrewritefilter.go
+++ b/applyconfiguration/apis/v1/httpurlrewritefilter.go
@@ -19,13 +19,13 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // HTTPURLRewriteFilterApplyConfiguration represents a declarative configuration of the HTTPURLRewriteFilter type for use
 // with apply.
 type HTTPURLRewriteFilterApplyConfiguration struct {
-	Hostname *v1.PreciseHostname                 `json:"hostname,omitempty"`
+	Hostname *apisv1.PreciseHostname             `json:"hostname,omitempty"`
 	Path     *HTTPPathModifierApplyConfiguration `json:"path,omitempty"`
 }
 
@@ -38,7 +38,7 @@ func HTTPURLRewriteFilter() *HTTPURLRewriteFilterApplyConfiguration {
 // WithHostname sets the Hostname field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Hostname field is set to the value of the last call.
-func (b *HTTPURLRewriteFilterApplyConfiguration) WithHostname(value v1.PreciseHostname) *HTTPURLRewriteFilterApplyConfiguration {
+func (b *HTTPURLRewriteFilterApplyConfiguration) WithHostname(value apisv1.PreciseHostname) *HTTPURLRewriteFilterApplyConfiguration {
 	b.Hostname = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/listener.go b/applyconfiguration/apis/v1/listener.go
index 5301fa46..35be06a7 100644
--- a/applyconfiguration/apis/v1/listener.go
+++ b/applyconfiguration/apis/v1/listener.go
@@ -19,16 +19,16 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // ListenerApplyConfiguration represents a declarative configuration of the Listener type for use
 // with apply.
 type ListenerApplyConfiguration struct {
-	Name          *v1.SectionName                     `json:"name,omitempty"`
-	Hostname      *v1.Hostname                        `json:"hostname,omitempty"`
-	Port          *v1.PortNumber                      `json:"port,omitempty"`
-	Protocol      *v1.ProtocolType                    `json:"protocol,omitempty"`
+	Name          *apisv1.SectionName                 `json:"name,omitempty"`
+	Hostname      *apisv1.Hostname                    `json:"hostname,omitempty"`
+	Port          *apisv1.PortNumber                  `json:"port,omitempty"`
+	Protocol      *apisv1.ProtocolType                `json:"protocol,omitempty"`
 	TLS           *GatewayTLSConfigApplyConfiguration `json:"tls,omitempty"`
 	AllowedRoutes *AllowedRoutesApplyConfiguration    `json:"allowedRoutes,omitempty"`
 }
@@ -42,7 +42,7 @@ func Listener() *ListenerApplyConfiguration {
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *ListenerApplyConfiguration) WithName(value v1.SectionName) *ListenerApplyConfiguration {
+func (b *ListenerApplyConfiguration) WithName(value apisv1.SectionName) *ListenerApplyConfiguration {
 	b.Name = &value
 	return b
 }
@@ -50,7 +50,7 @@ func (b *ListenerApplyConfiguration) WithName(value v1.SectionName) *ListenerApp
 // WithHostname sets the Hostname field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Hostname field is set to the value of the last call.
-func (b *ListenerApplyConfiguration) WithHostname(value v1.Hostname) *ListenerApplyConfiguration {
+func (b *ListenerApplyConfiguration) WithHostname(value apisv1.Hostname) *ListenerApplyConfiguration {
 	b.Hostname = &value
 	return b
 }
@@ -58,7 +58,7 @@ func (b *ListenerApplyConfiguration) WithHostname(value v1.Hostname) *ListenerAp
 // WithPort sets the Port field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Port field is set to the value of the last call.
-func (b *ListenerApplyConfiguration) WithPort(value v1.PortNumber) *ListenerApplyConfiguration {
+func (b *ListenerApplyConfiguration) WithPort(value apisv1.PortNumber) *ListenerApplyConfiguration {
 	b.Port = &value
 	return b
 }
@@ -66,7 +66,7 @@ func (b *ListenerApplyConfiguration) WithPort(value v1.PortNumber) *ListenerAppl
 // WithProtocol sets the Protocol field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Protocol field is set to the value of the last call.
-func (b *ListenerApplyConfiguration) WithProtocol(value v1.ProtocolType) *ListenerApplyConfiguration {
+func (b *ListenerApplyConfiguration) WithProtocol(value apisv1.ProtocolType) *ListenerApplyConfiguration {
 	b.Protocol = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/listenernamespaces.go b/applyconfiguration/apis/v1/listenernamespaces.go
index d6869648..bc44b1a2 100644
--- a/applyconfiguration/apis/v1/listenernamespaces.go
+++ b/applyconfiguration/apis/v1/listenernamespaces.go
@@ -20,13 +20,13 @@ package v1
 
 import (
 	metav1 "k8s.io/client-go/applyconfigurations/meta/v1"
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // ListenerNamespacesApplyConfiguration represents a declarative configuration of the ListenerNamespaces type for use
 // with apply.
 type ListenerNamespacesApplyConfiguration struct {
-	From     *v1.FromNamespaces                      `json:"from,omitempty"`
+	From     *apisv1.FromNamespaces                  `json:"from,omitempty"`
 	Selector *metav1.LabelSelectorApplyConfiguration `json:"selector,omitempty"`
 }
 
@@ -39,7 +39,7 @@ func ListenerNamespaces() *ListenerNamespacesApplyConfiguration {
 // WithFrom sets the From field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the From field is set to the value of the last call.
-func (b *ListenerNamespacesApplyConfiguration) WithFrom(value v1.FromNamespaces) *ListenerNamespacesApplyConfiguration {
+func (b *ListenerNamespacesApplyConfiguration) WithFrom(value apisv1.FromNamespaces) *ListenerNamespacesApplyConfiguration {
 	b.From = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/listenerstatus.go b/applyconfiguration/apis/v1/listenerstatus.go
index 88a877c6..16692c32 100644
--- a/applyconfiguration/apis/v1/listenerstatus.go
+++ b/applyconfiguration/apis/v1/listenerstatus.go
@@ -20,13 +20,13 @@ package v1
 
 import (
 	metav1 "k8s.io/client-go/applyconfigurations/meta/v1"
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // ListenerStatusApplyConfiguration represents a declarative configuration of the ListenerStatus type for use
 // with apply.
 type ListenerStatusApplyConfiguration struct {
-	Name           *v1.SectionName                      `json:"name,omitempty"`
+	Name           *apisv1.SectionName                  `json:"name,omitempty"`
 	SupportedKinds []RouteGroupKindApplyConfiguration   `json:"supportedKinds,omitempty"`
 	AttachedRoutes *int32                               `json:"attachedRoutes,omitempty"`
 	Conditions     []metav1.ConditionApplyConfiguration `json:"conditions,omitempty"`
@@ -41,7 +41,7 @@ func ListenerStatus() *ListenerStatusApplyConfiguration {
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *ListenerStatusApplyConfiguration) WithName(value v1.SectionName) *ListenerStatusApplyConfiguration {
+func (b *ListenerStatusApplyConfiguration) WithName(value apisv1.SectionName) *ListenerStatusApplyConfiguration {
 	b.Name = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/localobjectreference.go b/applyconfiguration/apis/v1/localobjectreference.go
index 7d7c7a12..1c9ade9c 100644
--- a/applyconfiguration/apis/v1/localobjectreference.go
+++ b/applyconfiguration/apis/v1/localobjectreference.go
@@ -19,15 +19,15 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // LocalObjectReferenceApplyConfiguration represents a declarative configuration of the LocalObjectReference type for use
 // with apply.
 type LocalObjectReferenceApplyConfiguration struct {
-	Group *v1.Group      `json:"group,omitempty"`
-	Kind  *v1.Kind       `json:"kind,omitempty"`
-	Name  *v1.ObjectName `json:"name,omitempty"`
+	Group *apisv1.Group      `json:"group,omitempty"`
+	Kind  *apisv1.Kind       `json:"kind,omitempty"`
+	Name  *apisv1.ObjectName `json:"name,omitempty"`
 }
 
 // LocalObjectReferenceApplyConfiguration constructs a declarative configuration of the LocalObjectReference type for use with
@@ -39,7 +39,7 @@ func LocalObjectReference() *LocalObjectReferenceApplyConfiguration {
 // WithGroup sets the Group field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Group field is set to the value of the last call.
-func (b *LocalObjectReferenceApplyConfiguration) WithGroup(value v1.Group) *LocalObjectReferenceApplyConfiguration {
+func (b *LocalObjectReferenceApplyConfiguration) WithGroup(value apisv1.Group) *LocalObjectReferenceApplyConfiguration {
 	b.Group = &value
 	return b
 }
@@ -47,7 +47,7 @@ func (b *LocalObjectReferenceApplyConfiguration) WithGroup(value v1.Group) *Loca
 // WithKind sets the Kind field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
-func (b *LocalObjectReferenceApplyConfiguration) WithKind(value v1.Kind) *LocalObjectReferenceApplyConfiguration {
+func (b *LocalObjectReferenceApplyConfiguration) WithKind(value apisv1.Kind) *LocalObjectReferenceApplyConfiguration {
 	b.Kind = &value
 	return b
 }
@@ -55,7 +55,7 @@ func (b *LocalObjectReferenceApplyConfiguration) WithKind(value v1.Kind) *LocalO
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *LocalObjectReferenceApplyConfiguration) WithName(value v1.ObjectName) *LocalObjectReferenceApplyConfiguration {
+func (b *LocalObjectReferenceApplyConfiguration) WithName(value apisv1.ObjectName) *LocalObjectReferenceApplyConfiguration {
 	b.Name = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/localparametersreference.go b/applyconfiguration/apis/v1/localparametersreference.go
index cde618b0..a4e152dc 100644
--- a/applyconfiguration/apis/v1/localparametersreference.go
+++ b/applyconfiguration/apis/v1/localparametersreference.go
@@ -19,15 +19,15 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // LocalParametersReferenceApplyConfiguration represents a declarative configuration of the LocalParametersReference type for use
 // with apply.
 type LocalParametersReferenceApplyConfiguration struct {
-	Group *v1.Group `json:"group,omitempty"`
-	Kind  *v1.Kind  `json:"kind,omitempty"`
-	Name  *string   `json:"name,omitempty"`
+	Group *apisv1.Group `json:"group,omitempty"`
+	Kind  *apisv1.Kind  `json:"kind,omitempty"`
+	Name  *string       `json:"name,omitempty"`
 }
 
 // LocalParametersReferenceApplyConfiguration constructs a declarative configuration of the LocalParametersReference type for use with
@@ -39,7 +39,7 @@ func LocalParametersReference() *LocalParametersReferenceApplyConfiguration {
 // WithGroup sets the Group field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Group field is set to the value of the last call.
-func (b *LocalParametersReferenceApplyConfiguration) WithGroup(value v1.Group) *LocalParametersReferenceApplyConfiguration {
+func (b *LocalParametersReferenceApplyConfiguration) WithGroup(value apisv1.Group) *LocalParametersReferenceApplyConfiguration {
 	b.Group = &value
 	return b
 }
@@ -47,7 +47,7 @@ func (b *LocalParametersReferenceApplyConfiguration) WithGroup(value v1.Group) *
 // WithKind sets the Kind field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
-func (b *LocalParametersReferenceApplyConfiguration) WithKind(value v1.Kind) *LocalParametersReferenceApplyConfiguration {
+func (b *LocalParametersReferenceApplyConfiguration) WithKind(value apisv1.Kind) *LocalParametersReferenceApplyConfiguration {
 	b.Kind = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/objectreference.go b/applyconfiguration/apis/v1/objectreference.go
index b35f2eaf..155fb0f8 100644
--- a/applyconfiguration/apis/v1/objectreference.go
+++ b/applyconfiguration/apis/v1/objectreference.go
@@ -19,16 +19,16 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // ObjectReferenceApplyConfiguration represents a declarative configuration of the ObjectReference type for use
 // with apply.
 type ObjectReferenceApplyConfiguration struct {
-	Group     *v1.Group      `json:"group,omitempty"`
-	Kind      *v1.Kind       `json:"kind,omitempty"`
-	Name      *v1.ObjectName `json:"name,omitempty"`
-	Namespace *v1.Namespace  `json:"namespace,omitempty"`
+	Group     *apisv1.Group      `json:"group,omitempty"`
+	Kind      *apisv1.Kind       `json:"kind,omitempty"`
+	Name      *apisv1.ObjectName `json:"name,omitempty"`
+	Namespace *apisv1.Namespace  `json:"namespace,omitempty"`
 }
 
 // ObjectReferenceApplyConfiguration constructs a declarative configuration of the ObjectReference type for use with
@@ -40,7 +40,7 @@ func ObjectReference() *ObjectReferenceApplyConfiguration {
 // WithGroup sets the Group field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Group field is set to the value of the last call.
-func (b *ObjectReferenceApplyConfiguration) WithGroup(value v1.Group) *ObjectReferenceApplyConfiguration {
+func (b *ObjectReferenceApplyConfiguration) WithGroup(value apisv1.Group) *ObjectReferenceApplyConfiguration {
 	b.Group = &value
 	return b
 }
@@ -48,7 +48,7 @@ func (b *ObjectReferenceApplyConfiguration) WithGroup(value v1.Group) *ObjectRef
 // WithKind sets the Kind field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
-func (b *ObjectReferenceApplyConfiguration) WithKind(value v1.Kind) *ObjectReferenceApplyConfiguration {
+func (b *ObjectReferenceApplyConfiguration) WithKind(value apisv1.Kind) *ObjectReferenceApplyConfiguration {
 	b.Kind = &value
 	return b
 }
@@ -56,7 +56,7 @@ func (b *ObjectReferenceApplyConfiguration) WithKind(value v1.Kind) *ObjectRefer
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *ObjectReferenceApplyConfiguration) WithName(value v1.ObjectName) *ObjectReferenceApplyConfiguration {
+func (b *ObjectReferenceApplyConfiguration) WithName(value apisv1.ObjectName) *ObjectReferenceApplyConfiguration {
 	b.Name = &value
 	return b
 }
@@ -64,7 +64,7 @@ func (b *ObjectReferenceApplyConfiguration) WithName(value v1.ObjectName) *Objec
 // WithNamespace sets the Namespace field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Namespace field is set to the value of the last call.
-func (b *ObjectReferenceApplyConfiguration) WithNamespace(value v1.Namespace) *ObjectReferenceApplyConfiguration {
+func (b *ObjectReferenceApplyConfiguration) WithNamespace(value apisv1.Namespace) *ObjectReferenceApplyConfiguration {
 	b.Namespace = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/parametersreference.go b/applyconfiguration/apis/v1/parametersreference.go
index 2f245e53..ea397a69 100644
--- a/applyconfiguration/apis/v1/parametersreference.go
+++ b/applyconfiguration/apis/v1/parametersreference.go
@@ -19,16 +19,16 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // ParametersReferenceApplyConfiguration represents a declarative configuration of the ParametersReference type for use
 // with apply.
 type ParametersReferenceApplyConfiguration struct {
-	Group     *v1.Group     `json:"group,omitempty"`
-	Kind      *v1.Kind      `json:"kind,omitempty"`
-	Name      *string       `json:"name,omitempty"`
-	Namespace *v1.Namespace `json:"namespace,omitempty"`
+	Group     *apisv1.Group     `json:"group,omitempty"`
+	Kind      *apisv1.Kind      `json:"kind,omitempty"`
+	Name      *string           `json:"name,omitempty"`
+	Namespace *apisv1.Namespace `json:"namespace,omitempty"`
 }
 
 // ParametersReferenceApplyConfiguration constructs a declarative configuration of the ParametersReference type for use with
@@ -40,7 +40,7 @@ func ParametersReference() *ParametersReferenceApplyConfiguration {
 // WithGroup sets the Group field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Group field is set to the value of the last call.
-func (b *ParametersReferenceApplyConfiguration) WithGroup(value v1.Group) *ParametersReferenceApplyConfiguration {
+func (b *ParametersReferenceApplyConfiguration) WithGroup(value apisv1.Group) *ParametersReferenceApplyConfiguration {
 	b.Group = &value
 	return b
 }
@@ -48,7 +48,7 @@ func (b *ParametersReferenceApplyConfiguration) WithGroup(value v1.Group) *Param
 // WithKind sets the Kind field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
-func (b *ParametersReferenceApplyConfiguration) WithKind(value v1.Kind) *ParametersReferenceApplyConfiguration {
+func (b *ParametersReferenceApplyConfiguration) WithKind(value apisv1.Kind) *ParametersReferenceApplyConfiguration {
 	b.Kind = &value
 	return b
 }
@@ -64,7 +64,7 @@ func (b *ParametersReferenceApplyConfiguration) WithName(value string) *Paramete
 // WithNamespace sets the Namespace field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Namespace field is set to the value of the last call.
-func (b *ParametersReferenceApplyConfiguration) WithNamespace(value v1.Namespace) *ParametersReferenceApplyConfiguration {
+func (b *ParametersReferenceApplyConfiguration) WithNamespace(value apisv1.Namespace) *ParametersReferenceApplyConfiguration {
 	b.Namespace = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/parentreference.go b/applyconfiguration/apis/v1/parentreference.go
index 612dd2af..b0cb0652 100644
--- a/applyconfiguration/apis/v1/parentreference.go
+++ b/applyconfiguration/apis/v1/parentreference.go
@@ -19,18 +19,18 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // ParentReferenceApplyConfiguration represents a declarative configuration of the ParentReference type for use
 // with apply.
 type ParentReferenceApplyConfiguration struct {
-	Group       *v1.Group       `json:"group,omitempty"`
-	Kind        *v1.Kind        `json:"kind,omitempty"`
-	Namespace   *v1.Namespace   `json:"namespace,omitempty"`
-	Name        *v1.ObjectName  `json:"name,omitempty"`
-	SectionName *v1.SectionName `json:"sectionName,omitempty"`
-	Port        *v1.PortNumber  `json:"port,omitempty"`
+	Group       *apisv1.Group       `json:"group,omitempty"`
+	Kind        *apisv1.Kind        `json:"kind,omitempty"`
+	Namespace   *apisv1.Namespace   `json:"namespace,omitempty"`
+	Name        *apisv1.ObjectName  `json:"name,omitempty"`
+	SectionName *apisv1.SectionName `json:"sectionName,omitempty"`
+	Port        *apisv1.PortNumber  `json:"port,omitempty"`
 }
 
 // ParentReferenceApplyConfiguration constructs a declarative configuration of the ParentReference type for use with
@@ -42,7 +42,7 @@ func ParentReference() *ParentReferenceApplyConfiguration {
 // WithGroup sets the Group field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Group field is set to the value of the last call.
-func (b *ParentReferenceApplyConfiguration) WithGroup(value v1.Group) *ParentReferenceApplyConfiguration {
+func (b *ParentReferenceApplyConfiguration) WithGroup(value apisv1.Group) *ParentReferenceApplyConfiguration {
 	b.Group = &value
 	return b
 }
@@ -50,7 +50,7 @@ func (b *ParentReferenceApplyConfiguration) WithGroup(value v1.Group) *ParentRef
 // WithKind sets the Kind field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
-func (b *ParentReferenceApplyConfiguration) WithKind(value v1.Kind) *ParentReferenceApplyConfiguration {
+func (b *ParentReferenceApplyConfiguration) WithKind(value apisv1.Kind) *ParentReferenceApplyConfiguration {
 	b.Kind = &value
 	return b
 }
@@ -58,7 +58,7 @@ func (b *ParentReferenceApplyConfiguration) WithKind(value v1.Kind) *ParentRefer
 // WithNamespace sets the Namespace field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Namespace field is set to the value of the last call.
-func (b *ParentReferenceApplyConfiguration) WithNamespace(value v1.Namespace) *ParentReferenceApplyConfiguration {
+func (b *ParentReferenceApplyConfiguration) WithNamespace(value apisv1.Namespace) *ParentReferenceApplyConfiguration {
 	b.Namespace = &value
 	return b
 }
@@ -66,7 +66,7 @@ func (b *ParentReferenceApplyConfiguration) WithNamespace(value v1.Namespace) *P
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *ParentReferenceApplyConfiguration) WithName(value v1.ObjectName) *ParentReferenceApplyConfiguration {
+func (b *ParentReferenceApplyConfiguration) WithName(value apisv1.ObjectName) *ParentReferenceApplyConfiguration {
 	b.Name = &value
 	return b
 }
@@ -74,7 +74,7 @@ func (b *ParentReferenceApplyConfiguration) WithName(value v1.ObjectName) *Paren
 // WithSectionName sets the SectionName field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the SectionName field is set to the value of the last call.
-func (b *ParentReferenceApplyConfiguration) WithSectionName(value v1.SectionName) *ParentReferenceApplyConfiguration {
+func (b *ParentReferenceApplyConfiguration) WithSectionName(value apisv1.SectionName) *ParentReferenceApplyConfiguration {
 	b.SectionName = &value
 	return b
 }
@@ -82,7 +82,7 @@ func (b *ParentReferenceApplyConfiguration) WithSectionName(value v1.SectionName
 // WithPort sets the Port field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Port field is set to the value of the last call.
-func (b *ParentReferenceApplyConfiguration) WithPort(value v1.PortNumber) *ParentReferenceApplyConfiguration {
+func (b *ParentReferenceApplyConfiguration) WithPort(value apisv1.PortNumber) *ParentReferenceApplyConfiguration {
 	b.Port = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/routegroupkind.go b/applyconfiguration/apis/v1/routegroupkind.go
index 470ae407..cbaa6a9c 100644
--- a/applyconfiguration/apis/v1/routegroupkind.go
+++ b/applyconfiguration/apis/v1/routegroupkind.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // RouteGroupKindApplyConfiguration represents a declarative configuration of the RouteGroupKind type for use
 // with apply.
 type RouteGroupKindApplyConfiguration struct {
-	Group *v1.Group `json:"group,omitempty"`
-	Kind  *v1.Kind  `json:"kind,omitempty"`
+	Group *apisv1.Group `json:"group,omitempty"`
+	Kind  *apisv1.Kind  `json:"kind,omitempty"`
 }
 
 // RouteGroupKindApplyConfiguration constructs a declarative configuration of the RouteGroupKind type for use with
@@ -38,7 +38,7 @@ func RouteGroupKind() *RouteGroupKindApplyConfiguration {
 // WithGroup sets the Group field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Group field is set to the value of the last call.
-func (b *RouteGroupKindApplyConfiguration) WithGroup(value v1.Group) *RouteGroupKindApplyConfiguration {
+func (b *RouteGroupKindApplyConfiguration) WithGroup(value apisv1.Group) *RouteGroupKindApplyConfiguration {
 	b.Group = &value
 	return b
 }
@@ -46,7 +46,7 @@ func (b *RouteGroupKindApplyConfiguration) WithGroup(value v1.Group) *RouteGroup
 // WithKind sets the Kind field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
-func (b *RouteGroupKindApplyConfiguration) WithKind(value v1.Kind) *RouteGroupKindApplyConfiguration {
+func (b *RouteGroupKindApplyConfiguration) WithKind(value apisv1.Kind) *RouteGroupKindApplyConfiguration {
 	b.Kind = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/routenamespaces.go b/applyconfiguration/apis/v1/routenamespaces.go
index 33a17289..98a26155 100644
--- a/applyconfiguration/apis/v1/routenamespaces.go
+++ b/applyconfiguration/apis/v1/routenamespaces.go
@@ -20,13 +20,13 @@ package v1
 
 import (
 	metav1 "k8s.io/client-go/applyconfigurations/meta/v1"
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // RouteNamespacesApplyConfiguration represents a declarative configuration of the RouteNamespaces type for use
 // with apply.
 type RouteNamespacesApplyConfiguration struct {
-	From     *v1.FromNamespaces                      `json:"from,omitempty"`
+	From     *apisv1.FromNamespaces                  `json:"from,omitempty"`
 	Selector *metav1.LabelSelectorApplyConfiguration `json:"selector,omitempty"`
 }
 
@@ -39,7 +39,7 @@ func RouteNamespaces() *RouteNamespacesApplyConfiguration {
 // WithFrom sets the From field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the From field is set to the value of the last call.
-func (b *RouteNamespacesApplyConfiguration) WithFrom(value v1.FromNamespaces) *RouteNamespacesApplyConfiguration {
+func (b *RouteNamespacesApplyConfiguration) WithFrom(value apisv1.FromNamespaces) *RouteNamespacesApplyConfiguration {
 	b.From = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/secretobjectreference.go b/applyconfiguration/apis/v1/secretobjectreference.go
index 654f8982..f69c947f 100644
--- a/applyconfiguration/apis/v1/secretobjectreference.go
+++ b/applyconfiguration/apis/v1/secretobjectreference.go
@@ -19,16 +19,16 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // SecretObjectReferenceApplyConfiguration represents a declarative configuration of the SecretObjectReference type for use
 // with apply.
 type SecretObjectReferenceApplyConfiguration struct {
-	Group     *v1.Group      `json:"group,omitempty"`
-	Kind      *v1.Kind       `json:"kind,omitempty"`
-	Name      *v1.ObjectName `json:"name,omitempty"`
-	Namespace *v1.Namespace  `json:"namespace,omitempty"`
+	Group     *apisv1.Group      `json:"group,omitempty"`
+	Kind      *apisv1.Kind       `json:"kind,omitempty"`
+	Name      *apisv1.ObjectName `json:"name,omitempty"`
+	Namespace *apisv1.Namespace  `json:"namespace,omitempty"`
 }
 
 // SecretObjectReferenceApplyConfiguration constructs a declarative configuration of the SecretObjectReference type for use with
@@ -40,7 +40,7 @@ func SecretObjectReference() *SecretObjectReferenceApplyConfiguration {
 // WithGroup sets the Group field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Group field is set to the value of the last call.
-func (b *SecretObjectReferenceApplyConfiguration) WithGroup(value v1.Group) *SecretObjectReferenceApplyConfiguration {
+func (b *SecretObjectReferenceApplyConfiguration) WithGroup(value apisv1.Group) *SecretObjectReferenceApplyConfiguration {
 	b.Group = &value
 	return b
 }
@@ -48,7 +48,7 @@ func (b *SecretObjectReferenceApplyConfiguration) WithGroup(value v1.Group) *Sec
 // WithKind sets the Kind field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
-func (b *SecretObjectReferenceApplyConfiguration) WithKind(value v1.Kind) *SecretObjectReferenceApplyConfiguration {
+func (b *SecretObjectReferenceApplyConfiguration) WithKind(value apisv1.Kind) *SecretObjectReferenceApplyConfiguration {
 	b.Kind = &value
 	return b
 }
@@ -56,7 +56,7 @@ func (b *SecretObjectReferenceApplyConfiguration) WithKind(value v1.Kind) *Secre
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *SecretObjectReferenceApplyConfiguration) WithName(value v1.ObjectName) *SecretObjectReferenceApplyConfiguration {
+func (b *SecretObjectReferenceApplyConfiguration) WithName(value apisv1.ObjectName) *SecretObjectReferenceApplyConfiguration {
 	b.Name = &value
 	return b
 }
@@ -64,7 +64,7 @@ func (b *SecretObjectReferenceApplyConfiguration) WithName(value v1.ObjectName)
 // WithNamespace sets the Namespace field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Namespace field is set to the value of the last call.
-func (b *SecretObjectReferenceApplyConfiguration) WithNamespace(value v1.Namespace) *SecretObjectReferenceApplyConfiguration {
+func (b *SecretObjectReferenceApplyConfiguration) WithNamespace(value apisv1.Namespace) *SecretObjectReferenceApplyConfiguration {
 	b.Namespace = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/sessionpersistence.go b/applyconfiguration/apis/v1/sessionpersistence.go
index b20b07ce..9066e301 100644
--- a/applyconfiguration/apis/v1/sessionpersistence.go
+++ b/applyconfiguration/apis/v1/sessionpersistence.go
@@ -19,16 +19,16 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // SessionPersistenceApplyConfiguration represents a declarative configuration of the SessionPersistence type for use
 // with apply.
 type SessionPersistenceApplyConfiguration struct {
 	SessionName     *string                         `json:"sessionName,omitempty"`
-	AbsoluteTimeout *v1.Duration                    `json:"absoluteTimeout,omitempty"`
-	IdleTimeout     *v1.Duration                    `json:"idleTimeout,omitempty"`
-	Type            *v1.SessionPersistenceType      `json:"type,omitempty"`
+	AbsoluteTimeout *apisv1.Duration                `json:"absoluteTimeout,omitempty"`
+	IdleTimeout     *apisv1.Duration                `json:"idleTimeout,omitempty"`
+	Type            *apisv1.SessionPersistenceType  `json:"type,omitempty"`
 	CookieConfig    *CookieConfigApplyConfiguration `json:"cookieConfig,omitempty"`
 }
 
@@ -49,7 +49,7 @@ func (b *SessionPersistenceApplyConfiguration) WithSessionName(value string) *Se
 // WithAbsoluteTimeout sets the AbsoluteTimeout field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the AbsoluteTimeout field is set to the value of the last call.
-func (b *SessionPersistenceApplyConfiguration) WithAbsoluteTimeout(value v1.Duration) *SessionPersistenceApplyConfiguration {
+func (b *SessionPersistenceApplyConfiguration) WithAbsoluteTimeout(value apisv1.Duration) *SessionPersistenceApplyConfiguration {
 	b.AbsoluteTimeout = &value
 	return b
 }
@@ -57,7 +57,7 @@ func (b *SessionPersistenceApplyConfiguration) WithAbsoluteTimeout(value v1.Dura
 // WithIdleTimeout sets the IdleTimeout field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the IdleTimeout field is set to the value of the last call.
-func (b *SessionPersistenceApplyConfiguration) WithIdleTimeout(value v1.Duration) *SessionPersistenceApplyConfiguration {
+func (b *SessionPersistenceApplyConfiguration) WithIdleTimeout(value apisv1.Duration) *SessionPersistenceApplyConfiguration {
 	b.IdleTimeout = &value
 	return b
 }
@@ -65,7 +65,7 @@ func (b *SessionPersistenceApplyConfiguration) WithIdleTimeout(value v1.Duration
 // WithType sets the Type field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Type field is set to the value of the last call.
-func (b *SessionPersistenceApplyConfiguration) WithType(value v1.SessionPersistenceType) *SessionPersistenceApplyConfiguration {
+func (b *SessionPersistenceApplyConfiguration) WithType(value apisv1.SessionPersistenceType) *SessionPersistenceApplyConfiguration {
 	b.Type = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1/supportedfeature.go b/applyconfiguration/apis/v1/supportedfeature.go
index 90de05d2..c59876be 100644
--- a/applyconfiguration/apis/v1/supportedfeature.go
+++ b/applyconfiguration/apis/v1/supportedfeature.go
@@ -19,13 +19,13 @@ limitations under the License.
 package v1
 
 import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // SupportedFeatureApplyConfiguration represents a declarative configuration of the SupportedFeature type for use
 // with apply.
 type SupportedFeatureApplyConfiguration struct {
-	Name *v1.FeatureName `json:"name,omitempty"`
+	Name *apisv1.FeatureName `json:"name,omitempty"`
 }
 
 // SupportedFeatureApplyConfiguration constructs a declarative configuration of the SupportedFeature type for use with
@@ -37,7 +37,7 @@ func SupportedFeature() *SupportedFeatureApplyConfiguration {
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *SupportedFeatureApplyConfiguration) WithName(value v1.FeatureName) *SupportedFeatureApplyConfiguration {
+func (b *SupportedFeatureApplyConfiguration) WithName(value apisv1.FeatureName) *SupportedFeatureApplyConfiguration {
 	b.Name = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1alpha2/backendlbpolicy.go b/applyconfiguration/apis/v1alpha2/backendlbpolicy.go
deleted file mode 100644
index 4c648144..00000000
--- a/applyconfiguration/apis/v1alpha2/backendlbpolicy.go
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by applyconfiguration-gen. DO NOT EDIT.
-
-package v1alpha2
-
-import (
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	types "k8s.io/apimachinery/pkg/types"
-	managedfields "k8s.io/apimachinery/pkg/util/managedfields"
-	v1 "k8s.io/client-go/applyconfigurations/meta/v1"
-	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-	internal "sigs.k8s.io/gateway-api/applyconfiguration/internal"
-)
-
-// BackendLBPolicyApplyConfiguration represents a declarative configuration of the BackendLBPolicy type for use
-// with apply.
-type BackendLBPolicyApplyConfiguration struct {
-	v1.TypeMetaApplyConfiguration    `json:",inline"`
-	*v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
-	Spec                             *BackendLBPolicySpecApplyConfiguration `json:"spec,omitempty"`
-	Status                           *PolicyStatusApplyConfiguration        `json:"status,omitempty"`
-}
-
-// BackendLBPolicy constructs a declarative configuration of the BackendLBPolicy type for use with
-// apply.
-func BackendLBPolicy(name, namespace string) *BackendLBPolicyApplyConfiguration {
-	b := &BackendLBPolicyApplyConfiguration{}
-	b.WithName(name)
-	b.WithNamespace(namespace)
-	b.WithKind("BackendLBPolicy")
-	b.WithAPIVersion("gateway.networking.k8s.io/v1alpha2")
-	return b
-}
-
-// ExtractBackendLBPolicy extracts the applied configuration owned by fieldManager from
-// backendLBPolicy. If no managedFields are found in backendLBPolicy for fieldManager, a
-// BackendLBPolicyApplyConfiguration is returned with only the Name, Namespace (if applicable),
-// APIVersion and Kind populated. It is possible that no managed fields were found for because other
-// field managers have taken ownership of all the fields previously owned by fieldManager, or because
-// the fieldManager never owned fields any fields.
-// backendLBPolicy must be a unmodified BackendLBPolicy API object that was retrieved from the Kubernetes API.
-// ExtractBackendLBPolicy provides a way to perform a extract/modify-in-place/apply workflow.
-// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously
-// applied if another fieldManager has updated or force applied any of the previously applied fields.
-// Experimental!
-func ExtractBackendLBPolicy(backendLBPolicy *apisv1alpha2.BackendLBPolicy, fieldManager string) (*BackendLBPolicyApplyConfiguration, error) {
-	return extractBackendLBPolicy(backendLBPolicy, fieldManager, "")
-}
-
-// ExtractBackendLBPolicyStatus is the same as ExtractBackendLBPolicy except
-// that it extracts the status subresource applied configuration.
-// Experimental!
-func ExtractBackendLBPolicyStatus(backendLBPolicy *apisv1alpha2.BackendLBPolicy, fieldManager string) (*BackendLBPolicyApplyConfiguration, error) {
-	return extractBackendLBPolicy(backendLBPolicy, fieldManager, "status")
-}
-
-func extractBackendLBPolicy(backendLBPolicy *apisv1alpha2.BackendLBPolicy, fieldManager string, subresource string) (*BackendLBPolicyApplyConfiguration, error) {
-	b := &BackendLBPolicyApplyConfiguration{}
-	err := managedfields.ExtractInto(backendLBPolicy, internal.Parser().Type("io.k8s.sigs.gateway-api.apis.v1alpha2.BackendLBPolicy"), fieldManager, b, subresource)
-	if err != nil {
-		return nil, err
-	}
-	b.WithName(backendLBPolicy.Name)
-	b.WithNamespace(backendLBPolicy.Namespace)
-
-	b.WithKind("BackendLBPolicy")
-	b.WithAPIVersion("gateway.networking.k8s.io/v1alpha2")
-	return b, nil
-}
-
-// WithKind sets the Kind field in the declarative configuration to the given value
-// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the Kind field is set to the value of the last call.
-func (b *BackendLBPolicyApplyConfiguration) WithKind(value string) *BackendLBPolicyApplyConfiguration {
-	b.Kind = &value
-	return b
-}
-
-// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value
-// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the APIVersion field is set to the value of the last call.
-func (b *BackendLBPolicyApplyConfiguration) WithAPIVersion(value string) *BackendLBPolicyApplyConfiguration {
-	b.APIVersion = &value
-	return b
-}
-
-// WithName sets the Name field in the declarative configuration to the given value
-// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the Name field is set to the value of the last call.
-func (b *BackendLBPolicyApplyConfiguration) WithName(value string) *BackendLBPolicyApplyConfiguration {
-	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
-	return b
-}
-
-// WithGenerateName sets the GenerateName field in the declarative configuration to the given value
-// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the GenerateName field is set to the value of the last call.
-func (b *BackendLBPolicyApplyConfiguration) WithGenerateName(value string) *BackendLBPolicyApplyConfiguration {
-	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
-	return b
-}
-
-// WithNamespace sets the Namespace field in the declarative configuration to the given value
-// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the Namespace field is set to the value of the last call.
-func (b *BackendLBPolicyApplyConfiguration) WithNamespace(value string) *BackendLBPolicyApplyConfiguration {
-	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
-	return b
-}
-
-// WithUID sets the UID field in the declarative configuration to the given value
-// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the UID field is set to the value of the last call.
-func (b *BackendLBPolicyApplyConfiguration) WithUID(value types.UID) *BackendLBPolicyApplyConfiguration {
-	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
-	return b
-}
-
-// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value
-// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the ResourceVersion field is set to the value of the last call.
-func (b *BackendLBPolicyApplyConfiguration) WithResourceVersion(value string) *BackendLBPolicyApplyConfiguration {
-	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
-	return b
-}
-
-// WithGeneration sets the Generation field in the declarative configuration to the given value
-// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the Generation field is set to the value of the last call.
-func (b *BackendLBPolicyApplyConfiguration) WithGeneration(value int64) *BackendLBPolicyApplyConfiguration {
-	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
-	return b
-}
-
-// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value
-// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the CreationTimestamp field is set to the value of the last call.
-func (b *BackendLBPolicyApplyConfiguration) WithCreationTimestamp(value metav1.Time) *BackendLBPolicyApplyConfiguration {
-	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
-	return b
-}
-
-// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value
-// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the DeletionTimestamp field is set to the value of the last call.
-func (b *BackendLBPolicyApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *BackendLBPolicyApplyConfiguration {
-	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
-	return b
-}
-
-// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value
-// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
-func (b *BackendLBPolicyApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *BackendLBPolicyApplyConfiguration {
-	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
-	return b
-}
-
-// WithLabels puts the entries into the Labels field in the declarative configuration
-// and returns the receiver, so that objects can be build by chaining "With" function invocations.
-// If called multiple times, the entries provided by each call will be put on the Labels field,
-// overwriting an existing map entries in Labels field with the same key.
-func (b *BackendLBPolicyApplyConfiguration) WithLabels(entries map[string]string) *BackendLBPolicyApplyConfiguration {
-	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
-	}
-	for k, v := range entries {
-		b.Labels[k] = v
-	}
-	return b
-}
-
-// WithAnnotations puts the entries into the Annotations field in the declarative configuration
-// and returns the receiver, so that objects can be build by chaining "With" function invocations.
-// If called multiple times, the entries provided by each call will be put on the Annotations field,
-// overwriting an existing map entries in Annotations field with the same key.
-func (b *BackendLBPolicyApplyConfiguration) WithAnnotations(entries map[string]string) *BackendLBPolicyApplyConfiguration {
-	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
-	}
-	for k, v := range entries {
-		b.Annotations[k] = v
-	}
-	return b
-}
-
-// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration
-// and returns the receiver, so that objects can be build by chaining "With" function invocations.
-// If called multiple times, values provided by each call will be appended to the OwnerReferences field.
-func (b *BackendLBPolicyApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *BackendLBPolicyApplyConfiguration {
-	b.ensureObjectMetaApplyConfigurationExists()
-	for i := range values {
-		if values[i] == nil {
-			panic("nil value passed to WithOwnerReferences")
-		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
-	}
-	return b
-}
-
-// WithFinalizers adds the given value to the Finalizers field in the declarative configuration
-// and returns the receiver, so that objects can be build by chaining "With" function invocations.
-// If called multiple times, values provided by each call will be appended to the Finalizers field.
-func (b *BackendLBPolicyApplyConfiguration) WithFinalizers(values ...string) *BackendLBPolicyApplyConfiguration {
-	b.ensureObjectMetaApplyConfigurationExists()
-	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
-	}
-	return b
-}
-
-func (b *BackendLBPolicyApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
-	if b.ObjectMetaApplyConfiguration == nil {
-		b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{}
-	}
-}
-
-// WithSpec sets the Spec field in the declarative configuration to the given value
-// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the Spec field is set to the value of the last call.
-func (b *BackendLBPolicyApplyConfiguration) WithSpec(value *BackendLBPolicySpecApplyConfiguration) *BackendLBPolicyApplyConfiguration {
-	b.Spec = value
-	return b
-}
-
-// WithStatus sets the Status field in the declarative configuration to the given value
-// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the Status field is set to the value of the last call.
-func (b *BackendLBPolicyApplyConfiguration) WithStatus(value *PolicyStatusApplyConfiguration) *BackendLBPolicyApplyConfiguration {
-	b.Status = value
-	return b
-}
-
-// GetName retrieves the value of the Name field in the declarative configuration.
-func (b *BackendLBPolicyApplyConfiguration) GetName() *string {
-	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
-}
diff --git a/applyconfiguration/apis/v1alpha2/backendlbpolicyspec.go b/applyconfiguration/apis/v1alpha2/backendlbpolicyspec.go
deleted file mode 100644
index 9c8db9e6..00000000
--- a/applyconfiguration/apis/v1alpha2/backendlbpolicyspec.go
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by applyconfiguration-gen. DO NOT EDIT.
-
-package v1alpha2
-
-import (
-	v1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
-)
-
-// BackendLBPolicySpecApplyConfiguration represents a declarative configuration of the BackendLBPolicySpec type for use
-// with apply.
-type BackendLBPolicySpecApplyConfiguration struct {
-	TargetRefs         []LocalPolicyTargetReferenceApplyConfiguration `json:"targetRefs,omitempty"`
-	SessionPersistence *v1.SessionPersistenceApplyConfiguration       `json:"sessionPersistence,omitempty"`
-}
-
-// BackendLBPolicySpecApplyConfiguration constructs a declarative configuration of the BackendLBPolicySpec type for use with
-// apply.
-func BackendLBPolicySpec() *BackendLBPolicySpecApplyConfiguration {
-	return &BackendLBPolicySpecApplyConfiguration{}
-}
-
-// WithTargetRefs adds the given value to the TargetRefs field in the declarative configuration
-// and returns the receiver, so that objects can be build by chaining "With" function invocations.
-// If called multiple times, values provided by each call will be appended to the TargetRefs field.
-func (b *BackendLBPolicySpecApplyConfiguration) WithTargetRefs(values ...*LocalPolicyTargetReferenceApplyConfiguration) *BackendLBPolicySpecApplyConfiguration {
-	for i := range values {
-		if values[i] == nil {
-			panic("nil value passed to WithTargetRefs")
-		}
-		b.TargetRefs = append(b.TargetRefs, *values[i])
-	}
-	return b
-}
-
-// WithSessionPersistence sets the SessionPersistence field in the declarative configuration to the given value
-// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the SessionPersistence field is set to the value of the last call.
-func (b *BackendLBPolicySpecApplyConfiguration) WithSessionPersistence(value *v1.SessionPersistenceApplyConfiguration) *BackendLBPolicySpecApplyConfiguration {
-	b.SessionPersistence = value
-	return b
-}
diff --git a/applyconfiguration/apis/v1alpha2/grpcroute.go b/applyconfiguration/apis/v1alpha2/grpcroute.go
index b0896d92..89e1e21b 100644
--- a/applyconfiguration/apis/v1alpha2/grpcroute.go
+++ b/applyconfiguration/apis/v1alpha2/grpcroute.go
@@ -23,7 +23,7 @@ import (
 	types "k8s.io/apimachinery/pkg/types"
 	managedfields "k8s.io/apimachinery/pkg/util/managedfields"
 	v1 "k8s.io/client-go/applyconfigurations/meta/v1"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 	apisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
 	internal "sigs.k8s.io/gateway-api/applyconfiguration/internal"
 )
@@ -59,18 +59,18 @@ func GRPCRoute(name, namespace string) *GRPCRouteApplyConfiguration {
 // Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously
 // applied if another fieldManager has updated or force applied any of the previously applied fields.
 // Experimental!
-func ExtractGRPCRoute(gRPCRoute *v1alpha2.GRPCRoute, fieldManager string) (*GRPCRouteApplyConfiguration, error) {
+func ExtractGRPCRoute(gRPCRoute *apisv1alpha2.GRPCRoute, fieldManager string) (*GRPCRouteApplyConfiguration, error) {
 	return extractGRPCRoute(gRPCRoute, fieldManager, "")
 }
 
 // ExtractGRPCRouteStatus is the same as ExtractGRPCRoute except
 // that it extracts the status subresource applied configuration.
 // Experimental!
-func ExtractGRPCRouteStatus(gRPCRoute *v1alpha2.GRPCRoute, fieldManager string) (*GRPCRouteApplyConfiguration, error) {
+func ExtractGRPCRouteStatus(gRPCRoute *apisv1alpha2.GRPCRoute, fieldManager string) (*GRPCRouteApplyConfiguration, error) {
 	return extractGRPCRoute(gRPCRoute, fieldManager, "status")
 }
 
-func extractGRPCRoute(gRPCRoute *v1alpha2.GRPCRoute, fieldManager string, subresource string) (*GRPCRouteApplyConfiguration, error) {
+func extractGRPCRoute(gRPCRoute *apisv1alpha2.GRPCRoute, fieldManager string, subresource string) (*GRPCRouteApplyConfiguration, error) {
 	b := &GRPCRouteApplyConfiguration{}
 	err := managedfields.ExtractInto(gRPCRoute, internal.Parser().Type("io.k8s.sigs.gateway-api.apis.v1alpha2.GRPCRoute"), fieldManager, b, subresource)
 	if err != nil {
@@ -88,7 +88,7 @@ func extractGRPCRoute(gRPCRoute *v1alpha2.GRPCRoute, fieldManager string, subres
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithKind(value string) *GRPCRouteApplyConfiguration {
-	b.Kind = &value
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -96,7 +96,7 @@ func (b *GRPCRouteApplyConfiguration) WithKind(value string) *GRPCRouteApplyConf
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithAPIVersion(value string) *GRPCRouteApplyConfiguration {
-	b.APIVersion = &value
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
@@ -105,7 +105,7 @@ func (b *GRPCRouteApplyConfiguration) WithAPIVersion(value string) *GRPCRouteApp
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithName(value string) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
@@ -114,7 +114,7 @@ func (b *GRPCRouteApplyConfiguration) WithName(value string) *GRPCRouteApplyConf
 // If called multiple times, the GenerateName field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithGenerateName(value string) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
@@ -123,7 +123,7 @@ func (b *GRPCRouteApplyConfiguration) WithGenerateName(value string) *GRPCRouteA
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithNamespace(value string) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -132,7 +132,7 @@ func (b *GRPCRouteApplyConfiguration) WithNamespace(value string) *GRPCRouteAppl
 // If called multiple times, the UID field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithUID(value types.UID) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
@@ -141,7 +141,7 @@ func (b *GRPCRouteApplyConfiguration) WithUID(value types.UID) *GRPCRouteApplyCo
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithResourceVersion(value string) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
@@ -150,7 +150,7 @@ func (b *GRPCRouteApplyConfiguration) WithResourceVersion(value string) *GRPCRou
 // If called multiple times, the Generation field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithGeneration(value int64) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
@@ -159,7 +159,7 @@ func (b *GRPCRouteApplyConfiguration) WithGeneration(value int64) *GRPCRouteAppl
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithCreationTimestamp(value metav1.Time) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
@@ -168,7 +168,7 @@ func (b *GRPCRouteApplyConfiguration) WithCreationTimestamp(value metav1.Time) *
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
@@ -177,7 +177,7 @@ func (b *GRPCRouteApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
 func (b *GRPCRouteApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -187,11 +187,11 @@ func (b *GRPCRouteApplyConfiguration) WithDeletionGracePeriodSeconds(value int64
 // overwriting an existing map entries in Labels field with the same key.
 func (b *GRPCRouteApplyConfiguration) WithLabels(entries map[string]string) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -202,11 +202,11 @@ func (b *GRPCRouteApplyConfiguration) WithLabels(entries map[string]string) *GRP
 // overwriting an existing map entries in Annotations field with the same key.
 func (b *GRPCRouteApplyConfiguration) WithAnnotations(entries map[string]string) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -220,7 +220,7 @@ func (b *GRPCRouteApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerRef
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -231,7 +231,7 @@ func (b *GRPCRouteApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerRef
 func (b *GRPCRouteApplyConfiguration) WithFinalizers(values ...string) *GRPCRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
@@ -261,5 +261,5 @@ func (b *GRPCRouteApplyConfiguration) WithStatus(value *apisv1.GRPCRouteStatusAp
 // GetName retrieves the value of the Name field in the declarative configuration.
 func (b *GRPCRouteApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/apis/v1alpha2/localpolicytargetreferencewithsectionname.go b/applyconfiguration/apis/v1alpha2/localpolicytargetreferencewithsectionname.go
index 72577d01..cac1a782 100644
--- a/applyconfiguration/apis/v1alpha2/localpolicytargetreferencewithsectionname.go
+++ b/applyconfiguration/apis/v1alpha2/localpolicytargetreferencewithsectionname.go
@@ -39,7 +39,7 @@ func LocalPolicyTargetReferenceWithSectionName() *LocalPolicyTargetReferenceWith
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Group field is set to the value of the last call.
 func (b *LocalPolicyTargetReferenceWithSectionNameApplyConfiguration) WithGroup(value v1.Group) *LocalPolicyTargetReferenceWithSectionNameApplyConfiguration {
-	b.Group = &value
+	b.LocalPolicyTargetReferenceApplyConfiguration.Group = &value
 	return b
 }
 
@@ -47,7 +47,7 @@ func (b *LocalPolicyTargetReferenceWithSectionNameApplyConfiguration) WithGroup(
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *LocalPolicyTargetReferenceWithSectionNameApplyConfiguration) WithKind(value v1.Kind) *LocalPolicyTargetReferenceWithSectionNameApplyConfiguration {
-	b.Kind = &value
+	b.LocalPolicyTargetReferenceApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -55,7 +55,7 @@ func (b *LocalPolicyTargetReferenceWithSectionNameApplyConfiguration) WithKind(v
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *LocalPolicyTargetReferenceWithSectionNameApplyConfiguration) WithName(value v1.ObjectName) *LocalPolicyTargetReferenceWithSectionNameApplyConfiguration {
-	b.Name = &value
+	b.LocalPolicyTargetReferenceApplyConfiguration.Name = &value
 	return b
 }
 
diff --git a/applyconfiguration/apis/v1alpha2/referencegrant.go b/applyconfiguration/apis/v1alpha2/referencegrant.go
index e8ea62c9..032cf361 100644
--- a/applyconfiguration/apis/v1alpha2/referencegrant.go
+++ b/applyconfiguration/apis/v1alpha2/referencegrant.go
@@ -23,7 +23,7 @@ import (
 	types "k8s.io/apimachinery/pkg/types"
 	managedfields "k8s.io/apimachinery/pkg/util/managedfields"
 	v1 "k8s.io/client-go/applyconfigurations/meta/v1"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 	v1beta1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1beta1"
 	internal "sigs.k8s.io/gateway-api/applyconfiguration/internal"
 )
@@ -58,18 +58,18 @@ func ReferenceGrant(name, namespace string) *ReferenceGrantApplyConfiguration {
 // Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously
 // applied if another fieldManager has updated or force applied any of the previously applied fields.
 // Experimental!
-func ExtractReferenceGrant(referenceGrant *v1alpha2.ReferenceGrant, fieldManager string) (*ReferenceGrantApplyConfiguration, error) {
+func ExtractReferenceGrant(referenceGrant *apisv1alpha2.ReferenceGrant, fieldManager string) (*ReferenceGrantApplyConfiguration, error) {
 	return extractReferenceGrant(referenceGrant, fieldManager, "")
 }
 
 // ExtractReferenceGrantStatus is the same as ExtractReferenceGrant except
 // that it extracts the status subresource applied configuration.
 // Experimental!
-func ExtractReferenceGrantStatus(referenceGrant *v1alpha2.ReferenceGrant, fieldManager string) (*ReferenceGrantApplyConfiguration, error) {
+func ExtractReferenceGrantStatus(referenceGrant *apisv1alpha2.ReferenceGrant, fieldManager string) (*ReferenceGrantApplyConfiguration, error) {
 	return extractReferenceGrant(referenceGrant, fieldManager, "status")
 }
 
-func extractReferenceGrant(referenceGrant *v1alpha2.ReferenceGrant, fieldManager string, subresource string) (*ReferenceGrantApplyConfiguration, error) {
+func extractReferenceGrant(referenceGrant *apisv1alpha2.ReferenceGrant, fieldManager string, subresource string) (*ReferenceGrantApplyConfiguration, error) {
 	b := &ReferenceGrantApplyConfiguration{}
 	err := managedfields.ExtractInto(referenceGrant, internal.Parser().Type("io.k8s.sigs.gateway-api.apis.v1alpha2.ReferenceGrant"), fieldManager, b, subresource)
 	if err != nil {
@@ -87,7 +87,7 @@ func extractReferenceGrant(referenceGrant *v1alpha2.ReferenceGrant, fieldManager
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithKind(value string) *ReferenceGrantApplyConfiguration {
-	b.Kind = &value
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -95,7 +95,7 @@ func (b *ReferenceGrantApplyConfiguration) WithKind(value string) *ReferenceGran
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithAPIVersion(value string) *ReferenceGrantApplyConfiguration {
-	b.APIVersion = &value
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
@@ -104,7 +104,7 @@ func (b *ReferenceGrantApplyConfiguration) WithAPIVersion(value string) *Referen
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithName(value string) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
@@ -113,7 +113,7 @@ func (b *ReferenceGrantApplyConfiguration) WithName(value string) *ReferenceGran
 // If called multiple times, the GenerateName field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithGenerateName(value string) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
@@ -122,7 +122,7 @@ func (b *ReferenceGrantApplyConfiguration) WithGenerateName(value string) *Refer
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithNamespace(value string) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -131,7 +131,7 @@ func (b *ReferenceGrantApplyConfiguration) WithNamespace(value string) *Referenc
 // If called multiple times, the UID field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithUID(value types.UID) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
@@ -140,7 +140,7 @@ func (b *ReferenceGrantApplyConfiguration) WithUID(value types.UID) *ReferenceGr
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithResourceVersion(value string) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
@@ -149,7 +149,7 @@ func (b *ReferenceGrantApplyConfiguration) WithResourceVersion(value string) *Re
 // If called multiple times, the Generation field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithGeneration(value int64) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
@@ -158,7 +158,7 @@ func (b *ReferenceGrantApplyConfiguration) WithGeneration(value int64) *Referenc
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithCreationTimestamp(value metav1.Time) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
@@ -167,7 +167,7 @@ func (b *ReferenceGrantApplyConfiguration) WithCreationTimestamp(value metav1.Ti
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
@@ -176,7 +176,7 @@ func (b *ReferenceGrantApplyConfiguration) WithDeletionTimestamp(value metav1.Ti
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -186,11 +186,11 @@ func (b *ReferenceGrantApplyConfiguration) WithDeletionGracePeriodSeconds(value
 // overwriting an existing map entries in Labels field with the same key.
 func (b *ReferenceGrantApplyConfiguration) WithLabels(entries map[string]string) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -201,11 +201,11 @@ func (b *ReferenceGrantApplyConfiguration) WithLabels(entries map[string]string)
 // overwriting an existing map entries in Annotations field with the same key.
 func (b *ReferenceGrantApplyConfiguration) WithAnnotations(entries map[string]string) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -219,7 +219,7 @@ func (b *ReferenceGrantApplyConfiguration) WithOwnerReferences(values ...*v1.Own
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -230,7 +230,7 @@ func (b *ReferenceGrantApplyConfiguration) WithOwnerReferences(values ...*v1.Own
 func (b *ReferenceGrantApplyConfiguration) WithFinalizers(values ...string) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
@@ -252,5 +252,5 @@ func (b *ReferenceGrantApplyConfiguration) WithSpec(value *v1beta1.ReferenceGran
 // GetName retrieves the value of the Name field in the declarative configuration.
 func (b *ReferenceGrantApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/apis/v1alpha2/tcproute.go b/applyconfiguration/apis/v1alpha2/tcproute.go
index b56a8198..1984f6f9 100644
--- a/applyconfiguration/apis/v1alpha2/tcproute.go
+++ b/applyconfiguration/apis/v1alpha2/tcproute.go
@@ -87,7 +87,7 @@ func extractTCPRoute(tCPRoute *apisv1alpha2.TCPRoute, fieldManager string, subre
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *TCPRouteApplyConfiguration) WithKind(value string) *TCPRouteApplyConfiguration {
-	b.Kind = &value
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -95,7 +95,7 @@ func (b *TCPRouteApplyConfiguration) WithKind(value string) *TCPRouteApplyConfig
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
 func (b *TCPRouteApplyConfiguration) WithAPIVersion(value string) *TCPRouteApplyConfiguration {
-	b.APIVersion = &value
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
@@ -104,7 +104,7 @@ func (b *TCPRouteApplyConfiguration) WithAPIVersion(value string) *TCPRouteApply
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *TCPRouteApplyConfiguration) WithName(value string) *TCPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
@@ -113,7 +113,7 @@ func (b *TCPRouteApplyConfiguration) WithName(value string) *TCPRouteApplyConfig
 // If called multiple times, the GenerateName field is set to the value of the last call.
 func (b *TCPRouteApplyConfiguration) WithGenerateName(value string) *TCPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
@@ -122,7 +122,7 @@ func (b *TCPRouteApplyConfiguration) WithGenerateName(value string) *TCPRouteApp
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *TCPRouteApplyConfiguration) WithNamespace(value string) *TCPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -131,7 +131,7 @@ func (b *TCPRouteApplyConfiguration) WithNamespace(value string) *TCPRouteApplyC
 // If called multiple times, the UID field is set to the value of the last call.
 func (b *TCPRouteApplyConfiguration) WithUID(value types.UID) *TCPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
@@ -140,7 +140,7 @@ func (b *TCPRouteApplyConfiguration) WithUID(value types.UID) *TCPRouteApplyConf
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
 func (b *TCPRouteApplyConfiguration) WithResourceVersion(value string) *TCPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
@@ -149,7 +149,7 @@ func (b *TCPRouteApplyConfiguration) WithResourceVersion(value string) *TCPRoute
 // If called multiple times, the Generation field is set to the value of the last call.
 func (b *TCPRouteApplyConfiguration) WithGeneration(value int64) *TCPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
@@ -158,7 +158,7 @@ func (b *TCPRouteApplyConfiguration) WithGeneration(value int64) *TCPRouteApplyC
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
 func (b *TCPRouteApplyConfiguration) WithCreationTimestamp(value metav1.Time) *TCPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
@@ -167,7 +167,7 @@ func (b *TCPRouteApplyConfiguration) WithCreationTimestamp(value metav1.Time) *T
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
 func (b *TCPRouteApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *TCPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
@@ -176,7 +176,7 @@ func (b *TCPRouteApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *T
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
 func (b *TCPRouteApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *TCPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -186,11 +186,11 @@ func (b *TCPRouteApplyConfiguration) WithDeletionGracePeriodSeconds(value int64)
 // overwriting an existing map entries in Labels field with the same key.
 func (b *TCPRouteApplyConfiguration) WithLabels(entries map[string]string) *TCPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -201,11 +201,11 @@ func (b *TCPRouteApplyConfiguration) WithLabels(entries map[string]string) *TCPR
 // overwriting an existing map entries in Annotations field with the same key.
 func (b *TCPRouteApplyConfiguration) WithAnnotations(entries map[string]string) *TCPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -219,7 +219,7 @@ func (b *TCPRouteApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerRefe
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -230,7 +230,7 @@ func (b *TCPRouteApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerRefe
 func (b *TCPRouteApplyConfiguration) WithFinalizers(values ...string) *TCPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
@@ -260,5 +260,5 @@ func (b *TCPRouteApplyConfiguration) WithStatus(value *TCPRouteStatusApplyConfig
 // GetName retrieves the value of the Name field in the declarative configuration.
 func (b *TCPRouteApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/apis/v1alpha2/tcproutespec.go b/applyconfiguration/apis/v1alpha2/tcproutespec.go
index c693e96c..67b40cc7 100644
--- a/applyconfiguration/apis/v1alpha2/tcproutespec.go
+++ b/applyconfiguration/apis/v1alpha2/tcproutespec.go
@@ -43,7 +43,7 @@ func (b *TCPRouteSpecApplyConfiguration) WithParentRefs(values ...*v1.ParentRefe
 		if values[i] == nil {
 			panic("nil value passed to WithParentRefs")
 		}
-		b.ParentRefs = append(b.ParentRefs, *values[i])
+		b.CommonRouteSpecApplyConfiguration.ParentRefs = append(b.CommonRouteSpecApplyConfiguration.ParentRefs, *values[i])
 	}
 	return b
 }
diff --git a/applyconfiguration/apis/v1alpha2/tlsroute.go b/applyconfiguration/apis/v1alpha2/tlsroute.go
index 7dfe99da..d427cde2 100644
--- a/applyconfiguration/apis/v1alpha2/tlsroute.go
+++ b/applyconfiguration/apis/v1alpha2/tlsroute.go
@@ -87,7 +87,7 @@ func extractTLSRoute(tLSRoute *apisv1alpha2.TLSRoute, fieldManager string, subre
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *TLSRouteApplyConfiguration) WithKind(value string) *TLSRouteApplyConfiguration {
-	b.Kind = &value
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -95,7 +95,7 @@ func (b *TLSRouteApplyConfiguration) WithKind(value string) *TLSRouteApplyConfig
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
 func (b *TLSRouteApplyConfiguration) WithAPIVersion(value string) *TLSRouteApplyConfiguration {
-	b.APIVersion = &value
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
@@ -104,7 +104,7 @@ func (b *TLSRouteApplyConfiguration) WithAPIVersion(value string) *TLSRouteApply
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *TLSRouteApplyConfiguration) WithName(value string) *TLSRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
@@ -113,7 +113,7 @@ func (b *TLSRouteApplyConfiguration) WithName(value string) *TLSRouteApplyConfig
 // If called multiple times, the GenerateName field is set to the value of the last call.
 func (b *TLSRouteApplyConfiguration) WithGenerateName(value string) *TLSRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
@@ -122,7 +122,7 @@ func (b *TLSRouteApplyConfiguration) WithGenerateName(value string) *TLSRouteApp
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *TLSRouteApplyConfiguration) WithNamespace(value string) *TLSRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -131,7 +131,7 @@ func (b *TLSRouteApplyConfiguration) WithNamespace(value string) *TLSRouteApplyC
 // If called multiple times, the UID field is set to the value of the last call.
 func (b *TLSRouteApplyConfiguration) WithUID(value types.UID) *TLSRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
@@ -140,7 +140,7 @@ func (b *TLSRouteApplyConfiguration) WithUID(value types.UID) *TLSRouteApplyConf
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
 func (b *TLSRouteApplyConfiguration) WithResourceVersion(value string) *TLSRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
@@ -149,7 +149,7 @@ func (b *TLSRouteApplyConfiguration) WithResourceVersion(value string) *TLSRoute
 // If called multiple times, the Generation field is set to the value of the last call.
 func (b *TLSRouteApplyConfiguration) WithGeneration(value int64) *TLSRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
@@ -158,7 +158,7 @@ func (b *TLSRouteApplyConfiguration) WithGeneration(value int64) *TLSRouteApplyC
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
 func (b *TLSRouteApplyConfiguration) WithCreationTimestamp(value metav1.Time) *TLSRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
@@ -167,7 +167,7 @@ func (b *TLSRouteApplyConfiguration) WithCreationTimestamp(value metav1.Time) *T
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
 func (b *TLSRouteApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *TLSRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
@@ -176,7 +176,7 @@ func (b *TLSRouteApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *T
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
 func (b *TLSRouteApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *TLSRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -186,11 +186,11 @@ func (b *TLSRouteApplyConfiguration) WithDeletionGracePeriodSeconds(value int64)
 // overwriting an existing map entries in Labels field with the same key.
 func (b *TLSRouteApplyConfiguration) WithLabels(entries map[string]string) *TLSRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -201,11 +201,11 @@ func (b *TLSRouteApplyConfiguration) WithLabels(entries map[string]string) *TLSR
 // overwriting an existing map entries in Annotations field with the same key.
 func (b *TLSRouteApplyConfiguration) WithAnnotations(entries map[string]string) *TLSRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -219,7 +219,7 @@ func (b *TLSRouteApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerRefe
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -230,7 +230,7 @@ func (b *TLSRouteApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerRefe
 func (b *TLSRouteApplyConfiguration) WithFinalizers(values ...string) *TLSRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
@@ -260,5 +260,5 @@ func (b *TLSRouteApplyConfiguration) WithStatus(value *TLSRouteStatusApplyConfig
 // GetName retrieves the value of the Name field in the declarative configuration.
 func (b *TLSRouteApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/apis/v1alpha2/tlsroutespec.go b/applyconfiguration/apis/v1alpha2/tlsroutespec.go
index 4fc149ec..7a634a78 100644
--- a/applyconfiguration/apis/v1alpha2/tlsroutespec.go
+++ b/applyconfiguration/apis/v1alpha2/tlsroutespec.go
@@ -45,7 +45,7 @@ func (b *TLSRouteSpecApplyConfiguration) WithParentRefs(values ...*v1.ParentRefe
 		if values[i] == nil {
 			panic("nil value passed to WithParentRefs")
 		}
-		b.ParentRefs = append(b.ParentRefs, *values[i])
+		b.CommonRouteSpecApplyConfiguration.ParentRefs = append(b.CommonRouteSpecApplyConfiguration.ParentRefs, *values[i])
 	}
 	return b
 }
diff --git a/applyconfiguration/apis/v1alpha2/udproute.go b/applyconfiguration/apis/v1alpha2/udproute.go
index 2ea4d5b4..2403b41f 100644
--- a/applyconfiguration/apis/v1alpha2/udproute.go
+++ b/applyconfiguration/apis/v1alpha2/udproute.go
@@ -87,7 +87,7 @@ func extractUDPRoute(uDPRoute *apisv1alpha2.UDPRoute, fieldManager string, subre
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *UDPRouteApplyConfiguration) WithKind(value string) *UDPRouteApplyConfiguration {
-	b.Kind = &value
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -95,7 +95,7 @@ func (b *UDPRouteApplyConfiguration) WithKind(value string) *UDPRouteApplyConfig
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
 func (b *UDPRouteApplyConfiguration) WithAPIVersion(value string) *UDPRouteApplyConfiguration {
-	b.APIVersion = &value
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
@@ -104,7 +104,7 @@ func (b *UDPRouteApplyConfiguration) WithAPIVersion(value string) *UDPRouteApply
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *UDPRouteApplyConfiguration) WithName(value string) *UDPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
@@ -113,7 +113,7 @@ func (b *UDPRouteApplyConfiguration) WithName(value string) *UDPRouteApplyConfig
 // If called multiple times, the GenerateName field is set to the value of the last call.
 func (b *UDPRouteApplyConfiguration) WithGenerateName(value string) *UDPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
@@ -122,7 +122,7 @@ func (b *UDPRouteApplyConfiguration) WithGenerateName(value string) *UDPRouteApp
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *UDPRouteApplyConfiguration) WithNamespace(value string) *UDPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -131,7 +131,7 @@ func (b *UDPRouteApplyConfiguration) WithNamespace(value string) *UDPRouteApplyC
 // If called multiple times, the UID field is set to the value of the last call.
 func (b *UDPRouteApplyConfiguration) WithUID(value types.UID) *UDPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
@@ -140,7 +140,7 @@ func (b *UDPRouteApplyConfiguration) WithUID(value types.UID) *UDPRouteApplyConf
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
 func (b *UDPRouteApplyConfiguration) WithResourceVersion(value string) *UDPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
@@ -149,7 +149,7 @@ func (b *UDPRouteApplyConfiguration) WithResourceVersion(value string) *UDPRoute
 // If called multiple times, the Generation field is set to the value of the last call.
 func (b *UDPRouteApplyConfiguration) WithGeneration(value int64) *UDPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
@@ -158,7 +158,7 @@ func (b *UDPRouteApplyConfiguration) WithGeneration(value int64) *UDPRouteApplyC
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
 func (b *UDPRouteApplyConfiguration) WithCreationTimestamp(value metav1.Time) *UDPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
@@ -167,7 +167,7 @@ func (b *UDPRouteApplyConfiguration) WithCreationTimestamp(value metav1.Time) *U
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
 func (b *UDPRouteApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *UDPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
@@ -176,7 +176,7 @@ func (b *UDPRouteApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *U
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
 func (b *UDPRouteApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *UDPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -186,11 +186,11 @@ func (b *UDPRouteApplyConfiguration) WithDeletionGracePeriodSeconds(value int64)
 // overwriting an existing map entries in Labels field with the same key.
 func (b *UDPRouteApplyConfiguration) WithLabels(entries map[string]string) *UDPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -201,11 +201,11 @@ func (b *UDPRouteApplyConfiguration) WithLabels(entries map[string]string) *UDPR
 // overwriting an existing map entries in Annotations field with the same key.
 func (b *UDPRouteApplyConfiguration) WithAnnotations(entries map[string]string) *UDPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -219,7 +219,7 @@ func (b *UDPRouteApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerRefe
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -230,7 +230,7 @@ func (b *UDPRouteApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerRefe
 func (b *UDPRouteApplyConfiguration) WithFinalizers(values ...string) *UDPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
@@ -260,5 +260,5 @@ func (b *UDPRouteApplyConfiguration) WithStatus(value *UDPRouteStatusApplyConfig
 // GetName retrieves the value of the Name field in the declarative configuration.
 func (b *UDPRouteApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/apis/v1alpha2/udproutespec.go b/applyconfiguration/apis/v1alpha2/udproutespec.go
index c75a0b52..2f07c51f 100644
--- a/applyconfiguration/apis/v1alpha2/udproutespec.go
+++ b/applyconfiguration/apis/v1alpha2/udproutespec.go
@@ -43,7 +43,7 @@ func (b *UDPRouteSpecApplyConfiguration) WithParentRefs(values ...*v1.ParentRefe
 		if values[i] == nil {
 			panic("nil value passed to WithParentRefs")
 		}
-		b.ParentRefs = append(b.ParentRefs, *values[i])
+		b.CommonRouteSpecApplyConfiguration.ParentRefs = append(b.CommonRouteSpecApplyConfiguration.ParentRefs, *values[i])
 	}
 	return b
 }
diff --git a/applyconfiguration/apis/v1alpha3/backendtlspolicy.go b/applyconfiguration/apis/v1alpha3/backendtlspolicy.go
index ba89d4f2..2892af15 100644
--- a/applyconfiguration/apis/v1alpha3/backendtlspolicy.go
+++ b/applyconfiguration/apis/v1alpha3/backendtlspolicy.go
@@ -88,7 +88,7 @@ func extractBackendTLSPolicy(backendTLSPolicy *apisv1alpha3.BackendTLSPolicy, fi
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *BackendTLSPolicyApplyConfiguration) WithKind(value string) *BackendTLSPolicyApplyConfiguration {
-	b.Kind = &value
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -96,7 +96,7 @@ func (b *BackendTLSPolicyApplyConfiguration) WithKind(value string) *BackendTLSP
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
 func (b *BackendTLSPolicyApplyConfiguration) WithAPIVersion(value string) *BackendTLSPolicyApplyConfiguration {
-	b.APIVersion = &value
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
@@ -105,7 +105,7 @@ func (b *BackendTLSPolicyApplyConfiguration) WithAPIVersion(value string) *Backe
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *BackendTLSPolicyApplyConfiguration) WithName(value string) *BackendTLSPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
@@ -114,7 +114,7 @@ func (b *BackendTLSPolicyApplyConfiguration) WithName(value string) *BackendTLSP
 // If called multiple times, the GenerateName field is set to the value of the last call.
 func (b *BackendTLSPolicyApplyConfiguration) WithGenerateName(value string) *BackendTLSPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
@@ -123,7 +123,7 @@ func (b *BackendTLSPolicyApplyConfiguration) WithGenerateName(value string) *Bac
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *BackendTLSPolicyApplyConfiguration) WithNamespace(value string) *BackendTLSPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -132,7 +132,7 @@ func (b *BackendTLSPolicyApplyConfiguration) WithNamespace(value string) *Backen
 // If called multiple times, the UID field is set to the value of the last call.
 func (b *BackendTLSPolicyApplyConfiguration) WithUID(value types.UID) *BackendTLSPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
@@ -141,7 +141,7 @@ func (b *BackendTLSPolicyApplyConfiguration) WithUID(value types.UID) *BackendTL
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
 func (b *BackendTLSPolicyApplyConfiguration) WithResourceVersion(value string) *BackendTLSPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
@@ -150,7 +150,7 @@ func (b *BackendTLSPolicyApplyConfiguration) WithResourceVersion(value string) *
 // If called multiple times, the Generation field is set to the value of the last call.
 func (b *BackendTLSPolicyApplyConfiguration) WithGeneration(value int64) *BackendTLSPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
@@ -159,7 +159,7 @@ func (b *BackendTLSPolicyApplyConfiguration) WithGeneration(value int64) *Backen
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
 func (b *BackendTLSPolicyApplyConfiguration) WithCreationTimestamp(value metav1.Time) *BackendTLSPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
@@ -168,7 +168,7 @@ func (b *BackendTLSPolicyApplyConfiguration) WithCreationTimestamp(value metav1.
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
 func (b *BackendTLSPolicyApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *BackendTLSPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
@@ -177,7 +177,7 @@ func (b *BackendTLSPolicyApplyConfiguration) WithDeletionTimestamp(value metav1.
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
 func (b *BackendTLSPolicyApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *BackendTLSPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -187,11 +187,11 @@ func (b *BackendTLSPolicyApplyConfiguration) WithDeletionGracePeriodSeconds(valu
 // overwriting an existing map entries in Labels field with the same key.
 func (b *BackendTLSPolicyApplyConfiguration) WithLabels(entries map[string]string) *BackendTLSPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -202,11 +202,11 @@ func (b *BackendTLSPolicyApplyConfiguration) WithLabels(entries map[string]strin
 // overwriting an existing map entries in Annotations field with the same key.
 func (b *BackendTLSPolicyApplyConfiguration) WithAnnotations(entries map[string]string) *BackendTLSPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -220,7 +220,7 @@ func (b *BackendTLSPolicyApplyConfiguration) WithOwnerReferences(values ...*v1.O
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -231,7 +231,7 @@ func (b *BackendTLSPolicyApplyConfiguration) WithOwnerReferences(values ...*v1.O
 func (b *BackendTLSPolicyApplyConfiguration) WithFinalizers(values ...string) *BackendTLSPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
@@ -261,5 +261,5 @@ func (b *BackendTLSPolicyApplyConfiguration) WithStatus(value *v1alpha2.PolicySt
 // GetName retrieves the value of the Name field in the declarative configuration.
 func (b *BackendTLSPolicyApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/apis/v1alpha3/backendtlspolicyvalidation.go b/applyconfiguration/apis/v1alpha3/backendtlspolicyvalidation.go
index 4f0f5d92..b0cf5bfa 100644
--- a/applyconfiguration/apis/v1alpha3/backendtlspolicyvalidation.go
+++ b/applyconfiguration/apis/v1alpha3/backendtlspolicyvalidation.go
@@ -20,7 +20,7 @@ package v1alpha3
 
 import (
 	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
-	v1alpha3 "sigs.k8s.io/gateway-api/apis/v1alpha3"
+	apisv1alpha3 "sigs.k8s.io/gateway-api/apis/v1alpha3"
 	v1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
 )
 
@@ -28,7 +28,7 @@ import (
 // with apply.
 type BackendTLSPolicyValidationApplyConfiguration struct {
 	CACertificateRefs       []v1.LocalObjectReferenceApplyConfiguration `json:"caCertificateRefs,omitempty"`
-	WellKnownCACertificates *v1alpha3.WellKnownCACertificatesType       `json:"wellKnownCACertificates,omitempty"`
+	WellKnownCACertificates *apisv1alpha3.WellKnownCACertificatesType   `json:"wellKnownCACertificates,omitempty"`
 	Hostname                *apisv1.PreciseHostname                     `json:"hostname,omitempty"`
 	SubjectAltNames         []SubjectAltNameApplyConfiguration          `json:"subjectAltNames,omitempty"`
 }
@@ -55,7 +55,7 @@ func (b *BackendTLSPolicyValidationApplyConfiguration) WithCACertificateRefs(val
 // WithWellKnownCACertificates sets the WellKnownCACertificates field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the WellKnownCACertificates field is set to the value of the last call.
-func (b *BackendTLSPolicyValidationApplyConfiguration) WithWellKnownCACertificates(value v1alpha3.WellKnownCACertificatesType) *BackendTLSPolicyValidationApplyConfiguration {
+func (b *BackendTLSPolicyValidationApplyConfiguration) WithWellKnownCACertificates(value apisv1alpha3.WellKnownCACertificatesType) *BackendTLSPolicyValidationApplyConfiguration {
 	b.WellKnownCACertificates = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1alpha3/subjectaltname.go b/applyconfiguration/apis/v1alpha3/subjectaltname.go
index ae71ef31..42823831 100644
--- a/applyconfiguration/apis/v1alpha3/subjectaltname.go
+++ b/applyconfiguration/apis/v1alpha3/subjectaltname.go
@@ -20,15 +20,15 @@ package v1alpha3
 
 import (
 	v1 "sigs.k8s.io/gateway-api/apis/v1"
-	v1alpha3 "sigs.k8s.io/gateway-api/apis/v1alpha3"
+	apisv1alpha3 "sigs.k8s.io/gateway-api/apis/v1alpha3"
 )
 
 // SubjectAltNameApplyConfiguration represents a declarative configuration of the SubjectAltName type for use
 // with apply.
 type SubjectAltNameApplyConfiguration struct {
-	Type     *v1alpha3.SubjectAltNameType `json:"type,omitempty"`
-	Hostname *v1.Hostname                 `json:"hostname,omitempty"`
-	URI      *v1.AbsoluteURI              `json:"uri,omitempty"`
+	Type     *apisv1alpha3.SubjectAltNameType `json:"type,omitempty"`
+	Hostname *v1.Hostname                     `json:"hostname,omitempty"`
+	URI      *v1.AbsoluteURI                  `json:"uri,omitempty"`
 }
 
 // SubjectAltNameApplyConfiguration constructs a declarative configuration of the SubjectAltName type for use with
@@ -40,7 +40,7 @@ func SubjectAltName() *SubjectAltNameApplyConfiguration {
 // WithType sets the Type field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Type field is set to the value of the last call.
-func (b *SubjectAltNameApplyConfiguration) WithType(value v1alpha3.SubjectAltNameType) *SubjectAltNameApplyConfiguration {
+func (b *SubjectAltNameApplyConfiguration) WithType(value apisv1alpha3.SubjectAltNameType) *SubjectAltNameApplyConfiguration {
 	b.Type = &value
 	return b
 }
diff --git a/applyconfiguration/apis/v1beta1/gateway.go b/applyconfiguration/apis/v1beta1/gateway.go
index 49ec4b21..3b623558 100644
--- a/applyconfiguration/apis/v1beta1/gateway.go
+++ b/applyconfiguration/apis/v1beta1/gateway.go
@@ -23,7 +23,7 @@ import (
 	types "k8s.io/apimachinery/pkg/types"
 	managedfields "k8s.io/apimachinery/pkg/util/managedfields"
 	v1 "k8s.io/client-go/applyconfigurations/meta/v1"
-	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 	apisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
 	internal "sigs.k8s.io/gateway-api/applyconfiguration/internal"
 )
@@ -59,18 +59,18 @@ func Gateway(name, namespace string) *GatewayApplyConfiguration {
 // Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously
 // applied if another fieldManager has updated or force applied any of the previously applied fields.
 // Experimental!
-func ExtractGateway(gateway *v1beta1.Gateway, fieldManager string) (*GatewayApplyConfiguration, error) {
+func ExtractGateway(gateway *apisv1beta1.Gateway, fieldManager string) (*GatewayApplyConfiguration, error) {
 	return extractGateway(gateway, fieldManager, "")
 }
 
 // ExtractGatewayStatus is the same as ExtractGateway except
 // that it extracts the status subresource applied configuration.
 // Experimental!
-func ExtractGatewayStatus(gateway *v1beta1.Gateway, fieldManager string) (*GatewayApplyConfiguration, error) {
+func ExtractGatewayStatus(gateway *apisv1beta1.Gateway, fieldManager string) (*GatewayApplyConfiguration, error) {
 	return extractGateway(gateway, fieldManager, "status")
 }
 
-func extractGateway(gateway *v1beta1.Gateway, fieldManager string, subresource string) (*GatewayApplyConfiguration, error) {
+func extractGateway(gateway *apisv1beta1.Gateway, fieldManager string, subresource string) (*GatewayApplyConfiguration, error) {
 	b := &GatewayApplyConfiguration{}
 	err := managedfields.ExtractInto(gateway, internal.Parser().Type("io.k8s.sigs.gateway-api.apis.v1beta1.Gateway"), fieldManager, b, subresource)
 	if err != nil {
@@ -88,7 +88,7 @@ func extractGateway(gateway *v1beta1.Gateway, fieldManager string, subresource s
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithKind(value string) *GatewayApplyConfiguration {
-	b.Kind = &value
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -96,7 +96,7 @@ func (b *GatewayApplyConfiguration) WithKind(value string) *GatewayApplyConfigur
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithAPIVersion(value string) *GatewayApplyConfiguration {
-	b.APIVersion = &value
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
@@ -105,7 +105,7 @@ func (b *GatewayApplyConfiguration) WithAPIVersion(value string) *GatewayApplyCo
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithName(value string) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
@@ -114,7 +114,7 @@ func (b *GatewayApplyConfiguration) WithName(value string) *GatewayApplyConfigur
 // If called multiple times, the GenerateName field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithGenerateName(value string) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
@@ -123,7 +123,7 @@ func (b *GatewayApplyConfiguration) WithGenerateName(value string) *GatewayApply
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithNamespace(value string) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -132,7 +132,7 @@ func (b *GatewayApplyConfiguration) WithNamespace(value string) *GatewayApplyCon
 // If called multiple times, the UID field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithUID(value types.UID) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
@@ -141,7 +141,7 @@ func (b *GatewayApplyConfiguration) WithUID(value types.UID) *GatewayApplyConfig
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithResourceVersion(value string) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
@@ -150,7 +150,7 @@ func (b *GatewayApplyConfiguration) WithResourceVersion(value string) *GatewayAp
 // If called multiple times, the Generation field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithGeneration(value int64) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
@@ -159,7 +159,7 @@ func (b *GatewayApplyConfiguration) WithGeneration(value int64) *GatewayApplyCon
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithCreationTimestamp(value metav1.Time) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
@@ -168,7 +168,7 @@ func (b *GatewayApplyConfiguration) WithCreationTimestamp(value metav1.Time) *Ga
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
@@ -177,7 +177,7 @@ func (b *GatewayApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *Ga
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
 func (b *GatewayApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -187,11 +187,11 @@ func (b *GatewayApplyConfiguration) WithDeletionGracePeriodSeconds(value int64)
 // overwriting an existing map entries in Labels field with the same key.
 func (b *GatewayApplyConfiguration) WithLabels(entries map[string]string) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -202,11 +202,11 @@ func (b *GatewayApplyConfiguration) WithLabels(entries map[string]string) *Gatew
 // overwriting an existing map entries in Annotations field with the same key.
 func (b *GatewayApplyConfiguration) WithAnnotations(entries map[string]string) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -220,7 +220,7 @@ func (b *GatewayApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerRefer
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -231,7 +231,7 @@ func (b *GatewayApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerRefer
 func (b *GatewayApplyConfiguration) WithFinalizers(values ...string) *GatewayApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
@@ -261,5 +261,5 @@ func (b *GatewayApplyConfiguration) WithStatus(value *apisv1.GatewayStatusApplyC
 // GetName retrieves the value of the Name field in the declarative configuration.
 func (b *GatewayApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/apis/v1beta1/gatewayclass.go b/applyconfiguration/apis/v1beta1/gatewayclass.go
index 4ca42d5b..d7cecd62 100644
--- a/applyconfiguration/apis/v1beta1/gatewayclass.go
+++ b/applyconfiguration/apis/v1beta1/gatewayclass.go
@@ -23,7 +23,7 @@ import (
 	types "k8s.io/apimachinery/pkg/types"
 	managedfields "k8s.io/apimachinery/pkg/util/managedfields"
 	v1 "k8s.io/client-go/applyconfigurations/meta/v1"
-	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 	apisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
 	internal "sigs.k8s.io/gateway-api/applyconfiguration/internal"
 )
@@ -58,18 +58,18 @@ func GatewayClass(name string) *GatewayClassApplyConfiguration {
 // Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously
 // applied if another fieldManager has updated or force applied any of the previously applied fields.
 // Experimental!
-func ExtractGatewayClass(gatewayClass *v1beta1.GatewayClass, fieldManager string) (*GatewayClassApplyConfiguration, error) {
+func ExtractGatewayClass(gatewayClass *apisv1beta1.GatewayClass, fieldManager string) (*GatewayClassApplyConfiguration, error) {
 	return extractGatewayClass(gatewayClass, fieldManager, "")
 }
 
 // ExtractGatewayClassStatus is the same as ExtractGatewayClass except
 // that it extracts the status subresource applied configuration.
 // Experimental!
-func ExtractGatewayClassStatus(gatewayClass *v1beta1.GatewayClass, fieldManager string) (*GatewayClassApplyConfiguration, error) {
+func ExtractGatewayClassStatus(gatewayClass *apisv1beta1.GatewayClass, fieldManager string) (*GatewayClassApplyConfiguration, error) {
 	return extractGatewayClass(gatewayClass, fieldManager, "status")
 }
 
-func extractGatewayClass(gatewayClass *v1beta1.GatewayClass, fieldManager string, subresource string) (*GatewayClassApplyConfiguration, error) {
+func extractGatewayClass(gatewayClass *apisv1beta1.GatewayClass, fieldManager string, subresource string) (*GatewayClassApplyConfiguration, error) {
 	b := &GatewayClassApplyConfiguration{}
 	err := managedfields.ExtractInto(gatewayClass, internal.Parser().Type("io.k8s.sigs.gateway-api.apis.v1beta1.GatewayClass"), fieldManager, b, subresource)
 	if err != nil {
@@ -86,7 +86,7 @@ func extractGatewayClass(gatewayClass *v1beta1.GatewayClass, fieldManager string
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithKind(value string) *GatewayClassApplyConfiguration {
-	b.Kind = &value
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -94,7 +94,7 @@ func (b *GatewayClassApplyConfiguration) WithKind(value string) *GatewayClassApp
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithAPIVersion(value string) *GatewayClassApplyConfiguration {
-	b.APIVersion = &value
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
@@ -103,7 +103,7 @@ func (b *GatewayClassApplyConfiguration) WithAPIVersion(value string) *GatewayCl
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithName(value string) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
@@ -112,7 +112,7 @@ func (b *GatewayClassApplyConfiguration) WithName(value string) *GatewayClassApp
 // If called multiple times, the GenerateName field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithGenerateName(value string) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
@@ -121,7 +121,7 @@ func (b *GatewayClassApplyConfiguration) WithGenerateName(value string) *Gateway
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithNamespace(value string) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -130,7 +130,7 @@ func (b *GatewayClassApplyConfiguration) WithNamespace(value string) *GatewayCla
 // If called multiple times, the UID field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithUID(value types.UID) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
@@ -139,7 +139,7 @@ func (b *GatewayClassApplyConfiguration) WithUID(value types.UID) *GatewayClassA
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithResourceVersion(value string) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
@@ -148,7 +148,7 @@ func (b *GatewayClassApplyConfiguration) WithResourceVersion(value string) *Gate
 // If called multiple times, the Generation field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithGeneration(value int64) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
@@ -157,7 +157,7 @@ func (b *GatewayClassApplyConfiguration) WithGeneration(value int64) *GatewayCla
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithCreationTimestamp(value metav1.Time) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
@@ -166,7 +166,7 @@ func (b *GatewayClassApplyConfiguration) WithCreationTimestamp(value metav1.Time
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
@@ -175,7 +175,7 @@ func (b *GatewayClassApplyConfiguration) WithDeletionTimestamp(value metav1.Time
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
 func (b *GatewayClassApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -185,11 +185,11 @@ func (b *GatewayClassApplyConfiguration) WithDeletionGracePeriodSeconds(value in
 // overwriting an existing map entries in Labels field with the same key.
 func (b *GatewayClassApplyConfiguration) WithLabels(entries map[string]string) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -200,11 +200,11 @@ func (b *GatewayClassApplyConfiguration) WithLabels(entries map[string]string) *
 // overwriting an existing map entries in Annotations field with the same key.
 func (b *GatewayClassApplyConfiguration) WithAnnotations(entries map[string]string) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -218,7 +218,7 @@ func (b *GatewayClassApplyConfiguration) WithOwnerReferences(values ...*v1.Owner
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -229,7 +229,7 @@ func (b *GatewayClassApplyConfiguration) WithOwnerReferences(values ...*v1.Owner
 func (b *GatewayClassApplyConfiguration) WithFinalizers(values ...string) *GatewayClassApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
@@ -259,5 +259,5 @@ func (b *GatewayClassApplyConfiguration) WithStatus(value *apisv1.GatewayClassSt
 // GetName retrieves the value of the Name field in the declarative configuration.
 func (b *GatewayClassApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/apis/v1beta1/httproute.go b/applyconfiguration/apis/v1beta1/httproute.go
index aa85c307..18e2ca96 100644
--- a/applyconfiguration/apis/v1beta1/httproute.go
+++ b/applyconfiguration/apis/v1beta1/httproute.go
@@ -23,7 +23,7 @@ import (
 	types "k8s.io/apimachinery/pkg/types"
 	managedfields "k8s.io/apimachinery/pkg/util/managedfields"
 	v1 "k8s.io/client-go/applyconfigurations/meta/v1"
-	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 	apisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
 	internal "sigs.k8s.io/gateway-api/applyconfiguration/internal"
 )
@@ -59,18 +59,18 @@ func HTTPRoute(name, namespace string) *HTTPRouteApplyConfiguration {
 // Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously
 // applied if another fieldManager has updated or force applied any of the previously applied fields.
 // Experimental!
-func ExtractHTTPRoute(hTTPRoute *v1beta1.HTTPRoute, fieldManager string) (*HTTPRouteApplyConfiguration, error) {
+func ExtractHTTPRoute(hTTPRoute *apisv1beta1.HTTPRoute, fieldManager string) (*HTTPRouteApplyConfiguration, error) {
 	return extractHTTPRoute(hTTPRoute, fieldManager, "")
 }
 
 // ExtractHTTPRouteStatus is the same as ExtractHTTPRoute except
 // that it extracts the status subresource applied configuration.
 // Experimental!
-func ExtractHTTPRouteStatus(hTTPRoute *v1beta1.HTTPRoute, fieldManager string) (*HTTPRouteApplyConfiguration, error) {
+func ExtractHTTPRouteStatus(hTTPRoute *apisv1beta1.HTTPRoute, fieldManager string) (*HTTPRouteApplyConfiguration, error) {
 	return extractHTTPRoute(hTTPRoute, fieldManager, "status")
 }
 
-func extractHTTPRoute(hTTPRoute *v1beta1.HTTPRoute, fieldManager string, subresource string) (*HTTPRouteApplyConfiguration, error) {
+func extractHTTPRoute(hTTPRoute *apisv1beta1.HTTPRoute, fieldManager string, subresource string) (*HTTPRouteApplyConfiguration, error) {
 	b := &HTTPRouteApplyConfiguration{}
 	err := managedfields.ExtractInto(hTTPRoute, internal.Parser().Type("io.k8s.sigs.gateway-api.apis.v1beta1.HTTPRoute"), fieldManager, b, subresource)
 	if err != nil {
@@ -88,7 +88,7 @@ func extractHTTPRoute(hTTPRoute *v1beta1.HTTPRoute, fieldManager string, subreso
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithKind(value string) *HTTPRouteApplyConfiguration {
-	b.Kind = &value
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -96,7 +96,7 @@ func (b *HTTPRouteApplyConfiguration) WithKind(value string) *HTTPRouteApplyConf
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithAPIVersion(value string) *HTTPRouteApplyConfiguration {
-	b.APIVersion = &value
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
@@ -105,7 +105,7 @@ func (b *HTTPRouteApplyConfiguration) WithAPIVersion(value string) *HTTPRouteApp
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithName(value string) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
@@ -114,7 +114,7 @@ func (b *HTTPRouteApplyConfiguration) WithName(value string) *HTTPRouteApplyConf
 // If called multiple times, the GenerateName field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithGenerateName(value string) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
@@ -123,7 +123,7 @@ func (b *HTTPRouteApplyConfiguration) WithGenerateName(value string) *HTTPRouteA
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithNamespace(value string) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -132,7 +132,7 @@ func (b *HTTPRouteApplyConfiguration) WithNamespace(value string) *HTTPRouteAppl
 // If called multiple times, the UID field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithUID(value types.UID) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
@@ -141,7 +141,7 @@ func (b *HTTPRouteApplyConfiguration) WithUID(value types.UID) *HTTPRouteApplyCo
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithResourceVersion(value string) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
@@ -150,7 +150,7 @@ func (b *HTTPRouteApplyConfiguration) WithResourceVersion(value string) *HTTPRou
 // If called multiple times, the Generation field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithGeneration(value int64) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
@@ -159,7 +159,7 @@ func (b *HTTPRouteApplyConfiguration) WithGeneration(value int64) *HTTPRouteAppl
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithCreationTimestamp(value metav1.Time) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
@@ -168,7 +168,7 @@ func (b *HTTPRouteApplyConfiguration) WithCreationTimestamp(value metav1.Time) *
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
@@ -177,7 +177,7 @@ func (b *HTTPRouteApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
 func (b *HTTPRouteApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -187,11 +187,11 @@ func (b *HTTPRouteApplyConfiguration) WithDeletionGracePeriodSeconds(value int64
 // overwriting an existing map entries in Labels field with the same key.
 func (b *HTTPRouteApplyConfiguration) WithLabels(entries map[string]string) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -202,11 +202,11 @@ func (b *HTTPRouteApplyConfiguration) WithLabels(entries map[string]string) *HTT
 // overwriting an existing map entries in Annotations field with the same key.
 func (b *HTTPRouteApplyConfiguration) WithAnnotations(entries map[string]string) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -220,7 +220,7 @@ func (b *HTTPRouteApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerRef
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -231,7 +231,7 @@ func (b *HTTPRouteApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerRef
 func (b *HTTPRouteApplyConfiguration) WithFinalizers(values ...string) *HTTPRouteApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
@@ -261,5 +261,5 @@ func (b *HTTPRouteApplyConfiguration) WithStatus(value *apisv1.HTTPRouteStatusAp
 // GetName retrieves the value of the Name field in the declarative configuration.
 func (b *HTTPRouteApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/apis/v1beta1/referencegrant.go b/applyconfiguration/apis/v1beta1/referencegrant.go
index 79c19df8..0ebd1cd1 100644
--- a/applyconfiguration/apis/v1beta1/referencegrant.go
+++ b/applyconfiguration/apis/v1beta1/referencegrant.go
@@ -86,7 +86,7 @@ func extractReferenceGrant(referenceGrant *apisv1beta1.ReferenceGrant, fieldMana
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithKind(value string) *ReferenceGrantApplyConfiguration {
-	b.Kind = &value
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
@@ -94,7 +94,7 @@ func (b *ReferenceGrantApplyConfiguration) WithKind(value string) *ReferenceGran
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithAPIVersion(value string) *ReferenceGrantApplyConfiguration {
-	b.APIVersion = &value
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
@@ -103,7 +103,7 @@ func (b *ReferenceGrantApplyConfiguration) WithAPIVersion(value string) *Referen
 // If called multiple times, the Name field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithName(value string) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
@@ -112,7 +112,7 @@ func (b *ReferenceGrantApplyConfiguration) WithName(value string) *ReferenceGran
 // If called multiple times, the GenerateName field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithGenerateName(value string) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
@@ -121,7 +121,7 @@ func (b *ReferenceGrantApplyConfiguration) WithGenerateName(value string) *Refer
 // If called multiple times, the Namespace field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithNamespace(value string) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
@@ -130,7 +130,7 @@ func (b *ReferenceGrantApplyConfiguration) WithNamespace(value string) *Referenc
 // If called multiple times, the UID field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithUID(value types.UID) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
@@ -139,7 +139,7 @@ func (b *ReferenceGrantApplyConfiguration) WithUID(value types.UID) *ReferenceGr
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithResourceVersion(value string) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
@@ -148,7 +148,7 @@ func (b *ReferenceGrantApplyConfiguration) WithResourceVersion(value string) *Re
 // If called multiple times, the Generation field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithGeneration(value int64) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
@@ -157,7 +157,7 @@ func (b *ReferenceGrantApplyConfiguration) WithGeneration(value int64) *Referenc
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithCreationTimestamp(value metav1.Time) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
@@ -166,7 +166,7 @@ func (b *ReferenceGrantApplyConfiguration) WithCreationTimestamp(value metav1.Ti
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
@@ -175,7 +175,7 @@ func (b *ReferenceGrantApplyConfiguration) WithDeletionTimestamp(value metav1.Ti
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
 func (b *ReferenceGrantApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -185,11 +185,11 @@ func (b *ReferenceGrantApplyConfiguration) WithDeletionGracePeriodSeconds(value
 // overwriting an existing map entries in Labels field with the same key.
 func (b *ReferenceGrantApplyConfiguration) WithLabels(entries map[string]string) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -200,11 +200,11 @@ func (b *ReferenceGrantApplyConfiguration) WithLabels(entries map[string]string)
 // overwriting an existing map entries in Annotations field with the same key.
 func (b *ReferenceGrantApplyConfiguration) WithAnnotations(entries map[string]string) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -218,7 +218,7 @@ func (b *ReferenceGrantApplyConfiguration) WithOwnerReferences(values ...*v1.Own
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -229,7 +229,7 @@ func (b *ReferenceGrantApplyConfiguration) WithOwnerReferences(values ...*v1.Own
 func (b *ReferenceGrantApplyConfiguration) WithFinalizers(values ...string) *ReferenceGrantApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
@@ -251,5 +251,5 @@ func (b *ReferenceGrantApplyConfiguration) WithSpec(value *ReferenceGrantSpecApp
 // GetName retrieves the value of the Name field in the declarative configuration.
 func (b *ReferenceGrantApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/apisx/v1alpha1/budgetdetails.go b/applyconfiguration/apisx/v1alpha1/budgetdetails.go
new file mode 100644
index 00000000..573934c7
--- /dev/null
+++ b/applyconfiguration/apisx/v1alpha1/budgetdetails.go
@@ -0,0 +1,52 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+	v1 "sigs.k8s.io/gateway-api/apis/v1"
+)
+
+// BudgetDetailsApplyConfiguration represents a declarative configuration of the BudgetDetails type for use
+// with apply.
+type BudgetDetailsApplyConfiguration struct {
+	Percent  *int         `json:"percent,omitempty"`
+	Interval *v1.Duration `json:"interval,omitempty"`
+}
+
+// BudgetDetailsApplyConfiguration constructs a declarative configuration of the BudgetDetails type for use with
+// apply.
+func BudgetDetails() *BudgetDetailsApplyConfiguration {
+	return &BudgetDetailsApplyConfiguration{}
+}
+
+// WithPercent sets the Percent field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Percent field is set to the value of the last call.
+func (b *BudgetDetailsApplyConfiguration) WithPercent(value int) *BudgetDetailsApplyConfiguration {
+	b.Percent = &value
+	return b
+}
+
+// WithInterval sets the Interval field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Interval field is set to the value of the last call.
+func (b *BudgetDetailsApplyConfiguration) WithInterval(value v1.Duration) *BudgetDetailsApplyConfiguration {
+	b.Interval = &value
+	return b
+}
diff --git a/applyconfiguration/apisx/v1alpha1/retryconstraint.go b/applyconfiguration/apisx/v1alpha1/retryconstraint.go
index 4248ea83..05c7ac59 100644
--- a/applyconfiguration/apisx/v1alpha1/retryconstraint.go
+++ b/applyconfiguration/apisx/v1alpha1/retryconstraint.go
@@ -18,16 +18,11 @@ limitations under the License.
 
 package v1alpha1
 
-import (
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
-)
-
 // RetryConstraintApplyConfiguration represents a declarative configuration of the RetryConstraint type for use
 // with apply.
 type RetryConstraintApplyConfiguration struct {
-	BudgetPercent  *int                           `json:"budgetPercent,omitempty"`
-	BudgetInterval *v1.Duration                   `json:"budgetInterval,omitempty"`
-	MinRetryRate   *RequestRateApplyConfiguration `json:"minRetryRate,omitempty"`
+	Budget       *BudgetDetailsApplyConfiguration `json:"budget,omitempty"`
+	MinRetryRate *RequestRateApplyConfiguration   `json:"minRetryRate,omitempty"`
 }
 
 // RetryConstraintApplyConfiguration constructs a declarative configuration of the RetryConstraint type for use with
@@ -36,19 +31,11 @@ func RetryConstraint() *RetryConstraintApplyConfiguration {
 	return &RetryConstraintApplyConfiguration{}
 }
 
-// WithBudgetPercent sets the BudgetPercent field in the declarative configuration to the given value
-// and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the BudgetPercent field is set to the value of the last call.
-func (b *RetryConstraintApplyConfiguration) WithBudgetPercent(value int) *RetryConstraintApplyConfiguration {
-	b.BudgetPercent = &value
-	return b
-}
-
-// WithBudgetInterval sets the BudgetInterval field in the declarative configuration to the given value
+// WithBudget sets the Budget field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the BudgetInterval field is set to the value of the last call.
-func (b *RetryConstraintApplyConfiguration) WithBudgetInterval(value v1.Duration) *RetryConstraintApplyConfiguration {
-	b.BudgetInterval = &value
+// If called multiple times, the Budget field is set to the value of the last call.
+func (b *RetryConstraintApplyConfiguration) WithBudget(value *BudgetDetailsApplyConfiguration) *RetryConstraintApplyConfiguration {
+	b.Budget = value
 	return b
 }
 
diff --git a/applyconfiguration/apisx/v1alpha1/backendtrafficpolicy.go b/applyconfiguration/apisx/v1alpha1/xbackendtrafficpolicy.go
similarity index 59%
rename from applyconfiguration/apisx/v1alpha1/backendtrafficpolicy.go
rename to applyconfiguration/apisx/v1alpha1/xbackendtrafficpolicy.go
index 49288efc..427d5965 100644
--- a/applyconfiguration/apisx/v1alpha1/backendtrafficpolicy.go
+++ b/applyconfiguration/apisx/v1alpha1/xbackendtrafficpolicy.go
@@ -28,58 +28,58 @@ import (
 	internal "sigs.k8s.io/gateway-api/applyconfiguration/internal"
 )
 
-// BackendTrafficPolicyApplyConfiguration represents a declarative configuration of the BackendTrafficPolicy type for use
+// XBackendTrafficPolicyApplyConfiguration represents a declarative configuration of the XBackendTrafficPolicy type for use
 // with apply.
-type BackendTrafficPolicyApplyConfiguration struct {
+type XBackendTrafficPolicyApplyConfiguration struct {
 	v1.TypeMetaApplyConfiguration    `json:",inline"`
 	*v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
 	Spec                             *BackendTrafficPolicySpecApplyConfiguration `json:"spec,omitempty"`
 	Status                           *v1alpha2.PolicyStatusApplyConfiguration    `json:"status,omitempty"`
 }
 
-// BackendTrafficPolicy constructs a declarative configuration of the BackendTrafficPolicy type for use with
+// XBackendTrafficPolicy constructs a declarative configuration of the XBackendTrafficPolicy type for use with
 // apply.
-func BackendTrafficPolicy(name, namespace string) *BackendTrafficPolicyApplyConfiguration {
-	b := &BackendTrafficPolicyApplyConfiguration{}
+func XBackendTrafficPolicy(name, namespace string) *XBackendTrafficPolicyApplyConfiguration {
+	b := &XBackendTrafficPolicyApplyConfiguration{}
 	b.WithName(name)
 	b.WithNamespace(namespace)
-	b.WithKind("BackendTrafficPolicy")
+	b.WithKind("XBackendTrafficPolicy")
 	b.WithAPIVersion("gateway.networking.x-k8s.io/v1alpha1")
 	return b
 }
 
-// ExtractBackendTrafficPolicy extracts the applied configuration owned by fieldManager from
-// backendTrafficPolicy. If no managedFields are found in backendTrafficPolicy for fieldManager, a
-// BackendTrafficPolicyApplyConfiguration is returned with only the Name, Namespace (if applicable),
+// ExtractXBackendTrafficPolicy extracts the applied configuration owned by fieldManager from
+// xBackendTrafficPolicy. If no managedFields are found in xBackendTrafficPolicy for fieldManager, a
+// XBackendTrafficPolicyApplyConfiguration is returned with only the Name, Namespace (if applicable),
 // APIVersion and Kind populated. It is possible that no managed fields were found for because other
 // field managers have taken ownership of all the fields previously owned by fieldManager, or because
 // the fieldManager never owned fields any fields.
-// backendTrafficPolicy must be a unmodified BackendTrafficPolicy API object that was retrieved from the Kubernetes API.
-// ExtractBackendTrafficPolicy provides a way to perform a extract/modify-in-place/apply workflow.
+// xBackendTrafficPolicy must be a unmodified XBackendTrafficPolicy API object that was retrieved from the Kubernetes API.
+// ExtractXBackendTrafficPolicy provides a way to perform a extract/modify-in-place/apply workflow.
 // Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously
 // applied if another fieldManager has updated or force applied any of the previously applied fields.
 // Experimental!
-func ExtractBackendTrafficPolicy(backendTrafficPolicy *apisxv1alpha1.BackendTrafficPolicy, fieldManager string) (*BackendTrafficPolicyApplyConfiguration, error) {
-	return extractBackendTrafficPolicy(backendTrafficPolicy, fieldManager, "")
+func ExtractXBackendTrafficPolicy(xBackendTrafficPolicy *apisxv1alpha1.XBackendTrafficPolicy, fieldManager string) (*XBackendTrafficPolicyApplyConfiguration, error) {
+	return extractXBackendTrafficPolicy(xBackendTrafficPolicy, fieldManager, "")
 }
 
-// ExtractBackendTrafficPolicyStatus is the same as ExtractBackendTrafficPolicy except
+// ExtractXBackendTrafficPolicyStatus is the same as ExtractXBackendTrafficPolicy except
 // that it extracts the status subresource applied configuration.
 // Experimental!
-func ExtractBackendTrafficPolicyStatus(backendTrafficPolicy *apisxv1alpha1.BackendTrafficPolicy, fieldManager string) (*BackendTrafficPolicyApplyConfiguration, error) {
-	return extractBackendTrafficPolicy(backendTrafficPolicy, fieldManager, "status")
+func ExtractXBackendTrafficPolicyStatus(xBackendTrafficPolicy *apisxv1alpha1.XBackendTrafficPolicy, fieldManager string) (*XBackendTrafficPolicyApplyConfiguration, error) {
+	return extractXBackendTrafficPolicy(xBackendTrafficPolicy, fieldManager, "status")
 }
 
-func extractBackendTrafficPolicy(backendTrafficPolicy *apisxv1alpha1.BackendTrafficPolicy, fieldManager string, subresource string) (*BackendTrafficPolicyApplyConfiguration, error) {
-	b := &BackendTrafficPolicyApplyConfiguration{}
-	err := managedfields.ExtractInto(backendTrafficPolicy, internal.Parser().Type("io.k8s.sigs.gateway-api.apisx.v1alpha1.BackendTrafficPolicy"), fieldManager, b, subresource)
+func extractXBackendTrafficPolicy(xBackendTrafficPolicy *apisxv1alpha1.XBackendTrafficPolicy, fieldManager string, subresource string) (*XBackendTrafficPolicyApplyConfiguration, error) {
+	b := &XBackendTrafficPolicyApplyConfiguration{}
+	err := managedfields.ExtractInto(xBackendTrafficPolicy, internal.Parser().Type("io.k8s.sigs.gateway-api.apisx.v1alpha1.XBackendTrafficPolicy"), fieldManager, b, subresource)
 	if err != nil {
 		return nil, err
 	}
-	b.WithName(backendTrafficPolicy.Name)
-	b.WithNamespace(backendTrafficPolicy.Namespace)
+	b.WithName(xBackendTrafficPolicy.Name)
+	b.WithNamespace(xBackendTrafficPolicy.Namespace)
 
-	b.WithKind("BackendTrafficPolicy")
+	b.WithKind("XBackendTrafficPolicy")
 	b.WithAPIVersion("gateway.networking.x-k8s.io/v1alpha1")
 	return b, nil
 }
@@ -87,97 +87,97 @@ func extractBackendTrafficPolicy(backendTrafficPolicy *apisxv1alpha1.BackendTraf
 // WithKind sets the Kind field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
-func (b *BackendTrafficPolicyApplyConfiguration) WithKind(value string) *BackendTrafficPolicyApplyConfiguration {
-	b.Kind = &value
+func (b *XBackendTrafficPolicyApplyConfiguration) WithKind(value string) *XBackendTrafficPolicyApplyConfiguration {
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
 // WithAPIVersion sets the APIVersion field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
-func (b *BackendTrafficPolicyApplyConfiguration) WithAPIVersion(value string) *BackendTrafficPolicyApplyConfiguration {
-	b.APIVersion = &value
+func (b *XBackendTrafficPolicyApplyConfiguration) WithAPIVersion(value string) *XBackendTrafficPolicyApplyConfiguration {
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *BackendTrafficPolicyApplyConfiguration) WithName(value string) *BackendTrafficPolicyApplyConfiguration {
+func (b *XBackendTrafficPolicyApplyConfiguration) WithName(value string) *XBackendTrafficPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
 // WithGenerateName sets the GenerateName field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the GenerateName field is set to the value of the last call.
-func (b *BackendTrafficPolicyApplyConfiguration) WithGenerateName(value string) *BackendTrafficPolicyApplyConfiguration {
+func (b *XBackendTrafficPolicyApplyConfiguration) WithGenerateName(value string) *XBackendTrafficPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
 // WithNamespace sets the Namespace field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Namespace field is set to the value of the last call.
-func (b *BackendTrafficPolicyApplyConfiguration) WithNamespace(value string) *BackendTrafficPolicyApplyConfiguration {
+func (b *XBackendTrafficPolicyApplyConfiguration) WithNamespace(value string) *XBackendTrafficPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
 // WithUID sets the UID field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the UID field is set to the value of the last call.
-func (b *BackendTrafficPolicyApplyConfiguration) WithUID(value types.UID) *BackendTrafficPolicyApplyConfiguration {
+func (b *XBackendTrafficPolicyApplyConfiguration) WithUID(value types.UID) *XBackendTrafficPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
 // WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
-func (b *BackendTrafficPolicyApplyConfiguration) WithResourceVersion(value string) *BackendTrafficPolicyApplyConfiguration {
+func (b *XBackendTrafficPolicyApplyConfiguration) WithResourceVersion(value string) *XBackendTrafficPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
 // WithGeneration sets the Generation field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Generation field is set to the value of the last call.
-func (b *BackendTrafficPolicyApplyConfiguration) WithGeneration(value int64) *BackendTrafficPolicyApplyConfiguration {
+func (b *XBackendTrafficPolicyApplyConfiguration) WithGeneration(value int64) *XBackendTrafficPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
 // WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
-func (b *BackendTrafficPolicyApplyConfiguration) WithCreationTimestamp(value metav1.Time) *BackendTrafficPolicyApplyConfiguration {
+func (b *XBackendTrafficPolicyApplyConfiguration) WithCreationTimestamp(value metav1.Time) *XBackendTrafficPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
 // WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
-func (b *BackendTrafficPolicyApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *BackendTrafficPolicyApplyConfiguration {
+func (b *XBackendTrafficPolicyApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *XBackendTrafficPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
 // WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
-func (b *BackendTrafficPolicyApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *BackendTrafficPolicyApplyConfiguration {
+func (b *XBackendTrafficPolicyApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *XBackendTrafficPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -185,13 +185,13 @@ func (b *BackendTrafficPolicyApplyConfiguration) WithDeletionGracePeriodSeconds(
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, the entries provided by each call will be put on the Labels field,
 // overwriting an existing map entries in Labels field with the same key.
-func (b *BackendTrafficPolicyApplyConfiguration) WithLabels(entries map[string]string) *BackendTrafficPolicyApplyConfiguration {
+func (b *XBackendTrafficPolicyApplyConfiguration) WithLabels(entries map[string]string) *XBackendTrafficPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -200,13 +200,13 @@ func (b *BackendTrafficPolicyApplyConfiguration) WithLabels(entries map[string]s
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, the entries provided by each call will be put on the Annotations field,
 // overwriting an existing map entries in Annotations field with the same key.
-func (b *BackendTrafficPolicyApplyConfiguration) WithAnnotations(entries map[string]string) *BackendTrafficPolicyApplyConfiguration {
+func (b *XBackendTrafficPolicyApplyConfiguration) WithAnnotations(entries map[string]string) *XBackendTrafficPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -214,13 +214,13 @@ func (b *BackendTrafficPolicyApplyConfiguration) WithAnnotations(entries map[str
 // WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, values provided by each call will be appended to the OwnerReferences field.
-func (b *BackendTrafficPolicyApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *BackendTrafficPolicyApplyConfiguration {
+func (b *XBackendTrafficPolicyApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *XBackendTrafficPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -228,15 +228,15 @@ func (b *BackendTrafficPolicyApplyConfiguration) WithOwnerReferences(values ...*
 // WithFinalizers adds the given value to the Finalizers field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, values provided by each call will be appended to the Finalizers field.
-func (b *BackendTrafficPolicyApplyConfiguration) WithFinalizers(values ...string) *BackendTrafficPolicyApplyConfiguration {
+func (b *XBackendTrafficPolicyApplyConfiguration) WithFinalizers(values ...string) *XBackendTrafficPolicyApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
 
-func (b *BackendTrafficPolicyApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
+func (b *XBackendTrafficPolicyApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
 	if b.ObjectMetaApplyConfiguration == nil {
 		b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{}
 	}
@@ -245,7 +245,7 @@ func (b *BackendTrafficPolicyApplyConfiguration) ensureObjectMetaApplyConfigurat
 // WithSpec sets the Spec field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Spec field is set to the value of the last call.
-func (b *BackendTrafficPolicyApplyConfiguration) WithSpec(value *BackendTrafficPolicySpecApplyConfiguration) *BackendTrafficPolicyApplyConfiguration {
+func (b *XBackendTrafficPolicyApplyConfiguration) WithSpec(value *BackendTrafficPolicySpecApplyConfiguration) *XBackendTrafficPolicyApplyConfiguration {
 	b.Spec = value
 	return b
 }
@@ -253,13 +253,13 @@ func (b *BackendTrafficPolicyApplyConfiguration) WithSpec(value *BackendTrafficP
 // WithStatus sets the Status field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Status field is set to the value of the last call.
-func (b *BackendTrafficPolicyApplyConfiguration) WithStatus(value *v1alpha2.PolicyStatusApplyConfiguration) *BackendTrafficPolicyApplyConfiguration {
+func (b *XBackendTrafficPolicyApplyConfiguration) WithStatus(value *v1alpha2.PolicyStatusApplyConfiguration) *XBackendTrafficPolicyApplyConfiguration {
 	b.Status = value
 	return b
 }
 
 // GetName retrieves the value of the Name field in the declarative configuration.
-func (b *BackendTrafficPolicyApplyConfiguration) GetName() *string {
+func (b *XBackendTrafficPolicyApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/apisx/v1alpha1/listenerset.go b/applyconfiguration/apisx/v1alpha1/xlistenerset.go
similarity index 62%
rename from applyconfiguration/apisx/v1alpha1/listenerset.go
rename to applyconfiguration/apisx/v1alpha1/xlistenerset.go
index b048d951..75519a17 100644
--- a/applyconfiguration/apisx/v1alpha1/listenerset.go
+++ b/applyconfiguration/apisx/v1alpha1/xlistenerset.go
@@ -27,58 +27,58 @@ import (
 	internal "sigs.k8s.io/gateway-api/applyconfiguration/internal"
 )
 
-// ListenerSetApplyConfiguration represents a declarative configuration of the ListenerSet type for use
+// XListenerSetApplyConfiguration represents a declarative configuration of the XListenerSet type for use
 // with apply.
-type ListenerSetApplyConfiguration struct {
+type XListenerSetApplyConfiguration struct {
 	v1.TypeMetaApplyConfiguration    `json:",inline"`
 	*v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
 	Spec                             *ListenerSetSpecApplyConfiguration   `json:"spec,omitempty"`
 	Status                           *ListenerSetStatusApplyConfiguration `json:"status,omitempty"`
 }
 
-// ListenerSet constructs a declarative configuration of the ListenerSet type for use with
+// XListenerSet constructs a declarative configuration of the XListenerSet type for use with
 // apply.
-func ListenerSet(name, namespace string) *ListenerSetApplyConfiguration {
-	b := &ListenerSetApplyConfiguration{}
+func XListenerSet(name, namespace string) *XListenerSetApplyConfiguration {
+	b := &XListenerSetApplyConfiguration{}
 	b.WithName(name)
 	b.WithNamespace(namespace)
-	b.WithKind("ListenerSet")
+	b.WithKind("XListenerSet")
 	b.WithAPIVersion("gateway.networking.x-k8s.io/v1alpha1")
 	return b
 }
 
-// ExtractListenerSet extracts the applied configuration owned by fieldManager from
-// listenerSet. If no managedFields are found in listenerSet for fieldManager, a
-// ListenerSetApplyConfiguration is returned with only the Name, Namespace (if applicable),
+// ExtractXListenerSet extracts the applied configuration owned by fieldManager from
+// xListenerSet. If no managedFields are found in xListenerSet for fieldManager, a
+// XListenerSetApplyConfiguration is returned with only the Name, Namespace (if applicable),
 // APIVersion and Kind populated. It is possible that no managed fields were found for because other
 // field managers have taken ownership of all the fields previously owned by fieldManager, or because
 // the fieldManager never owned fields any fields.
-// listenerSet must be a unmodified ListenerSet API object that was retrieved from the Kubernetes API.
-// ExtractListenerSet provides a way to perform a extract/modify-in-place/apply workflow.
+// xListenerSet must be a unmodified XListenerSet API object that was retrieved from the Kubernetes API.
+// ExtractXListenerSet provides a way to perform a extract/modify-in-place/apply workflow.
 // Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously
 // applied if another fieldManager has updated or force applied any of the previously applied fields.
 // Experimental!
-func ExtractListenerSet(listenerSet *apisxv1alpha1.ListenerSet, fieldManager string) (*ListenerSetApplyConfiguration, error) {
-	return extractListenerSet(listenerSet, fieldManager, "")
+func ExtractXListenerSet(xListenerSet *apisxv1alpha1.XListenerSet, fieldManager string) (*XListenerSetApplyConfiguration, error) {
+	return extractXListenerSet(xListenerSet, fieldManager, "")
 }
 
-// ExtractListenerSetStatus is the same as ExtractListenerSet except
+// ExtractXListenerSetStatus is the same as ExtractXListenerSet except
 // that it extracts the status subresource applied configuration.
 // Experimental!
-func ExtractListenerSetStatus(listenerSet *apisxv1alpha1.ListenerSet, fieldManager string) (*ListenerSetApplyConfiguration, error) {
-	return extractListenerSet(listenerSet, fieldManager, "status")
+func ExtractXListenerSetStatus(xListenerSet *apisxv1alpha1.XListenerSet, fieldManager string) (*XListenerSetApplyConfiguration, error) {
+	return extractXListenerSet(xListenerSet, fieldManager, "status")
 }
 
-func extractListenerSet(listenerSet *apisxv1alpha1.ListenerSet, fieldManager string, subresource string) (*ListenerSetApplyConfiguration, error) {
-	b := &ListenerSetApplyConfiguration{}
-	err := managedfields.ExtractInto(listenerSet, internal.Parser().Type("io.k8s.sigs.gateway-api.apisx.v1alpha1.ListenerSet"), fieldManager, b, subresource)
+func extractXListenerSet(xListenerSet *apisxv1alpha1.XListenerSet, fieldManager string, subresource string) (*XListenerSetApplyConfiguration, error) {
+	b := &XListenerSetApplyConfiguration{}
+	err := managedfields.ExtractInto(xListenerSet, internal.Parser().Type("io.k8s.sigs.gateway-api.apisx.v1alpha1.XListenerSet"), fieldManager, b, subresource)
 	if err != nil {
 		return nil, err
 	}
-	b.WithName(listenerSet.Name)
-	b.WithNamespace(listenerSet.Namespace)
+	b.WithName(xListenerSet.Name)
+	b.WithNamespace(xListenerSet.Namespace)
 
-	b.WithKind("ListenerSet")
+	b.WithKind("XListenerSet")
 	b.WithAPIVersion("gateway.networking.x-k8s.io/v1alpha1")
 	return b, nil
 }
@@ -86,97 +86,97 @@ func extractListenerSet(listenerSet *apisxv1alpha1.ListenerSet, fieldManager str
 // WithKind sets the Kind field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Kind field is set to the value of the last call.
-func (b *ListenerSetApplyConfiguration) WithKind(value string) *ListenerSetApplyConfiguration {
-	b.Kind = &value
+func (b *XListenerSetApplyConfiguration) WithKind(value string) *XListenerSetApplyConfiguration {
+	b.TypeMetaApplyConfiguration.Kind = &value
 	return b
 }
 
 // WithAPIVersion sets the APIVersion field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the APIVersion field is set to the value of the last call.
-func (b *ListenerSetApplyConfiguration) WithAPIVersion(value string) *ListenerSetApplyConfiguration {
-	b.APIVersion = &value
+func (b *XListenerSetApplyConfiguration) WithAPIVersion(value string) *XListenerSetApplyConfiguration {
+	b.TypeMetaApplyConfiguration.APIVersion = &value
 	return b
 }
 
 // WithName sets the Name field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Name field is set to the value of the last call.
-func (b *ListenerSetApplyConfiguration) WithName(value string) *ListenerSetApplyConfiguration {
+func (b *XListenerSetApplyConfiguration) WithName(value string) *XListenerSetApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Name = &value
+	b.ObjectMetaApplyConfiguration.Name = &value
 	return b
 }
 
 // WithGenerateName sets the GenerateName field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the GenerateName field is set to the value of the last call.
-func (b *ListenerSetApplyConfiguration) WithGenerateName(value string) *ListenerSetApplyConfiguration {
+func (b *XListenerSetApplyConfiguration) WithGenerateName(value string) *XListenerSetApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.GenerateName = &value
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
 	return b
 }
 
 // WithNamespace sets the Namespace field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Namespace field is set to the value of the last call.
-func (b *ListenerSetApplyConfiguration) WithNamespace(value string) *ListenerSetApplyConfiguration {
+func (b *XListenerSetApplyConfiguration) WithNamespace(value string) *XListenerSetApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Namespace = &value
+	b.ObjectMetaApplyConfiguration.Namespace = &value
 	return b
 }
 
 // WithUID sets the UID field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the UID field is set to the value of the last call.
-func (b *ListenerSetApplyConfiguration) WithUID(value types.UID) *ListenerSetApplyConfiguration {
+func (b *XListenerSetApplyConfiguration) WithUID(value types.UID) *XListenerSetApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.UID = &value
+	b.ObjectMetaApplyConfiguration.UID = &value
 	return b
 }
 
 // WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the ResourceVersion field is set to the value of the last call.
-func (b *ListenerSetApplyConfiguration) WithResourceVersion(value string) *ListenerSetApplyConfiguration {
+func (b *XListenerSetApplyConfiguration) WithResourceVersion(value string) *XListenerSetApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.ResourceVersion = &value
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
 	return b
 }
 
 // WithGeneration sets the Generation field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Generation field is set to the value of the last call.
-func (b *ListenerSetApplyConfiguration) WithGeneration(value int64) *ListenerSetApplyConfiguration {
+func (b *XListenerSetApplyConfiguration) WithGeneration(value int64) *XListenerSetApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.Generation = &value
+	b.ObjectMetaApplyConfiguration.Generation = &value
 	return b
 }
 
 // WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the CreationTimestamp field is set to the value of the last call.
-func (b *ListenerSetApplyConfiguration) WithCreationTimestamp(value metav1.Time) *ListenerSetApplyConfiguration {
+func (b *XListenerSetApplyConfiguration) WithCreationTimestamp(value metav1.Time) *XListenerSetApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.CreationTimestamp = &value
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
 	return b
 }
 
 // WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the DeletionTimestamp field is set to the value of the last call.
-func (b *ListenerSetApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *ListenerSetApplyConfiguration {
+func (b *XListenerSetApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *XListenerSetApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionTimestamp = &value
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
 	return b
 }
 
 // WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
-func (b *ListenerSetApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *ListenerSetApplyConfiguration {
+func (b *XListenerSetApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *XListenerSetApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	b.DeletionGracePeriodSeconds = &value
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
 	return b
 }
 
@@ -184,13 +184,13 @@ func (b *ListenerSetApplyConfiguration) WithDeletionGracePeriodSeconds(value int
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, the entries provided by each call will be put on the Labels field,
 // overwriting an existing map entries in Labels field with the same key.
-func (b *ListenerSetApplyConfiguration) WithLabels(entries map[string]string) *ListenerSetApplyConfiguration {
+func (b *XListenerSetApplyConfiguration) WithLabels(entries map[string]string) *XListenerSetApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Labels == nil && len(entries) > 0 {
-		b.Labels = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Labels[k] = v
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
 	}
 	return b
 }
@@ -199,13 +199,13 @@ func (b *ListenerSetApplyConfiguration) WithLabels(entries map[string]string) *L
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, the entries provided by each call will be put on the Annotations field,
 // overwriting an existing map entries in Annotations field with the same key.
-func (b *ListenerSetApplyConfiguration) WithAnnotations(entries map[string]string) *ListenerSetApplyConfiguration {
+func (b *XListenerSetApplyConfiguration) WithAnnotations(entries map[string]string) *XListenerSetApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
-	if b.Annotations == nil && len(entries) > 0 {
-		b.Annotations = make(map[string]string, len(entries))
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
 	}
 	for k, v := range entries {
-		b.Annotations[k] = v
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
 	}
 	return b
 }
@@ -213,13 +213,13 @@ func (b *ListenerSetApplyConfiguration) WithAnnotations(entries map[string]strin
 // WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, values provided by each call will be appended to the OwnerReferences field.
-func (b *ListenerSetApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *ListenerSetApplyConfiguration {
+func (b *XListenerSetApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *XListenerSetApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
 		if values[i] == nil {
 			panic("nil value passed to WithOwnerReferences")
 		}
-		b.OwnerReferences = append(b.OwnerReferences, *values[i])
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
 	}
 	return b
 }
@@ -227,15 +227,15 @@ func (b *ListenerSetApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerR
 // WithFinalizers adds the given value to the Finalizers field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
 // If called multiple times, values provided by each call will be appended to the Finalizers field.
-func (b *ListenerSetApplyConfiguration) WithFinalizers(values ...string) *ListenerSetApplyConfiguration {
+func (b *XListenerSetApplyConfiguration) WithFinalizers(values ...string) *XListenerSetApplyConfiguration {
 	b.ensureObjectMetaApplyConfigurationExists()
 	for i := range values {
-		b.Finalizers = append(b.Finalizers, values[i])
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
 	}
 	return b
 }
 
-func (b *ListenerSetApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
+func (b *XListenerSetApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
 	if b.ObjectMetaApplyConfiguration == nil {
 		b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{}
 	}
@@ -244,7 +244,7 @@ func (b *ListenerSetApplyConfiguration) ensureObjectMetaApplyConfigurationExists
 // WithSpec sets the Spec field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Spec field is set to the value of the last call.
-func (b *ListenerSetApplyConfiguration) WithSpec(value *ListenerSetSpecApplyConfiguration) *ListenerSetApplyConfiguration {
+func (b *XListenerSetApplyConfiguration) WithSpec(value *ListenerSetSpecApplyConfiguration) *XListenerSetApplyConfiguration {
 	b.Spec = value
 	return b
 }
@@ -252,13 +252,13 @@ func (b *ListenerSetApplyConfiguration) WithSpec(value *ListenerSetSpecApplyConf
 // WithStatus sets the Status field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the Status field is set to the value of the last call.
-func (b *ListenerSetApplyConfiguration) WithStatus(value *ListenerSetStatusApplyConfiguration) *ListenerSetApplyConfiguration {
+func (b *XListenerSetApplyConfiguration) WithStatus(value *ListenerSetStatusApplyConfiguration) *XListenerSetApplyConfiguration {
 	b.Status = value
 	return b
 }
 
 // GetName retrieves the value of the Name field in the declarative configuration.
-func (b *ListenerSetApplyConfiguration) GetName() *string {
+func (b *XListenerSetApplyConfiguration) GetName() *string {
 	b.ensureObjectMetaApplyConfigurationExists()
-	return b.Name
+	return b.ObjectMetaApplyConfiguration.Name
 }
diff --git a/applyconfiguration/internal/internal.go b/applyconfiguration/internal/internal.go
index eee1e641..7a69ee38 100644
--- a/applyconfiguration/internal/internal.go
+++ b/applyconfiguration/internal/internal.go
@@ -19,8 +19,8 @@ limitations under the License.
 package internal
 
 import (
-	"fmt"
-	"sync"
+	fmt "fmt"
+	sync "sync"
 
 	typed "sigs.k8s.io/structured-merge-diff/v4/typed"
 )
@@ -493,16 +493,6 @@ var schemaYAML = typed.YAMLObject(`types:
       type:
         namedType: io.k8s.sigs.gateway-api.apis.v1.GatewayStatus
       default: {}
-- name: io.k8s.sigs.gateway-api.apis.v1.GatewayAddress
-  map:
-    fields:
-    - name: type
-      type:
-        scalar: string
-    - name: value
-      type:
-        scalar: string
-      default: ""
 - name: io.k8s.sigs.gateway-api.apis.v1.GatewayBackendTLS
   map:
     fields:
@@ -585,7 +575,7 @@ var schemaYAML = typed.YAMLObject(`types:
       type:
         list:
           elementType:
-            namedType: io.k8s.sigs.gateway-api.apis.v1.GatewayAddress
+            namedType: io.k8s.sigs.gateway-api.apis.v1.GatewaySpecAddress
           elementRelationship: atomic
     - name: allowedListeners
       type:
@@ -608,6 +598,15 @@ var schemaYAML = typed.YAMLObject(`types:
           elementRelationship: associative
           keys:
           - name
+- name: io.k8s.sigs.gateway-api.apis.v1.GatewaySpecAddress
+  map:
+    fields:
+    - name: type
+      type:
+        scalar: string
+    - name: value
+      type:
+        scalar: string
 - name: io.k8s.sigs.gateway-api.apis.v1.GatewayStatus
   map:
     fields:
@@ -1236,43 +1235,6 @@ var schemaYAML = typed.YAMLObject(`types:
       type:
         scalar: string
       default: ""
-- name: io.k8s.sigs.gateway-api.apis.v1alpha2.BackendLBPolicy
-  map:
-    fields:
-    - name: apiVersion
-      type:
-        scalar: string
-    - name: kind
-      type:
-        scalar: string
-    - name: metadata
-      type:
-        namedType: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta
-      default: {}
-    - name: spec
-      type:
-        namedType: io.k8s.sigs.gateway-api.apis.v1alpha2.BackendLBPolicySpec
-      default: {}
-    - name: status
-      type:
-        namedType: io.k8s.sigs.gateway-api.apis.v1alpha2.PolicyStatus
-      default: {}
-- name: io.k8s.sigs.gateway-api.apis.v1alpha2.BackendLBPolicySpec
-  map:
-    fields:
-    - name: sessionPersistence
-      type:
-        namedType: io.k8s.sigs.gateway-api.apis.v1.SessionPersistence
-    - name: targetRefs
-      type:
-        list:
-          elementType:
-            namedType: io.k8s.sigs.gateway-api.apis.v1alpha2.LocalPolicyTargetReference
-          elementRelationship: associative
-          keys:
-          - group
-          - kind
-          - name
 - name: io.k8s.sigs.gateway-api.apis.v1alpha2.GRPCRoute
   map:
     fields:
@@ -1747,27 +1709,6 @@ var schemaYAML = typed.YAMLObject(`types:
     - name: name
       type:
         scalar: string
-- name: io.k8s.sigs.gateway-api.apisx.v1alpha1.BackendTrafficPolicy
-  map:
-    fields:
-    - name: apiVersion
-      type:
-        scalar: string
-    - name: kind
-      type:
-        scalar: string
-    - name: metadata
-      type:
-        namedType: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta
-      default: {}
-    - name: spec
-      type:
-        namedType: io.k8s.sigs.gateway-api.apisx.v1alpha1.BackendTrafficPolicySpec
-      default: {}
-    - name: status
-      type:
-        namedType: io.k8s.sigs.gateway-api.apis.v1alpha2.PolicyStatus
-      default: {}
 - name: io.k8s.sigs.gateway-api.apisx.v1alpha1.BackendTrafficPolicySpec
   map:
     fields:
@@ -1787,6 +1728,15 @@ var schemaYAML = typed.YAMLObject(`types:
           - group
           - kind
           - name
+- name: io.k8s.sigs.gateway-api.apisx.v1alpha1.BudgetDetails
+  map:
+    fields:
+    - name: interval
+      type:
+        scalar: string
+    - name: percent
+      type:
+        scalar: numeric
 - name: io.k8s.sigs.gateway-api.apisx.v1alpha1.ListenerEntry
   map:
     fields:
@@ -1803,6 +1753,7 @@ var schemaYAML = typed.YAMLObject(`types:
     - name: port
       type:
         scalar: numeric
+      default: 0
     - name: protocol
       type:
         scalar: string
@@ -1839,27 +1790,6 @@ var schemaYAML = typed.YAMLObject(`types:
           elementType:
             namedType: io.k8s.sigs.gateway-api.apis.v1.RouteGroupKind
           elementRelationship: atomic
-- name: io.k8s.sigs.gateway-api.apisx.v1alpha1.ListenerSet
-  map:
-    fields:
-    - name: apiVersion
-      type:
-        scalar: string
-    - name: kind
-      type:
-        scalar: string
-    - name: metadata
-      type:
-        namedType: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta
-      default: {}
-    - name: spec
-      type:
-        namedType: io.k8s.sigs.gateway-api.apisx.v1alpha1.ListenerSetSpec
-      default: {}
-    - name: status
-      type:
-        namedType: io.k8s.sigs.gateway-api.apisx.v1alpha1.ListenerSetStatus
-      default: {}
 - name: io.k8s.sigs.gateway-api.apisx.v1alpha1.ListenerSetSpec
   map:
     fields:
@@ -1922,15 +1852,54 @@ var schemaYAML = typed.YAMLObject(`types:
 - name: io.k8s.sigs.gateway-api.apisx.v1alpha1.RetryConstraint
   map:
     fields:
-    - name: budgetInterval
-      type:
-        scalar: string
-    - name: budgetPercent
+    - name: budget
       type:
-        scalar: numeric
+        namedType: io.k8s.sigs.gateway-api.apisx.v1alpha1.BudgetDetails
     - name: minRetryRate
       type:
         namedType: io.k8s.sigs.gateway-api.apisx.v1alpha1.RequestRate
+- name: io.k8s.sigs.gateway-api.apisx.v1alpha1.XBackendTrafficPolicy
+  map:
+    fields:
+    - name: apiVersion
+      type:
+        scalar: string
+    - name: kind
+      type:
+        scalar: string
+    - name: metadata
+      type:
+        namedType: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta
+      default: {}
+    - name: spec
+      type:
+        namedType: io.k8s.sigs.gateway-api.apisx.v1alpha1.BackendTrafficPolicySpec
+      default: {}
+    - name: status
+      type:
+        namedType: io.k8s.sigs.gateway-api.apis.v1alpha2.PolicyStatus
+      default: {}
+- name: io.k8s.sigs.gateway-api.apisx.v1alpha1.XListenerSet
+  map:
+    fields:
+    - name: apiVersion
+      type:
+        scalar: string
+    - name: kind
+      type:
+        scalar: string
+    - name: metadata
+      type:
+        namedType: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta
+      default: {}
+    - name: spec
+      type:
+        namedType: io.k8s.sigs.gateway-api.apisx.v1alpha1.ListenerSetSpec
+      default: {}
+    - name: status
+      type:
+        namedType: io.k8s.sigs.gateway-api.apisx.v1alpha1.ListenerSetStatus
+      default: {}
 - name: __untyped_atomic_
   scalar: untyped
   list:
diff --git a/applyconfiguration/utils.go b/applyconfiguration/utils.go
index b0dc29f0..8e234411 100644
--- a/applyconfiguration/utils.go
+++ b/applyconfiguration/utils.go
@@ -58,8 +58,6 @@ func ForKind(kind schema.GroupVersionKind) interface{} {
 		return &apisv1.FrontendTLSValidationApplyConfiguration{}
 	case v1.SchemeGroupVersion.WithKind("Gateway"):
 		return &apisv1.GatewayApplyConfiguration{}
-	case v1.SchemeGroupVersion.WithKind("GatewayAddress"):
-		return &apisv1.GatewayAddressApplyConfiguration{}
 	case v1.SchemeGroupVersion.WithKind("GatewayBackendTLS"):
 		return &apisv1.GatewayBackendTLSApplyConfiguration{}
 	case v1.SchemeGroupVersion.WithKind("GatewayClass"):
@@ -72,6 +70,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} {
 		return &apisv1.GatewayInfrastructureApplyConfiguration{}
 	case v1.SchemeGroupVersion.WithKind("GatewaySpec"):
 		return &apisv1.GatewaySpecApplyConfiguration{}
+	case v1.SchemeGroupVersion.WithKind("GatewaySpecAddress"):
+		return &apisv1.GatewaySpecAddressApplyConfiguration{}
 	case v1.SchemeGroupVersion.WithKind("GatewayStatus"):
 		return &apisv1.GatewayStatusApplyConfiguration{}
 	case v1.SchemeGroupVersion.WithKind("GatewayStatusAddress"):
@@ -166,10 +166,6 @@ func ForKind(kind schema.GroupVersionKind) interface{} {
 		return &apisv1.SupportedFeatureApplyConfiguration{}
 
 		// Group=gateway.networking.k8s.io, Version=v1alpha2
-	case v1alpha2.SchemeGroupVersion.WithKind("BackendLBPolicy"):
-		return &apisv1alpha2.BackendLBPolicyApplyConfiguration{}
-	case v1alpha2.SchemeGroupVersion.WithKind("BackendLBPolicySpec"):
-		return &apisv1alpha2.BackendLBPolicySpecApplyConfiguration{}
 	case v1alpha2.SchemeGroupVersion.WithKind("GRPCRoute"):
 		return &apisv1alpha2.GRPCRouteApplyConfiguration{}
 	case v1alpha2.SchemeGroupVersion.WithKind("LocalPolicyTargetReference"):
@@ -234,16 +230,14 @@ func ForKind(kind schema.GroupVersionKind) interface{} {
 		return &apisv1beta1.ReferenceGrantToApplyConfiguration{}
 
 		// Group=gateway.networking.x-k8s.io, Version=v1alpha1
-	case v1alpha1.SchemeGroupVersion.WithKind("BackendTrafficPolicy"):
-		return &apisxv1alpha1.BackendTrafficPolicyApplyConfiguration{}
 	case v1alpha1.SchemeGroupVersion.WithKind("BackendTrafficPolicySpec"):
 		return &apisxv1alpha1.BackendTrafficPolicySpecApplyConfiguration{}
+	case v1alpha1.SchemeGroupVersion.WithKind("BudgetDetails"):
+		return &apisxv1alpha1.BudgetDetailsApplyConfiguration{}
 	case v1alpha1.SchemeGroupVersion.WithKind("ListenerEntry"):
 		return &apisxv1alpha1.ListenerEntryApplyConfiguration{}
 	case v1alpha1.SchemeGroupVersion.WithKind("ListenerEntryStatus"):
 		return &apisxv1alpha1.ListenerEntryStatusApplyConfiguration{}
-	case v1alpha1.SchemeGroupVersion.WithKind("ListenerSet"):
-		return &apisxv1alpha1.ListenerSetApplyConfiguration{}
 	case v1alpha1.SchemeGroupVersion.WithKind("ListenerSetSpec"):
 		return &apisxv1alpha1.ListenerSetSpecApplyConfiguration{}
 	case v1alpha1.SchemeGroupVersion.WithKind("ListenerSetStatus"):
@@ -254,6 +248,10 @@ func ForKind(kind schema.GroupVersionKind) interface{} {
 		return &apisxv1alpha1.RequestRateApplyConfiguration{}
 	case v1alpha1.SchemeGroupVersion.WithKind("RetryConstraint"):
 		return &apisxv1alpha1.RetryConstraintApplyConfiguration{}
+	case v1alpha1.SchemeGroupVersion.WithKind("XBackendTrafficPolicy"):
+		return &apisxv1alpha1.XBackendTrafficPolicyApplyConfiguration{}
+	case v1alpha1.SchemeGroupVersion.WithKind("XListenerSet"):
+		return &apisxv1alpha1.XListenerSetApplyConfiguration{}
 
 	}
 	return nil
diff --git a/config/crd/experimental/gateway.networking.k8s.io_backendlbpolicies.yaml b/config/crd/experimental/gateway.networking.k8s.io_backendlbpolicies.yaml
deleted file mode 100644
index 604f2558..00000000
--- a/config/crd/experimental/gateway.networking.k8s.io_backendlbpolicies.yaml
+++ /dev/null
@@ -1,499 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
-    gateway.networking.k8s.io/channel: experimental
-  creationTimestamp: null
-  labels:
-    gateway.networking.k8s.io/policy: Direct
-  name: backendlbpolicies.gateway.networking.k8s.io
-spec:
-  group: gateway.networking.k8s.io
-  names:
-    categories:
-    - gateway-api
-    kind: BackendLBPolicy
-    listKind: BackendLBPolicyList
-    plural: backendlbpolicies
-    shortNames:
-    - blbpolicy
-    singular: backendlbpolicy
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1alpha2
-    schema:
-      openAPIV3Schema:
-        description: |-
-          BackendLBPolicy provides a way to define load balancing rules
-          for a backend.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: Spec defines the desired state of BackendLBPolicy.
-            properties:
-              sessionPersistence:
-                description: |-
-                  SessionPersistence defines and configures session persistence
-                  for the backend.
-
-                  Support: Extended
-                properties:
-                  absoluteTimeout:
-                    description: |-
-                      AbsoluteTimeout defines the absolute timeout of the persistent
-                      session. Once the AbsoluteTimeout duration has elapsed, the
-                      session becomes invalid.
-
-                      Support: Extended
-                    pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
-                    type: string
-                  cookieConfig:
-                    description: |-
-                      CookieConfig provides configuration settings that are specific
-                      to cookie-based session persistence.
-
-                      Support: Core
-                    properties:
-                      lifetimeType:
-                        default: Session
-                        description: |-
-                          LifetimeType specifies whether the cookie has a permanent or
-                          session-based lifetime. A permanent cookie persists until its
-                          specified expiry time, defined by the Expires or Max-Age cookie
-                          attributes, while a session cookie is deleted when the current
-                          session ends.
-
-                          When set to "Permanent", AbsoluteTimeout indicates the
-                          cookie's lifetime via the Expires or Max-Age cookie attributes
-                          and is required.
-
-                          When set to "Session", AbsoluteTimeout indicates the
-                          absolute lifetime of the cookie tracked by the gateway and
-                          is optional.
-
-                          Defaults to "Session".
-
-                          Support: Core for "Session" type
-
-                          Support: Extended for "Permanent" type
-                        enum:
-                        - Permanent
-                        - Session
-                        type: string
-                    type: object
-                  idleTimeout:
-                    description: |-
-                      IdleTimeout defines the idle timeout of the persistent session.
-                      Once the session has been idle for more than the specified
-                      IdleTimeout duration, the session becomes invalid.
-
-                      Support: Extended
-                    pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
-                    type: string
-                  sessionName:
-                    description: |-
-                      SessionName defines the name of the persistent session token
-                      which may be reflected in the cookie or the header. Users
-                      should avoid reusing session names to prevent unintended
-                      consequences, such as rejection or unpredictable behavior.
-
-                      Support: Implementation-specific
-                    maxLength: 128
-                    type: string
-                  type:
-                    default: Cookie
-                    description: |-
-                      Type defines the type of session persistence such as through
-                      the use a header or cookie. Defaults to cookie based session
-                      persistence.
-
-                      Support: Core for "Cookie" type
-
-                      Support: Extended for "Header" type
-                    enum:
-                    - Cookie
-                    - Header
-                    type: string
-                type: object
-                x-kubernetes-validations:
-                - message: AbsoluteTimeout must be specified when cookie lifetimeType
-                    is Permanent
-                  rule: '!has(self.cookieConfig) || !has(self.cookieConfig.lifetimeType)
-                    || self.cookieConfig.lifetimeType != ''Permanent'' || has(self.absoluteTimeout)'
-              targetRefs:
-                description: |-
-                  TargetRef identifies an API object to apply policy to.
-                  Currently, Backends (i.e. Service, ServiceImport, or any
-                  implementation-specific backendRef) are the only valid API
-                  target references.
-                items:
-                  description: |-
-                    LocalPolicyTargetReference identifies an API object to apply a direct or
-                    inherited policy to. This should be used as part of Policy resources
-                    that can target Gateway API resources. For more information on how this
-                    policy attachment model works, and a sample Policy resource, refer to
-                    the policy attachment documentation for Gateway API.
-                  properties:
-                    group:
-                      description: Group is the group of the target resource.
-                      maxLength: 253
-                      pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
-                      type: string
-                    kind:
-                      description: Kind is kind of the target resource.
-                      maxLength: 63
-                      minLength: 1
-                      pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
-                      type: string
-                    name:
-                      description: Name is the name of the target resource.
-                      maxLength: 253
-                      minLength: 1
-                      type: string
-                  required:
-                  - group
-                  - kind
-                  - name
-                  type: object
-                maxItems: 16
-                minItems: 1
-                type: array
-                x-kubernetes-list-map-keys:
-                - group
-                - kind
-                - name
-                x-kubernetes-list-type: map
-            required:
-            - targetRefs
-            type: object
-          status:
-            description: Status defines the current state of BackendLBPolicy.
-            properties:
-              ancestors:
-                description: |-
-                  Ancestors is a list of ancestor resources (usually Gateways) that are
-                  associated with the policy, and the status of the policy with respect to
-                  each ancestor. When this policy attaches to a parent, the controller that
-                  manages the parent and the ancestors MUST add an entry to this list when
-                  the controller first sees the policy and SHOULD update the entry as
-                  appropriate when the relevant ancestor is modified.
-
-                  Note that choosing the relevant ancestor is left to the Policy designers;
-                  an important part of Policy design is designing the right object level at
-                  which to namespace this status.
-
-                  Note also that implementations MUST ONLY populate ancestor status for
-                  the Ancestor resources they are responsible for. Implementations MUST
-                  use the ControllerName field to uniquely identify the entries in this list
-                  that they are responsible for.
-
-                  Note that to achieve this, the list of PolicyAncestorStatus structs
-                  MUST be treated as a map with a composite key, made up of the AncestorRef
-                  and ControllerName fields combined.
-
-                  A maximum of 16 ancestors will be represented in this list. An empty list
-                  means the Policy is not relevant for any ancestors.
-
-                  If this slice is full, implementations MUST NOT add further entries.
-                  Instead they MUST consider the policy unimplementable and signal that
-                  on any related resources such as the ancestor that would be referenced
-                  here. For example, if this list was full on BackendTLSPolicy, no
-                  additional Gateways would be able to reference the Service targeted by
-                  the BackendTLSPolicy.
-                items:
-                  description: |-
-                    PolicyAncestorStatus describes the status of a route with respect to an
-                    associated Ancestor.
-
-                    Ancestors refer to objects that are either the Target of a policy or above it
-                    in terms of object hierarchy. For example, if a policy targets a Service, the
-                    Policy's Ancestors are, in order, the Service, the HTTPRoute, the Gateway, and
-                    the GatewayClass. Almost always, in this hierarchy, the Gateway will be the most
-                    useful object to place Policy status on, so we recommend that implementations
-                    SHOULD use Gateway as the PolicyAncestorStatus object unless the designers
-                    have a _very_ good reason otherwise.
-
-                    In the context of policy attachment, the Ancestor is used to distinguish which
-                    resource results in a distinct application of this policy. For example, if a policy
-                    targets a Service, it may have a distinct result per attached Gateway.
-
-                    Policies targeting the same resource may have different effects depending on the
-                    ancestors of those resources. For example, different Gateways targeting the same
-                    Service may have different capabilities, especially if they have different underlying
-                    implementations.
-
-                    For example, in BackendTLSPolicy, the Policy attaches to a Service that is
-                    used as a backend in a HTTPRoute that is itself attached to a Gateway.
-                    In this case, the relevant object for status is the Gateway, and that is the
-                    ancestor object referred to in this status.
-
-                    Note that a parent is also an ancestor, so for objects where the parent is the
-                    relevant object for status, this struct SHOULD still be used.
-
-                    This struct is intended to be used in a slice that's effectively a map,
-                    with a composite key made up of the AncestorRef and the ControllerName.
-                  properties:
-                    ancestorRef:
-                      description: |-
-                        AncestorRef corresponds with a ParentRef in the spec that this
-                        PolicyAncestorStatus struct describes the status of.
-                      properties:
-                        group:
-                          default: gateway.networking.k8s.io
-                          description: |-
-                            Group is the group of the referent.
-                            When unspecified, "gateway.networking.k8s.io" is inferred.
-                            To set the core API group (such as for a "Service" kind referent),
-                            Group must be explicitly set to "" (empty string).
-
-                            Support: Core
-                          maxLength: 253
-                          pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
-                          type: string
-                        kind:
-                          default: Gateway
-                          description: |-
-                            Kind is kind of the referent.
-
-                            There are two kinds of parent resources with "Core" support:
-
-                            * Gateway (Gateway conformance profile)
-                            * Service (Mesh conformance profile, ClusterIP Services only)
-
-                            Support for other resources is Implementation-Specific.
-                          maxLength: 63
-                          minLength: 1
-                          pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
-                          type: string
-                        name:
-                          description: |-
-                            Name is the name of the referent.
-
-                            Support: Core
-                          maxLength: 253
-                          minLength: 1
-                          type: string
-                        namespace:
-                          description: |-
-                            Namespace is the namespace of the referent. When unspecified, this refers
-                            to the local namespace of the Route.
-
-                            Note that there are specific rules for ParentRefs which cross namespace
-                            boundaries. Cross-namespace references are only valid if they are explicitly
-                            allowed by something in the namespace they are referring to. For example:
-                            Gateway has the AllowedRoutes field, and ReferenceGrant provides a
-                            generic way to enable any other kind of cross-namespace reference.
-
-
-                            ParentRefs from a Route to a Service in the same namespace are "producer"
-                            routes, which apply default routing rules to inbound connections from
-                            any namespace to the Service.
-
-                            ParentRefs from a Route to a Service in a different namespace are
-                            "consumer" routes, and these routing rules are only applied to outbound
-                            connections originating from the same namespace as the Route, for which
-                            the intended destination of the connections are a Service targeted as a
-                            ParentRef of the Route.
-
-
-                            Support: Core
-                          maxLength: 63
-                          minLength: 1
-                          pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
-                          type: string
-                        port:
-                          description: |-
-                            Port is the network port this Route targets. It can be interpreted
-                            differently based on the type of parent resource.
-
-                            When the parent resource is a Gateway, this targets all listeners
-                            listening on the specified port that also support this kind of Route(and
-                            select this Route). It's not recommended to set `Port` unless the
-                            networking behaviors specified in a Route must apply to a specific port
-                            as opposed to a listener(s) whose port(s) may be changed. When both Port
-                            and SectionName are specified, the name and port of the selected listener
-                            must match both specified values.
-
-
-                            When the parent resource is a Service, this targets a specific port in the
-                            Service spec. When both Port (experimental) and SectionName are specified,
-                            the name and port of the selected port must match both specified values.
-
-
-                            Implementations MAY choose to support other parent resources.
-                            Implementations supporting other types of parent resources MUST clearly
-                            document how/if Port is interpreted.
-
-                            For the purpose of status, an attachment is considered successful as
-                            long as the parent resource accepts it partially. For example, Gateway
-                            listeners can restrict which Routes can attach to them by Route kind,
-                            namespace, or hostname. If 1 of 2 Gateway listeners accept attachment
-                            from the referencing Route, the Route MUST be considered successfully
-                            attached. If no Gateway listeners accept attachment from this Route,
-                            the Route MUST be considered detached from the Gateway.
-
-                            Support: Extended
-                          format: int32
-                          maximum: 65535
-                          minimum: 1
-                          type: integer
-                        sectionName:
-                          description: |-
-                            SectionName is the name of a section within the target resource. In the
-                            following resources, SectionName is interpreted as the following:
-
-                            * Gateway: Listener name. When both Port (experimental) and SectionName
-                            are specified, the name and port of the selected listener must match
-                            both specified values.
-                            * Service: Port name. When both Port (experimental) and SectionName
-                            are specified, the name and port of the selected listener must match
-                            both specified values.
-
-                            Implementations MAY choose to support attaching Routes to other resources.
-                            If that is the case, they MUST clearly document how SectionName is
-                            interpreted.
-
-                            When unspecified (empty string), this will reference the entire resource.
-                            For the purpose of status, an attachment is considered successful if at
-                            least one section in the parent resource accepts it. For example, Gateway
-                            listeners can restrict which Routes can attach to them by Route kind,
-                            namespace, or hostname. If 1 of 2 Gateway listeners accept attachment from
-                            the referencing Route, the Route MUST be considered successfully
-                            attached. If no Gateway listeners accept attachment from this Route, the
-                            Route MUST be considered detached from the Gateway.
-
-                            Support: Core
-                          maxLength: 253
-                          minLength: 1
-                          pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
-                          type: string
-                      required:
-                      - name
-                      type: object
-                    conditions:
-                      description: Conditions describes the status of the Policy with
-                        respect to the given Ancestor.
-                      items:
-                        description: Condition contains details for one aspect of
-                          the current state of this API Resource.
-                        properties:
-                          lastTransitionTime:
-                            description: |-
-                              lastTransitionTime is the last time the condition transitioned from one status to another.
-                              This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
-                            format: date-time
-                            type: string
-                          message:
-                            description: |-
-                              message is a human readable message indicating details about the transition.
-                              This may be an empty string.
-                            maxLength: 32768
-                            type: string
-                          observedGeneration:
-                            description: |-
-                              observedGeneration represents the .metadata.generation that the condition was set based upon.
-                              For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
-                              with respect to the current state of the instance.
-                            format: int64
-                            minimum: 0
-                            type: integer
-                          reason:
-                            description: |-
-                              reason contains a programmatic identifier indicating the reason for the condition's last transition.
-                              Producers of specific condition types may define expected values and meanings for this field,
-                              and whether the values are considered a guaranteed API.
-                              The value should be a CamelCase string.
-                              This field may not be empty.
-                            maxLength: 1024
-                            minLength: 1
-                            pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
-                            type: string
-                          status:
-                            description: status of the condition, one of True, False,
-                              Unknown.
-                            enum:
-                            - "True"
-                            - "False"
-                            - Unknown
-                            type: string
-                          type:
-                            description: type of condition in CamelCase or in foo.example.com/CamelCase.
-                            maxLength: 316
-                            pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                            type: string
-                        required:
-                        - lastTransitionTime
-                        - message
-                        - reason
-                        - status
-                        - type
-                        type: object
-                      maxItems: 8
-                      minItems: 1
-                      type: array
-                      x-kubernetes-list-map-keys:
-                      - type
-                      x-kubernetes-list-type: map
-                    controllerName:
-                      description: |-
-                        ControllerName is a domain/path string that indicates the name of the
-                        controller that wrote this status. This corresponds with the
-                        controllerName field on GatewayClass.
-
-                        Example: "example.net/gateway-controller".
-
-                        The format of this field is DOMAIN "/" PATH, where DOMAIN and PATH are
-                        valid Kubernetes names
-                        (https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
-
-                        Controllers MUST populate this field when writing status. Controllers should ensure that
-                        entries to status populated with their ControllerName are cleaned up when they are no
-                        longer necessary.
-                      maxLength: 253
-                      minLength: 1
-                      pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9\/\-._~%!$&'()*+,;=:]+$
-                      type: string
-                  required:
-                  - ancestorRef
-                  - controllerName
-                  type: object
-                maxItems: 16
-                type: array
-            required:
-            - ancestors
-            type: object
-        required:
-        - spec
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
diff --git a/config/crd/experimental/gateway.networking.k8s.io_backendtlspolicies.yaml b/config/crd/experimental/gateway.networking.k8s.io_backendtlspolicies.yaml
index c8a19d97..6a9e653a 100644
--- a/config/crd/experimental/gateway.networking.k8s.io_backendtlspolicies.yaml
+++ b/config/crd/experimental/gateway.networking.k8s.io_backendtlspolicies.yaml
@@ -3,7 +3,7 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: experimental
   creationTimestamp: null
   labels:
diff --git a/config/crd/experimental/gateway.networking.k8s.io_backendtrafficpolicies.yaml b/config/crd/experimental/gateway.networking.k8s.io_backendtrafficpolicies.yaml
deleted file mode 100644
index 8e9b185c..00000000
--- a/config/crd/experimental/gateway.networking.k8s.io_backendtrafficpolicies.yaml
+++ /dev/null
@@ -1,535 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
-    gateway.networking.k8s.io/channel: experimental
-  creationTimestamp: null
-  name: backendtrafficpolicies.gateway.networking.k8s.io
-spec:
-  group: gateway.networking.k8s.io
-  names:
-    kind: BackendTrafficPolicy
-    listKind: BackendTrafficPolicyList
-    plural: backendtrafficpolicies
-    singular: backendtrafficpolicy
-  scope: Namespaced
-  versions:
-  - name: v1alpha2
-    schema:
-      openAPIV3Schema:
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: Spec defines the desired state of BackendTrafficPolicy.
-            properties:
-              retry:
-                description: |-
-                  Retry defines the configuration for when to retry a request to a target
-                  backend.
-
-                  Implementations SHOULD retry on connection errors (disconnect, reset, timeout,
-                  TCP failure) if a retry stanza is configured.
-
-                  Support: Extended
-                properties:
-                  budgetInterval:
-                    description: |-
-                      BudgetInterval defines the duration in which requests will be considered
-                      for calculating the budget for retries.
-
-                      Support: Extended
-                    pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
-                    type: string
-                  budgetPercent:
-                    description: |-
-                      BudgetPercent defines the maximum percentage of active requests that may
-                      be made up of retries.
-
-                      Support: Extended
-                    type: integer
-                  minRetryRate:
-                    description: |-
-                      MinRetryRate defines the minimum rate of retries that will be allowable
-                      over a specified duration of time.
-
-                      Ensures that requests can still be retried during periods of low
-                      traffic.
-
-                      Support: Extended
-                    properties:
-                      count:
-                        description: |-
-                          Count specifies the number of requests per time interval.
-
-                          Support: Extended
-                        type: integer
-                      interval:
-                        description: |-
-                          Interval specifies the divisor of the rate of requests, the amount of
-                          time during which the given count of requests occr.
-
-                          Support: Extended
-                        pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
-                        type: string
-                    type: object
-                type: object
-              sessionPersistence:
-                description: |-
-                  SessionPersistence defines and configures session persistence
-                  for the backend.
-
-                  Support: Extended
-                properties:
-                  absoluteTimeout:
-                    description: |-
-                      AbsoluteTimeout defines the absolute timeout of the persistent
-                      session. Once the AbsoluteTimeout duration has elapsed, the
-                      session becomes invalid.
-
-                      Support: Extended
-                    pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
-                    type: string
-                  cookieConfig:
-                    description: |-
-                      CookieConfig provides configuration settings that are specific
-                      to cookie-based session persistence.
-
-                      Support: Core
-                    properties:
-                      lifetimeType:
-                        default: Session
-                        description: |-
-                          LifetimeType specifies whether the cookie has a permanent or
-                          session-based lifetime. A permanent cookie persists until its
-                          specified expiry time, defined by the Expires or Max-Age cookie
-                          attributes, while a session cookie is deleted when the current
-                          session ends.
-
-                          When set to "Permanent", AbsoluteTimeout indicates the
-                          cookie's lifetime via the Expires or Max-Age cookie attributes
-                          and is required.
-
-                          When set to "Session", AbsoluteTimeout indicates the
-                          absolute lifetime of the cookie tracked by the gateway and
-                          is optional.
-
-                          Defaults to "Session".
-
-                          Support: Core for "Session" type
-
-                          Support: Extended for "Permanent" type
-                        enum:
-                        - Permanent
-                        - Session
-                        type: string
-                    type: object
-                  idleTimeout:
-                    description: |-
-                      IdleTimeout defines the idle timeout of the persistent session.
-                      Once the session has been idle for more than the specified
-                      IdleTimeout duration, the session becomes invalid.
-
-                      Support: Extended
-                    pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
-                    type: string
-                  sessionName:
-                    description: |-
-                      SessionName defines the name of the persistent session token
-                      which may be reflected in the cookie or the header. Users
-                      should avoid reusing session names to prevent unintended
-                      consequences, such as rejection or unpredictable behavior.
-
-                      Support: Implementation-specific
-                    maxLength: 128
-                    type: string
-                  type:
-                    default: Cookie
-                    description: |-
-                      Type defines the type of session persistence such as through
-                      the use a header or cookie. Defaults to cookie based session
-                      persistence.
-
-                      Support: Core for "Cookie" type
-
-                      Support: Extended for "Header" type
-                    enum:
-                    - Cookie
-                    - Header
-                    type: string
-                type: object
-                x-kubernetes-validations:
-                - message: AbsoluteTimeout must be specified when cookie lifetimeType
-                    is Permanent
-                  rule: '!has(self.cookieConfig) || !has(self.cookieConfig.lifetimeType)
-                    || self.cookieConfig.lifetimeType != ''Permanent'' || has(self.absoluteTimeout)'
-              targetRefs:
-                description: |-
-                  TargetRef identifies an API object to apply policy to.
-                  Currently, Backends (i.e. Service, ServiceImport, or any
-                  implementation-specific backendRef) are the only valid API
-                  target references.
-                items:
-                  description: |-
-                    LocalPolicyTargetReference identifies an API object to apply a direct or
-                    inherited policy to. This should be used as part of Policy resources
-                    that can target Gateway API resources. For more information on how this
-                    policy attachment model works, and a sample Policy resource, refer to
-                    the policy attachment documentation for Gateway API.
-                  properties:
-                    group:
-                      description: Group is the group of the target resource.
-                      maxLength: 253
-                      pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
-                      type: string
-                    kind:
-                      description: Kind is kind of the target resource.
-                      maxLength: 63
-                      minLength: 1
-                      pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
-                      type: string
-                    name:
-                      description: Name is the name of the target resource.
-                      maxLength: 253
-                      minLength: 1
-                      type: string
-                  required:
-                  - group
-                  - kind
-                  - name
-                  type: object
-                maxItems: 16
-                minItems: 1
-                type: array
-                x-kubernetes-list-map-keys:
-                - group
-                - kind
-                - name
-                x-kubernetes-list-type: map
-            required:
-            - targetRefs
-            type: object
-          status:
-            description: Status defines the current state of BackendTrafficPolicy.
-            properties:
-              ancestors:
-                description: |-
-                  Ancestors is a list of ancestor resources (usually Gateways) that are
-                  associated with the policy, and the status of the policy with respect to
-                  each ancestor. When this policy attaches to a parent, the controller that
-                  manages the parent and the ancestors MUST add an entry to this list when
-                  the controller first sees the policy and SHOULD update the entry as
-                  appropriate when the relevant ancestor is modified.
-
-                  Note that choosing the relevant ancestor is left to the Policy designers;
-                  an important part of Policy design is designing the right object level at
-                  which to namespace this status.
-
-                  Note also that implementations MUST ONLY populate ancestor status for
-                  the Ancestor resources they are responsible for. Implementations MUST
-                  use the ControllerName field to uniquely identify the entries in this list
-                  that they are responsible for.
-
-                  Note that to achieve this, the list of PolicyAncestorStatus structs
-                  MUST be treated as a map with a composite key, made up of the AncestorRef
-                  and ControllerName fields combined.
-
-                  A maximum of 16 ancestors will be represented in this list. An empty list
-                  means the Policy is not relevant for any ancestors.
-
-                  If this slice is full, implementations MUST NOT add further entries.
-                  Instead they MUST consider the policy unimplementable and signal that
-                  on any related resources such as the ancestor that would be referenced
-                  here. For example, if this list was full on BackendTLSPolicy, no
-                  additional Gateways would be able to reference the Service targeted by
-                  the BackendTLSPolicy.
-                items:
-                  description: |-
-                    PolicyAncestorStatus describes the status of a route with respect to an
-                    associated Ancestor.
-
-                    Ancestors refer to objects that are either the Target of a policy or above it
-                    in terms of object hierarchy. For example, if a policy targets a Service, the
-                    Policy's Ancestors are, in order, the Service, the HTTPRoute, the Gateway, and
-                    the GatewayClass. Almost always, in this hierarchy, the Gateway will be the most
-                    useful object to place Policy status on, so we recommend that implementations
-                    SHOULD use Gateway as the PolicyAncestorStatus object unless the designers
-                    have a _very_ good reason otherwise.
-
-                    In the context of policy attachment, the Ancestor is used to distinguish which
-                    resource results in a distinct application of this policy. For example, if a policy
-                    targets a Service, it may have a distinct result per attached Gateway.
-
-                    Policies targeting the same resource may have different effects depending on the
-                    ancestors of those resources. For example, different Gateways targeting the same
-                    Service may have different capabilities, especially if they have different underlying
-                    implementations.
-
-                    For example, in BackendTLSPolicy, the Policy attaches to a Service that is
-                    used as a backend in a HTTPRoute that is itself attached to a Gateway.
-                    In this case, the relevant object for status is the Gateway, and that is the
-                    ancestor object referred to in this status.
-
-                    Note that a parent is also an ancestor, so for objects where the parent is the
-                    relevant object for status, this struct SHOULD still be used.
-
-                    This struct is intended to be used in a slice that's effectively a map,
-                    with a composite key made up of the AncestorRef and the ControllerName.
-                  properties:
-                    ancestorRef:
-                      description: |-
-                        AncestorRef corresponds with a ParentRef in the spec that this
-                        PolicyAncestorStatus struct describes the status of.
-                      properties:
-                        group:
-                          default: gateway.networking.k8s.io
-                          description: |-
-                            Group is the group of the referent.
-                            When unspecified, "gateway.networking.k8s.io" is inferred.
-                            To set the core API group (such as for a "Service" kind referent),
-                            Group must be explicitly set to "" (empty string).
-
-                            Support: Core
-                          maxLength: 253
-                          pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
-                          type: string
-                        kind:
-                          default: Gateway
-                          description: |-
-                            Kind is kind of the referent.
-
-                            There are two kinds of parent resources with "Core" support:
-
-                            * Gateway (Gateway conformance profile)
-                            * Service (Mesh conformance profile, ClusterIP Services only)
-
-                            Support for other resources is Implementation-Specific.
-                          maxLength: 63
-                          minLength: 1
-                          pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
-                          type: string
-                        name:
-                          description: |-
-                            Name is the name of the referent.
-
-                            Support: Core
-                          maxLength: 253
-                          minLength: 1
-                          type: string
-                        namespace:
-                          description: |-
-                            Namespace is the namespace of the referent. When unspecified, this refers
-                            to the local namespace of the Route.
-
-                            Note that there are specific rules for ParentRefs which cross namespace
-                            boundaries. Cross-namespace references are only valid if they are explicitly
-                            allowed by something in the namespace they are referring to. For example:
-                            Gateway has the AllowedRoutes field, and ReferenceGrant provides a
-                            generic way to enable any other kind of cross-namespace reference.
-
-
-                            ParentRefs from a Route to a Service in the same namespace are "producer"
-                            routes, which apply default routing rules to inbound connections from
-                            any namespace to the Service.
-
-                            ParentRefs from a Route to a Service in a different namespace are
-                            "consumer" routes, and these routing rules are only applied to outbound
-                            connections originating from the same namespace as the Route, for which
-                            the intended destination of the connections are a Service targeted as a
-                            ParentRef of the Route.
-
-
-                            Support: Core
-                          maxLength: 63
-                          minLength: 1
-                          pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
-                          type: string
-                        port:
-                          description: |-
-                            Port is the network port this Route targets. It can be interpreted
-                            differently based on the type of parent resource.
-
-                            When the parent resource is a Gateway, this targets all listeners
-                            listening on the specified port that also support this kind of Route(and
-                            select this Route). It's not recommended to set `Port` unless the
-                            networking behaviors specified in a Route must apply to a specific port
-                            as opposed to a listener(s) whose port(s) may be changed. When both Port
-                            and SectionName are specified, the name and port of the selected listener
-                            must match both specified values.
-
-
-                            When the parent resource is a Service, this targets a specific port in the
-                            Service spec. When both Port (experimental) and SectionName are specified,
-                            the name and port of the selected port must match both specified values.
-
-
-                            Implementations MAY choose to support other parent resources.
-                            Implementations supporting other types of parent resources MUST clearly
-                            document how/if Port is interpreted.
-
-                            For the purpose of status, an attachment is considered successful as
-                            long as the parent resource accepts it partially. For example, Gateway
-                            listeners can restrict which Routes can attach to them by Route kind,
-                            namespace, or hostname. If 1 of 2 Gateway listeners accept attachment
-                            from the referencing Route, the Route MUST be considered successfully
-                            attached. If no Gateway listeners accept attachment from this Route,
-                            the Route MUST be considered detached from the Gateway.
-
-                            Support: Extended
-                          format: int32
-                          maximum: 65535
-                          minimum: 1
-                          type: integer
-                        sectionName:
-                          description: |-
-                            SectionName is the name of a section within the target resource. In the
-                            following resources, SectionName is interpreted as the following:
-
-                            * Gateway: Listener name. When both Port (experimental) and SectionName
-                            are specified, the name and port of the selected listener must match
-                            both specified values.
-                            * Service: Port name. When both Port (experimental) and SectionName
-                            are specified, the name and port of the selected listener must match
-                            both specified values.
-
-                            Implementations MAY choose to support attaching Routes to other resources.
-                            If that is the case, they MUST clearly document how SectionName is
-                            interpreted.
-
-                            When unspecified (empty string), this will reference the entire resource.
-                            For the purpose of status, an attachment is considered successful if at
-                            least one section in the parent resource accepts it. For example, Gateway
-                            listeners can restrict which Routes can attach to them by Route kind,
-                            namespace, or hostname. If 1 of 2 Gateway listeners accept attachment from
-                            the referencing Route, the Route MUST be considered successfully
-                            attached. If no Gateway listeners accept attachment from this Route, the
-                            Route MUST be considered detached from the Gateway.
-
-                            Support: Core
-                          maxLength: 253
-                          minLength: 1
-                          pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
-                          type: string
-                      required:
-                      - name
-                      type: object
-                    conditions:
-                      description: Conditions describes the status of the Policy with
-                        respect to the given Ancestor.
-                      items:
-                        description: Condition contains details for one aspect of
-                          the current state of this API Resource.
-                        properties:
-                          lastTransitionTime:
-                            description: |-
-                              lastTransitionTime is the last time the condition transitioned from one status to another.
-                              This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
-                            format: date-time
-                            type: string
-                          message:
-                            description: |-
-                              message is a human readable message indicating details about the transition.
-                              This may be an empty string.
-                            maxLength: 32768
-                            type: string
-                          observedGeneration:
-                            description: |-
-                              observedGeneration represents the .metadata.generation that the condition was set based upon.
-                              For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
-                              with respect to the current state of the instance.
-                            format: int64
-                            minimum: 0
-                            type: integer
-                          reason:
-                            description: |-
-                              reason contains a programmatic identifier indicating the reason for the condition's last transition.
-                              Producers of specific condition types may define expected values and meanings for this field,
-                              and whether the values are considered a guaranteed API.
-                              The value should be a CamelCase string.
-                              This field may not be empty.
-                            maxLength: 1024
-                            minLength: 1
-                            pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
-                            type: string
-                          status:
-                            description: status of the condition, one of True, False,
-                              Unknown.
-                            enum:
-                            - "True"
-                            - "False"
-                            - Unknown
-                            type: string
-                          type:
-                            description: type of condition in CamelCase or in foo.example.com/CamelCase.
-                            maxLength: 316
-                            pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                            type: string
-                        required:
-                        - lastTransitionTime
-                        - message
-                        - reason
-                        - status
-                        - type
-                        type: object
-                      maxItems: 8
-                      minItems: 1
-                      type: array
-                      x-kubernetes-list-map-keys:
-                      - type
-                      x-kubernetes-list-type: map
-                    controllerName:
-                      description: |-
-                        ControllerName is a domain/path string that indicates the name of the
-                        controller that wrote this status. This corresponds with the
-                        controllerName field on GatewayClass.
-
-                        Example: "example.net/gateway-controller".
-
-                        The format of this field is DOMAIN "/" PATH, where DOMAIN and PATH are
-                        valid Kubernetes names
-                        (https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
-
-                        Controllers MUST populate this field when writing status. Controllers should ensure that
-                        entries to status populated with their ControllerName are cleaned up when they are no
-                        longer necessary.
-                      maxLength: 253
-                      minLength: 1
-                      pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9\/\-._~%!$&'()*+,;=:]+$
-                      type: string
-                  required:
-                  - ancestorRef
-                  - controllerName
-                  type: object
-                maxItems: 16
-                type: array
-            required:
-            - ancestors
-            type: object
-        required:
-        - spec
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
diff --git a/config/crd/experimental/gateway.networking.k8s.io_gatewayclasses.yaml b/config/crd/experimental/gateway.networking.k8s.io_gatewayclasses.yaml
index 88df8fd9..831fbf4a 100644
--- a/config/crd/experimental/gateway.networking.k8s.io_gatewayclasses.yaml
+++ b/config/crd/experimental/gateway.networking.k8s.io_gatewayclasses.yaml
@@ -3,7 +3,7 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: experimental
   creationTimestamp: null
   name: gatewayclasses.gateway.networking.k8s.io
diff --git a/config/crd/experimental/gateway.networking.k8s.io_gateways.yaml b/config/crd/experimental/gateway.networking.k8s.io_gateways.yaml
index a8e07236..328999ee 100644
--- a/config/crd/experimental/gateway.networking.k8s.io_gateways.yaml
+++ b/config/crd/experimental/gateway.networking.k8s.io_gateways.yaml
@@ -3,7 +3,7 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: experimental
   creationTimestamp: null
   name: gateways.gateway.networking.k8s.io
@@ -83,8 +83,8 @@ spec:
 
                   Support: Extended
                 items:
-                  description: GatewayAddress describes an address that can be bound
-                    to a Gateway.
+                  description: GatewaySpecAddress describes an address that can be
+                    bound to a Gateway.
                   oneOf:
                   - properties:
                       type:
@@ -109,15 +109,15 @@ spec:
                       type: string
                     value:
                       description: |-
-                        Value of the address. The validity of the values will depend
-                        on the type and support by the controller.
+                        When a value is unspecified, an implementation SHOULD automatically
+                        assign an address matching the requested type if possible.
+
+                        If an implementation does not support an empty value, they MUST set the
+                        "Programmed" condition in status to False with a reason of "AddressNotAssigned".
 
                         Examples: `1.2.3.4`, `128::1`, `my-ip-address`.
                       maxLength: 253
-                      minLength: 1
                       type: string
-                  required:
-                  - value
                   type: object
                   x-kubernetes-validations:
                   - message: Hostname value must only contain valid characters (matching
@@ -658,7 +658,6 @@ spec:
                               - All
                               - Selector
                               - Same
-                              - None
                               type: string
                             selector:
                               description: |-
@@ -1422,8 +1421,8 @@ spec:
 
                   Support: Extended
                 items:
-                  description: GatewayAddress describes an address that can be bound
-                    to a Gateway.
+                  description: GatewaySpecAddress describes an address that can be
+                    bound to a Gateway.
                   oneOf:
                   - properties:
                       type:
@@ -1448,15 +1447,15 @@ spec:
                       type: string
                     value:
                       description: |-
-                        Value of the address. The validity of the values will depend
-                        on the type and support by the controller.
+                        When a value is unspecified, an implementation SHOULD automatically
+                        assign an address matching the requested type if possible.
+
+                        If an implementation does not support an empty value, they MUST set the
+                        "Programmed" condition in status to False with a reason of "AddressNotAssigned".
 
                         Examples: `1.2.3.4`, `128::1`, `my-ip-address`.
                       maxLength: 253
-                      minLength: 1
                       type: string
-                  required:
-                  - value
                   type: object
                   x-kubernetes-validations:
                   - message: Hostname value must only contain valid characters (matching
@@ -1997,7 +1996,6 @@ spec:
                               - All
                               - Selector
                               - Same
-                              - None
                               type: string
                             selector:
                               description: |-
diff --git a/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml b/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml
index 38a433a3..9e8dd642 100644
--- a/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml
+++ b/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml
@@ -3,7 +3,7 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: experimental
   creationTimestamp: null
   name: grpcroutes.gateway.networking.k8s.io
@@ -1805,7 +1805,7 @@ spec:
                                 has(self.method) ? self.method.matches(r"""^[A-Za-z_][A-Za-z_0-9]*$"""):
                                 true'
                         type: object
-                      maxItems: 8
+                      maxItems: 64
                       type: array
                     name:
                       description: |-
diff --git a/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml b/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml
index 4508bfae..9f5f93d2 100644
--- a/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml
+++ b/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml
@@ -3,7 +3,7 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: experimental
   creationTimestamp: null
   name: httproutes.gateway.networking.k8s.io
@@ -596,6 +596,10 @@ spec:
                                       maxItems: 9
                                       type: array
                                       x-kubernetes-list-type: set
+                                      x-kubernetes-validations:
+                                      - message: AllowMethods cannot contain '*' alongside
+                                          other methods
+                                        rule: '!(''*'' in self && self.size() > 1)'
                                     allowOrigins:
                                       description: |-
                                         AllowOrigins indicates whether the response can be shared with requested
@@ -1382,6 +1386,7 @@ spec:
                                   - RequestRedirect
                                   - URLRewrite
                                   - ExtensionRef
+                                  - CORS
                                   type: string
                                 urlRewrite:
                                   description: |-
@@ -1818,6 +1823,10 @@ spec:
                                 maxItems: 9
                                 type: array
                                 x-kubernetes-list-type: set
+                                x-kubernetes-validations:
+                                - message: AllowMethods cannot contain '*' alongside
+                                    other methods
+                                  rule: '!(''*'' in self && self.size() > 1)'
                               allowOrigins:
                                 description: |-
                                   AllowOrigins indicates whether the response can be shared with requested
@@ -2600,6 +2609,7 @@ spec:
                             - RequestRedirect
                             - URLRewrite
                             - ExtensionRef
+                            - CORS
                             type: string
                           urlRewrite:
                             description: |-
@@ -4212,6 +4222,10 @@ spec:
                                       maxItems: 9
                                       type: array
                                       x-kubernetes-list-type: set
+                                      x-kubernetes-validations:
+                                      - message: AllowMethods cannot contain '*' alongside
+                                          other methods
+                                        rule: '!(''*'' in self && self.size() > 1)'
                                     allowOrigins:
                                       description: |-
                                         AllowOrigins indicates whether the response can be shared with requested
@@ -4998,6 +5012,7 @@ spec:
                                   - RequestRedirect
                                   - URLRewrite
                                   - ExtensionRef
+                                  - CORS
                                   type: string
                                 urlRewrite:
                                   description: |-
@@ -5434,6 +5449,10 @@ spec:
                                 maxItems: 9
                                 type: array
                                 x-kubernetes-list-type: set
+                                x-kubernetes-validations:
+                                - message: AllowMethods cannot contain '*' alongside
+                                    other methods
+                                  rule: '!(''*'' in self && self.size() > 1)'
                               allowOrigins:
                                 description: |-
                                   AllowOrigins indicates whether the response can be shared with requested
@@ -6216,6 +6235,7 @@ spec:
                             - RequestRedirect
                             - URLRewrite
                             - ExtensionRef
+                            - CORS
                             type: string
                           urlRewrite:
                             description: |-
diff --git a/config/crd/experimental/gateway.networking.k8s.io_referencegrants.yaml b/config/crd/experimental/gateway.networking.k8s.io_referencegrants.yaml
index c28a380a..a4952e39 100644
--- a/config/crd/experimental/gateway.networking.k8s.io_referencegrants.yaml
+++ b/config/crd/experimental/gateway.networking.k8s.io_referencegrants.yaml
@@ -3,7 +3,7 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: experimental
   creationTimestamp: null
   name: referencegrants.gateway.networking.k8s.io
diff --git a/config/crd/experimental/gateway.networking.k8s.io_tcproutes.yaml b/config/crd/experimental/gateway.networking.k8s.io_tcproutes.yaml
index 5d711194..7365304e 100644
--- a/config/crd/experimental/gateway.networking.k8s.io_tcproutes.yaml
+++ b/config/crd/experimental/gateway.networking.k8s.io_tcproutes.yaml
@@ -3,7 +3,7 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: experimental
   creationTimestamp: null
   name: tcproutes.gateway.networking.k8s.io
diff --git a/config/crd/experimental/gateway.networking.k8s.io_tlsroutes.yaml b/config/crd/experimental/gateway.networking.k8s.io_tlsroutes.yaml
index f3e63f56..eaac6b66 100644
--- a/config/crd/experimental/gateway.networking.k8s.io_tlsroutes.yaml
+++ b/config/crd/experimental/gateway.networking.k8s.io_tlsroutes.yaml
@@ -3,7 +3,7 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: experimental
   creationTimestamp: null
   name: tlsroutes.gateway.networking.k8s.io
diff --git a/config/crd/experimental/gateway.networking.k8s.io_udproutes.yaml b/config/crd/experimental/gateway.networking.k8s.io_udproutes.yaml
index 2bfcb7aa..5ef205c1 100644
--- a/config/crd/experimental/gateway.networking.k8s.io_udproutes.yaml
+++ b/config/crd/experimental/gateway.networking.k8s.io_udproutes.yaml
@@ -3,7 +3,7 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: experimental
   creationTimestamp: null
   name: udproutes.gateway.networking.k8s.io
diff --git a/config/crd/experimental/gateway.networking.x-k8s.io_backendtrafficpolicies.yaml b/config/crd/experimental/gateway.networking.x-k8s.io_xbackendtrafficpolicies.yaml
similarity index 94%
rename from config/crd/experimental/gateway.networking.x-k8s.io_backendtrafficpolicies.yaml
rename to config/crd/experimental/gateway.networking.x-k8s.io_xbackendtrafficpolicies.yaml
index f1bc4245..a4674dec 100644
--- a/config/crd/experimental/gateway.networking.x-k8s.io_backendtrafficpolicies.yaml
+++ b/config/crd/experimental/gateway.networking.x-k8s.io_xbackendtrafficpolicies.yaml
@@ -3,23 +3,23 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: experimental
   creationTimestamp: null
   labels:
     gateway.networking.k8s.io/policy: Direct
-  name: backendtrafficpolicies.gateway.networking.x-k8s.io
+  name: xbackendtrafficpolicies.gateway.networking.x-k8s.io
 spec:
   group: gateway.networking.x-k8s.io
   names:
     categories:
     - gateway-api
-    kind: BackendTrafficPolicy
-    listKind: BackendTrafficPolicyList
-    plural: backendtrafficpolicies
+    kind: XBackendTrafficPolicy
+    listKind: XBackendTrafficPolicyList
+    plural: xbackendtrafficpolicies
     shortNames:
-    - btrafficpolicy
-    singular: backendtrafficpolicy
+    - xbtrafficpolicy
+    singular: xbackendtrafficpolicy
   scope: Namespaced
   versions:
   - additionalPrinterColumns:
@@ -30,7 +30,7 @@ spec:
     schema:
       openAPIV3Schema:
         description: |-
-          BackendTrafficPolicy defines the configuration for how traffic to a
+          XBackendTrafficPolicy defines the configuration for how traffic to a
           target backend should be handled.
         properties:
           apiVersion:
@@ -85,30 +85,37 @@ spec:
 
                   Support: Extended
                 properties:
-                  budgetInterval:
-                    default: 10s
-                    description: |-
-                      BudgetInterval defines the duration in which requests will be considered
-                      for calculating the budget for retries.
+                  budget:
+                    default:
+                      interval: 10s
+                      percent: 20
+                    description: Budget holds the details of the retry budget configuration.
+                    properties:
+                      interval:
+                        default: 10s
+                        description: |-
+                          Interval defines the duration in which requests will be considered
+                          for calculating the budget for retries.
 
-                      Support: Extended
-                    pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
-                    type: string
-                    x-kubernetes-validations:
-                    - message: budgetInterval can not be greater than one hour or
-                        less than one second
-                      rule: '!(duration(self) < duration(''1s'') || duration(self)
-                        > duration(''1h''))'
-                  budgetPercent:
-                    default: 20
-                    description: |-
-                      BudgetPercent defines the maximum percentage of active requests that may
-                      be made up of retries.
+                          Support: Extended
+                        pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
+                        type: string
+                        x-kubernetes-validations:
+                        - message: interval can not be greater than one hour or less
+                            than one second
+                          rule: '!(duration(self) < duration(''1s'') || duration(self)
+                            > duration(''1h''))'
+                      percent:
+                        default: 20
+                        description: |-
+                          Percent defines the maximum percentage of active requests that may
+                          be made up of retries.
 
-                      Support: Extended
-                    maximum: 100
-                    minimum: 0
-                    type: integer
+                          Support: Extended
+                        maximum: 100
+                        minimum: 0
+                        type: integer
+                    type: object
                   minRetryRate:
                     default:
                       count: 10
diff --git a/config/crd/experimental/gateway.networking.x-k8s.io_listenersets.yaml b/config/crd/experimental/gateway.networking.x-k8s.io_xlistenersets.yaml
similarity index 95%
rename from config/crd/experimental/gateway.networking.x-k8s.io_listenersets.yaml
rename to config/crd/experimental/gateway.networking.x-k8s.io_xlistenersets.yaml
index e1eaff23..2454521c 100644
--- a/config/crd/experimental/gateway.networking.x-k8s.io_listenersets.yaml
+++ b/config/crd/experimental/gateway.networking.x-k8s.io_xlistenersets.yaml
@@ -3,21 +3,21 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: experimental
   creationTimestamp: null
-  name: listenersets.gateway.networking.x-k8s.io
+  name: xlistenersets.gateway.networking.x-k8s.io
 spec:
   group: gateway.networking.x-k8s.io
   names:
     categories:
     - gateway-api
-    kind: ListenerSet
-    listKind: ListenerSetList
-    plural: listenersets
+    kind: XListenerSet
+    listKind: XListenerSetList
+    plural: xlistenersets
     shortNames:
     - lset
-    singular: listenerset
+    singular: xlistenerset
   scope: Namespaced
   versions:
   - additionalPrinterColumns:
@@ -34,8 +34,33 @@ spec:
     schema:
       openAPIV3Schema:
         description: |-
-          ListenerSet defines a set of additional listeners
-          to attach to an existing Gateway.
+          XListenerSet defines a set of additional listeners to attach to an existing Gateway.
+          This resource provides a mechanism to merge multiple listeners into a single Gateway.
+
+          The parent Gateway must explicitly allow ListenerSet attachment through its
+          AllowedListeners configuration. By default, Gateways do not allow ListenerSet
+          attachment.
+
+          Routes can attach to a ListenerSet by specifying it as a parentRef, and can
+          optionally target specific listeners using the sectionName field.
+
+          Policy Attachment:
+          - Policies that attach to a ListenerSet apply to all listeners defined in that resource
+          - Policies do not impact listeners in the parent Gateway
+          - Different ListenerSets attached to the same Gateway can have different policies
+          - If an implementation cannot apply a policy to specific listeners, it should reject the policy
+
+          ReferenceGrant Semantics:
+          - ReferenceGrants applied to a Gateway are not inherited by child ListenerSets
+          - ReferenceGrants applied to a ListenerSet do not grant permission to the parent Gateway's listeners
+          - A ListenerSet can reference secrets/backends in its own namespace without a ReferenceGrant
+
+          Gateway Integration:
+          - The parent Gateway's status will include an "AttachedListenerSets" condition
+          - This condition will be:
+            - True: when AllowedListeners is set and at least one child ListenerSet is attached
+            - False: when AllowedListeners is set but no valid listeners are attached, or when AllowedListeners is not set or false
+            - Unknown: when no AllowedListeners config is present
         properties:
           apiVersion:
             description: |-
@@ -73,10 +98,10 @@ spec:
 
                   1. "parent" Gateway
                   2. ListenerSet ordered by creation time (oldest first)
-                  3. ListenerSet ordered alphabetically by “{namespace}/{name}”.
+                  3. ListenerSet ordered alphabetically by "{namespace}/{name}".
 
                   An implementation MAY reject listeners by setting the ListenerEntryStatus
-                  `Accepted`` condition to False with the Reason `TooManyListeners`
+                  `Accepted` condition to False with the Reason `TooManyListeners`
 
                   If a listener has a conflict, this will be reported in the
                   Status.ListenerEntryStatus setting the `Conflicted` condition to True.
@@ -174,7 +199,6 @@ spec:
                               - All
                               - Selector
                               - Same
-                              - None
                               type: string
                             selector:
                               description: |-
@@ -515,6 +539,7 @@ spec:
                           > 0 || size(self.options) > 0 : true'
                   required:
                   - name
+                  - port
                   - protocol
                   type: object
                 maxItems: 64
diff --git a/config/crd/experimental/kustomization.yaml b/config/crd/experimental/kustomization.yaml
index c2e89bc5..e4e76379 100644
--- a/config/crd/experimental/kustomization.yaml
+++ b/config/crd/experimental/kustomization.yaml
@@ -1,11 +1,12 @@
 resources:
+- gateway.networking.k8s.io_backendtlspolicies.yaml
 - gateway.networking.k8s.io_gatewayclasses.yaml
 - gateway.networking.k8s.io_gateways.yaml
+- gateway.networking.k8s.io_grpcroutes.yaml
 - gateway.networking.k8s.io_httproutes.yaml
 - gateway.networking.k8s.io_referencegrants.yaml
 - gateway.networking.k8s.io_tcproutes.yaml
 - gateway.networking.k8s.io_tlsroutes.yaml
 - gateway.networking.k8s.io_udproutes.yaml
-- gateway.networking.k8s.io_grpcroutes.yaml
-- gateway.networking.k8s.io_backendtlspolicies.yaml
-- gateway.networking.k8s.io_backendlbpolicies.yaml
+- gateway.networking.x-k8s.io_xbackendtrafficpolicies.yaml
+- gateway.networking.x-k8s.io_xlistenersets.yaml
diff --git a/config/crd/standard/gateway.networking.k8s.io_gatewayclasses.yaml b/config/crd/standard/gateway.networking.k8s.io_gatewayclasses.yaml
index ed98fd40..9268f6f1 100644
--- a/config/crd/standard/gateway.networking.k8s.io_gatewayclasses.yaml
+++ b/config/crd/standard/gateway.networking.k8s.io_gatewayclasses.yaml
@@ -3,7 +3,7 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: standard
   creationTimestamp: null
   name: gatewayclasses.gateway.networking.k8s.io
diff --git a/config/crd/standard/gateway.networking.k8s.io_gateways.yaml b/config/crd/standard/gateway.networking.k8s.io_gateways.yaml
index 15cbc96b..2952481b 100644
--- a/config/crd/standard/gateway.networking.k8s.io_gateways.yaml
+++ b/config/crd/standard/gateway.networking.k8s.io_gateways.yaml
@@ -3,7 +3,7 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: standard
   creationTimestamp: null
   name: gateways.gateway.networking.k8s.io
@@ -83,8 +83,8 @@ spec:
 
                   Support: Extended
                 items:
-                  description: GatewayAddress describes an address that can be bound
-                    to a Gateway.
+                  description: GatewaySpecAddress describes an address that can be
+                    bound to a Gateway.
                   oneOf:
                   - properties:
                       type:
@@ -109,15 +109,15 @@ spec:
                       type: string
                     value:
                       description: |-
-                        Value of the address. The validity of the values will depend
-                        on the type and support by the controller.
+                        When a value is unspecified, an implementation SHOULD automatically
+                        assign an address matching the requested type if possible.
+
+                        If an implementation does not support an empty value, they MUST set the
+                        "Programmed" condition in status to False with a reason of "AddressNotAssigned".
 
                         Examples: `1.2.3.4`, `128::1`, `my-ip-address`.
                       maxLength: 253
-                      minLength: 1
                       type: string
-                  required:
-                  - value
                   type: object
                   x-kubernetes-validations:
                   - message: Hostname value must only contain valid characters (matching
@@ -513,7 +513,6 @@ spec:
                               - All
                               - Selector
                               - Same
-                              - None
                               type: string
                             selector:
                               description: |-
@@ -1190,8 +1189,8 @@ spec:
 
                   Support: Extended
                 items:
-                  description: GatewayAddress describes an address that can be bound
-                    to a Gateway.
+                  description: GatewaySpecAddress describes an address that can be
+                    bound to a Gateway.
                   oneOf:
                   - properties:
                       type:
@@ -1216,15 +1215,15 @@ spec:
                       type: string
                     value:
                       description: |-
-                        Value of the address. The validity of the values will depend
-                        on the type and support by the controller.
+                        When a value is unspecified, an implementation SHOULD automatically
+                        assign an address matching the requested type if possible.
+
+                        If an implementation does not support an empty value, they MUST set the
+                        "Programmed" condition in status to False with a reason of "AddressNotAssigned".
 
                         Examples: `1.2.3.4`, `128::1`, `my-ip-address`.
                       maxLength: 253
-                      minLength: 1
                       type: string
-                  required:
-                  - value
                   type: object
                   x-kubernetes-validations:
                   - message: Hostname value must only contain valid characters (matching
@@ -1620,7 +1619,6 @@ spec:
                               - All
                               - Selector
                               - Same
-                              - None
                               type: string
                             selector:
                               description: |-
diff --git a/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml b/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml
index fae1d0ad..4f7d8f13 100644
--- a/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml
+++ b/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml
@@ -3,7 +3,7 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: standard
   creationTimestamp: null
   name: grpcroutes.gateway.networking.k8s.io
@@ -1758,8 +1758,17 @@ spec:
                                 has(self.method) ? self.method.matches(r"""^[A-Za-z_][A-Za-z_0-9]*$"""):
                                 true'
                         type: object
-                      maxItems: 8
+                      maxItems: 64
                       type: array
+                    name:
+                      description: |-
+                        Name is the name of the route rule. This name MUST be unique within a Route if it is set.
+
+                        Support: Extended
+                      maxLength: 253
+                      minLength: 1
+                      pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                      type: string
                   type: object
                 maxItems: 16
                 type: array
diff --git a/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml b/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml
index c430d127..8533381f 100644
--- a/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml
+++ b/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml
@@ -3,7 +3,7 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: standard
   creationTimestamp: null
   name: httproutes.gateway.networking.k8s.io
@@ -2432,6 +2432,15 @@ spec:
                         type: object
                       maxItems: 64
                       type: array
+                    name:
+                      description: |-
+                        Name is the name of the route rule. This name MUST be unique within a Route if it is set.
+
+                        Support: Extended
+                      maxLength: 253
+                      minLength: 1
+                      pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                      type: string
                     timeouts:
                       description: |-
                         Timeouts defines the timeouts that can be configured for an HTTP request.
@@ -5227,6 +5236,15 @@ spec:
                         type: object
                       maxItems: 64
                       type: array
+                    name:
+                      description: |-
+                        Name is the name of the route rule. This name MUST be unique within a Route if it is set.
+
+                        Support: Extended
+                      maxLength: 253
+                      minLength: 1
+                      pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                      type: string
                     timeouts:
                       description: |-
                         Timeouts defines the timeouts that can be configured for an HTTP request.
diff --git a/config/crd/standard/gateway.networking.k8s.io_referencegrants.yaml b/config/crd/standard/gateway.networking.k8s.io_referencegrants.yaml
index d18ee62f..da71ceaa 100644
--- a/config/crd/standard/gateway.networking.k8s.io_referencegrants.yaml
+++ b/config/crd/standard/gateway.networking.k8s.io_referencegrants.yaml
@@ -3,7 +3,7 @@ kind: CustomResourceDefinition
 metadata:
   annotations:
     api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
-    gateway.networking.k8s.io/bundle-version: v1.2.1
+    gateway.networking.k8s.io/bundle-version: v1.3.0
     gateway.networking.k8s.io/channel: standard
   creationTimestamp: null
   name: referencegrants.gateway.networking.k8s.io
diff --git a/conformance/apis/v1/conformancereport.go b/conformance/apis/v1/conformancereport.go
index 7f4f4d53..dcea92df 100644
--- a/conformance/apis/v1/conformancereport.go
+++ b/conformance/apis/v1/conformancereport.go
@@ -50,6 +50,10 @@ type ConformanceReport struct {
 	// SucceededProvisionalTests is a list of the names of the provisional tests that
 	// have been successfully run.
 	SucceededProvisionalTests []string `json:"succeededProvisionalTests,omitempty"`
+
+	// InferredSupportedFeatures indicates whether the supported features were
+	// automatically detected by the conformance suite.
+	InferredSupportedFeatures bool `json:"inferredSupportedFeatures"`
 }
 
 // Implementation provides metadata information on the downstream
diff --git a/conformance/base/manifests.yaml b/conformance/base/manifests.yaml
index e415e16e..a3163bf8 100644
--- a/conformance/base/manifests.yaml
+++ b/conformance/base/manifests.yaml
@@ -706,6 +706,13 @@ spec:
         - /root/Corefile
         image: coredns/coredns
         name: coredns
+        securityContext:
+          allowPrivilegeEscalation: false
+          capabilities:
+            add:
+            - NET_BIND_SERVICE
+            drop:
+            - ALL
         volumeMounts:
         - mountPath: /root
           name: conf
diff --git a/conformance/conformance.go b/conformance/conformance.go
index ce264a94..8ea5799e 100644
--- a/conformance/conformance.go
+++ b/conformance/conformance.go
@@ -29,11 +29,14 @@ import (
 	"sigs.k8s.io/gateway-api/conformance/tests"
 	conformanceconfig "sigs.k8s.io/gateway-api/conformance/utils/config"
 	"sigs.k8s.io/gateway-api/conformance/utils/flags"
+
 	"sigs.k8s.io/gateway-api/conformance/utils/suite"
 
 	"github.com/stretchr/testify/require"
 	apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
+
 	clientset "k8s.io/client-go/kubernetes"
+
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	"sigs.k8s.io/controller-runtime/pkg/client/config"
 	"sigs.k8s.io/yaml"
@@ -63,18 +66,20 @@ func DefaultOptions(t *testing.T) suite.ConformanceOptions {
 
 	supportedFeatures := suite.ParseSupportedFeatures(*flags.SupportedFeatures)
 	exemptFeatures := suite.ParseSupportedFeatures(*flags.ExemptFeatures)
+
 	skipTests := suite.ParseSkipTests(*flags.SkipTests)
 	namespaceLabels := suite.ParseKeyValuePairs(*flags.NamespaceLabels)
 	namespaceAnnotations := suite.ParseKeyValuePairs(*flags.NamespaceAnnotations)
 	conformanceProfiles := suite.ParseConformanceProfiles(*flags.ConformanceProfiles)
 
-	implementation := suite.ParseImplementation(
+	implementation, err := suite.ParseImplementation(
 		*flags.ImplementationOrganization,
 		*flags.ImplementationProject,
 		*flags.ImplementationURL,
 		*flags.ImplementationVersion,
 		*flags.ImplementationContact,
 	)
+	require.NoError(t, err, "error parsing implementation details")
 
 	return suite.ConformanceOptions{
 		AllowCRDsMismatch:          *flags.AllowCRDsMismatch,
@@ -88,7 +93,7 @@ func DefaultOptions(t *testing.T) suite.ConformanceOptions {
 		ExemptFeatures:             exemptFeatures,
 		ManifestFS:                 []fs.FS{&Manifests},
 		GatewayClassName:           *flags.GatewayClassName,
-		Implementation:             implementation,
+		Implementation:             *implementation,
 		Mode:                       *flags.Mode,
 		NamespaceAnnotations:       namespaceAnnotations,
 		NamespaceLabels:            namespaceLabels,
@@ -144,6 +149,7 @@ func logOptions(t *testing.T, opts suite.ConformanceOptions) {
 	t.Logf("  Enable All Features: %t", opts.EnableAllSupportedFeatures)
 	t.Logf("  Supported Features: %v", opts.SupportedFeatures.UnsortedList())
 	t.Logf("  ExemptFeatures: %v", opts.ExemptFeatures.UnsortedList())
+	t.Logf("  ConformanceProfiles: %v", opts.ConformanceProfiles.UnsortedList())
 }
 
 func writeReport(logf func(string, ...any), report confv1.ConformanceReport, output string) error {
diff --git a/conformance/reports/v1.1.0/airlock-microgateway/README.md b/conformance/reports/v1.1.0/airlock-microgateway/README.md
index effe8f0a..a23522a4 100644
--- a/conformance/reports/v1.1.0/airlock-microgateway/README.md
+++ b/conformance/reports/v1.1.0/airlock-microgateway/README.md
@@ -5,6 +5,8 @@
 | API channel  | Implementation version                                               | Mode    | Report                                           |
 |--------------|----------------------------------------------------------------------|---------|--------------------------------------------------|
 | experimental | [v4.4.0](https://github.com/airlock/microgateway/releases/tag/4.4.0) | default | [v4.4.0 report](./experimental-4.4.0-default-report.yaml) |
+| standard     | [v4.5.0](https://github.com/airlock/microgateway/releases/tag/4.5.0) | default | [v4.5.0 report](./standard-4.5.0-default-report.yaml)     |
+| standard     | [v4.6.0](https://github.com/airlock/microgateway/releases/tag/4.6.0) | default | [v4.6.0 report](./standard-4.6.0-default-report.yaml)     |
 
 ## Reproduce
 
@@ -14,3 +16,7 @@ The Airlock Microgateway conformance report can be reproduced by following the s
 > The `HTTPRouteWeight` test fires 10 concurrent request to 3 backends totaling in 500 requests to assert a distribution that matches the configured weight.
 > Please be aware that this test exceeds the [5 req/sec rate-limit](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html) enforced in the <!-- markdown-link-check-disable --> [community edition](https://www.airlock.com/en/secure-access-hub/components/microgateway/community-edition) <!-- markdown-link-check-enable -->, causing the test to fail.
 > To successfully pass this test a <!-- markdown-link-check-disable --> [premium license](https://www.airlock.com/en/secure-access-hub/components/microgateway/premium-edition)  <!-- markdown-link-check-enable --> is required.
+> 
+> The Airlock Microgateway drops all request headers except for a well-known built-in standard and tracing headers list (e.g., Accept, Cookie, X-CSRF-TOKEN) to reduce the attack surface.
+> Therefore, to run the conformance tests, a `ContentSecurityPolicy` with a `HeaderRewrites` (see [`conformance-report.yaml`](https://github.com/airlock/microgateway/tree/main/examples/gateway-api/conformance/manifests/conformance-report.yaml)) is required to disable request header filtering for all `HTTPRoute` tests relying on the `MakeRequestAndExpectEventuallyConsistentResponse` assertion.
+> Regardless of whether request header filtering is enabled or disabled, header-based routing works as specified in the Gateway API, as the headers are only filtered before the request is forwarded to the upstream.
\ No newline at end of file
diff --git a/conformance/reports/v1.1.0/airlock-microgateway/standard-4.5.0-default-report.yaml b/conformance/reports/v1.1.0/airlock-microgateway/standard-4.5.0-default-report.yaml
new file mode 100644
index 00000000..1c261b3a
--- /dev/null
+++ b/conformance/reports/v1.1.0/airlock-microgateway/standard-4.5.0-default-report.yaml
@@ -0,0 +1,47 @@
+apiVersion: gateway.networking.k8s.io/v1alpha1
+date: "2025-02-03T15:50:39Z"
+gatewayAPIChannel: standard
+gatewayAPIVersion: v1.1.0
+implementation:
+  contact:
+    - https://www.airlock.com/en/contact
+  organization: airlock
+  project: microgateway
+  url: https://github.com/airlock/microgateway
+  version: 4.5.0
+kind: ConformanceReport
+mode: default
+profiles:
+  - core:
+      result: success
+      statistics:
+        Failed: 0
+        Passed: 33
+        Skipped: 0
+    extended:
+      result: success
+      statistics:
+        Failed: 0
+        Passed: 10
+        Skipped: 0
+      supportedFeatures:
+        - GatewayPort8080
+        - HTTPRouteHostRewrite
+        - HTTPRouteMethodMatching
+        - HTTPRouteParentRefPort
+        - HTTPRoutePathRewrite
+        - HTTPRoutePortRedirect
+        - HTTPRouteQueryParamMatching
+        - HTTPRouteSchemeRedirect
+      unsupportedFeatures:
+        - GatewayHTTPListenerIsolation
+        - GatewayStaticAddresses
+        - HTTPRouteBackendRequestHeaderModification
+        - HTTPRouteBackendTimeout
+        - HTTPRoutePathRedirect
+        - HTTPRouteRequestMirror
+        - HTTPRouteRequestMultipleMirrors
+        - HTTPRouteRequestTimeout
+        - HTTPRouteResponseHeaderModification
+    name: GATEWAY-HTTP
+    summary: Core tests succeeded. Extended tests succeeded.
diff --git a/conformance/reports/v1.1.0/airlock-microgateway/standard-4.6.0-default-report.yaml b/conformance/reports/v1.1.0/airlock-microgateway/standard-4.6.0-default-report.yaml
new file mode 100644
index 00000000..5152c07e
--- /dev/null
+++ b/conformance/reports/v1.1.0/airlock-microgateway/standard-4.6.0-default-report.yaml
@@ -0,0 +1,47 @@
+apiVersion: gateway.networking.k8s.io/v1alpha1
+date: "2025-05-19T14:32:51Z"
+gatewayAPIChannel: standard
+gatewayAPIVersion: v1.1.0
+implementation:
+  contact:
+  - https://www.airlock.com/en/contact
+  organization: airlock
+  project: microgateway
+  url: https://github.com/airlock/microgateway
+  version: 4.6.0
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 12
+      Skipped: 0
+    supportedFeatures:
+    - GatewayPort8080
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayStaticAddresses
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestTimeout
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
diff --git a/conformance/reports/v1.1.1/airlock-microgateway/README.md b/conformance/reports/v1.1.1/airlock-microgateway/README.md
new file mode 100644
index 00000000..a61abd83
--- /dev/null
+++ b/conformance/reports/v1.1.1/airlock-microgateway/README.md
@@ -0,0 +1,21 @@
+# Airlock Microgateway
+
+## Table of contents
+
+| API channel | Implementation version                                               | Mode    | Report                                       |
+|-------------|----------------------------------------------------------------------|---------|----------------------------------------------|
+| standard    | [v4.5.0](https://github.com/airlock/microgateway/releases/tag/4.5.0) | default | [link](./standard-4.5.0-default-report.yaml) |
+| standard    | [v4.6.0](https://github.com/airlock/microgateway/releases/tag/4.6.0) | default | [link](./standard-4.6.0-default-report.yaml) |
+
+## Reproduce
+
+The Airlock Microgateway conformance report can be reproduced by following the steps in the [Gateway API conformance guide](https://github.com/airlock/microgateway/tree/main/examples/gateway-api/conformance/conformance.md) on GitHub.
+
+> [!NOTE]
+> The `HTTPRouteWeight` test fires 10 concurrent request to 3 backends totaling in 500 requests to assert a distribution that matches the configured weight.
+> Please be aware that this test exceeds the [5 req/sec rate-limit](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html) enforced in the <!-- markdown-link-check-disable --> [community edition](https://www.airlock.com/en/secure-access-hub/components/microgateway/community-edition) <!-- markdown-link-check-enable -->, causing the test to fail.
+> To successfully pass this test a <!-- markdown-link-check-disable --> [premium license](https://www.airlock.com/en/secure-access-hub/components/microgateway/premium-edition)  <!-- markdown-link-check-enable --> is required.
+> 
+> The Airlock Microgateway drops all request headers except for a well-known built-in standard and tracing headers list (e.g., Accept, Cookie, X-CSRF-TOKEN) to reduce the attack surface.
+> Therefore, to run the conformance tests, a `ContentSecurityPolicy` with a `HeaderRewrites` (see [`conformance-report.yaml`](https://github.com/airlock/microgateway/tree/main/examples/gateway-api/conformance/manifests/conformance-report.yaml)) is required to disable request header filtering for all `HTTPRoute` tests relying on the `MakeRequestAndExpectEventuallyConsistentResponse` assertion.
+> Regardless of whether request header filtering is enabled or disabled, header-based routing works as specified in the Gateway API, as the headers are only filtered before the request is forwarded to the upstream.
\ No newline at end of file
diff --git a/conformance/reports/v1.1.1/airlock-microgateway/standard-4.5.0-default-report.yaml b/conformance/reports/v1.1.1/airlock-microgateway/standard-4.5.0-default-report.yaml
new file mode 100644
index 00000000..a64ac3e4
--- /dev/null
+++ b/conformance/reports/v1.1.1/airlock-microgateway/standard-4.5.0-default-report.yaml
@@ -0,0 +1,47 @@
+apiVersion: gateway.networking.k8s.io/v1alpha1
+date: "2025-02-03T15:50:18Z"
+gatewayAPIChannel: standard
+gatewayAPIVersion: v1.1.1
+implementation:
+  contact:
+    - https://www.airlock.com/en/contact
+  organization: airlock
+  project: microgateway
+  url: https://github.com/airlock/microgateway
+  version: 4.5.0
+kind: ConformanceReport
+mode: default
+profiles:
+  - core:
+      result: success
+      statistics:
+        Failed: 0
+        Passed: 33
+        Skipped: 0
+    extended:
+      result: success
+      statistics:
+        Failed: 0
+        Passed: 10
+        Skipped: 0
+      supportedFeatures:
+        - GatewayPort8080
+        - HTTPRouteHostRewrite
+        - HTTPRouteMethodMatching
+        - HTTPRouteParentRefPort
+        - HTTPRoutePathRewrite
+        - HTTPRoutePortRedirect
+        - HTTPRouteQueryParamMatching
+        - HTTPRouteSchemeRedirect
+      unsupportedFeatures:
+        - GatewayHTTPListenerIsolation
+        - GatewayStaticAddresses
+        - HTTPRouteBackendRequestHeaderModification
+        - HTTPRouteBackendTimeout
+        - HTTPRoutePathRedirect
+        - HTTPRouteRequestMirror
+        - HTTPRouteRequestMultipleMirrors
+        - HTTPRouteRequestTimeout
+        - HTTPRouteResponseHeaderModification
+    name: GATEWAY-HTTP
+    summary: Core tests succeeded. Extended tests succeeded.
diff --git a/conformance/reports/v1.1.1/airlock-microgateway/standard-4.6.0-default-report.yaml b/conformance/reports/v1.1.1/airlock-microgateway/standard-4.6.0-default-report.yaml
new file mode 100644
index 00000000..93c2a251
--- /dev/null
+++ b/conformance/reports/v1.1.1/airlock-microgateway/standard-4.6.0-default-report.yaml
@@ -0,0 +1,47 @@
+apiVersion: gateway.networking.k8s.io/v1alpha1
+date: "2025-05-19T14:32:48Z"
+gatewayAPIChannel: standard
+gatewayAPIVersion: v1.1.1
+implementation:
+  contact:
+  - https://www.airlock.com/en/contact
+  organization: airlock
+  project: microgateway
+  url: https://github.com/airlock/microgateway
+  version: 4.6.0
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 12
+      Skipped: 0
+    supportedFeatures:
+    - GatewayPort8080
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayStaticAddresses
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestTimeout
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
diff --git a/conformance/reports/v1.2.0/airlock-microgateway/README.md b/conformance/reports/v1.2.0/airlock-microgateway/README.md
new file mode 100644
index 00000000..a61abd83
--- /dev/null
+++ b/conformance/reports/v1.2.0/airlock-microgateway/README.md
@@ -0,0 +1,21 @@
+# Airlock Microgateway
+
+## Table of contents
+
+| API channel | Implementation version                                               | Mode    | Report                                       |
+|-------------|----------------------------------------------------------------------|---------|----------------------------------------------|
+| standard    | [v4.5.0](https://github.com/airlock/microgateway/releases/tag/4.5.0) | default | [link](./standard-4.5.0-default-report.yaml) |
+| standard    | [v4.6.0](https://github.com/airlock/microgateway/releases/tag/4.6.0) | default | [link](./standard-4.6.0-default-report.yaml) |
+
+## Reproduce
+
+The Airlock Microgateway conformance report can be reproduced by following the steps in the [Gateway API conformance guide](https://github.com/airlock/microgateway/tree/main/examples/gateway-api/conformance/conformance.md) on GitHub.
+
+> [!NOTE]
+> The `HTTPRouteWeight` test fires 10 concurrent request to 3 backends totaling in 500 requests to assert a distribution that matches the configured weight.
+> Please be aware that this test exceeds the [5 req/sec rate-limit](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html) enforced in the <!-- markdown-link-check-disable --> [community edition](https://www.airlock.com/en/secure-access-hub/components/microgateway/community-edition) <!-- markdown-link-check-enable -->, causing the test to fail.
+> To successfully pass this test a <!-- markdown-link-check-disable --> [premium license](https://www.airlock.com/en/secure-access-hub/components/microgateway/premium-edition)  <!-- markdown-link-check-enable --> is required.
+> 
+> The Airlock Microgateway drops all request headers except for a well-known built-in standard and tracing headers list (e.g., Accept, Cookie, X-CSRF-TOKEN) to reduce the attack surface.
+> Therefore, to run the conformance tests, a `ContentSecurityPolicy` with a `HeaderRewrites` (see [`conformance-report.yaml`](https://github.com/airlock/microgateway/tree/main/examples/gateway-api/conformance/manifests/conformance-report.yaml)) is required to disable request header filtering for all `HTTPRoute` tests relying on the `MakeRequestAndExpectEventuallyConsistentResponse` assertion.
+> Regardless of whether request header filtering is enabled or disabled, header-based routing works as specified in the Gateway API, as the headers are only filtered before the request is forwarded to the upstream.
\ No newline at end of file
diff --git a/conformance/reports/v1.2.0/airlock-microgateway/standard-4.5.0-default-report.yaml b/conformance/reports/v1.2.0/airlock-microgateway/standard-4.5.0-default-report.yaml
new file mode 100644
index 00000000..b6c03671
--- /dev/null
+++ b/conformance/reports/v1.2.0/airlock-microgateway/standard-4.5.0-default-report.yaml
@@ -0,0 +1,53 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-02-03T15:51:50Z"
+gatewayAPIChannel: standard
+gatewayAPIVersion: v1.2.0
+implementation:
+  contact:
+    - https://www.airlock.com/en/contact
+  organization: airlock
+  project: microgateway
+  url: https://github.com/airlock/microgateway
+  version: 4.5.0
+kind: ConformanceReport
+mode: default
+profiles:
+  - core:
+      result: success
+      statistics:
+        Failed: 0
+        Passed: 33
+        Skipped: 0
+    extended:
+      result: success
+      statistics:
+        Failed: 0
+        Passed: 16
+        Skipped: 0
+      supportedFeatures:
+        - GatewayInfrastructurePropagation
+        - GatewayPort8080
+        - HTTPRouteBackendProtocolH2C
+        - HTTPRouteBackendProtocolWebSocket
+        - HTTPRouteBackendTimeout
+        - HTTPRouteDestinationPortMatching
+        - HTTPRouteHostRewrite
+        - HTTPRouteMethodMatching
+        - HTTPRouteParentRefPort
+        - HTTPRoutePathRewrite
+        - HTTPRoutePortRedirect
+        - HTTPRouteQueryParamMatching
+        - HTTPRouteRequestTimeout
+        - HTTPRouteSchemeRedirect
+      unsupportedFeatures:
+        - GatewayHTTPListenerIsolation
+        - GatewayStaticAddresses
+        - HTTPRouteBackendRequestHeaderModification
+        - HTTPRoutePathRedirect
+        - HTTPRouteRequestMirror
+        - HTTPRouteRequestMultipleMirrors
+        - HTTPRouteResponseHeaderModification
+    name: GATEWAY-HTTP
+    summary: Core tests succeeded. Extended tests succeeded.
+succeededProvisionalTests:
+  - GatewayInfrastructure
diff --git a/conformance/reports/v1.2.0/airlock-microgateway/standard-4.6.0-default-report.yaml b/conformance/reports/v1.2.0/airlock-microgateway/standard-4.6.0-default-report.yaml
new file mode 100644
index 00000000..cce72e90
--- /dev/null
+++ b/conformance/reports/v1.2.0/airlock-microgateway/standard-4.6.0-default-report.yaml
@@ -0,0 +1,53 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-05-19T14:33:20Z"
+gatewayAPIChannel: standard
+gatewayAPIVersion: v1.2.0
+implementation:
+  contact:
+  - https://www.airlock.com/en/contact
+  organization: airlock
+  project: microgateway
+  url: https://github.com/airlock/microgateway
+  version: 4.6.0
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 18
+      Skipped: 0
+    supportedFeatures:
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayStaticAddresses
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
+succeededProvisionalTests:
+- GatewayInfrastructure
diff --git a/conformance/reports/v1.2.1/airlock-microgateway/README.md b/conformance/reports/v1.2.1/airlock-microgateway/README.md
new file mode 100644
index 00000000..97c52418
--- /dev/null
+++ b/conformance/reports/v1.2.1/airlock-microgateway/README.md
@@ -0,0 +1,21 @@
+# Airlock Microgateway
+
+## Table of contents
+
+| API channel  | Implementation version                                               | Mode    | Report                                           |
+|--------------|----------------------------------------------------------------------|---------|--------------------------------------------------|
+| experimental | [v4.5.0](https://github.com/airlock/microgateway/releases/tag/4.5.0) | default | [link](./experimental-4.5.0-default-report.yaml) |
+| standard     | [v4.6.0](https://github.com/airlock/microgateway/releases/tag/4.6.0) | default | [link](./standard-4.6.0-default-report.yaml)     |
+
+## Reproduce
+
+The Airlock Microgateway conformance report can be reproduced by following the steps in the [Gateway API conformance guide](https://github.com/airlock/microgateway/tree/main/examples/gateway-api/conformance/conformance.md) on GitHub.
+
+> [!NOTE]
+> The `HTTPRouteWeight` test fires 10 concurrent request to 3 backends totaling in 500 requests to assert a distribution that matches the configured weight.
+> Please be aware that this test exceeds the [5 req/sec rate-limit](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html) enforced in the <!-- markdown-link-check-disable --> [community edition](https://www.airlock.com/en/secure-access-hub/components/microgateway/community-edition) <!-- markdown-link-check-enable -->, causing the test to fail.
+> To successfully pass this test a <!-- markdown-link-check-disable --> [premium license](https://www.airlock.com/en/secure-access-hub/components/microgateway/premium-edition)  <!-- markdown-link-check-enable --> is required.
+> 
+> The Airlock Microgateway drops all request headers except for a well-known built-in standard and tracing headers list (e.g., Accept, Cookie, X-CSRF-TOKEN) to reduce the attack surface.
+> Therefore, to run the conformance tests, a `ContentSecurityPolicy` with a `HeaderRewrites` (see [`conformance-report.yaml`](https://github.com/airlock/microgateway/tree/main/examples/gateway-api/conformance/manifests/conformance-report.yaml)) is required to disable request header filtering for all `HTTPRoute` tests relying on the `MakeRequestAndExpectEventuallyConsistentResponse` assertion.
+> Regardless of whether request header filtering is enabled or disabled, header-based routing works as specified in the Gateway API, as the headers are only filtered before the request is forwarded to the upstream.
\ No newline at end of file
diff --git a/conformance/reports/v1.2.1/airlock-microgateway/experimental-4.5.0-default-report.yaml b/conformance/reports/v1.2.1/airlock-microgateway/experimental-4.5.0-default-report.yaml
new file mode 100644
index 00000000..5831e341
--- /dev/null
+++ b/conformance/reports/v1.2.1/airlock-microgateway/experimental-4.5.0-default-report.yaml
@@ -0,0 +1,53 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-02-03T15:48:50Z"
+gatewayAPIChannel: experimental
+gatewayAPIVersion: v1.2.1
+implementation:
+  contact:
+    - https://www.airlock.com/en/contact
+  organization: airlock
+  project: microgateway
+  url: https://github.com/airlock/microgateway
+  version: 4.5.0
+kind: ConformanceReport
+mode: default
+profiles:
+  - core:
+      result: success
+      statistics:
+        Failed: 0
+        Passed: 33
+        Skipped: 0
+    extended:
+      result: success
+      statistics:
+        Failed: 0
+        Passed: 16
+        Skipped: 0
+      supportedFeatures:
+        - GatewayInfrastructurePropagation
+        - GatewayPort8080
+        - HTTPRouteBackendProtocolH2C
+        - HTTPRouteBackendProtocolWebSocket
+        - HTTPRouteBackendTimeout
+        - HTTPRouteDestinationPortMatching
+        - HTTPRouteHostRewrite
+        - HTTPRouteMethodMatching
+        - HTTPRouteParentRefPort
+        - HTTPRoutePathRewrite
+        - HTTPRoutePortRedirect
+        - HTTPRouteQueryParamMatching
+        - HTTPRouteRequestTimeout
+        - HTTPRouteSchemeRedirect
+      unsupportedFeatures:
+        - GatewayHTTPListenerIsolation
+        - GatewayStaticAddresses
+        - HTTPRouteBackendRequestHeaderModification
+        - HTTPRoutePathRedirect
+        - HTTPRouteRequestMirror
+        - HTTPRouteRequestMultipleMirrors
+        - HTTPRouteResponseHeaderModification
+    name: GATEWAY-HTTP
+    summary: Core tests succeeded. Extended tests succeeded.
+succeededProvisionalTests:
+  - GatewayInfrastructure
diff --git a/conformance/reports/v1.2.1/airlock-microgateway/standard-4.6.0-default-report.yaml b/conformance/reports/v1.2.1/airlock-microgateway/standard-4.6.0-default-report.yaml
new file mode 100644
index 00000000..0589d7e3
--- /dev/null
+++ b/conformance/reports/v1.2.1/airlock-microgateway/standard-4.6.0-default-report.yaml
@@ -0,0 +1,53 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-05-19T14:36:18Z"
+gatewayAPIChannel: standard
+gatewayAPIVersion: v1.2.1
+implementation:
+  contact:
+  - https://www.airlock.com/en/contact
+  organization: airlock
+  project: microgateway
+  url: https://github.com/airlock/microgateway
+  version: 4.6.0
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 18
+      Skipped: 0
+    supportedFeatures:
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayStaticAddresses
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
+succeededProvisionalTests:
+- GatewayInfrastructure
diff --git a/conformance/reports/v1.2.1/envoy-gateway/README.md b/conformance/reports/v1.2.1/envoy-gateway/README.md
index 89dbb8cb..7045058d 100644
--- a/conformance/reports/v1.2.1/envoy-gateway/README.md
+++ b/conformance/reports/v1.2.1/envoy-gateway/README.md
@@ -4,7 +4,7 @@
 
 |API channel|Implementation version|Mode|Report|
 |-----------|----------------------|----|------|
-| experimental |[v1.3.1](https://github.com/envoyproxy/gateway/releases/tag/v1.3.1)| default |[link](./experimental-v1.2.1-default-report.yaml)|
+| experimental |[v1.3.1](https://github.com/envoyproxy/gateway/releases/tag/v1.3.1)| default |[link](./experimental-v1.3.1-default-report.yaml)|
 
 ## Reproduce
 
diff --git a/conformance/reports/v1.2.1/kgateway/README.md b/conformance/reports/v1.2.1/kgateway/README.md
new file mode 100644
index 00000000..083e3086
--- /dev/null
+++ b/conformance/reports/v1.2.1/kgateway/README.md
@@ -0,0 +1,50 @@
+# kgateway
+
+## Table of contents
+
+| API channel  | Implementation version                                                        | Mode    | Report                                                    |
+|--------------|-------------------------------------------------------------------------------|---------|-----------------------------------------------------------|
+| experimental | [v2.0.0](https://github.com/kgateway-dev/kgateway/releases/tag/v2.0.0) | default | [Link](./v2.0.0-report.yaml) |
+
+## Reproduce
+
+> Note: [this is a mirror of the steps outlined in the conformance GHA workflow](https://github.com/kgateway-dev/kgateway/blob/v2.0.0/.github/actions/kube-gateway-api-conformance-tests/action.yaml).
+
+### Prerequisites
+
+In order to properly run the conformance tests, you need to have [KinD](https://github.com/kubernetes-sigs/kind)
+and [Helm](https://github.com/helm/helm) available in your environment.
+To run the conformance tests suite we will first create a KinD cluster, use Helm to deploy kgateway and finally
+run the conformance tests.
+
+### Steps
+
+1. Clone the kgateway repository and checkout the release:
+
+   ```sh
+   git clone https://github.com/kgateway-dev/kgateway.git
+   cd kgateway
+   export VERSION="v2.0.0"
+   git checkout tags/$VERSION -b $VERSION
+   ```
+
+2. Create the KinD cluster with [MetalLB](https://metallb.io/):
+
+   ```sh
+   SKIP_DOCKER=true CONFORMANCE=true ci/kind/setup-kind.sh
+   ```
+
+3. Deploy kgateway Helm charts:
+   ```sh
+   helm upgrade -i --create-namespace --namespace kgateway-system --version $VERSION kgateway-crds oci://cr.kgateway.dev/kgateway-dev/charts/kgateway-crds
+
+    helm upgrade -i --namespace kgateway-system --version $VERSION kgateway oci://cr.kgateway.dev/kgateway-dev/charts/kgateway
+   ```
+
+4. Run the conformance tests
+
+   ```sh
+   make conformance
+   ```
+
+5. View and verify the conformance report: `cat _test/conformance/$VERSION-report.yaml`
\ No newline at end of file
diff --git a/conformance/reports/v1.2.1/kgateway/v2.0.0-report.yaml b/conformance/reports/v1.2.1/kgateway/v2.0.0-report.yaml
new file mode 100644
index 00000000..0f9c3087
--- /dev/null
+++ b/conformance/reports/v1.2.1/kgateway/v2.0.0-report.yaml
@@ -0,0 +1,51 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-04-02T15:58:12Z"
+gatewayAPIChannel: experimental
+gatewayAPIVersion: v1.2.1
+implementation:
+  contact:
+  - github.com/kgateway-dev/kgateway/issues/new/choose
+  organization: kgateway-dev
+  project: kgateway
+  url: github.com/kgateway-dev/kgateway
+  version: v2.0.0
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 10
+      Skipped: 0
+    supportedFeatures:
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestMirror
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteParentRefPort
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestTimeout
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
diff --git a/conformance/reports/v1.2.1/kubvernor/README.md b/conformance/reports/v1.2.1/kubvernor/README.md
new file mode 100644
index 00000000..56b93da8
--- /dev/null
+++ b/conformance/reports/v1.2.1/kubvernor/README.md
@@ -0,0 +1,51 @@
+# Kubvernor
+
+## Table of Contents
+
+| API channel   | Implementation version                                             | Mode          | Report                                             |
+|:-------------:|:------------------------------------------------------------------:|:-------------:|:--------------------------------------------------:|
+|standard       |[v0.1.0](https://github.com/kubvernor/kubvernor/releases/tag/0.1.0) |default        |[Report](./kubvernor-conformance-output-1.2.1.yaml) |
+
+
+
+
+## Reproduce
+
+0. Install Docker and Kind
+
+1. Clone the Kubvernor GitHub repository
+
+   ```bash
+   git clone https://github.com/kubvernor/kubvernor && cd kubvernor
+   ```
+
+2. Deploy your cluster
+
+   ```bash
+   curl --proto '=https' --tlsv1.2 -sSf https://github.com/kubernetes-sigs/gateway-api/blob/main/hack/implementations/common/create-cluster.sh | sh
+
+   ```
+
+3. Compile and run Kubvernor
+   
+   ```bash
+   # Install Rust
+   curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+   
+   # Start Kubvernor 
+   export CONTROL_PLANE_IP=<IP>
+   ./run_kubvernor.sh 
+   
+   ```
+
+4. Run conformance tests
+
+   ```bash
+   ./run_conformance_tests.sh
+   ```
+   
+5. Check the results
+
+   ```bash
+   cat conformance/kubvernor-conformance-output-1.2.1.yaml
+   ```
diff --git a/conformance/reports/v1.2.1/kubvernor/kubvernor-conformance-output-1.2.1.yaml b/conformance/reports/v1.2.1/kubvernor/kubvernor-conformance-output-1.2.1.yaml
new file mode 100644
index 00000000..c5002fbe
--- /dev/null
+++ b/conformance/reports/v1.2.1/kubvernor/kubvernor-conformance-output-1.2.1.yaml
@@ -0,0 +1,30 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-05-24T16:25:25+01:00"
+gatewayAPIChannel: standard
+gatewayAPIVersion: v1.2.1
+implementation:
+  contact:
+    - nowakd@gmail.com
+  organization: kubvernor
+  project: kubvernor
+  url: https://github.com/kubvernor/kubvernor
+  version: 0.1.0
+kind: ConformanceReport
+mode: default
+profiles:
+  - core:
+      result: success
+      statistics:
+        Failed: 0
+        Passed: 12
+        Skipped: 0
+    name: GATEWAY-GRPC
+    summary: Core tests succeeded.
+  - core:
+      result: success
+      statistics:
+        Failed: 0
+        Passed: 33
+        Skipped: 0
+    name: GATEWAY-HTTP
+    summary: Core tests succeeded.
diff --git a/conformance/reports/v1.2.1/projectcontour-contour/README.md b/conformance/reports/v1.2.1/projectcontour-contour/README.md
new file mode 100644
index 00000000..2023c68d
--- /dev/null
+++ b/conformance/reports/v1.2.1/projectcontour-contour/README.md
@@ -0,0 +1,48 @@
+# Projectcontour Contour
+
+## Table of Contents
+
+|API channel|Implementation version|Mode|Report|
+|-----------|----------------------|----|------|
+|experimental|[v1.31.0](https://github.com/projectcontour/contour/releases/tag/v1.31.0)|x|[v1.31.0 report](./experimental-v1.31.0-default-report.yaml)|
+
+## Reproduce
+
+### Prerequisites
+
+Follow the Contour [contribution guide][0] documentation for setting up your local development environment, which includes ensuring `kubectl`, `docker`, `kinD`, and other tools are installed.
+
+### Steps
+
+1. Clone the Contour GitHub repository
+
+   ```bash
+   git clone https://github.com/projectcontour/contour && cd contour
+   ```
+
+2. Check out the desired version
+
+   ```bash
+   export VERSION=v<x.y.z>
+   git checkout $VERSION
+   ```
+
+3. Run the conformance tests
+
+   ```bash
+   export CONTOUR_E2E_IMAGE="ghcr.io/projectcontour/contour:$VERSION"
+   export GENERATE_GATEWAY_CONFORMANCE_REPORT="true"
+   make setup-kind-cluster run-gateway-conformance cleanup-kind
+   ```
+
+   Note: you can omit the `cleanup-kind` target if you would prefer to keep the `kinD` cluster.
+
+4. Check the produced report
+
+   ```bash
+   cat gateway-conformance-report/projectcontour-contour-*.yaml
+   ```
+
+   Note: you can set `GATEWAY_CONFORMANCE_REPORT_OUTDIR` before running the tests to customize the output location.
+
+[0]: https://github.com/projectcontour/contour/blob/main/CONTRIBUTING.md#building-from-source
diff --git a/conformance/reports/v1.2.1/projectcontour-contour/experimental-v1.31.0-default-report.yaml b/conformance/reports/v1.2.1/projectcontour-contour/experimental-v1.31.0-default-report.yaml
new file mode 100644
index 00000000..b3c0be99
--- /dev/null
+++ b/conformance/reports/v1.2.1/projectcontour-contour/experimental-v1.31.0-default-report.yaml
@@ -0,0 +1,101 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-05-06T14:44:31-04:00"
+gatewayAPIChannel: experimental
+gatewayAPIVersion: v1.2.1
+implementation:
+  contact:
+  - '@projectcontour/maintainers'
+  organization: projectcontour
+  project: contour
+  url: https://projectcontour.io/
+  version: v1.31.0
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: partial
+    skippedTests:
+    - HTTPRouteHTTPSListener
+    statistics:
+      Failed: 0
+      Passed: 32
+      Skipped: 1
+  extended:
+    result: partial
+    skippedTests:
+    - GatewayStaticAddresses
+    - HTTPRouteInvalidParentRefSectionNameNotMatchingPort
+    - HTTPRouteRedirectPortAndScheme
+    statistics:
+      Failed: 0
+      Passed: 20
+      Skipped: 3
+    supportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+  name: GATEWAY-HTTP
+  summary: Core tests partially succeeded with 1 test skips. Extended tests partially
+    succeeded with 3 test skips.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 11
+      Skipped: 0
+  extended:
+    result: partial
+    skippedTests:
+    - GatewayStaticAddresses
+    statistics:
+      Failed: 0
+      Passed: 1
+      Skipped: 1
+    supportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+  name: GATEWAY-TLS
+  summary: Core tests succeeded. Extended tests partially succeeded with 1 test skips.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 12
+      Skipped: 0
+  extended:
+    result: partial
+    skippedTests:
+    - GatewayStaticAddresses
+    statistics:
+      Failed: 0
+      Passed: 1
+      Skipped: 1
+    supportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+  name: GATEWAY-GRPC
+  summary: Core tests succeeded. Extended tests partially succeeded with 1 test skips.
+succeededProvisionalTests:
+- GatewayInfrastructure
diff --git a/conformance/reports/v1.3.0/airlock-microgateway/README.md b/conformance/reports/v1.3.0/airlock-microgateway/README.md
new file mode 100644
index 00000000..bae978e3
--- /dev/null
+++ b/conformance/reports/v1.3.0/airlock-microgateway/README.md
@@ -0,0 +1,20 @@
+# Airlock Microgateway
+
+## Table of contents
+
+| API channel  | Implementation version                                               | Mode    | Report                                           |
+|--------------|----------------------------------------------------------------------|---------|--------------------------------------------------|
+| experimental | [v4.6.0](https://github.com/airlock/microgateway/releases/tag/4.6.0) | default | [link](./experimental-4.6.0-default-report.yaml) |
+
+## Reproduce
+
+The Airlock Microgateway conformance report can be reproduced by following the steps in the [Gateway API conformance guide](https://github.com/airlock/microgateway/tree/main/examples/gateway-api/conformance/conformance.md) on GitHub.
+
+> [!NOTE]
+> The `HTTPRouteWeight` test fires 10 concurrent request to 3 backends totaling in 500 requests to assert a distribution that matches the configured weight.
+> Please be aware that this test exceeds the [5 req/sec rate-limit](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html) enforced in the <!-- markdown-link-check-disable --> [community edition](https://www.airlock.com/en/secure-access-hub/components/microgateway/community-edition) <!-- markdown-link-check-enable -->, causing the test to fail.
+> To successfully pass this test a <!-- markdown-link-check-disable --> [premium license](https://www.airlock.com/en/secure-access-hub/components/microgateway/premium-edition)  <!-- markdown-link-check-enable --> is required.
+> 
+> The Airlock Microgateway drops all request headers except for a well-known built-in standard and tracing headers list (e.g., Accept, Cookie, X-CSRF-TOKEN) to reduce the attack surface.
+> Therefore, to run the conformance tests, a `ContentSecurityPolicy` with a `HeaderRewrites` (see [`conformance-report.yaml`](https://github.com/airlock/microgateway/tree/main/examples/gateway-api/conformance/manifests/conformance-report.yaml)) is required to disable request header filtering for all `HTTPRoute` tests relying on the `MakeRequestAndExpectEventuallyConsistentResponse` assertion.
+> Regardless of whether request header filtering is enabled or disabled, header-based routing works as specified in the Gateway API, as the headers are only filtered before the request is forwarded to the upstream.
\ No newline at end of file
diff --git a/conformance/reports/v1.3.0/airlock-microgateway/experimental-4.6.0-default-report.yaml b/conformance/reports/v1.3.0/airlock-microgateway/experimental-4.6.0-default-report.yaml
new file mode 100644
index 00000000..e0548256
--- /dev/null
+++ b/conformance/reports/v1.3.0/airlock-microgateway/experimental-4.6.0-default-report.yaml
@@ -0,0 +1,55 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-05-19T14:29:59Z"
+gatewayAPIChannel: experimental
+gatewayAPIVersion: v1.3.0
+implementation:
+  contact:
+  - https://www.airlock.com/en/contact
+  organization: airlock
+  project: microgateway
+  url: https://github.com/airlock/microgateway
+  version: 4.6.0
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 18
+      Skipped: 0
+    supportedFeatures:
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayHTTPListenerIsolation
+    - GatewayStaticAddresses
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestPercentageMirror
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
+succeededProvisionalTests:
+- GatewayInfrastructure
diff --git a/conformance/reports/v1.3.0/buoyant-enterprise-for-linkerd/README.md b/conformance/reports/v1.3.0/buoyant-enterprise-for-linkerd/README.md
new file mode 100644
index 00000000..e598c55f
--- /dev/null
+++ b/conformance/reports/v1.3.0/buoyant-enterprise-for-linkerd/README.md
@@ -0,0 +1,32 @@
+# Buoyant Enterprise for Linkerd
+
+## Table of Contents
+
+| API channel  | Implementation version                    | Mode    | Report                                                 |
+|--------------|-------------------------------------------|---------|--------------------------------------------------------|
+| standard     | [enterprise-2.18](https://docs.buoyant.io/buoyant-enterprise-linkerd/latest/overview//) | default | [enterprise-2.18 report](./standard-2.18-default-report.yaml) |
+
+## Notes
+
+This report uses the v1.3.0 Gateway API CRDs, but was run using the tests on
+the `main` branch at commit `6cd1558a9e`, in order to take advantage more
+effective tests for the `MESH` conformance profile that landed after v1.3.0
+was cut.
+
+## Reproduce
+
+To reproduce a Buoyant Enterprise for Linkerd conformance test report:
+
+0. `cd` to the top level of this repository.
+
+1. Create an empty cluster.
+
+2. Run `bash conformance/reports/v1.3.0/buoyant-enterprise-for-linkerd/run-conformance.sh`.
+
+   You can set `LINKERD_VERSION`, `GATEWAY_API_CHANNEL`, and
+   `GATEWAY_API_VERSION` if you want to try different versions of things.
+   (Note that if you set `GATEWAY_API_VERSION`, you'll need to be on a
+   matching Gateway API branch.)
+
+3. The conformance report will be written to the
+   `conformance/reports/v1.3.0/buoyant-enterprise-for-linkerd/` directory.
diff --git a/conformance/reports/v1.3.0/buoyant-enterprise-for-linkerd/run-conformance.sh b/conformance/reports/v1.3.0/buoyant-enterprise-for-linkerd/run-conformance.sh
new file mode 100644
index 00000000..fc9efcd4
--- /dev/null
+++ b/conformance/reports/v1.3.0/buoyant-enterprise-for-linkerd/run-conformance.sh
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+# Copyright 2025 The Kubernetes Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Set these as needed.
+LINKERD_VERSION=${LINKERD_VERSION:-enterprise-2.18}
+GATEWAY_API_CHANNEL=${GATEWAY_API_CHANNEL:-standard}
+GATEWAY_API_VERSION=${GATEWAY_API_VERSION:-v1.3.0}
+
+UNSUPPORTED_FEATURES="MeshHTTPRouteRedirectPath,MeshHTTPRouteRewritePath"
+
+CONFORMANCE_PRODUCT=buoyant-enterprise-for-linkerd
+CONFORMANCE_VERSION=$(echo $LINKERD_VERSION | cut -d- -f2-)
+GATEWAY_API_BASE_URL=https://github.com/kubernetes-sigs/gateway-api/releases/download
+
+echo "Using Buoyant Enterprise for Linkerd version $LINKERD_VERSION"
+echo "Using Gateway API $GATEWAY_API_VERSION $GATEWAY_API_CHANNEL"
+
+# Install the Linkerd CLI.
+curl --proto '=https' --tlsv1.2 -sSfL https://enterprise.buoyant.io/install \
+  | env LINKERD2_VERSION=${LINKERD_EDGE_VERSION} sh
+
+export PATH=$HOME/.linkerd2/bin:$PATH
+
+# Install the Gateway API CRDs.
+
+kubectl apply -f ${GATEWAY_API_BASE_URL}/${GATEWAY_API_VERSION}/${GATEWAY_API_CHANNEL}-install.yaml
+
+# Install the Linkerd control plane.
+linkerd install --crds | kubectl apply -f -
+linkerd install | kubectl apply -f -
+linkerd check
+
+# Run the conformance tests.
+
+REPORT_NAME=${GATEWAY_API_CHANNEL}-${CONFORMANCE_VERSION}-default-report.yaml
+REPORT_PATH=reports/${GATEWAY_API_VERSION}/${CONFORMANCE_PRODUCT}/${REPORT_NAME}
+
+go test \
+    -p 4 \
+    ./conformance \
+    -run TestConformance \
+    -args \
+        --organization Buoyant \
+        --project "Buoyant Enterprise for Linkerd" \
+        --url https://buoyant.io/ \
+        --version ${LINKERD_VERSION} \
+        --contact "gateway-api@buoyant.io" \
+        --report-output ${REPORT_PATH} \
+        --conformance-profiles=MESH-HTTP,MESH-GRPC \
+        --all-features \
+        --exempt-features=Gateway,ReferenceGrant,${UNSUPPORTED_FEATURES} \
+        --namespace-annotations=linkerd.io/inject=enabled
diff --git a/conformance/reports/v1.3.0/buoyant-enterprise-for-linkerd/standard-2.18-default-report.yaml b/conformance/reports/v1.3.0/buoyant-enterprise-for-linkerd/standard-2.18-default-report.yaml
new file mode 100644
index 00000000..90e4e77a
--- /dev/null
+++ b/conformance/reports/v1.3.0/buoyant-enterprise-for-linkerd/standard-2.18-default-report.yaml
@@ -0,0 +1,64 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-06-11T14:31:02-04:00"
+gatewayAPIChannel: standard
+gatewayAPIVersion: v1.3.0
+implementation:
+  contact:
+  - gateway-api@buoyant.io
+  organization: Buoyant
+  project: Buoyant Enterprise for Linkerd
+  url: https://buoyant.io/
+  version: enterprise-2.18
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 1
+      Skipped: 0
+  name: MESH-GRPC
+  summary: Core tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 7
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 8
+      Skipped: 0
+    supportedFeatures:
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestPercentageMirror
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    - MeshClusterIPMatching
+    - MeshConsumerRoute
+    - MeshHTTPRouteBackendRequestHeaderModification
+    - MeshHTTPRouteQueryParamMatching
+    - MeshHTTPRouteRedirectPort
+    - MeshHTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - MeshHTTPRouteRedirectPath
+    - MeshHTTPRouteRewritePath
+  name: MESH-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
diff --git a/conformance/reports/v1.3.0/cilium-cilium/README.md b/conformance/reports/v1.3.0/cilium-cilium/README.md
new file mode 100644
index 00000000..81b4fe17
--- /dev/null
+++ b/conformance/reports/v1.3.0/cilium-cilium/README.md
@@ -0,0 +1,12 @@
+# Cilium
+
+## Table of Contents
+
+| API channel  | Implementation version                    | Mode    | Report                                                 |
+|--------------|-------------------------------------------|---------|--------------------------------------------------------|
+| experimental | [main](https://github.com/cilium/cilium/) | default | [main report](./experimental-main-default-report.yaml) |
+
+## Reproduce
+
+Cilium conformance tests can be reproduced by follow the steps in CI `.github/workflows/conformance-gateway-api.yaml` 
+from within the [Cilium repo](https://github.com/cilium/cilium).
diff --git a/conformance/reports/v1.3.0/cilium-cilium/experimental-main-default-report.yaml b/conformance/reports/v1.3.0/cilium-cilium/experimental-main-default-report.yaml
new file mode 100644
index 00000000..77844490
--- /dev/null
+++ b/conformance/reports/v1.3.0/cilium-cilium/experimental-main-default-report.yaml
@@ -0,0 +1,140 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-05-19T11:21:16Z"
+gatewayAPIChannel: experimental
+gatewayAPIVersion: v1.3.0
+implementation:
+  contact:
+  - https://github.com/cilium/community/blob/main/roles/Maintainers.md
+  organization: cilium
+  project: cilium
+  url: github.com/cilium/cilium
+  version: main
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 12
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 2
+      Skipped: 0
+    supportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+  name: GATEWAY-GRPC
+  summary: Core tests succeeded. Extended tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 23
+      Skipped: 0
+    supportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestPercentageMirror
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - HTTPRouteParentRefPort
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 11
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 2
+      Skipped: 0
+    supportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+  name: GATEWAY-TLS
+  summary: Core tests succeeded. Extended tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 1
+      Skipped: 0
+  name: MESH-GRPC
+  summary: Core tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 2
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 2
+      Skipped: 0
+    supportedFeatures:
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestPercentageMirror
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    - MeshClusterIPMatching
+    unsupportedFeatures:
+    - HTTPRouteParentRefPort
+    - MeshConsumerRoute
+  name: MESH-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
+succeededProvisionalTests:
+- GatewayInfrastructure
+- HTTPRouteRequestPercentageMirror
diff --git a/conformance/reports/v1.3.0/envoy-gateway/README.md b/conformance/reports/v1.3.0/envoy-gateway/README.md
new file mode 100644
index 00000000..d48c5c9a
--- /dev/null
+++ b/conformance/reports/v1.3.0/envoy-gateway/README.md
@@ -0,0 +1,34 @@
+# Envoy Gateway
+
+## Table of Contents
+
+|API channel|Implementation version|Mode|Report|
+|-----------|----------------------|----|------|
+| experimental |[v1.4.0](https://github.com/envoyproxy/gateway/releases/tag/v1.4.0)| default |[link](./experimental-v1.4.0-default-report.yaml)|
+
+## Reproduce
+
+1. Clone the Envoy Gateway GitHub repository
+
+   ```bash
+   git clone https://github.com/envoyproxy/gateway.git && cd gateway
+   ```
+
+2. Check out the desired version
+
+   ```bash
+   export VERSION=v<x.y.z>
+   git checkout $VERSION
+   ```
+
+3. Run the conformance tests
+
+   ```bash
+   CONFORMANCE_REPORT_PATH=conformance-report-k8s.yaml make experimental-conformance
+   ```
+
+4. Check the produced report
+
+   ```bash
+   cat ./conformance-report-k8s.yaml
+   ```
diff --git a/conformance/reports/v1.3.0/envoy-gateway/experimental-v1.4.0-default-report.yaml b/conformance/reports/v1.3.0/envoy-gateway/experimental-v1.4.0-default-report.yaml
new file mode 100644
index 00000000..4504a506
--- /dev/null
+++ b/conformance/reports/v1.3.0/envoy-gateway/experimental-v1.4.0-default-report.yaml
@@ -0,0 +1,71 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-05-14T03:12:24Z"
+gatewayAPIChannel: experimental
+gatewayAPIVersion: v1.3.0
+implementation:
+  contact:
+  - https://github.com/envoyproxy/gateway/blob/main/GOVERNANCE.md
+  organization: envoyproxy
+  project: envoy-gateway
+  url: https://github.com/envoyproxy/gateway
+  version: latest
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 12
+      Skipped: 0
+  name: GATEWAY-GRPC
+  summary: Core tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 23
+      Skipped: 0
+    supportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayHTTPListenerIsolation
+    - GatewayPort8080
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestPercentageMirror
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - GatewayInfrastructurePropagation
+    - GatewayStaticAddresses
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 11
+      Skipped: 0
+  name: GATEWAY-TLS
+  summary: Core tests succeeded.
+succeededProvisionalTests:
+- HTTPRouteRequestPercentageMirror
diff --git a/conformance/reports/v1.3.0/istio-istio/README.md b/conformance/reports/v1.3.0/istio-istio/README.md
new file mode 100644
index 00000000..e188b4f7
--- /dev/null
+++ b/conformance/reports/v1.3.0/istio-istio/README.md
@@ -0,0 +1,11 @@
+# Istio
+
+## Table of Contents
+
+|API channel|Implementation version|Mode|Report|
+|-----------|----------------------|----|------|
+|x|[1.26.1](https://github.com/istio/istio/releases/tag/1.26.1)|x|[1.26.1 report](./experimental-1.26.1-default-report.yaml)|
+
+## Reproduce
+
+Istio conformance tests can be reproduced by running `prow/integ-suite-kind.sh test.integration.pilot.kube` from within the [Istio repo](https://github.com/istio/istio).
diff --git a/conformance/reports/v1.3.0/istio-istio/experimental-1.26.1-default-report.yaml b/conformance/reports/v1.3.0/istio-istio/experimental-1.26.1-default-report.yaml
new file mode 100644
index 00000000..e55868fe
--- /dev/null
+++ b/conformance/reports/v1.3.0/istio-istio/experimental-1.26.1-default-report.yaml
@@ -0,0 +1,131 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-05-27T17:51:14Z"
+gatewayAPIChannel: experimental
+gatewayAPIVersion: v1.3.0
+implementation:
+  contact:
+  - '@istio/maintainers'
+  organization: istio
+  project: istio
+  url: https://istio.io/
+  version: "1.26.1"
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 2
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 3
+      Skipped: 0
+    supportedFeatures:
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestPercentageMirror
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    - MeshConsumerRoute
+    unsupportedFeatures:
+    - MeshClusterIPMatching
+  name: MESH-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 12
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 2
+      Skipped: 0
+    supportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+  name: GATEWAY-GRPC
+  summary: Core tests succeeded. Extended tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 25
+      Skipped: 0
+    supportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestPercentageMirror
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 11
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 2
+      Skipped: 0
+    supportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+  name: GATEWAY-TLS
+  summary: Core tests succeeded. Extended tests succeeded.
+succeededProvisionalTests:
+- GatewayInfrastructure
+- HTTPRouteRequestPercentageMirror
diff --git a/conformance/reports/v1.3.0/kgateway/README.md b/conformance/reports/v1.3.0/kgateway/README.md
new file mode 100644
index 00000000..ddd082e5
--- /dev/null
+++ b/conformance/reports/v1.3.0/kgateway/README.md
@@ -0,0 +1,40 @@
+# kgateway
+
+## Table of contents
+
+| API channel  | Implementation version                                                        | Mode    | Report                                                    |
+|--------------|-------------------------------------------------------------------------------|---------|-----------------------------------------------------------|
+| experimental | [main](https://github.com/kgateway-dev/kgateway) | default | [Link](./v2.1.0-main-report.yaml) |
+
+## Reproduce
+
+### Steps
+
+1. Clone the kgateway repository:
+
+   ```sh
+   git clone https://github.com/kgateway-dev/kgateway.git && cd kgateway
+   ```
+
+2. Override the version Makefile variable:
+
+   > Note: The main branch defaults to version `1.0.1-dev` for Helm chart validation purposes. For conformance testing,
+   > we need to override this with a more descriptive version that reflects the main branch:
+
+   ```sh
+   export VERSION="v2.1.0-main"
+   ```
+
+3. Bootstrap a KinD cluster:
+
+   ```sh
+   make run
+   ```
+
+4. Run the conformance tests:
+
+   ```sh
+   make conformance
+   ```
+
+5. View and verify the conformance report: `cat _test/conformance/v2.1.0-main-report.yaml`
diff --git a/conformance/reports/v1.3.0/kgateway/v2.1.0-main-report.yaml b/conformance/reports/v1.3.0/kgateway/v2.1.0-main-report.yaml
new file mode 100644
index 00000000..67249032
--- /dev/null
+++ b/conformance/reports/v1.3.0/kgateway/v2.1.0-main-report.yaml
@@ -0,0 +1,53 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-06-18T15:07:19-04:00"
+gatewayAPIChannel: experimental
+gatewayAPIVersion: v1.3.0
+implementation:
+  contact:
+  - github.com/kgateway-dev/kgateway/issues/new/choose
+  organization: kgateway-dev
+  project: kgateway
+  url: github.com/kgateway-dev/kgateway
+  version: v2.1.0-main
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 13
+      Skipped: 0
+    supportedFeatures:
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendTimeout
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteParentRefPort
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestPercentageMirror
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
diff --git a/conformance/reports/v1.3.0/linkerd-linkerd/README.md b/conformance/reports/v1.3.0/linkerd-linkerd/README.md
new file mode 100644
index 00000000..19a73bc7
--- /dev/null
+++ b/conformance/reports/v1.3.0/linkerd-linkerd/README.md
@@ -0,0 +1,65 @@
+# Linkerd
+
+## Table of Contents
+
+| API channel  | Implementation version                    | Mode    | Report                                                 |
+|--------------|-------------------------------------------|---------|--------------------------------------------------------|
+| standard     | [version-2.18](https://github.com/linkerd/linkerd2/releases/tag/version-2.18/) | default | [version-2.18 report](./standard-2.18-default-report.yaml) |
+
+## Notes
+
+This report uses the v1.3.0 Gateway API CRDs, but was run using the tests on
+the `main` branch at commit `6cd1558a9e`, in order to take advantage of more
+effective tests for the `MESH` conformance profile that landed after v1.3.0
+was cut.
+
+### Linkerd Versioning
+
+The Linkerd project publishes and announces _versions_ that correspond to
+specific project milestones and sets of new features. This report is for
+Linkerd 2.18.
+
+Linkerd versions are available in different types of _release artifacts_:
+
+- _Edge releases_ are published on a weekly or near-weekly basis by the
+  Linkerd open-source project. Their names are `edge-y.m.n`, where `y` is the
+  two-digit year, `m` is the numeric month, and `n` is the number of the edge
+  release in that month (e.g. `edge-25.5.1` is the first edge release in May
+  of 2025).
+
+  Each major version of Linkerd has a corresponding edge release, indicated by
+  a `version-2.X` tag. For example, Linkerd 2.18 corresponds to `edge-25.4.4`,
+  and therefore the `version-2.18` tag and the `edge-25.4.4` tag are on the
+  same commit.
+
+- _Stable releases_ of Linkerd follow semantic versioning, and are published
+  by the vendor community around Linkerd.
+
+For more information on Linkerd versioning, see the Linkerd [Releases and
+Versions] documentation.
+
+Since Gateway API conformance tests require semantic versioning for the
+implementation version, the Linkerd project reports conformance using the
+`version` tags. However, the `run_conformance.sh` script referenced below
+installs the corresponding `edge` tag, because the Linkerd CLI is actually
+published using the `edge` tag.
+
+[Releases and Versions]: https://linkerd.io/releases/
+
+## Reproduce
+
+To reproduce a Linkerd conformance test report:
+
+0. `cd` to the top level of this repository.
+
+1. Create an empty cluster.
+
+2. Run `bash conformance/reports/v1.3.0/linkerd-linkerd/run-conformance.sh`.
+
+   You can set `LINKERD_VERSION`, `LINKERD_EDGE_VERSION`,
+   `GATEWAY_API_CHANNEL`, and `GATEWAY_API_VERSION` if you want to try
+   different versions of things. (Note that if you set `GATEWAY_API_VERSION`,
+   you'll need to be on a matching Gateway API branch.)
+
+3. The conformance report will be written to the
+   `conformance/reports/v1.3.0/linkerd-linkerd/` directory.
diff --git a/conformance/reports/v1.3.0/linkerd-linkerd/run-conformance.sh b/conformance/reports/v1.3.0/linkerd-linkerd/run-conformance.sh
new file mode 100644
index 00000000..93d0b210
--- /dev/null
+++ b/conformance/reports/v1.3.0/linkerd-linkerd/run-conformance.sh
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+# Copyright 2025 The Kubernetes Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Set these as needed.
+LINKERD_VERSION=${LINKERD_VERSION:-version-2.18}
+LINKERD_EDGE_VERSION=${LINKERD_EDGE_VERSION:-edge-25.4.4}
+GATEWAY_API_CHANNEL=${GATEWAY_API_CHANNEL:-standard}
+GATEWAY_API_VERSION=${GATEWAY_API_VERSION:-v1.3.0}
+
+UNSUPPORTED_FEATURES="MeshHTTPRouteRedirectPath,MeshHTTPRouteRewritePath"
+
+CONFORMANCE_PRODUCT=linkerd-linkerd
+CONFORMANCE_VERSION=$(echo $LINKERD_VERSION | cut -d- -f2-)
+GATEWAY_API_BASE_URL=https://github.com/kubernetes-sigs/gateway-api/releases/download
+
+echo "Using Linkerd version $LINKERD_VERSION (AKA $LINKERD_EDGE_VERSION)"
+echo "Using Gateway API $GATEWAY_API_VERSION $GATEWAY_API_CHANNEL"
+
+# Install the Linkerd CLI.
+curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/install-edge \
+  | env LINKERD2_VERSION=${LINKERD_EDGE_VERSION} sh
+
+export PATH=$HOME/.linkerd2/bin:$PATH
+
+# Install the Gateway API CRDs.
+
+kubectl apply -f ${GATEWAY_API_BASE_URL}/${GATEWAY_API_VERSION}/${GATEWAY_API_CHANNEL}-install.yaml
+
+# Install the Linkerd control plane.
+linkerd install --crds | kubectl apply -f -
+linkerd install | kubectl apply -f -
+linkerd check
+
+# Run the conformance tests.
+
+REPORT_NAME=${GATEWAY_API_CHANNEL}-${CONFORMANCE_VERSION}-default-report.yaml
+REPORT_PATH=reports/${GATEWAY_API_VERSION}/${CONFORMANCE_PRODUCT}/${REPORT_NAME}
+
+go test \
+    -p 4 \
+    ./conformance \
+    -run TestConformance \
+    -args \
+        --organization Linkerd \
+        --project Linkerd \
+        --url https://github.com/linkerd/linkerd2 \
+        --version ${LINKERD_VERSION} \
+        --contact https://github.com/linkerd/linkerd2/blob/main/MAINTAINERS.md \
+        --report-output ${REPORT_PATH} \
+        --conformance-profiles=MESH-HTTP,MESH-GRPC \
+        --all-features \
+        --exempt-features=Gateway,ReferenceGrant,${UNSUPPORTED_FEATURES} \
+        --namespace-annotations=linkerd.io/inject=enabled
diff --git a/conformance/reports/v1.3.0/linkerd-linkerd/standard-2.18-default-report.yaml b/conformance/reports/v1.3.0/linkerd-linkerd/standard-2.18-default-report.yaml
new file mode 100644
index 00000000..54d05030
--- /dev/null
+++ b/conformance/reports/v1.3.0/linkerd-linkerd/standard-2.18-default-report.yaml
@@ -0,0 +1,64 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-06-11T14:21:05-04:00"
+gatewayAPIChannel: standard
+gatewayAPIVersion: v1.3.0
+implementation:
+  contact:
+  - https://github.com/linkerd/linkerd2/blob/main/MAINTAINERS.md
+  organization: Linkerd
+  project: Linkerd
+  url: https://github.com/linkerd/linkerd2
+  version: version-2.18
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 1
+      Skipped: 0
+  name: MESH-GRPC
+  summary: Core tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 7
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 8
+      Skipped: 0
+    supportedFeatures:
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestPercentageMirror
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    - MeshClusterIPMatching
+    - MeshConsumerRoute
+    - MeshHTTPRouteBackendRequestHeaderModification
+    - MeshHTTPRouteQueryParamMatching
+    - MeshHTTPRouteRedirectPort
+    - MeshHTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - MeshHTTPRouteRedirectPath
+    - MeshHTTPRouteRewritePath
+  name: MESH-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
diff --git a/conformance/reports/v1.3.0/nginx-nginx-gateway-fabric/README.md b/conformance/reports/v1.3.0/nginx-nginx-gateway-fabric/README.md
new file mode 100644
index 00000000..ae54954f
--- /dev/null
+++ b/conformance/reports/v1.3.0/nginx-nginx-gateway-fabric/README.md
@@ -0,0 +1,23 @@
+# Nginx NGINX Gateway Fabric
+
+## Table of Contents
+
+| API channel  | Implementation version                                                      | Mode    | Report                                           |
+|--------------|-----------------------------------------------------------------------------|---------|--------------------------------------------------|
+| experimental | [v2.0.0](https://github.com/nginx/nginx-gateway-fabric/releases/tag/v2.0.0) | default | [v2.0.0 report](./experimental-2.0.0-default-report.yaml) |
+
+## Reproduce
+
+To reproduce results, clone the NGF repository:
+
+```shell
+git clone https://github.com/nginx/nginx-gateway-fabric.git && cd nginx-gateway-fabric/tests
+```
+
+Follow the steps in the [NGINX Gateway Fabric Testing](https://github.com/nginx/nginx-gateway-fabric/blob/main/tests/README.md) document to run the conformance tests. If you are running tests on the `edge` version, then you don't need to build any images. Otherwise, you'll need to check out the specific release tag that you want to test, and then build and load the images onto your cluster, per the steps in the README.
+
+After running, see the conformance report:
+
+```shell
+cat conformance-profile.yaml
+```
diff --git a/conformance/reports/v1.3.0/nginx-nginx-gateway-fabric/experimental-2.0.0-default-report.yaml b/conformance/reports/v1.3.0/nginx-nginx-gateway-fabric/experimental-2.0.0-default-report.yaml
new file mode 100644
index 00000000..d6d0353a
--- /dev/null
+++ b/conformance/reports/v1.3.0/nginx-nginx-gateway-fabric/experimental-2.0.0-default-report.yaml
@@ -0,0 +1,97 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-06-05T16:32:34Z"
+gatewayAPIChannel: experimental
+gatewayAPIVersion: v1.3.0
+implementation:
+  contact:
+  - https://github.com/nginx/nginx-gateway-fabric/discussions/new/choose
+  organization: nginx
+  project: nginx-gateway-fabric
+  url: https://github.com/nginx/nginx-gateway-fabric
+  version: v2.0.0
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 12
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 1
+      Skipped: 0
+    supportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    unsupportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayStaticAddresses
+  name: GATEWAY-GRPC
+  summary: Core tests succeeded. Extended tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 14
+      Skipped: 0
+    supportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayStaticAddresses
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteParentRefPort
+    - HTTPRouteRequestPercentageMirror
+    - HTTPRouteRequestTimeout
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 11
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 1
+      Skipped: 0
+    supportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    unsupportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayStaticAddresses
+  name: GATEWAY-TLS
+  summary: Core tests succeeded. Extended tests succeeded.
+succeededProvisionalTests:
+- GatewayInfrastructure
diff --git a/conformance/utils/echo/parse.go b/conformance/utils/echo/parse.go
index a175df92..edabded6 100644
--- a/conformance/utils/echo/parse.go
+++ b/conformance/utils/echo/parse.go
@@ -184,9 +184,8 @@ func ParseResponse(output string) Response {
 		if len(sl) != 2 {
 			continue
 		}
-		out.RequestHeaders.Set(sl[0], sl[1])
+		out.RequestHeaders.Add(sl[0], sl[1])
 	}
-
 	matches = responseHeaderFieldRegex.FindAllStringSubmatch(output, -1)
 	for _, kv := range matches {
 		sl := strings.SplitN(kv[1], ":", 2)
diff --git a/conformance/utils/echo/pod.go b/conformance/utils/echo/pod.go
index f61d8437..0222ff12 100644
--- a/conformance/utils/echo/pod.go
+++ b/conformance/utils/echo/pod.go
@@ -58,7 +58,7 @@ func (m *MeshPod) MakeRequestAndExpectEventuallyConsistentResponse(t *testing.T,
 	t.Helper()
 
 	http.AwaitConvergence(t, timeoutConfig.RequiredConsecutiveSuccesses, timeoutConfig.MaxTimeToConsistency, func(elapsed time.Duration) bool {
-		req := makeRequest(t, exp.Request)
+		req := makeRequest(t, &exp)
 
 		resp, err := m.request(req)
 		if err != nil {
@@ -76,7 +76,19 @@ func (m *MeshPod) MakeRequestAndExpectEventuallyConsistentResponse(t *testing.T,
 	tlog.Logf(t, "Request passed")
 }
 
-func makeRequest(t *testing.T, r http.Request) []string {
+func makeRequest(t *testing.T, exp *http.ExpectedResponse) []string {
+	if exp.Request.Host == "" {
+		exp.Request.Host = "echo"
+	}
+	if exp.Request.Method == "" {
+		exp.Request.Method = "GET"
+	}
+
+	if exp.Response.StatusCode == 0 {
+		exp.Response.StatusCode = 200
+	}
+
+	r := exp.Request
 	protocol := strings.ToLower(r.Protocol)
 	if protocol == "" {
 		protocol = "http"
@@ -87,22 +99,56 @@ func makeRequest(t *testing.T, r http.Request) []string {
 		args = append(args, "--method="+r.Method)
 	}
 	for k, v := range r.Headers {
-		args = append(args, "-H", fmt.Sprintf("%v: %v", k, v))
+		args = append(args, "-H", fmt.Sprintf("%v:%v", k, v))
 	}
 	return args
 }
 
 func compareRequest(exp http.ExpectedResponse, resp Response) error {
-	want := exp.Response
-	if fmt.Sprint(want.StatusCode) != resp.Code {
-		return fmt.Errorf("wanted status code %v, got %v", want.StatusCode, resp.Code)
+	if exp.ExpectedRequest == nil {
+		exp.ExpectedRequest = &http.ExpectedRequest{}
+	}
+	wantReq := exp.ExpectedRequest
+	wantResp := exp.Response
+	if fmt.Sprint(wantResp.StatusCode) != resp.Code {
+		return fmt.Errorf("wanted status code %v, got %v", wantResp.StatusCode, resp.Code)
 	}
-	for _, name := range want.AbsentHeaders {
+	if wantReq.Headers != nil {
+		if resp.RequestHeaders == nil {
+			return fmt.Errorf("no headers captured, expected %v", len(wantReq.Headers))
+		}
+		for name, val := range resp.RequestHeaders {
+			resp.RequestHeaders[strings.ToLower(name)] = val
+		}
+		for name, expectedVal := range wantReq.Headers {
+			actualVal, ok := resp.RequestHeaders[strings.ToLower(name)]
+			if !ok {
+				return fmt.Errorf("expected %s header to be set, actual headers: %v", name, resp.RequestHeaders)
+			}
+			if strings.Join(actualVal, ",") != expectedVal {
+				return fmt.Errorf("expected %s header to be set to %s, got %s", name, expectedVal, strings.Join(actualVal, ","))
+			}
+		}
+	}
+	if len(wantReq.AbsentHeaders) > 0 {
+		for name, val := range resp.RequestHeaders {
+			resp.RequestHeaders[strings.ToLower(name)] = val
+		}
+
+		for _, name := range wantReq.AbsentHeaders {
+			val, ok := resp.RequestHeaders[strings.ToLower(name)]
+			if ok {
+				return fmt.Errorf("expected %s header to not be set, got %s", name, val)
+			}
+		}
+	}
+
+	for _, name := range wantResp.AbsentHeaders {
 		if v := resp.ResponseHeaders.Values(name); len(v) != 0 {
 			return fmt.Errorf("expected no header %q, got %v", name, v)
 		}
 	}
-	for k, v := range want.Headers {
+	for k, v := range wantResp.Headers {
 		if got := resp.ResponseHeaders.Get(k); got != v {
 			return fmt.Errorf("expected header %v=%v, got %v", k, v, got)
 		}
@@ -177,3 +223,19 @@ func ConnectToAppInNamespace(t *testing.T, s *suite.ConformanceTestSuite, app Me
 		rcfg:      s.RestConfig,
 	}
 }
+
+func (m *MeshPod) CaptureRequestResponseAndCompare(t *testing.T, exp http.ExpectedResponse) ([]string, Response, error) {
+	req := makeRequest(t, &exp)
+
+	resp, err := m.request(req)
+	if err != nil {
+		tlog.Logf(t, "Request %v failed, not ready yet: %v", req, err.Error())
+		return []string{}, Response{}, err
+	}
+	tlog.Logf(t, "Got resp %v", resp)
+	if err := compareRequest(exp, resp); err != nil {
+		tlog.Logf(t, "Response expectation failed for request: %v  not ready yet: %v", req, err)
+		return []string{}, Response{}, err
+	}
+	return req, resp, nil
+}
diff --git a/conformance/utils/http/http.go b/conformance/utils/http/http.go
index 78667903..18b5e1fe 100644
--- a/conformance/utils/http/http.go
+++ b/conformance/utils/http/http.go
@@ -70,6 +70,7 @@ type Request struct {
 	Headers          map[string]string
 	UnfollowRedirect bool
 	Protocol         string
+	Body             string
 }
 
 // ExpectedRequest defines expected properties of a request that reaches a backend.
@@ -139,6 +140,7 @@ func MakeRequest(t *testing.T, expected *ExpectedResponse, gwAddr, protocol, sch
 		Protocol:         expected.Request.Protocol,
 		Headers:          map[string][]string{},
 		UnfollowRedirect: expected.Request.UnfollowRedirect,
+		Body:             expected.Request.Body,
 	}
 
 	if expected.Request.Headers != nil {
diff --git a/conformance/utils/http/mirror.go b/conformance/utils/http/mirror.go
index 08633820..0ac85ec5 100644
--- a/conformance/utils/http/mirror.go
+++ b/conformance/utils/http/mirror.go
@@ -41,6 +41,8 @@ func ExpectMirroredRequest(t *testing.T, client client.Client, clientset clients
 	var wg sync.WaitGroup
 	wg.Add(len(mirrorPods))
 
+	assertionStart := time.Now()
+
 	for _, mirrorPod := range mirrorPods {
 		go func(mirrorPod MirroredBackend) {
 			defer wg.Done()
@@ -50,7 +52,7 @@ func ExpectMirroredRequest(t *testing.T, client client.Client, clientset clients
 
 				tlog.Log(t, "Searching for the mirrored request log")
 				tlog.Logf(t, `Reading "%s/%s" logs`, mirrorPod.Namespace, mirrorPod.Name)
-				logs, err := kubernetes.DumpEchoLogs(mirrorPod.Namespace, mirrorPod.Name, client, clientset, time.Now())
+				logs, err := kubernetes.DumpEchoLogs(mirrorPod.Namespace, mirrorPod.Name, client, clientset, assertionStart)
 				if err != nil {
 					tlog.Logf(t, `Couldn't read "%s/%s" logs: %v`, mirrorPod.Namespace, mirrorPod.Name, err)
 					return false
@@ -62,7 +64,7 @@ func ExpectMirroredRequest(t *testing.T, client client.Client, clientset clients
 					}
 				}
 				return false
-			}, 60*time.Second, time.Millisecond*100, fmt.Sprintf(`Couldn't find mirrored request in "%s/%s" logs`, mirrorPod.Namespace, mirrorPod.Name))
+			}, 60*time.Second, time.Millisecond*100, `Couldn't find mirrored request in "%s/%s" logs`, mirrorPod.Namespace, mirrorPod.Name)
 		}(mirrorPod)
 	}
 
diff --git a/conformance/utils/kubernetes/apply.go b/conformance/utils/kubernetes/apply.go
index 983e0715..1b3b01d5 100644
--- a/conformance/utils/kubernetes/apply.go
+++ b/conformance/utils/kubernetes/apply.go
@@ -49,6 +49,10 @@ type Applier struct {
 	// GatewayClass will be used as the spec.gatewayClassName when applying Gateway resources
 	GatewayClass string
 
+	// AddressType is a type that is expected to be supported AND usable
+	// for Gateways in the underlying implementation
+	AddressType string
+
 	// ControllerName will be used as the spec.controllerName when applying GatewayClass resources
 	ControllerName string
 
@@ -57,11 +61,11 @@ type Applier struct {
 
 	// UsableNetworkAddresses is a list of addresses that are expected to be
 	// supported AND usable for Gateways in the underlying implementation.
-	UsableNetworkAddresses []v1beta1.GatewayAddress
+	UsableNetworkAddresses []v1beta1.GatewaySpecAddress
 
 	// UnusableNetworkAddresses is a list of addresses that are expected to be
 	// supported, but not usable for Gateways in the underlying implementation.
-	UnusableNetworkAddresses []v1beta1.GatewayAddress
+	UnusableNetworkAddresses []v1beta1.GatewaySpecAddress
 }
 
 // prepareGateway adjusts the gatewayClassName.
@@ -104,7 +108,7 @@ func (a Applier) prepareGateway(t *testing.T, uObj *unstructured.Unstructured) {
 		// Note: I would really love to find a better way to do this kind of
 		// thing in the future.
 		var overlayUsable, overlayUnusable bool
-		var specialAddrs []v1beta1.GatewayAddress
+		var specialAddrs []v1beta1.GatewaySpecAddress
 		for _, addr := range gwspec.Addresses {
 			switch addr.Value {
 			case "PLACEHOLDER_USABLE_ADDRS":
@@ -353,7 +357,7 @@ func getContentsFromPathOrURL(manifestFS []fs.FS, location string, timeoutConfig
 // convertGatewayAddrsToPrimitives converts a slice of Gateway addresses
 // to a slice of primitive types and then returns them as a []interface{} so that
 // they can be applied back to an unstructured Gateway.
-func convertGatewayAddrsToPrimitives(gwaddrs []v1beta1.GatewayAddress) (raw []interface{}) {
+func convertGatewayAddrsToPrimitives(gwaddrs []v1beta1.GatewaySpecAddress) (raw []interface{}) {
 	for _, addr := range gwaddrs {
 		addrType := string(v1beta1.IPAddressType)
 		if addr.Type != nil {
diff --git a/conformance/utils/roundtripper/roundtripper.go b/conformance/utils/roundtripper/roundtripper.go
index c37f4500..f7950878 100644
--- a/conformance/utils/roundtripper/roundtripper.go
+++ b/conformance/utils/roundtripper/roundtripper.go
@@ -29,6 +29,7 @@ import (
 	"net/http/httputil"
 	"net/url"
 	"regexp"
+	"strings"
 	"testing"
 
 	"golang.org/x/net/http2"
@@ -59,6 +60,7 @@ type Request struct {
 	CertPem          []byte
 	KeyPem           []byte
 	Server           string
+	Body             string
 }
 
 // String returns a printable version of Request for logging. Note that the
@@ -194,7 +196,12 @@ func (d *DefaultRoundTripper) defaultRoundTrip(request Request, transport http.R
 	ctx, cancel := context.WithTimeout(context.Background(), d.TimeoutConfig.RequestTimeout)
 	defer cancel()
 	ctx = withT(ctx, request.T)
-	req, err := http.NewRequestWithContext(ctx, method, request.URL.String(), nil)
+
+	var reqBody io.Reader
+	if request.Body != "" {
+		reqBody = strings.NewReader(request.Body)
+	}
+	req, err := http.NewRequestWithContext(ctx, method, request.URL.String(), reqBody)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/conformance/utils/suite/conformance.go b/conformance/utils/suite/conformance.go
index 3bbbbc1c..12db14d6 100644
--- a/conformance/utils/suite/conformance.go
+++ b/conformance/utils/suite/conformance.go
@@ -21,8 +21,6 @@ import (
 	"strings"
 	"testing"
 
-	"k8s.io/apimachinery/pkg/util/sets"
-
 	"sigs.k8s.io/gateway-api/conformance/utils/tlog"
 	"sigs.k8s.io/gateway-api/pkg/features"
 )
@@ -81,11 +79,11 @@ func (test *ConformanceTest) Run(t *testing.T, suite *ConformanceTestSuite) {
 
 // ParseSupportedFeatures parses flag arguments and converts the string to
 // sets.Set[features.FeatureName]
-func ParseSupportedFeatures(f string) sets.Set[features.FeatureName] {
+func ParseSupportedFeatures(f string) FeaturesSet {
 	if f == "" {
 		return nil
 	}
-	res := sets.Set[features.FeatureName]{}
+	res := FeaturesSet{}
 	for _, value := range strings.Split(f, ",") {
 		res.Insert(features.FeatureName(value))
 	}
diff --git a/conformance/utils/suite/reports.go b/conformance/utils/suite/reports.go
index 4b03d677..4efcc4e7 100644
--- a/conformance/utils/suite/reports.go
+++ b/conformance/utils/suite/reports.go
@@ -22,7 +22,6 @@ import (
 	"k8s.io/apimachinery/pkg/util/sets"
 
 	confv1 "sigs.k8s.io/gateway-api/conformance/apis/v1"
-	"sigs.k8s.io/gateway-api/pkg/features"
 )
 
 // -----------------------------------------------------------------------------
@@ -107,7 +106,7 @@ func (p profileReportsMap) list() (profileReports []confv1.ProfileReport) {
 	return
 }
 
-func (p profileReportsMap) compileResults(supportedFeaturesMap map[ConformanceProfileName]sets.Set[features.FeatureName], unsupportedFeaturesMap map[ConformanceProfileName]sets.Set[features.FeatureName]) {
+func (p profileReportsMap) compileResults(supportedFeaturesMap map[ConformanceProfileName]FeaturesSet, unsupportedFeaturesMap map[ConformanceProfileName]FeaturesSet) {
 	for key, report := range p {
 		// report the overall result for core features
 		switch {
@@ -162,7 +161,8 @@ func (p profileReportsMap) compileResults(supportedFeaturesMap map[ConformancePr
 // isTestExtended determines if a provided test is considered to be supported
 // at an extended level of support given the provided conformance profile.
 //
-// TODO: right now the tests themselves don't indicate the conformance
+// TODO(#3759) Update this method to be based on Features inferred.
+// Right now the tests themselves don't indicate the conformance
 // support level associated with them. The only way we have right now
 // in this prototype to know whether a test belongs to any particular
 // conformance level is to compare the features needed for the test to
diff --git a/conformance/utils/suite/suite.go b/conformance/utils/suite/suite.go
index dad28505..2402821e 100644
--- a/conformance/utils/suite/suite.go
+++ b/conformance/utils/suite/suite.go
@@ -21,6 +21,7 @@ import (
 	"errors"
 	"fmt"
 	"io/fs"
+	neturl "net/url"
 	"slices"
 	"sort"
 	"strings"
@@ -31,11 +32,13 @@ import (
 	"github.com/stretchr/testify/require"
 	apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/types"
 	"k8s.io/apimachinery/pkg/util/sets"
 	clientset "k8s.io/client-go/kubernetes"
 	"k8s.io/client-go/rest"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
+	gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
 	"sigs.k8s.io/gateway-api/apis/v1beta1"
 	confv1 "sigs.k8s.io/gateway-api/conformance/apis/v1"
 	"sigs.k8s.io/gateway-api/conformance/utils/config"
@@ -69,14 +72,20 @@ type ConformanceTestSuite struct {
 	BaseManifests            string
 	MeshManifests            string
 	Applier                  kubernetes.Applier
-	SupportedFeatures        sets.Set[features.FeatureName]
+	SupportedFeatures        FeaturesSet
 	TimeoutConfig            config.TimeoutConfig
 	SkipTests                sets.Set[string]
 	SkipProvisionalTests     bool
 	RunTest                  string
+	Hook                     func(t *testing.T, test ConformanceTest, suite *ConformanceTestSuite)
 	ManifestFS               []fs.FS
-	UsableNetworkAddresses   []v1beta1.GatewayAddress
-	UnusableNetworkAddresses []v1beta1.GatewayAddress
+	UsableNetworkAddresses   []v1beta1.GatewaySpecAddress
+	UnusableNetworkAddresses []v1beta1.GatewaySpecAddress
+
+	// If SupportedFeatures are automatically determined from GWC Status.
+	// This will be required to report in future iterations as the passing
+	// will be determined based on this.
+	isInferredSupportedFeatures bool
 
 	// mode is the operating mode of the implementation.
 	// The default value for it is "default".
@@ -121,13 +130,14 @@ type ConformanceTestSuite struct {
 	lock sync.RWMutex
 }
 
-// Options can be used to initialize a ConformanceTestSuite.
+// ConformanceOptions can be used to initialize a ConformanceTestSuite.
 type ConformanceOptions struct {
 	Client               client.Client
 	ClientOptions        client.Options
 	Clientset            clientset.Interface
 	RestConfig           *rest.Config
 	GatewayClassName     string
+	AddressType          string
 	Debug                bool
 	RoundTripper         roundtripper.RoundTripper
 	GRPCClient           grpc.Client
@@ -140,8 +150,8 @@ type ConformanceOptions struct {
 	// CleanupBaseResources indicates whether or not the base test
 	// resources such as Gateways should be cleaned up after the run.
 	CleanupBaseResources       bool
-	SupportedFeatures          sets.Set[features.FeatureName]
-	ExemptFeatures             sets.Set[features.FeatureName]
+	SupportedFeatures          FeaturesSet
+	ExemptFeatures             FeaturesSet
 	EnableAllSupportedFeatures bool
 	TimeoutConfig              config.TimeoutConfig
 	// SkipTests contains all the tests not to be run and can be used to opt out
@@ -151,17 +161,18 @@ type ConformanceOptions struct {
 	SkipProvisionalTests bool
 	// RunTest is a single test to run, mostly for development/debugging convenience.
 	RunTest string
-
+	// Hook is an optional function that can be used to run custom logic after each test at suite level.
+	Hook       func(t *testing.T, test ConformanceTest, suite *ConformanceTestSuite)
 	ManifestFS []fs.FS
 
 	// UsableNetworkAddresses is an optional pool of usable addresses for
 	// Gateways for tests which need to test manual address assignments.
-	UsableNetworkAddresses []v1beta1.GatewayAddress
+	UsableNetworkAddresses []v1beta1.GatewaySpecAddress
 
 	// UnusableNetworkAddresses is an optional pool of unusable addresses for
 	// Gateways for tests which need to test failures with manual Gateway
 	// address assignment.
-	UnusableNetworkAddresses []v1beta1.GatewayAddress
+	UnusableNetworkAddresses []v1beta1.GatewaySpecAddress
 
 	Mode                string
 	AllowCRDsMismatch   bool
@@ -169,6 +180,8 @@ type ConformanceOptions struct {
 	ConformanceProfiles sets.Set[ConformanceProfileName]
 }
 
+type FeaturesSet = sets.Set[features.FeatureName]
+
 const (
 	// undefinedKeyword is set in the ConformanceReport "GatewayAPIVersion" and
 	// "GatewayAPIChannel" fields in case it's not possible to figure out the actual
@@ -178,16 +191,23 @@ const (
 
 // NewConformanceTestSuite is a helper to use for creating a new ConformanceTestSuite.
 func NewConformanceTestSuite(options ConformanceOptions) (*ConformanceTestSuite, error) {
-	// test suite callers are required to provide either:
-	// - one conformance profile via the flag '-conformance-profiles'
-	// - a list of supported features via the flag '-supported-features'
-	// - an explicit test to run via the flag '-run-test'
-	// - all features are being tested via the flag '-all-features'
-	if options.SupportedFeatures.Len() == 0 &&
-		options.ConformanceProfiles.Len() == 0 &&
-		!options.EnableAllSupportedFeatures &&
-		options.RunTest == "" {
-		return nil, fmt.Errorf("no conformance profile, supported features, explicit tests were provided so no tests could be selected")
+	supportedFeatures := options.SupportedFeatures.Difference(options.ExemptFeatures)
+	isInferred := false
+	switch {
+	case options.EnableAllSupportedFeatures:
+		supportedFeatures = features.SetsToNamesSet(features.AllFeatures)
+	case shouldInferSupportedFeatures(&options):
+		var err error
+		supportedFeatures, err = fetchSupportedFeatures(options.Client, options.GatewayClassName)
+		if err != nil {
+			return nil, fmt.Errorf("Cannot infer supported features: %w", err)
+		}
+		isInferred = true
+	}
+
+	// If features were not inferred from Status, it's a GWC issue.
+	if isInferred && supportedFeatures.Len() == 0 {
+		return nil, fmt.Errorf("no supported features were determined for test suite")
 	}
 
 	config.SetupTimeoutConfig(&options.TimeoutConfig)
@@ -221,19 +241,6 @@ func NewConformanceTestSuite(options ConformanceOptions) (*ConformanceTestSuite,
 		mode = options.Mode
 	}
 
-	// test suite callers can potentially just run all tests by saying they
-	// cover all features, if they don't they'll need to have provided a
-	// conformance profile or at least some specific features they support.
-	if options.EnableAllSupportedFeatures {
-		options.SupportedFeatures = features.SetsToNamesSet(features.AllFeatures)
-	} else if options.SupportedFeatures == nil {
-		options.SupportedFeatures = sets.New[features.FeatureName]()
-	}
-
-	for feature := range options.ExemptFeatures {
-		options.SupportedFeatures.Delete(feature)
-	}
-
 	suite := &ConformanceTestSuite{
 		Client:           options.Client,
 		ClientOptions:    options.ClientOptions,
@@ -249,8 +256,9 @@ func NewConformanceTestSuite(options ConformanceOptions) (*ConformanceTestSuite,
 		Applier: kubernetes.Applier{
 			NamespaceLabels:      options.NamespaceLabels,
 			NamespaceAnnotations: options.NamespaceAnnotations,
+			AddressType:          options.AddressType,
 		},
-		SupportedFeatures:           options.SupportedFeatures,
+		SupportedFeatures:           supportedFeatures,
 		TimeoutConfig:               options.TimeoutConfig,
 		SkipTests:                   sets.New(options.SkipTests...),
 		RunTest:                     options.RunTest,
@@ -266,6 +274,8 @@ func NewConformanceTestSuite(options ConformanceOptions) (*ConformanceTestSuite,
 		mode:                        mode,
 		apiVersion:                  apiVersion,
 		apiChannel:                  apiChannel,
+		isInferredSupportedFeatures: isInferred,
+		Hook:                        options.Hook,
 	}
 
 	for _, conformanceProfileName := range options.ConformanceProfiles.UnsortedList() {
@@ -283,12 +293,12 @@ func NewConformanceTestSuite(options ConformanceOptions) (*ConformanceTestSuite,
 		for _, f := range conformanceProfile.ExtendedFeatures.UnsortedList() {
 			if options.SupportedFeatures.Has(f) {
 				if suite.extendedSupportedFeatures[conformanceProfileName] == nil {
-					suite.extendedSupportedFeatures[conformanceProfileName] = sets.New[features.FeatureName]()
+					suite.extendedSupportedFeatures[conformanceProfileName] = FeaturesSet{}
 				}
 				suite.extendedSupportedFeatures[conformanceProfileName].Insert(f)
 			} else {
 				if suite.extendedUnsupportedFeatures[conformanceProfileName] == nil {
-					suite.extendedUnsupportedFeatures[conformanceProfileName] = sets.New[features.FeatureName]()
+					suite.extendedUnsupportedFeatures[conformanceProfileName] = FeaturesSet{}
 				}
 				suite.extendedUnsupportedFeatures[conformanceProfileName].Insert(f)
 			}
@@ -385,6 +395,10 @@ func (suite *ConformanceTestSuite) Setup(t *testing.T, tests []ConformanceTest)
 	}
 }
 
+func (suite *ConformanceTestSuite) IsInferredSupportedFeatures() bool {
+	return suite.isInferredSupportedFeatures
+}
+
 func (suite *ConformanceTestSuite) setClientsetForTest(test ConformanceTest) error {
 	featureNames := []string{}
 	for _, v := range test.Features {
@@ -447,7 +461,7 @@ func (suite *ConformanceTestSuite) Run(t *testing.T, tests []ConformanceTest) er
 
 		// TODO(wstcliyu): need a better long term solution for test isolation
 		// https://github.com/kubernetes-sigs/gateway-api/issues/3233
-		if res != testSkipped && res != testNotSupported && sleepForTestIsolation {
+		if res != testSkipped && res != testNotSupported && sleepForTestIsolation && suite.TimeoutConfig.TestIsolation > 0 {
 			tlog.Logf(t, "Sleeping %v for test isolation", suite.TimeoutConfig.TestIsolation)
 			time.Sleep(suite.TimeoutConfig.TestIsolation)
 		}
@@ -468,6 +482,13 @@ func (suite *ConformanceTestSuite) Run(t *testing.T, tests []ConformanceTest) er
 		if res == testSucceeded || res == testFailed {
 			sleepForTestIsolation = true
 		}
+
+		// call the hook function if it was provided,
+		// this's useful for running custom logic after each test at suite level,
+		// such as collecting current state of the cluster for debugging.
+		if suite.Hook != nil {
+			suite.Hook(t, test, suite)
+		}
 	}
 
 	// now that the tests have completed, mark the test suite as not running
@@ -532,19 +553,39 @@ func (suite *ConformanceTestSuite) Report() (*confv1.ConformanceReport, error) {
 		GatewayAPIChannel:         suite.apiChannel,
 		ProfileReports:            profileReports.list(),
 		SucceededProvisionalTests: succeededProvisionalTests,
+		InferredSupportedFeatures: suite.IsInferredSupportedFeatures(),
 	}, nil
 }
 
 // ParseImplementation parses implementation-specific flag arguments and
 // creates a *confv1a1.Implementation.
-func ParseImplementation(org, project, url, version, contact string) confv1.Implementation {
-	return confv1.Implementation{
+func ParseImplementation(org, project, url, version, contact string) (*confv1.Implementation, error) {
+	if org == "" {
+		return nil, errors.New("organization must be set")
+	}
+	if project == "" {
+		return nil, errors.New("project must be set")
+	}
+	if url == "" {
+		return nil, errors.New("url must be set")
+	}
+	if version == "" {
+		return nil, errors.New("version must be set")
+	}
+	if contact == "" {
+		return nil, errors.New("contact must be set")
+	}
+	if _, err := neturl.ParseRequestURI(url); err != nil {
+		return nil, errors.New("url is malformed")
+	}
+
+	return &confv1.Implementation{
 		Organization: org,
 		Project:      project,
 		URL:          url,
 		Version:      version,
 		Contact:      strings.Split(contact, ","),
-	}
+	}, nil
 }
 
 // ParseConformanceProfiles parses flag arguments and converts the string to
@@ -561,6 +602,39 @@ func ParseConformanceProfiles(p string) sets.Set[ConformanceProfileName] {
 	return res
 }
 
+func fetchSupportedFeatures(client client.Client, gatewayClassName string) (FeaturesSet, error) {
+	if gatewayClassName == "" {
+		return nil, fmt.Errorf("GatewayClass name must be provided to fetch supported features")
+	}
+	gwc := &gatewayv1.GatewayClass{}
+	err := client.Get(context.TODO(), types.NamespacedName{Name: gatewayClassName}, gwc)
+	if err != nil {
+		return nil, fmt.Errorf("fetchSupportedFeatures(): %w", err)
+	}
+
+	fs := FeaturesSet{}
+	for _, feature := range gwc.Status.SupportedFeatures {
+		fs.Insert(features.FeatureName(feature.Name))
+	}
+	fmt.Printf("Supported features for GatewayClass %s: %v\n", gatewayClassName, fs.UnsortedList())
+	return fs, nil
+}
+
+// shouldInferSupportedFeatures checks if any flags were supplied for manually
+// picking what to test. Inferred supported features are only used when no flags
+// are set.
+func shouldInferSupportedFeatures(opts *ConformanceOptions) bool {
+	if opts == nil {
+		return false
+	}
+	return !opts.EnableAllSupportedFeatures &&
+		opts.SupportedFeatures.Len() == 0 &&
+		opts.ExemptFeatures.Len() == 0 &&
+		opts.ConformanceProfiles.Len() == 0 &&
+		len(opts.SkipTests) == 0 &&
+		opts.RunTest == ""
+}
+
 // getAPIVersionAndChannel iterates over all the crds installed in the cluster and check the version and channel annotations.
 // In case the annotations are not found or there are crds with different versions or channels, an error is returned.
 func getAPIVersionAndChannel(crds []apiextensionsv1.CustomResourceDefinition) (version string, channel string, err error) {
diff --git a/crd-ref-docs.yaml b/crd-ref-docs.yaml
new file mode 100644
index 00000000..2a1c60fe
--- /dev/null
+++ b/crd-ref-docs.yaml
@@ -0,0 +1,14 @@
+# This file contains configuration for our reference docs generation. For more
+# information about the possible configuration, refer to
+# https://github.com/elastic/crd-ref-docs.
+
+processor:
+  ignoreTypes:
+    - "()List$"
+  # RE2 regular expressions describing type fields that should be excluded from the generated documentation.
+  ignoreFields:
+    - "TypeMeta$"
+
+render:
+  # Version of Kubernetes to use when generating links to Kubernetes API documentation.
+  kubernetesVersion: 1.32
diff --git a/geps/gep-1324/index.md b/geps/gep-1324/index.md
index a80d6c86..5384bece 100644
--- a/geps/gep-1324/index.md
+++ b/geps/gep-1324/index.md
@@ -33,7 +33,7 @@ Gateway API represents the next generation of traffic routing APIs in Kubernetes
 
 ## Versioning
 
-Features or other modifications to the Gateway API spec that fall under this GEP will be subject to the same [versioning guidelines](../../concepts/versioning.md#graduation-criteria) as the rest of the Gateway API. For example, to move changes concerning a beta feature (e.g. HTTPRoute) from experimental to standard, all of the [beta criteria](../../concepts/versioning.md#experimental-standard) must be met (e.g. implemented by several implementations).
+Features or other modifications to the Gateway API spec that fall under this GEP will be subject to the same [versioning guidelines](../../concepts/versioning.md#graduation-criteria) as the rest of the Gateway API. For example, to move changes concerning a beta feature (e.g. HTTPRoute) from experimental to standard, all of the [graduation criteria](../../concepts/versioning.md#graduation-criteria) must be met (e.g. implemented by several implementations).
 
 ## Use-Cases
 
diff --git a/geps/gep-1619/index.md b/geps/gep-1619/index.md
index 04451eb9..1abed574 100644
--- a/geps/gep-1619/index.md
+++ b/geps/gep-1619/index.md
@@ -21,7 +21,7 @@ Before this GEP graduates to Implementable, we must fulfill the following criter
     - **Answer**: Yes. We adjusted the API to use `BackendLBPolicy`. See [API](#api) for more details.
  2. Should we leave room for configuring different forms of Session Persistence?
     If so, what would that look like?
-    - **Answer**: Yes. See the [BackendLBPolicy API](#BackendLBPolicy-api) and [API Granularity](#api-granularity)
+    - **Answer**: Yes. See the [BackendLBPolicy API](#backendlbpolicy-api) and [API Granularity](#api-granularity)
       sections for more details.
  3. What name appropriately describe the API responsible for configuring load-balancing options for backend traffic?
     - **Answer**: We decided on `BackendLBPolicy` since it is aligned with `BackendTLSPolicy`, describes configuration
@@ -668,7 +668,7 @@ functionality of their applications.
 
 ### Prior Art
 
-Referring to our [Implementations](#Implementations) table on session persistence, the majority of Gateway API
+Referring to our [Implementations](#implementations) table on session persistence, the majority of Gateway API
 implementations designed session persistence in their APIs to be attached to a service or backends. This should be
 considered cautiously, as making associations to Gateway API's notion of Gateway, Route, and Service to other
 implementation's objects is hard to directly translate. The idea of a route in Gateway API is often not the same as a
diff --git a/geps/gep-1686/index.md b/geps/gep-1686/index.md
index e986ee61..50e6e7a7 100644
--- a/geps/gep-1686/index.md
+++ b/geps/gep-1686/index.md
@@ -16,7 +16,7 @@ This testing plan specifies a new set of tests to define a "Mesh" [conformance p
 ## Focus
 
 Currently the GAMMA spec consists of two Gateway API GEPs [defining terminology and goals of Gateway API for service meshes](../gep-1324/index.md)
-and specifically [how route resources work in a service mesh context](/geps/gep-1426/).
+and specifically [how route resources work in a service mesh context](../gep-1294/index.md).
 The goal of the initial conformance testing is to check the essential behavior as defined by GEP-1426, as it differs from the wider Gateway API spec. This GEP focuses on using a `Service` object as an `xRoute` `parentRef` to control how the GAMMA implementation directs traffic to the endpoints specified by the `Services` in `backendRefs` and how the traffic is filtered and modified.
 
 ## Conformance Profile
diff --git a/geps/gep-1709/index.md b/geps/gep-1709/index.md
index b4e29acc..b370805f 100644
--- a/geps/gep-1709/index.md
+++ b/geps/gep-1709/index.md
@@ -69,7 +69,7 @@ steps:
 
 1. select a [profile](#profiles)
 2. [integrate](#integration) tests in the downstream project
-3. [report results and get certified](#certification)
+3. [report results][#reporting-process] and get certified][#certification-process]
 
 The goal is to make selecting a conformance profile as simple and automatic of a
 process as feasible and support both the existing command line integration
@@ -164,7 +164,7 @@ for i := 0; i < len(tests.ConformanceTests); i++ {
 > but when used in conjunction with `Profile` this will result in a report that
 > the profile is not valid for reporting. Implementations in this state may be
 > able to report themselves as "in progress", see the
-> [certification section](#certification) for details.
+> [certification section](#certification-process) for details.
 
 Alternatively for an `Extended` conformance profile where not all of the
 features are implemented (as described in the [profiles](#profiles) section
@@ -234,7 +234,7 @@ support, or opt-out of the features you _don't_ support using
 `UnsupportedFeatures`.
 
 Once an implementation has integrated with the conformance test suite, they can
-move on to [certification](#certification) to report the results.
+move on to [certification](#certification-process) to report the results.
 
 [go-test]:https://go.dev/doc/tutorial/add-a-test
 [go]:https://go.dev
diff --git a/geps/gep-1713/index.md b/geps/gep-1713/index.md
index f51f044d..4cad39fd 100644
--- a/geps/gep-1713/index.md
+++ b/geps/gep-1713/index.md
@@ -36,8 +36,8 @@ Thus updating a single `Gateway` resource with this many certificates is a conte
 
 More broadly, large scale gateway users often expose `O(1000)` domains, but are currently limited by the maximum of 64 `listeners`.
 
-The spec currently has language to indicate implementations `MAY` merge `Gateways` resources but does not define any specific requirements for how that should work.
-https://github.com/kubernetes-sigs/gateway-api/blob/541e9fc2b3c2f62915cb58dc0ee5e43e4096b3e2/apis/v1beta1/gateway_types.go#L76-L78
+The [spec currently has language](https://github.com/kubernetes-sigs/gateway-api/blob/541e9fc2b3c2f62915cb58dc0ee5e43e4096b3e2/apis/v1beta1/gateway_types.go#L76-L78) to indicate implementations `MAY` merge `Gateways` resources but does not define any specific requirements for how that should work.
+
 
 ## Feature Details
 
@@ -164,15 +164,8 @@ type ListenerEntry struct {
 	// Port is the network port. Multiple listeners may use the
 	// same port, subject to the Listener compatibility rules.
 	//
-	// If the port is specified as zero, the implementation will assign
-	// a unique port. If the implementation does not support dynamic port
-	// assignment, it MUST set `Accepted` condition to `False` with the
-	// `UnsupportedPort` reason.
-	//
 	// Support: Core
-	//
-	// +optional
-	Port *PortNumber `json:"port,omitempty"`
+	Port PortNumber `json:"port,omitempty"`
 
 	// Protocol specifies the network protocol this listener expects to receive.
 	//
@@ -385,8 +378,7 @@ spec:
 ```
 ### ListenerEntry
 
-`ListenerEntry` is currently a copy of the `Listener` struct with some changes
-1. `Port` is now a pointer to allow for dynamic port assignment.
+`ListenerEntry` is currently a copy of the `Listener` struct with some changes noted in the below sections
 
 ## Semantics
 
@@ -399,7 +391,7 @@ When there are no listeners the `Gateway`'s `status.listeners` should be empty o
 
 Implementations, when creating a `Gateway`, may provision underlying infrastructure when there are no listeners present. The status conditions `Accepted` and `Programmed` conditions should reflect state of this provisioning.
 
-### Gateway <> ListenerSet Handshake
+### Gateway & ListenerSet Handshake
 
 By default a `Gateway` MUST NOT allow `ListenerSets` to be attached. Users can enable this behaviour by configuring their `Gateway` to allow `ListenerSet` attachment:
 
@@ -413,7 +405,7 @@ spec:
   - from: Same
 ```
 
-### Route Attaching
+### Route Attachment
 
 Routes MUST be able to specify a `ListenerSet` as a `parentRef`. Routes can use `sectionName`/`port` fields in `ParentReference` to help target a specific listener. If no listener is targeted (`sectionName`/`port` are unset) then the Route attaches to all the listeners in the `ListenerSet`.
 
@@ -461,10 +453,36 @@ spec:
     sectionName: foo
 ```
 
+#### Optional Section Name
+
+If a `sectionName` in a Route's `parentRef` is not set then the Route MUST attach to only the listeners in the referenced parent. As an example given a `Gateway` and it's child `ListenerSets` a route attaching to the `Gateway` with an empty `sectionName` shall only attach to the listeners in the `Gateways` immediate `spec.listeners` list. In other words, the Route will not attach to any listeners in the `ListenerSets`. This is necessary because, for UX reasons, the `name` field does not have to be unique across all Listeners merged into a Gateway (see the section below for details).
+
+### Policy Attachment
+
+Policy attachment is [under discussion] in https://github.com/kubernetes-sigs/gateway-api/discussions/2927
+
+Similar to Routes, `ListenerSet` can inherit policy from a Gateway.
+Policies that attach to a `ListenerSet` apply to all listeners defined in that resource, but do not impact listeners in the parent `Gateway`. This allows `ListenerSets` attached to the same `Gateway` to have different policies.
+If the implementation cannot apply the policy to only specific listeners, it should reject the policy.
+
+### ReferenceGrant Semantics
+
+When a `ReferenceGrant` is applied to a `Gateway` it MUST NOT be inherited by child `ListenerSets`. Thus a `ListenerSet` listener MUST NOT access secrets granted to the `Gateway` listeners.
+
+When a `ReferenceGrant` is applied to a `ListenerSet` it MUST NOT grant permission to the parent `Gateway`'s listeners. Thus a `Gateway` listener MUST NOT access secrets granted to the `ListenerSet` listeners.
+
+A `ListenerSet` must be able to reference a secret/backend in the same namespace as itself without a `ReferenceGrant`.
+
+
 ### Listener Validation
 
-Implementations MUST treat the parent `Gateway`s as having the merged list of all listeners from itself and attached `ListenerSets`. See 'Listener Precedence' for more details on ordering.
-Validation of this list of listeners MUST behave the same as if the list were part of a single `Gateway`.
+Within a single resource such as a `Gateway` or `ListenerSet` the list of listeners MUST have unique names. Implementations MUST allow listeners from a child `ListenerSet` to be merged into a parent `Gateway` when listeners have the same name. Likewise implementations MUST allow sibling `ListenerSets` listeners with matching names to be merged into a parent `Gateway`. This allows for authors of Routes to simply attach to their desired parentRef and listener without having to worry about naming conflicts across resources.
+
+It is up to the implementations how unique names are generated internally. One example would be to hash the `ListenerSet` name+namespace and prepend it to the listener entry `name`.
+
+Implementations MUST treat the parent `Gateway`s as having the merged list of all listeners from itself and attached `ListenerSets` and validation of this list of listeners MUST behave the same as if the list were part of a single `Gateway` with the relaxed listener name constraints.
+
+Ordering will follow the semantics defined in [Listener Precedence](#listener-precedence).
 
 From the earlier example the above resources would be equivalent to a single `Gateway` where the listeners are collapsed into a single list.
 
@@ -514,7 +532,7 @@ Listeners should be merged using the following precedence:
 
 Conflicts are covered in the section 'ListenerConditions within a ListenerSet'
 
-###  Gateway Conditions
+### Gateway Conditions
 
 `Gateway`'s `Accepted` and `Programmed` top-level conditions remain unchanged and reflect the status of the local configuration.
 
@@ -555,14 +573,6 @@ If a listener has a conflict, this should be reported in the `ListenerEntryStatu
 
 Implementations SHOULD be cautious about what information from the parent or siblings are reported to avoid accidentally leaking sensitive information that the child would not otherwise have access to. This can include contents of secrets etc.
 
-### Policy Attachment
-
-Policy attachment is [under discussion] in https://github.com/kubernetes-sigs/gateway-api/discussions/2927
-
-Similar to Routes, `ListenerSet` can inherit policy from a Gateway.
-Policies that attach to a `ListenerSet` apply to all listeners defined in that resource, but do not impact listeners in the parent `Gateway`. This allows `ListenerSets` attached to the same `Gateway` to have different policies.
-If the implementation cannot apply the policy to only specific listeners, it should reject the policy.
-
 ## Alternatives
 
 ### Re-using Gateway Resource
diff --git a/geps/gep-1713/metadata.yaml b/geps/gep-1713/metadata.yaml
index 3f8a4606..9d0aac99 100644
--- a/geps/gep-1713/metadata.yaml
+++ b/geps/gep-1713/metadata.yaml
@@ -1,7 +1,17 @@
 apiVersion: internal.gateway.networking.k8s.io/v1alpha1
 kind: GEPDetails
 number: 1713
-name: Gateway Merging - ListenerSet
+name: XListenerSets (Standard Mechanism to Merge Gateways)
 status: Experimental
 authors:
   - dprotaso
+  - youngnick
+  - mlavacca
+references:
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3477
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3213
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3632
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3664
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3587
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3588
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3682
diff --git a/geps/gep-1767/index.md b/geps/gep-1767/index.md
index c2929549..3f1018bd 100644
--- a/geps/gep-1767/index.md
+++ b/geps/gep-1767/index.md
@@ -1,7 +1,7 @@
 # GEP 1767: CORS Filter
 
 * Issue: [#1767](https://github.com/kubernetes-sigs/gateway-api/issues/1767)
-* Status: Provisional
+* Status: Experimental
 
 ## TLDR
 Cross-origin resource sharing (CORS) is an HTTP-header based mechanism that allows a web page to access restricted resources from a server on an origin (domain, scheme, or port) different than the domain that served the web page.
diff --git a/geps/gep-1767/metadata.yaml b/geps/gep-1767/metadata.yaml
index 01808508..c7fe532b 100644
--- a/geps/gep-1767/metadata.yaml
+++ b/geps/gep-1767/metadata.yaml
@@ -2,6 +2,14 @@ apiVersion: internal.gateway.networking.k8s.io/v1alpha1
 kind: GEPDetails
 number: 1767
 name: CORS Filter
-status: Provisional
+status: Experimental
 authors:
   - lianglli
+  - robscott
+  - EyalPazz
+references:
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3435
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3637
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3656
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3668
+
diff --git a/geps/gep-1867/index.md b/geps/gep-1867/index.md
index cf664362..eba4f6e2 100644
--- a/geps/gep-1867/index.md
+++ b/geps/gep-1867/index.md
@@ -36,7 +36,7 @@ This has been previously discussed in [this issue](https://github.com/kubernetes
 
 As a cluster scoped resource, `GatewayClass` does not meet this requirement.
 This restricts customization use cases to either a few pre-provisioned classes by the admin, or running in an environment where the "Infrastructure Provider" and "Cluster Operator" are the same roles.
-The distinction between these roles is explicitly called out on the [homepage](../../index.md#what-is-the-gateway-api).
+The distinction between these roles is explicitly called out on the [homepage](../../index.md#personas).
 
 ### Custom Resource
 
diff --git a/geps/gep-1897/images/mesh.png b/geps/gep-1897/images/mesh.png
new file mode 100644
index 00000000..c82ced30
Binary files /dev/null and b/geps/gep-1897/images/mesh.png differ
diff --git a/geps/gep-1897/index.md b/geps/gep-1897/index.md
index 9f2a9918..4571c703 100644
--- a/geps/gep-1897/index.md
+++ b/geps/gep-1897/index.md
@@ -22,18 +22,15 @@ the service or backend owner wants to validate the clients connecting to it, two
 1. The solution must satisfy the following use case: the backend pod has its own
 certificate and the gateway implementation client needs to know how to connect to the
 backend pod. (Use case #4 in [Gateway API TLS Use Cases](#references))
-2. In terms of the Gateway API personas, only the application developer persona applies in this
-solution. The application developer should control the gateway to backend TLS settings,
-not the cluster operator, as requiring a cluster operator to manage certificate renewals
-and revocations would be extremely cumbersome.
-3. The solution should consider client certificate settings used in the TLS handshake **from
-Gateway to backend**, such as server name indication, trusted certificates,
-and CA certificates.
+2. In this GEP, only the application developer persona will have control over TLS settings. This does not preclude adding other personas in future GEPs.
+3. The solution should consider client TLS settings used in the TLS handshake **from
+Gateway to backend**, such as server name indication and trusted CA certificates.
+4. Both Gateway and Mesh use cases may be supported, depending on the implementation, and will be covered by features in each case.
 
 ## Longer Term Goals
 
 These are worthy goals, but deserve a different GEP for proper attention.  This GEP is concerned entirely with the
-controlplane, i.e. the hop between gateway and backend.
+the hop between gateway client and backend.
 
 1. [TCPRoute](../../reference/spec.md#gateway.networking.k8s.io/v1alpha2.TCPRoute) and
 [GRPCRoute](../../reference/spec.md#gateway.networking.k8s.io/v1alpha2.GRPCRoute) use cases
@@ -59,7 +56,16 @@ These are worthy goals, but will not be covered by this GEP.
 6. Controlling certificates used by more than one workload (#6 in [Gateway API TLS Use Cases](#references))
 7. Client certificate settings used in TLS **from external clients to the
 Listener** (#7 in [Gateway API TLS Use Cases](#references))
-8. Providing a mechanism for the cluster operator to override gateway to backend TLS settings.
+8. Service Mesh "mesh transport security".
+9. Providing a mechanism for the cluster operator to override gateway to backend TLS settings.
+
+> It is very common for service mesh implementations to implement some form of transparent transport security, whether that is WireGuard, mTLS, or others.
+> This is completely orthogonal to the use cases being tackled by this GEP.
+> * The "mesh transport security" is something invisible to the user's application, and is simply used to secure communication between components in the mesh.
+> * This proposal, instead, explicitly calls for sending TLS **to the user's application**.
+> However, this does not mean service meshes are outside of scope for this proposal, merely that only the application-level TLS configuration is in scope.
+
+![](images/mesh.png "Mesh transport")
 
 ## Already Solved TLS Use Cases
 
@@ -83,16 +89,16 @@ Gateway API is missing a mechanism for separately providing the details for the
 including (but not limited to):
 
 * intent to use TLS on the backend hop
-* client certificate of the gateway
-* system certificates to use in the absence of client certificates
+* CA certificates to trust
+* other properties of the TLS handshake, such as SNI and SAN validation
+* client certificate of the gateway (outside of scope for this GEP)
 
 ## Purpose - why do we want to do this?
 
 This proposal is _very_ tightly scoped because we have tried and failed to address this well-known
 gap in the API specification. The lack of support for this fundamental concept is holding back
-Gateway API adoption by users that require a solution to the use case. One of the recurring themes
-that has held up the prior art has been interest related to service mesh, and as such this proposal
-focuses explicitly on the ingress use case in the initial round.  Another reason for the tight scope
+Gateway API adoption by users that require a solution to the use case. 
+Another reason for the tight scope
 is that we have been too focused on a generic representation of everything that TLS can do, which
 covers too much ground to address in a single GEP.
 
@@ -150,10 +156,10 @@ Because naming is hard, a new name may be
 substituted without blocking acceptance of the content of the API change.
 
 The selection of the applicable Gateway API persona is important in the design of BackendTLSPolicy, because it provides
-a way to explicitly describe the _expectations_ of the connection to the application.  BackendTLSPolicy is configured
-by the application developer Gateway API persona to signal what the application developer _expects_ in connections to
-the application, from a TLS perspective.  Only the application developer can know what the application expects, so it is
-important that this configuration be managed by that persona.
+a way to explicitly describe the _expectations_ of the connection to the application.
+In this GEP, BackendTLSPolicy will be configured only by the application developer Gateway API persona to tell gateway clients how to connect to
+the application, from a TLS perspective.
+Future iterations *may* expand this to additionally allow consumer overrides; see [Future plans](#future-plans).
 
 During the course of discussion of this proposal, we did consider allowing the cluster operator persona to have some access
 to Gateway cert validation, but as mentioned, BackendTLSPolicy is used primarily to signal what the application
@@ -170,18 +176,14 @@ as a TLS Client:
 
 - An explicit signal that TLS should be used by this connection.
 - A hostname the Gateway should use to connect to the backend.
-- A reference to one or more certificates to use in the TLS handshake, signed by a CA or self-signed.
-- An indication that system certificates may be used.
+- A reference to one or more CA certificates (which could include "system certificates") to validate the server's TLS certificates.
 
 BackendTLSPolicy is defined as a Direct Policy Attachment without defaults or overrides, applied to a Service that
 accesses the backend in question, where the BackendTLSPolicy resides in the same namespace as the Service it is
-applied to.  The BackendTLSPolicy and the Service must reside in the same namespace in order to prevent the
-complications involved with sharing trust across namespace boundaries.  We chose the Service resource as a target,
+applied to.  For now, the BackendTLSPolicy and the Service must reside in the same namespace in order to prevent the
+complications involved with sharing trust across namespace boundaries (see [Future plans](#future-plans)).  We chose the Service resource as a target,
 rather than the Route resource, so that we can reuse the same BackendTLSPolicy for all the different Routes that
 might point to this Service.
-For the use case where certificates are stored in their own namespace, users may create Secrets and use ReferenceGrants
-for a BackendTLSPolicy-to-Secret binding.  Implementations must respect a ReferenceGrant for cross-namespace Secret
-sharing to BackendTLSPolicy, even if they don't for other cross-namespace sharing.
 
 One of the areas of concern for this API is that we need to indicate how and when the API implementations should use the
 backend destination certificate authority.  This solution proposes, as introduced in
@@ -194,6 +196,8 @@ that is appropriate, such as one of the HTTP error codes: 400 (Bad Request), 401
 other signal that makes the failure sufficiently clear to the requester without revealing too much about the transaction,
 based on established security requirements.
 
+BackendTLSPolicy applies only to TCP traffic. If a policy explicitly attaches to a UDP port of a Service (that is, the `targetRef` has a `sectionName` specifying a single port or the service has only 1 port), the `Accepted: False` Condition with `Reason: Invalid` MUST be set. If the policy attaches to a mix of TCP and UDP ports, implementations SHOULD include a warning in the `Accepted` condition message (`ancestors.conditions`); the policy will only be effective for the TCP ports.
+
 All policy resources must include `TargetRefs` with the fields specified
 in [PolicyTargetReference](https://github.com/kubernetes-sigs/gateway-api/blob/a33a934af9ec6997b34fd9b00d2ecd13d143e48b/apis/v1alpha2/policy_types.go#L24-L41).
 In an upcoming [extension](https://github.com/kubernetes-sigs/gateway-api/issues/2147) to TargetRefs, policy resources
@@ -238,35 +242,22 @@ Thus, the following additions would be made to the Gateway API:
 
 ## How a client behaves
 
-This table describes the effect that a BackendTLSPolicy has on a Route.  There are only two cases where the
-BackendTLSPolicy will signal a Route to connect to a backend using TLS, an HTTPRoute with a backend that is targeted
-by a BackendTLSPolicy, either with or without listener TLS configured.  (There are a few other cases where it may be
-possible, but is implementation dependent.)
-
-Every implementation that claims supports for BackendTLSPolicy should document for which Routes it is being implemented.
-
-| Route Type | Gateway Config             | Backend is targeted by a BackendTLSPolicy? | Connect to backend  with TLS? |
-|------------|----------------------------|-----------------------------------------------|-------------------------------|
-| HTTPRoute  | Listener tls               | Yes                                           | **Yes**                       |
-| HTTPRoute  | No listener tls            | Yes                                           | **Yes**                       |
-| HTTPRoute  | Listener tls               | No                                            | No                            |
-| HTTPRoute  | No listener tls            | No                                            | No                            |
-| TLSRoute   | Listener Mode: Passthrough | Yes                                           | No                            |
-| TLSRoute   | Listener Mode: Terminate   | Yes                                           | Implementation-dependent      |
-| TLSRoute   | Listener Mode: Passthrough | No                                            | No                            |
-| TLSRoute   | Listener Mode: Terminate   | No                                            | No                            |
-| TCPRoute   | Listener TLS               | Yes                                           | Implementation-dependent      |
-| TCPRoute   | No listener TLS            | Yes                                           | Implementation-dependent      |
-| TCPRoute   | Listener TLS               | No                                            | No                            |
-| TCPRoute   | No listener TLS            | No                                            | No                            |
-| UDPRoute   | Listener TLS               | Yes                                           | No                            |
-| UDPRoute   | No listener TLS            | Yes                                           | No                            |
-| UDPRoute   | Listener TLS               | No                                            | No                            |
-| UDPRoute   | No listener TLS            | No                                            | No                            |
-| GRPCRoute  | Listener TLS               | Yes                                           | Implementation-dependent      |
-| GRPCRoute  | No Listener TLS            | Yes                                           | Implementation-dependent      |
-| GRPCRoute  | Listener TLS               | No                                            | No                            |
-| GRPCRoute  | No Listener TLS            | No                                            | No                            |
+The `BackendTLSPolicy` tells a client "Connect to this service using TLS".
+This is unconditional to the type of traffic the gateway client is forwarding.
+
+For instance, the following will all have the gateway client add TLS if the backend is targeted by a BackendTLSPolicy:
+
+* A Gateway accepts traffic on an HTTP listener
+* A Gateway accepts and terminates TLS on an HTTPS listener
+* A Gateway accepts traffic on a TCP listener
+
+There is no need for a Gateway that accepts traffic with `Mode: Passthrough` to do anything differently here, but implementations MAY choose to treat TLS passthrough as a special case. Implementations that do this SHOULD clearly document their approach if BackendTLSPolicy is treated differently for TLS passthrough.
+
+Note that there are cases where these patterns may result in multiple layers of TLS on a single connection.
+There may be even cases where the gateway implementation is unaware of this; for example, processing TCPRoute traffic -- the traffic may or may not be TLS, and the gateway would be unaware.
+This is intentional to allow full fidelity of the API, as this is commonly desired for tunneling scenarios.
+When users do not want this, they should ensure that the BackendTLSPolicy is not incorrectly applied to traffic that is already TLS.
+The [Future Plans](#future-plans) include more controls over the API to make this easier to manage.
 
 ## Request Flow
 
@@ -281,6 +272,23 @@ reverse proxy. This is shown as **bolded** additions in step 6 below.
 6. Lastly, the reverse proxy **optionally performs a TLS handshake** and forwards the request to one or more objects,
 i.e. Service, in the cluster based on backendRefs rules of the HTTPRoute **and the TargetRefs of the BackendTLSPolicy**.
 
+## Future plans
+
+In order to scope this GEP, some some changes are deferred to a near-future GEP.
+This GEP intends to add the ability for additional control by gateway clients to override TLS settings, following previously established patterns of [consumer and producer policies]([glossary](https://gateway-api.sigs.k8s.io/concepts/glossary/?h=gloss#producer-route)).
+Additionally, more contextual control over when to apply the policies will be explored, to enable use cases like "apply TLS only from this route" ([issue](https://github.com/kubernetes-sigs/gateway-api/issues/3856)).
+
+While the details of these plans are out of scope for this GEP it is important to be aware of the future plans for the API to ensure the immediate-term plans are future-proofed against the proposed plans.
+
+Implementations should plan for the existence of future fields that may be added that will control where the TLS policy applies.
+These may include, but are not limited to:
+
+* `spec.targetRefs.namespace`
+* `spec.targetRefs.from`
+* `spec.mode`
+
+While in some cases adding new fields may be seen as a backwards compatibility risk, due to older implementations not knowing to respect the fields, these fields (or similar, should future GEPs decide on new names) are pre-approved to be added in a future release, should the GEPs to add them are approved in the first place.
+
 ## Alternatives
 Most alternatives are enumerated in the section "The history of backend TLS".  A couple of additional
 alternatives are also listed here.
@@ -405,8 +413,6 @@ the implementation would be required to fully implement the policy or mark the b
 
 [GEP-713: Metaresources and PolicyAttachment](../gep-713/index.md)
 
-[Policy Attachment](../../reference/policy-attachment.md#direct-policy-attachment)
-
 [Gateway API TLS](../../guides/tls.md)
 
 [SIG-NET Gateway API: TLS to the K8s.Service/Backend](https://docs.google.com/document/d/1RTYh2brg_vLX9o3pTcrWxtZSsf8Y5NQvIG52lpFcZlo)
diff --git a/geps/gep-1911/index.md b/geps/gep-1911/index.md
index c26565ce..fb6df214 100644
--- a/geps/gep-1911/index.md
+++ b/geps/gep-1911/index.md
@@ -85,7 +85,6 @@ Implementations MAY support the following combinations below:
 
 ServicePort Protocol | ServicePort AppProtocol | Route Type | Supported
 -|-|-|-
-ServicePort Protocol | ServicePort AppProtocol | Route Type | Supported
 `TCP`  | `kubernetes.io/wss` | `HTTPRoute` | Conditional [1]
 
 1. Only if there is a corresponding `BackendTLSPolicy` - see [GEP-1897](../gep-1897/index.md)
diff --git a/geps/gep-2162/index.md b/geps/gep-2162/index.md
index 38b2dbf6..a8959acc 100644
--- a/geps/gep-2162/index.md
+++ b/geps/gep-2162/index.md
@@ -123,7 +123,7 @@ Every feature should:
 
 #### Conformance test names
 
-Conformance tests file names should try to follow the `pascal-case-name.go` format.
+Conformance tests file names should try to follow the `kebab-case-name.go` format.
 For example for `HTTPRoutePortRedirect` - the test file would be `httproute-port-redirect.go`.
 
 We should treat this guidance as "best effort" because we might have test files that check the combination of several features and can't follow the same format.
diff --git a/geps/gep-2627/index.md b/geps/gep-2627/index.md
new file mode 100644
index 00000000..86a36152
--- /dev/null
+++ b/geps/gep-2627/index.md
@@ -0,0 +1,51 @@
+# GEP-2627: DNS configuration within Gateway API
+
+* Issue: [#2627](https://github.com/kubernetes-sigs/gateway-api/issues/2627)
+* Status: Provisional
+
+## TLDR
+
+For gateway infrastructure to be valuable we need to be able to connect clients to these gateways. A common way to achieve this is to use domain names/hostnames and DNS. The guidelines for DNS configuration are a critical piece of service networking, but this is currently not expressible as part of Gateway API. Instead of leaving this unspecified and having implementations likely to do this in different ways, the purpose of this proposal is to provide a standard way to specify DNS for Gateways.
+
+## Goals
+* Provide DNS specification for Gateway resources
+* Support multiple DNS providers and a selection mechanism for Gateways
+* Provide Gateway status to communicate the state of provisioned DNS
+* Increase portability and supportability between Gateway API implementations and third party controllers offering DNS integration.
+
+## Non-Goals
+
+* Providing any upstream hostname validation mechanisms. We can provide status for validation failure, but implementations are responsible for validation.
+* Multi-cluster DNS for multi-cluster ingress solutions (at least not as part of the initial API)
+
+## Use Cases
+
+As a cluster administrator, I manage a set of domains and a set of gateways. I would like to declaratively define which gateways should be used for provisioning DNS records, and, if necessary, which DNS provider to use to configure connectivity for clients accessing these domains and my gateway so that I can see and configure which DNS provider is being used.
+
+As a cluster administrator, I would like to have the DNS names automatically populated into my specified DNS zones as a set of records based on the assigned addresses of my gateways so that I do not have to undertake external automation or management of this essential task.
+
+As a cluster administrator I would have the status of the DNS records reported back to me, so that I can leverage existing kube based monitoring tools to know the status of the integration.
+
+As a cluster administrator, I would like the DNS records to be updated automatically if the `spec` of assigned gateways changes, whether those changes are for IP address or hostname. 
+
+As a DNS administrator, I should be able to ensure that only approved External DNS controllers can make changes to DNS zone configuration. (This should in general be taken care of by DNS system <-> External DNS controller interactions like user credentials and operation status responses, but it is important to remember that it needs to happen).
+
+## API
+
+Initial draft will not offer an API yet until the use cases are agreed. Some thoughts worth thinking about: 
+- I think it is important that we try to move away from APIs based on annotations which, while convenient, are not a full API and suffer from several limitations. An example: I want to configure a listener with a domain I own that is in a different provider than the domains of the other listeners. I want to add a new option to configure a particular weighting and so on. Soon you end up with a large set of connected annotations that often grow in complexity that really should be expressed as an API.
+
+- It is also important that this API can be delegated to controllers other than the Gateway API provider/implementor. This is because there are existing solutions that may want to support whatever API decided upon. It should not **have** to be a gateway provider that has to integrate with many DNS providers. 
+
+## Conformance Details
+
+TBD
+
+## Alternatives
+
+it is possible to use `external-dns` to manage dns based on HTTPRoutes and Gateways https://github.com/kubernetes-sigs/external-dns/blob/7f3c10d65297ec1c4bcc8dd6f88c189b7f3e80d0/docs/tutorials/gateway-api.md. The aim of this GEP is not remove this as an option, but instead provide a common API that could then be leveraged by something like external-dns. 
+
+
+## References
+
+The Kuadrant project, offers a [DNSPolicy API](https://docs.kuadrant.io/1.2.x/kuadrant-operator/doc/reference/dnspolicy/#dnspolicy) which in part was the basis and inspiration for opening this GEP. The DNSPolicy offered by Kuadrant goes beyond what is outlined here as it also handles multi-cluster ingress and offers common routing options such as GEO and Weighted responses. 
\ No newline at end of file
diff --git a/geps/gep-2627/metadata.yaml b/geps/gep-2627/metadata.yaml
new file mode 100644
index 00000000..17dfb342
--- /dev/null
+++ b/geps/gep-2627/metadata.yaml
@@ -0,0 +1,7 @@
+apiVersion: internal.gateway.networking.k8s.io/v1alpha1
+kind: GEPDetails
+number: 2627
+name: DNS configuration for Gateway API
+status: Provisional
+authors:
+  - maleck13
diff --git a/geps/gep-2722/index.md b/geps/gep-2722/index.md
index 135e2c76..fc6a609d 100644
--- a/geps/gep-2722/index.md
+++ b/geps/gep-2722/index.md
@@ -387,7 +387,7 @@ distribution mechanisms will be provided:
   for visualizing data and presenting information in a visually appealing
   manner.
 * Evaluate how gwctl can be extended to support [Mesh use
-  cases](/concepts/gamma/#how-the-gateway-api-works-for-service-mesh)
+  cases](../../mesh/index.md)
 
 ## References
 
diff --git a/geps/gep-2907/index.md b/geps/gep-2907/index.md
index 019d336b..a44451bd 100644
--- a/geps/gep-2907/index.md
+++ b/geps/gep-2907/index.md
@@ -21,14 +21,12 @@ and [Client Certificate Verification](../gep-91/index.md).
   is merely to provide space for future configuration, not a commitment that we
   will add it to the API.)
 
-## Out of Initial Scope
+## Out of Scope
 There are a variety of related TLS concepts in Gateway API that are not currently
 in scope for this GEP. In the future, this GEP may be expanded to include:
 
 1. Automatic mTLS (often associated with Service mesh)
-1. TLS Passthrough
-1. TLSRoute
-
+2. TLSRoute
 
 ## Introduction
 
@@ -75,6 +73,17 @@ flowchart LR
 
 The above diagram depicts these four segments as edges in a graph.
 
+### TLS mode
+
+TLS can be configured with two distinct modes:
+
+* **Terminate**: the TLS connection is instantiated between the frontend and the
+  Gateway. The connection between the Gateway and the backend is left unencrypted
+ unless a new TLS connection between the two entities is configured via BackendTLSPolicy.
+* **Passthrough**: the TLS connection is instantiated between the frontend and the
+  backend. The traffic flows through the Gateway encrypted, and the Gateway is not
+  able to decrypt or inspect the encrypted portions of the TLS stream.
+
 ## Proposed Segments
 Note that this does not represent any form of commitment that any of these
 fields or concepts will exist within Gateway API. If or when they do, we propose
@@ -125,7 +134,6 @@ for a Gateway is not sufficiently different than the persona that would be
 responsible for frontend TLS, so the current proposal is likely the best option
 available to us.
 
-
 ### 2. Configure TLS Termination, including Server Certificate
 
 | Proposed Placement | Name | Status |
@@ -137,7 +145,6 @@ This is already finalized in the API and so we're stuck with this name. In
 hindsight a name that was more clearly tied to frontend TLS would have been
 ideal here.
 
-
 ### 3. Configure Client Certificate that Gateway should use to connect to Backend
 
 | Proposed Placement | Name | Status |
@@ -160,7 +167,6 @@ use when connecting to a backend, it should likely either be tied directly to
 the Gateway or Backend, but the Listener is not particularly relevant in this
 context.
 
-
 ### 4. Validate Server Certificate that is provided by Backend
 | Proposed Placement | Name | Status |
 |-|-|-|
@@ -207,3 +213,64 @@ would be to introduce a Listener like resource for BackendTLS, resulting in a
 more consistent naming scheme within Gateway TLS configuration. Although it's
 not yet clear if we need this additional layer, we should reconsider it as we're
 further developing Backend TLS.
+
+### 5. Configure TLS mode
+
+| Proposed Placement | Name | Status |
+|-|-|-|
+| Gateway Listener | `Listener.TLS.Mode` | GA |
+
+#### Rationale
+
+Similarly to the broader [TLS termination](#2-configure-tls-termination-including-server-certificate)
+segment, this field is already finalized in the API. In hindsight, along with a
+different naming of `Listener.TLS`, we could have moved this field out of the broader
+frontend TLS configuration, as it is not bound to it.
+
+#### How the TLS configuration is affected
+
+The TLS mode affects how the frontend TLS should be configured. In case `Terminate`
+is set, the `Listener.TLS.CertificateRefs` field has to be populated, as the connection
+is intended to be terminated at the Gateway level, while for `Passthrough`, the Certificate
+does not need to be provided, as the TLS termination is handled by the backend.
+
+## Routes and TLS
+
+Multiple routes can be attached to listeners specifying TLS configuration. This section
+intends to clearly state how and when Routes can attach to listeners with TLS configuration.
+
+### Context
+
+The `*Route` objects refer the Gateway (or a specific Listener of the Gateway) they
+want to be attached to. A successful attachment can be granted by one of the two
+following conditions:
+
+* the `Listener.AllowedRoutes` field allows that specific Route `GroupKind` to be
+  attached to it, or
+* the `Listener.Protocol` field allows that specific Route to be attached to the
+  Listener. This applies only in case the Gateway's AllowedRoutes field is not set.
+
+In case the First condition is not satisfied (the Route references a Gateway that
+does not explicitly allow such an attachment), the Route `Accepted` condition
+is set to False with reason `NotAllowedByListeners`. In case the Route references
+a Gateway with no Listener matching the protocol needed by the Route, the Route
+`ResolvedRefs` condition is set to False with reason `UnsupportedProtocol`.
+
+### What Routes are allowed by Listeners with TLS
+
+The following is a summary of all the Routes and the TLS termination mode they support, along
+with the compatible protocol.
+
+| Protocol  |  Routes | TLS Terminate | TLS Passthough |
+|-----------|---------|---------------|----------------|
+| HTTP      | `HTTPRoute`/`GRPCRoute` | no  | no  |
+| HTTPS     | `HTTPRoute`/`GRPCRoute` | yes | no  |
+| TLS       | `TLSRoute`  | yes | yes | 
+| TCP       | `TCPRoute`  | yes | no  |
+| UDP       | `UDPRoute`  | no  | no  |
+
+> [!NOTE]
+> When the traffic is routed to the backend via a listener configured with TLS `Passthrough`
+> and a compatible route, the packets are left untouched by the gateway. In order to
+> terminate the TLS connection to the gateway and forward the traffic unencrypted to the backend,
+> a listener configured with TLS `Terminate` and a compatible route must be used.
diff --git a/geps/gep-3171/metadata.yaml b/geps/gep-3171/metadata.yaml
index 1c3b0550..3b4d54fc 100644
--- a/geps/gep-3171/metadata.yaml
+++ b/geps/gep-3171/metadata.yaml
@@ -5,9 +5,12 @@ name: Percentage-based Request Mirroring
 status: Standard
 authors:
   - jakebennert
+  - LiorLieberman
 references:
   - https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io%2fv1.HTTPRequestMirrorFilter
   - https://github.com/kubernetes-sigs/gateway-api/pull/3199
   - https://github.com/kubernetes-sigs/gateway-api/pull/3301
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3638
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3508
 featureNames:
-  - Percentage-based Request Mirroring
+  - HTTPRouteRequestPercentageMirror
diff --git a/geps/gep-3388/metadata.yaml b/geps/gep-3388/metadata.yaml
index 5f33570f..53b9ef12 100644
--- a/geps/gep-3388/metadata.yaml
+++ b/geps/gep-3388/metadata.yaml
@@ -26,7 +26,12 @@ relationships:
   seeAlso: {}
 # references is a list of hyperlinks to relevant external references.
 # It's intended to be used for storing GitHub discussions, Google docs, etc.
-references: {}
+references:
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3607
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3488
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3682
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3692
+  - https://github.com/kubernetes-sigs/gateway-api/pull/3695
 # featureNames is a list of the feature names introduced by the GEP, if there
 # are any. This will allow us to track which feature was introduced by which GEP.
 featureNames: {}
diff --git a/geps/gep-3779/index.md b/geps/gep-3779/index.md
new file mode 100644
index 00000000..49464b16
--- /dev/null
+++ b/geps/gep-3779/index.md
@@ -0,0 +1,266 @@
+# GEP-3779: Identity Based Authz for East-West Traffic
+
+* Issue: [#3779](https://github.com/kubernetes-sigs/gateway-api/issues/3779)
+* Status: Provisional
+
+(See [status definitions](../overview.md#gep-states).)
+
+
+## TLDR
+
+Provide a method for configuring Gateway API Mesh implementations to enforce east-west identity-based Authorization controls. At the time of writing this we leave Authentication for specific implementation and outside of this proposal scope.
+
+
+## Goals
+
+(Using the [Gateway API Personas](../../concepts/roles-and-personas.md))
+
+* A way for Ana the Application Developer to configure a Gateway API for Mesh implementation to enforce authorization policy that **allows** or **denies** identity or multiple identities to talk with some set (could be namespace or more granualr) of the workloads she controls.
+
+* A way for both Ana and Chihiro to restrict the scope of the policies they deploy to specific ports.
+
+## TBD Goals
+
+* A way for Chihiro, the Cluster Admin, to configure a Gateway API for Mesh implementation to enforce non-overridable cluster-wide, authorization policies that **allows** or **denies** identity or multiple identities to talk with some set of the workloads in the cluster.
+
+* A way for Chihiro, the Cluster Admin, to configure a Gateway API for Mesh implementation to enforce default, overridable, cluster-wide, authorization policies that **allows** or **denies** identity or multiple identities to talk with some set of the workloads in the cluster.
+
+## Non-Goals
+
+* Support identity based authorization for north-south traffic or define the composition with this API.
+
+## Deferred Goals
+
+* (Potentially) Support enforcement on attributes beyond identities and ports.
+
+
+## Introduction
+
+Authorization is positioned as one of core mesh values. Every mesh supports some kind of east/west authorization between the workloads it controls.
+
+Kubernetes core provides NetworkPolicies as one way to do it. Network Policies however falls short in many ways including:
+
+* Network policies leverage labels as identities.
+  * Labels are mutable at runtime. This opens a path for escalating privileges
+  * Most implementations of network policies translate labels to IPs, this involves an eventual consistency nature which can and has lea to over permissiveness in the past.
+
+* Scale. Network Policies are enforced using IPs (different selectors in the APIs get translated to IPs). This does not scale well with large clusters or beyond a single cluster
+
+An identity-based authorization API is essential because it provides a structured way to control authorization between identities within the cluster.
+
+
+### State of the World
+
+
+| Aspect | Istio | Linkerd | Cilium |
+| ----- | ----- | ----- | ----- |
+| **Policy CRDs** | `AuthorizationPolicy` (APIs `security.istio.io/v1`) | `AuthorizationPolicy` (CRD `policy.linkerd.io/v1alpha1`), plus supporting CRDs (`Server`, `HTTPRoute`, `MeshTLSAuthentication`) | `CiliumNetworkPolicy` and `CiliumClusterwideNetworkPolicy` (superset of K8s NetworkPolicy) |
+| **Identity model** | Identities derived from mTLS peer certificates (bound to SA): <ul><li>SPIFFE-like principal `<trust-domain>/ns/<namespace>/sa/<serviceaccount>`. </li> <li>ServiceAccount name </li> <li>Namespaces</li></ul></br> identity within JWT derived from `request.auth.principal`<br/><br/>IPBlocks and x-forwarded-for ipBlocks | Identities derived from mTLS peer certificates (bound to SA trust domain `identity.linkerd.cluster.local`. Policies reference service accounts or explicit mesh identities (e.g. `webapp.identity.linkerd.cluster.local`). <br/><br/>Policies use `requiredAuthenticationRefs` to reference the entities who get authorization. This is a list of targetRefs and it can include: <ul><li>ServiceAccounts</li> <li>`MeshTLSAuthentication` - which represents a set of mesh identities either with a mesh identities strings or reference to serviceAccounts</li> <li>`NetworkAuthentication` - represents sets of IPs or subnets.</li></ul>  |Cilium service mesh can leverage SPIFFE identities in certs that are used for handshake. These SPIFFEE identities are mapped to CiliumIdentities. You can read more about cilium identities in [CiliumIdentity](#CiliumIdentity). <br/><br/>Policies target abstractions like service accounts in the form of labels, pod labels, namespace label, node selectors, CIDR blocks and Cilium predefined [entities](https://docs.cilium.io/en/stable/security/policy/language/#entities-based). All policy targeting is coalesced by Cilium into one or more Cilium Identities for translation into the BPF datapath|
+| **Enforcement** | For Istio with sidecars - a proxy on each pod. For ambient, ztunnel node agent enforces mTLS based L4 authorization, L7 authorization is being enforced in waypoints if any. <br/><br/> Istio supports ALLOW, DENY, CUSTOM (often used for external authorization), and AUDIT. DENY policies in istio's context are used to enforce higher priority deny policies. The allow semantics is that whatever is not allowed explicitly (and assuming there is any policy for the same match) is implicitly denied  | Linkerd data-plane proxy (injected into each pod). The proxy enforces policies via mTLS identity checks. <br/><br/> Linkerd supports AUDIT and ALLOW. There is not DENY policies, whats not allowed (and assuming there is any policy for the same match) is implicitly denied. | For L3/4 Ingress Rules, CiliumNetworkPolicy enforcement - an eBPF-based datapath in the Linux kernel on the destination node. If L7 http rules are specified, the packet is redirected for a node-local envoy for further enforcement.<br/><br/>Cilium supports ALLOW and DENY semantics - all policies generate audit logs. <br/><br/>Cilium service mesh also offers a kind of AuthN where a Cilium agent on the src node validates a workloads SPIFFE identity by talking to another agent on the destination node, performing the initial TLS handshake to do authentication.|
+| **Request Match criteria** | Policies can target a group of pods using label selector, a Gateway/Service (this means targeting a waypoint proxy) or a GatewayClass - meaning all the gateways created from this class.  Policies without a label selector in a namespace implies the whole namespace is targeted. <br/><br/> Fine-grained L7 and L4 matching: HTTP/gRPC methods, paths, headers, ports, SNI, etc.Policies use logical OR over rules. <br/><br/>All match criterias are inline in the policy. See https://istio.io/latest/docs/reference/config/security/authorization-policy/#Rule-To and https://istio.io/latest/docs/reference/config/security/authorization-policy/#Rule-when | Policies can target: <ul><li>A `Server` which describes a set of pods (using fancy label match expressions), and a single port on those pods.</li> <li>A user can optionally restrict the authorization to a smaller subset of the traffic by targeting an HTTPRoute. (TODO: any plans to support sectionNames?)</li> <li> A namespace - this indicates that the policy applies to all traffic to all Servers and HTTPRoutes defined in the namespace.</li></ul> Note: We leave `ServerAuthorization` outside the scope as it planned to be deprecated (per linkerd website)  | Policies can target groups of pods using label selector (`endpointSelector`), or by node-labels (`nodeSelector`). Cilium supports L7 via built-in HTTP parsing: rules can match HTTP methods, paths, etc. For example, a CiliumNetworkPolicy can allow only specific HTTP methods/paths on a port. |
+| **Default policies and admin policies** | If **no** ALLOW policy matches, traffic is **allowed** by default. You can deploy an overridable - default deny by default by deploying an **allow-nothing** policy in either the namespace or istio-system <br/><br/>AuthorizationPolicies in the `istio-system` namespace apply to the whole mesh and take precedence. These are not overridable by namespace-level policies.  | Default inbound policy can be set at install time using `proxy.defaultInboundPolicy`. Supported values are: <ul><li>`all-unauthenticated:` allow all traffic. This is the default.</li>  <li>`all-authenticated:` allow traffic from meshed clients in the same or from a different cluster (with multi-cluster).</li>  <li>`cluster-authenticated:` allow traffic from meshed clients in the same cluster.</li>  <li>`cluster-unauthenticated:` allow traffic from both meshed and non-meshed clients in the same cluster.</li>  <li>`deny:` all traffic are denied. </li> <li>`audit:` Same as all-unauthenticated but requests get flagged in logs and metrics.</li> </ul> <br/>Users can override the default policies for namespaces/pods or by setting the [config.linkerd.io/default-inbound-policy](http://config.linkerd.io/default-inbound-policy) annotation There is no support for admin, non overridable policies. | Follows Kubernetes NetworkPolicy semantics by default: if no `CiliumNetworkPolicy` allows the traffic, it is allowed (no implicit deny). Once at least one `CiliumNetworkPolicy` or `CiliumClusterwideNetworkPolicy` allows some traffic, all other traffic is implicitly denied.
+<br/><br/> Operators must apply explicit deny rules or “default-deny” policies to block traffic in the absence of allow rules. <br/><br/> `CiliumClusterwideNetworkPolicy` exists for whole-cluster enforcement.)|
+
+
+Every mesh vendor has their own API of such authorization. Below we describe brief UX for different implementations:
+
+#### Istio
+For the full spec and sematics of Istio AuthorizationPolicy: [Istio authorization policy docs](https://istio.io/latest/docs/reference/config/security/authorization-policy/)
+
+Istio's AuthorizationPolicy can enforce access control by specifying allowed istio-formatted identities using the `source.principals` field, which matches authenticated service account identities via mTLS. You can also use other source constructs which are described in the table above and in https://istio.io/latest/docs/reference/config/security/authorization-policy/#Source.
+
+```
+apiVersion: security.istio.io/v1beta1
+kind: AuthorizationPolicy
+metadata:
+  name: allow-sleep
+  namespace: default
+spec:
+  selector:
+    matchLabels:
+      app: httpbin  # The policy applies to pods with this label
+  action: ALLOW
+  rules:
+  - from:
+    - source:
+        principals: ["cluster.local/ns/default/sa/sleep"]
+```
+
+OR targeting a gateway for example.
+
+```
+apiVersion: security.istio.io/v1beta1
+kind: AuthorizationPolicy
+metadata:
+  name: allow-sleep
+  namespace: default
+spec:
+  targetRefs:
+  - name: waypoint
+    kind: Gateway # note: supported target Refs are Gateway, GatewayClass, Service, and ServiceEntry
+    group: gateway.networking.k8s.io
+  action: ALLOW
+  rules:
+  - from:
+    - source:
+        principals: ["cluster.local/ns/default/sa/sleep"]
+```
+#### Linkerd
+
+For the full spec and sematics of Linkerd AuthorizationPolicy: [Linkerd authorization policy docs](https://linkerd.io/2-edge/reference/authorization-policy/)
+
+In Linkerd, identity-based authorization is enforced using AuthorizationPolicy and MeshTLSAuthentication, where MeshTLSAuthentication specifies allowed ServiceAccounts or mTLS identities (e.g., sleep.default.serviceaccount.identity.linkerd.cluster.local), ensuring that only authenticated workloads can access a resource.
+
+Linkerd Policy can by applied to two different targets.
+
+##### Pod Labels with Server Resource
+
+```
+apiVersion: policy.linkerd.io/v1beta1
+kind: Server
+metadata:
+  namespace: default
+  name: httpbin-server
+spec:
+  podSelector:
+    matchLabels:
+      app: httpbin
+  port: 8080
+  proxyProtocol: HTTP/2
+
+----
+apiVersion: policy.linkerd.io/v1beta1
+kind: MeshTLSAuthentication
+metadata:
+  name: sleep-authn
+  namespace: default
+spec:
+  identities:
+    - sleep.default.serviceaccount.identity.linkerd.cluster.local
+----
+
+apiVersion: policy.linkerd.io/v1beta1
+kind: AuthorizationPolicy
+metadata:
+  name: allow-sleep
+  namespace: default
+spec:
+  targetRef:
+    group: policy.linkerd.io
+    kind: Server
+    name: httpbin-server
+  requiredAuthenticationRefs:
+    - name: sleep-authn
+      kind: MeshTLSAuthentication
+      group: policy.linkerd.io/v1beta1
+
+---
+```
+
+##### HTTPRoutes
+
+```
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: httpbin-route
+  namespace: default
+spec:
+  parentRefs:
+    - name: httpbin
+      kind: Service
+  rules:
+    - matches:
+        - path:
+            type: PathPrefix
+            value: /
+      backendRefs:
+        - name: httpbin
+          port: 80
+
+-----
+
+apiVersion: policy.linkerd.io/v1beta1
+kind: MeshTLSAuthentication
+metadata:
+  name: sleep-authn
+  namespace: default
+spec:
+  identities:
+    - sleep.default.serviceaccount.identity.linkerd.cluster.local
+-----
+
+apiVersion: policy.linkerd.io/v1beta1
+kind: AuthorizationPolicy
+metadata:
+  name: allow-sleep-http
+  namespace: default
+spec:
+  targetRef:
+    group: gateway.networking.k8s.io
+    kind: HTTPRoute
+    name: httpbin-route
+  requiredAuthenticationRefs:
+    - name: sleep-authn
+      kind: MeshTLSAuthentication
+      group: policy.linkerd.io/v1beta1
+---
+```
+
+
+#### Cilium
+
+For the full spec and sematics of CiliumNetworkPolicy: https://docs.cilium.io/en/stable/network/kubernetes/policy/#ciliumnetworkpolicy & https://docs.cilium.io/en/stable/network/servicemesh/gateway-api/gateway-api/#cilium-s-ingress-config-and-ciliumnetworkpolicy
+
+Beyond what's explained in the table above, Cilium also automatically labels each pod with its associated service account using the label io.cilium.k8s.policy.serviceaccount. This label can be used in CiliumNetworkPolicy to enforce identity-based access controls using [ServiceAccounts Based Identities](https://docs.cilium.io/en/latest/security/policy/kubernetes/#serviceaccounts) within CiliumNetworkPolicy;
+
+See below for example.
+
+```
+apiVersion: "cilium.io/v2"
+kind: CiliumNetworkPolicy
+metadata:
+  name: "k8s-svc-account-policy"
+spec:
+  endpointSelector:
+    matchLabels:
+      io.cilium.k8s.policy.serviceaccount: httpbin
+  ingress:
+  - fromEndpoints:
+    - matchLabels:
+        io.cilium.k8s.policy.serviceaccount: sleep
+    toPorts:
+    - ports:
+      - port: '80'
+        protocol: TCP
+      rules:
+        http:
+        - method: GET
+          path: "/"
+```
+
+
+##### CiliumIdentity
+Cilium has the concept of CiliumIdentity. Pods are assigned identities derived from their Kubernetes labels (namespace, app labels, etc.). Cilium’s policy matches based on these label-derived identities. The CiliumIdentity implementation maps an integer to a group of IP addresses (the pod IPs associated with a group of pods). This “integer” and its mapping to pod IP addresses represents the core identity primitive in Cilium.  
+
+More on https://docs.cilium.io/en/stable/internals/security-identities/ & https://docs.cilium.io/en/stable/security/network/identity/
+
+
+
+## API
+
+
+
+## Conformance Details
+
+
+#### Feature Names
+
+
+### Conformance tests 
+
+
+## Alternatives
+
+
+## References
\ No newline at end of file
diff --git a/geps/gep-3779/metadata.yaml b/geps/gep-3779/metadata.yaml
new file mode 100644
index 00000000..3c5b9af7
--- /dev/null
+++ b/geps/gep-3779/metadata.yaml
@@ -0,0 +1,19 @@
+apiVersion: internal.gateway.networking.k8s.io/v1alpha1
+kind: GEPDetails
+number: 3779
+name: Identity Based Authz for east-west traffic
+status: Provisional
+# Any authors who contribute to the GEP in any way should be listed here using
+# their GitHub handle.
+authors:
+  - liorlieberman
+  - aryan16
+# references is a list of hyperlinks to relevant external references.
+# It's intended to be used for storing GitHub discussions, Google docs, etc.
+references: {}
+# featureNames is a list of the feature names introduced by the GEP, if there
+# are any. This will allow us to track which feature was introduced by which GEP.
+featureNames: {}
+# changelog is a list of hyperlinks to PRs that make changes to the GEP, in
+# ascending date order.
+changelog: {}
diff --git a/geps/gep-3792/index.md b/geps/gep-3792/index.md
new file mode 100644
index 00000000..b0c5d80b
--- /dev/null
+++ b/geps/gep-3792/index.md
@@ -0,0 +1,264 @@
+# GEP-3792: Out-of-Cluster Gateways
+
+* Issue: [#3792](https://github.com/kubernetes-sigs/gateway-api/issues/3792)
+* Status: Provisional
+
+(See [status definitions](../overview.md#gep-states).)
+
+## User Story
+
+**[Chihiro] and [Ian] want a way for out-of-cluster Gateways to be able to
+usefully participate in a GAMMA-compliant in-cluster service mesh.**
+
+Historically, API gateways and ingress controllers have often been implemented
+using a Service of type LoadBalancer fronting a Kubernetes pod running a
+proxy. This is simple to reason about, easy to manage for sidecar meshes, and
+will presumably be an important implementation mechanism for the foreseeable
+future. Some cloud providers, though, are moving the proxy outside of the
+cluster, for various reasons which are out of the scope of this GEP. Chihiro
+and Ian want to be able to use these out-of-cluster proxies effectively and
+safely, though they recognize that this may require additional configuration.
+
+[Chihiro]: https://https//gateway-api.sigs.k8s.io/concepts/roles-and-personas/#chihiro
+[Ian]: https://https//gateway-api.sigs.k8s.io/concepts/roles-and-personas/#ian
+
+### Nomenclature and Background
+
+In this GEP:
+
+1. We will use _out-of-cluster Gateway_ (OCG) to refer to a conformant
+   implementation of Gateway API's `GATEWAY` profile that's running outside of
+   the cluster. This would most commonly be a managed implementation from a
+   cloud provider, but of course there are many other possibilities -- and in
+   fact it's worth noting that anything we define here to support OCGs could
+   also be used by workloads that run in-cluster but which, for whatever
+   reason, can't be brought into the mesh in the mesh's usual way.
+
+2. We'll also distinguish between _mTLS meshes_, which rely on standard mTLS
+   for secure communication (authentication, encryption, and integrity
+   checking) between workloads, and _non-mTLS meshes_, which do anything else.
+   We'll focus on mTLS meshes in this GEP; this isn't because of a desire to
+   exclude non-mTLS meshes, but because we'll have enough trouble just
+   wrangling the mTLS meshes! Supporting non-mTLS meshes will be a separate
+   GEP.
+
+   **Note:** It's important to separate mTLS and HTTPS here. Saying that the
+   mTLS meshes use mTLS for secure communication does not preclude them from
+   using custom protocols on top of mTLS, and certainly does not mean that
+   they must use only HTTPS.
+
+3. _Authentication_ is the act of verifying the identity of some _principal_;
+   what the principal actually is depends on context. For this GEP we will
+   primarily be concerned with _workload authentication_, in which the
+   principal is a workload, as opposed to _user authentication_, in which the
+   principal is the human on whose behalf a piece of technology is acting. We
+   expect that the OCG will handle user auth, but of course meshed workloads
+   can't trust what the OCG says about the user unless the OCG successfully
+   authenticates itself as a workload.
+
+   **Note:** A single workload will have only one identity, but in practice we
+   often see a single identity being used for multiple workloads (both because
+   multiple replicas of a single workload need to share the same identity, and
+   because some low-security workloads may be grouped together under a single
+   identity).
+
+4. Finally, we'll distinguish between _inbound_ and _outbound_ behaviors.
+
+   Inbound behaviors are those that are applied to a request _arriving_ at a
+   given workload. Authorization and rate limiting are canonical examples
+   of inbound behaviors.
+
+   Outbound behaviors are those that are applied to a request _leaving_ a
+   given workload. Load balancing, retries, and circuit breakers are canonical
+   examples of outbound behaviors.
+
+## Goals
+
+- Allow Chihiro and Ian to configure an OCG and a mesh such that the OCG can
+  usefully participate in the mesh, including:
+
+    - The OCG must be able to securely communicate with meshed workloads in
+      the cluster, where "securely communicate" includes encryption,
+      authentication, and integrity checking.
+
+    - The OCG must have a proper identity within the mesh, so that the mesh
+      can apply authorization policy to requests from the OCG.
+
+    - Whatever credentials the OCG and the mesh use to authenticate each other
+      must be able to be properly maintained over time (for example, if they
+      use mTLS, certificates will need rotation over time).
+
+    - The OCG must be able to distinguish meshed workloads from non-meshed
+      workloads, so that it can communicate appropriately with each.
+
+- Allow Ana to develop and operate meshed applications without needing to know
+  whether the Gateway she's using is an OCG or an in-cluster Gateway.
+
+- Define a basic set of requirements for OCGs and meshes that want to
+  interoperate with each other (for example, the OCG and the mesh will likely
+  need to agree on how workload authentication principals are represented).
+
+- Define how responsibility is shared between the OCG and the mesh for
+  outbound behaviors applied to requests leaving the OCG. (Note that "the OCG
+  has complete responsibility and authority over outbound behaviors for
+  requests leaving the OCG" is very much a valid definition.)
+
+## Non-Goals
+
+- Support multicluster operations. It may be the case that functional
+  multicluster (with, e.g., a single OCG fronting multiple clusters) ends up
+  falling out of this GEP, but it is not a goal.
+
+- Support meshes interoperating with each other. It's possible that this GEP
+  will lay a lot of groundwork in that direction, but it is not a goal.
+
+- Support non-mTLS meshes in Gateway API 1.4. We'll make every effort not to
+  rule out non-mTLS meshes, but since starting with the mTLS meshes should
+  tackle a large chunk of the industry with a single solution, that will be
+  the initial focus.
+
+- Solve the problem of extending a mesh to cover non-Kubernetes workloads (AKA
+  _mesh expansion_). In many ways, mesh expansion is adjacent to the OCG
+  situation, but the where the OCG is aware of the cluster and mesh, mesh
+  expansion deals with a non-Kubernetes workload that is largely not aware of
+  either.
+
+- Solve the problem of how to support an OCG doing mTLS directly to a
+  _non_-meshed workload (AKA the _backend TLS problem_). Backend TLS to
+  non-meshed workloads is also adjacent to the OCG situation, but its
+  configuration has different needs: backends terminating TLS on their own are
+  likely to need per-workload configuration of certificates, cipher suites,
+  etc., where the mesh as a whole should share a single configuration.
+
+- Prevent the OCG API from being used by an in-cluster workload. We're not
+  going to make in-cluster workloads a primary use case for this GEP, but
+  neither are we disallowing them.
+
+## Overview
+
+Making an OCG work with an in-cluster mesh at the most basic level doesn't
+really require any special effort. As long as the OCG has IP connectivity to
+pods in the cluster, and the mesh is configured with permissive security, the
+OCG can simply forward traffic from clients directly to meshed pods, and
+things will "function" in that requests from clients, through the OCG, can be
+handled by workloads in the cluster.
+
+Of course, this sort of non-integration has obvious and terrible security
+implications, since the traffic between the OCG and the application pods in
+the cluster will be cleartext in the scenario above. The lack of encryption is
+awful in its own right, but the fact that any mTLS mesh uses mTLS for
+_authentication_ also means that the mesh loses any way to enforce
+authorization policy around the OCG. Combined, these items amount to a major
+problem.
+
+An additional concern is that the OCG needs to be able to implement features
+(e.g. sticky sessions) which require it to speak directly to endpoint IPs,
+which can limit what the mesh will be able to do. This is likely a more minor
+concern since a conformant OCG should itself be able to provide advanced
+functionality; however, at minimum it can create some friction in
+configuration.
+
+### The Problems
+
+To allow the OCG to _usefully_ participate in the mesh, we need to solve at
+least four significant problems. Thankfully, these are mostly problems for
+Chihiro -- if we do our jobs correctly, Ana will never need to know.
+
+#### 1. The Trust Problem
+
+The _trust problem_ is fairly straightforward to articulate: the OCG and the
+mesh both need access to whatever information will allow each of them to trust
+the other.
+
+In the case of mTLS meshes, we are helped by the fact that basically every OCG
+candidate already speaks mTLS, so the trust problem becomes "only" one of
+setting things up for the OCG and the mesh to each include the other's CA
+certificate in their trust bundle. (They may be using the same CA certificate,
+but we shouldn't rely on that.)
+
+In the case of non-mTLS meshes, the trust problem is more complex; this is the
+major reason that this GEP is focused on mTLS meshes.
+
+#### 2. The Protocol Problem
+
+The _protocol problem_ is that the data-plane elements of the mesh may assume
+that they'll always be talking only to other mesh data-plane elements, which
+the OCG will not be. If the mesh data-plane elements use a specific protocol,
+then either the OCG will need to speak that protocol, or the mesh will need to
+relax its requirements (perhaps on a separate port?) to accept requests
+directly from the OCG.
+
+For example, Linkerd and Istio Legacy both use standard mTLS for
+proxy-to-proxy communication -- however, both also use ALPN to negotiate
+custom (and distinct!) "application" protocols during mTLS negotiation, and
+depending on the negotiated protocol, both can require the sending proxy to
+send additional information after mTLS is established, before any client data
+is sent. (For example, Linkerd requires the originating proxy to send
+transport metadata right after the TLS handshake, and it will reject a
+connection which doesn't do that correctly.)
+
+#### 4. The Discovery Problem
+
+When using a mesh, not every workload in the cluster is required to be meshed
+(for example, it's fairly common to have some namespaces meshed and other
+namespaces not meshed, especially during migrations). The _discovery problem_
+here is that the OCG needs to be know which workloads are meshed, so that it
+can choose appropriate communication methods for them.
+
+#### 4. The Outbound Behavior Problem
+
+The OCG will need to speak directly to endpoints in the cluster, as described
+above. This will prevent most meshes from being able to tell which service was
+originally requested, which makes it impossible for the mesh to apply outbound
+behaviors. This is the _outbound behavior problem_: it implies that either the
+OCG must be responsible for outbound behaviors for requests leaving the OCG
+for a meshed workload, or that the OCG must supply the mesh with enough
+information about the targeted service to allow the mesh to apply those
+outbound behaviors (if that's even possible: sidecar meshes may very well
+simply not be able to do this.)
+
+This is listed last because it shouldn't be a functional problem to simply
+declare the OCG solely responsible for outbound behaviors for requests leaving
+the OCG. It is a UX problem: if a given workload needs to be used by both the
+OCG or other meshed workloads, you'll need to either provide two Routes with
+the same configuration, or you'll need to provide a single Route with multiple
+`parentRef`s.
+
+## API
+
+Most of the API work for this GEP is TBD at this point, but there are two
+important points to note:
+
+First, Gateway API has never defined a Mesh resource because, to date, it's
+never been clear what would go into it. This may be the first configuration
+item that causes us to need a Mesh resource.
+
+Second, since the API should affect only Gateway API resources, it is not a
+good candidate for policy attachment. It is likely to be much more reasonable
+to simply provide whatever extra configuration we need inline in the Gateway
+or Mesh resources.
+
+## Graduation Criteria
+
+In addition to the [general graduation
+criteria](../concepts/versioning.md#graduation-criteria), this GEP must also
+guarantee that **all four** of the problems listed above need resolutions, and
+must have implementation from at least two different Gateways and two
+different meshes.
+
+### Gateway for Ingress (North/South)
+
+### Gateway For Mesh (East/West)
+
+## Conformance Details
+
+#### Feature Names
+
+This GEP will use the feature name `MeshOffClusterGateway`, under the
+assumption that we will indeed need a Mesh resource.
+
+### Conformance tests
+
+## Alternatives
+
+## References
diff --git a/geps/gep-3792/metadata.yaml b/geps/gep-3792/metadata.yaml
new file mode 100644
index 00000000..4478b32b
--- /dev/null
+++ b/geps/gep-3792/metadata.yaml
@@ -0,0 +1,33 @@
+apiVersion: internal.gateway.networking.k8s.io/v1alpha1
+kind: GEPDetails
+number: 3792
+name: Out-of-Cluster Gateways
+status: Provisional
+# Any authors who contribute to the GEP in any way should be listed here using
+# their GitHub handle.
+authors:
+  - kflynn
+relationships:
+  # obsoletes indicates that a GEP makes the linked GEP obsolete, and completely
+  # replaces that GEP. The obsoleted GEP MUST have its obsoletedBy field
+  # set back to this GEP, and MUST be moved to Declined.
+  obsoletes: {}
+  obsoletedBy: {}
+  # extends indicates that a GEP extends the linked GEP, adding more detail
+  # or additional implementation. The extended GEP MUST have its extendedBy
+  # field set back to this GEP.
+  extends: {}
+  extendedBy: {}
+  # seeAlso indicates other GEPs that are relevant in some way without being
+  # covered by an existing relationship.
+  seeAlso: {}
+# references is a list of hyperlinks to relevant external references.
+# It's intended to be used for storing GitHub discussions, Google docs, etc.
+references: {}
+# featureNames is a list of the feature names introduced by the GEP, if there
+# are any. This will allow us to track which feature was introduced by which GEP.
+# This is the value added to supportedFeatures and the conformance tests, in string form.
+featureNames: {}
+# changelog is a list of hyperlinks to PRs that make changes to the GEP, in
+# ascending date order.
+changelog: {}
diff --git a/geps/gep-3793/index.md b/geps/gep-3793/index.md
new file mode 100644
index 00000000..0c8ba3e6
--- /dev/null
+++ b/geps/gep-3793/index.md
@@ -0,0 +1,217 @@
+# GEP-3793: Default Gateways
+
+* Issue: [#3793](https://github.com/kubernetes-sigs/gateway-api/issues/3793)
+* Status: Provisional
+
+(See [status definitions](../overview.md#gep-states).)
+
+## User Story
+
+**[Ana] wants a concept of a default Gateway.**
+
+Gateway API currently requires every north/south Route object to explicitly
+specify its parent Gateway. This is helpful in that it removes ambiguity, but
+it's less helpful in that [Ana] is stuck constantly explicitly configuring a
+thing that she probably doesn't care much about: in a great many cases, Ana
+just wants to create a Route that "works from the outside world" and she
+really doesn't care what the Gateway is called.
+
+Therefore, Ana would like a way to be able to rely on a default Gateway that
+she doesn't have to explicitly name, and can simply trust to exist.
+
+[Ana]: https://https//gateway-api.sigs.k8s.io/concepts/roles-and-personas/#ana
+
+## Goals
+
+- Give Ana a way to use Gateway API without having to explicitly specify a
+  Gateway for every Route, ideally without mutating Routes.
+
+- Give Ana an easy way to determine which Gateway is the default, and which of
+  her Routes are bound to it.
+
+- Continue supporting multiple Gateways in a cluster, while allowing exactly
+  one of them to be the default Gateway.
+
+- Allow [Chihiro] to retain control over which Gateway is the default, so that
+  they can ensure that it meets their requirements for security, performance,
+  and other operational concerns.
+
+- Allow Chihiro to choose not to provide a default Gateway.
+
+- Allow Chihiro to rename, reconfigure, or replace the default Gateway at
+  runtime.
+
+  - If Chihiro renames the default Gateway, Routes using the default Gateway
+    MUST remain bound to the new default Gateway. Ana shouldn't need to go
+    recreate all her Routes just because Chihiro is being indecisive.
+
+  - Determine how (or if) to signal changes in functionality if the default
+    Gateway implementation is changed. For example, suppose that Chihiro
+    switches the default Gateway from an implementation that supports the
+    `HTTPRoutePhaseOfTheMoon` filter to an implementation that does not.
+
+    (Note that this problem is not unique to default Gateways; it affects
+    explicitly-named Gateways as well.)
+
+- Allow Chihiro to control which Routes may bind to the default Gateway, and
+  to enumerate which Routes are currently bound to the default Gateway.
+
+- Support easy interoperation with common CI/CD and GitOps workflows.
+
+- Define how (or if) listener and Gateway merging applies to a default
+  Gateway.
+
+## Non-Goals
+
+- Support multiple "default" Gateways in a single cluster. If Ana has to make
+  a choice about which Gateway she wants to use, she'll need to be explicit
+  about that.
+
+  Loosening this restriction later is a possibility. For example, we may later
+  want to consider allowing a default Gateway per namespace, or a default
+  Gateway per implementation running in a cluster. However, these examples are
+  not in scope for this GEP, in order to have a fighting chance of getting
+  functionality into Gateway API 1.4.
+
+- Allow Ana to override Chihiro's choice for the default Gateway for a given
+  Route without explicitly specifying the Gateway.
+
+- Require that every possible routing use case be met by a Route using the
+  default Gateway. There will be a great many situations that require Ana to
+  explicitly choose a Gateway; the existence of a default Gateway is not a
+  guarantee that it will be correct for any given use case.
+
+- Allow for "default Gateway" functionality without a Gateway controller
+  installed. Just as with any other Gateway, a default Gateway requires an
+  implementation to be installed.
+
+## Overview
+
+Gateway API currently requires every north/south Route object to explicitly
+specify its parent Gateway. This is a wonderful example of a fundamental
+tension in Gateway API:
+
+- [Chihiro] and [Ian] value _explicit definition_ of everything, because it
+  makes it easier for them to reason about the system and ensure that it meets
+  the standards they set for it.
+
+- [Ana], on the other hand, values _simplicity_ and _ease of use_, because
+  she just wants to get her job done without having to think about every little
+  detail.
+
+At present, Gateway API is heavily weighted towards the point of view of
+Chihiro and Ian. This causes friction for Ana: for example, she can't write
+examples or documentation for her colleagues (or her counterparts at other
+companies) without telling them that they'll need to be sure to edit the
+Gateway name in every Route. Nor can she write a Helm chart that includes a
+Route without requiring the person using the chart to know the specific name
+for the Gateway to use.
+
+The root cause of this friction is a difference in perspective: to Chihiro and
+Ian, the Gateway is a first-class thing that they think about regularly, while
+to Ana, it's an implementation detail that she doesn't care about. Neither
+point of view is wrong, but they are in tension with each other.
+
+### Prior Art
+
+This is very much not a new problem: there are many other systems out there
+where being unambiguous is crucial, but where being completely explicit is a
+burden. One of the simplest examples is the humble URL, where the port number
+is not always explicit, but it _is_ always unambiguous. Requiring everyone to
+type `:80` or `:443` at the end of the host portion of every URL wouldn't
+actually help anyone, though allowing it to be specified explicitly when
+needed definitely does help people.
+
+The Ingress resource, of course, is another example of prior art: it permitted
+specifying a default IngressClass, allowing users to create Ingress resources
+that didn't specify the IngressClass explicitly. As with a great many things
+in the Ingress API, this caused problems:
+
+1. Ingress never defined how conflicts between multiple Ingress resources
+   should be handled. Many (most?) implementations merged conflicting
+   resources, which is arguably the worst possible choice.
+
+2. Ingress also never defined a way to allow users to see which IngressClass
+   was being used by a given Ingress resource, which made it difficult for
+   users to understand what was going on if they were using the default
+   IngressClass.
+
+(Oddly enough, Ingress' general lack of attention to separation of concerns
+wasn't really one of the problems here, since IngressClass was a separate
+resource.)
+
+It's rare to find systems that are completely explicit or completely implicit:
+in practice, the trick is to find a usable balance between explicitness and
+simplicity, while managing ambiguity.
+
+### Debugging and Visibility
+
+It's also critical to note that visibility is critical when debugging: if Ana
+can't tell which Gateway is being used by a given Route, then her ability to
+troubleshoot problems is _severely_ hampered. Of course, one of the major
+strengths of Gateway API is that it _does_ provide visibility into what's
+going on in the `status` stanzas of its resources: every Route already has a
+`status` showing exactly which Gateways it is bound to. Making certain that
+Ana has easy access to this information, and that it's clear enough for her to
+understand, is clearly important for many more reasons than just default
+Gateways.
+
+[Chihiro]: https://https//gateway-api.sigs.k8s.io/concepts/roles-and-personas/#chihiro
+[Ian]: https://https//gateway-api.sigs.k8s.io/concepts/roles-and-personas/#ian
+
+## API
+
+Most of the API work for this GEP is TBD at this point. The challenge is to
+find a way to allow Ana to use Routes without requiring her to specify the
+Gateway explicitly, while still allowing Chihiro and Ian to retain control
+over the Gateway and its configuration.
+
+An additional concern is CD tools and GitOps workflows. In very broad terms,
+these tools function by applying manifests from a Git repository to a
+Kubernetes cluster, and then monitoring the cluster for changes. If a tool
+like Argo CD or Flux detects a change to a resource in the cluster, it will
+attempt to reconcile that change with the manifest in the Git repository --
+which means that changes to the `spec` of an HTTPRoute that are made by code
+running in the cluster, rather than by a user with a Git commit, can
+potentially trip up these tools.
+
+These tools generally ignore strict additions: if a field in `spec` is not
+present in the manifest in Git, but is added by code running in the cluster,
+the tools know to ignore it. So, for example, if `spec.parentRefs` is not
+present at all in the manifest in Git, CD tools can probably tolerate having a
+Gateway controller write a new `parentRefs` stanza to the resource.
+
+There has been (much!) [discussion] about whether the ideal API for this
+feature will mutate the `parentRefs` of a Route using a default Gateway to
+reflect the Gateway chosen, or whether it should not, relying instead on the
+`status` stanza to carry this information. This is obviously a key point that
+will need resolution before this GEP can graduate.
+
+[discussion]: https://github.com/kubernetes-sigs/gateway-api/pull/3852#discussion_r2140117567
+
+### Gateway for Ingress (North/South)
+
+### Gateway For Mesh (East/West)
+
+## Conformance Details
+
+#### Feature Names
+
+The default-gateway feature will be named `HTTPRouteDefaultGateway` and
+`GRPCRouteDefaultGateway`. It is unlikely that an implementation would support
+one of these Route types without the other, but `GatewayDefaultGateway` does
+not seem like a good choice.
+
+### Conformance tests
+
+## Alternatives
+
+A possible alternative API design is to modify the behavior of Listeners or
+ListenerSets; rather than having a "default Gateway", perhaps we would have
+"[default Listeners]". One challenge here is that the Route `status` doesn't
+currently expose information about which Listener is being used, though it
+does show which Gateway is being used.
+
+[default Listeners]: https://github.com/kubernetes-sigs/gateway-api/pull/3852#discussion_r2149056246
+
+## References
diff --git a/geps/gep-3793/metadata.yaml b/geps/gep-3793/metadata.yaml
new file mode 100644
index 00000000..060426f0
--- /dev/null
+++ b/geps/gep-3793/metadata.yaml
@@ -0,0 +1,33 @@
+apiVersion: internal.gateway.networking.k8s.io/v1alpha1
+kind: GEPDetails
+number: 3793
+name: Default Gateways
+status: Provisional
+# Any authors who contribute to the GEP in any way should be listed here using
+# their GitHub handle.
+authors:
+  - kflynn
+relationships:
+  # obsoletes indicates that a GEP makes the linked GEP obsolete, and completely
+  # replaces that GEP. The obsoleted GEP MUST have its obsoletedBy field
+  # set back to this GEP, and MUST be moved to Declined.
+  obsoletes: {}
+  obsoletedBy: {}
+  # extends indicates that a GEP extends the linked GEP, adding more detail
+  # or additional implementation. The extended GEP MUST have its extendedBy
+  # field set back to this GEP.
+  extends: {}
+  extendedBy: {}
+  # seeAlso indicates other GEPs that are relevant in some way without being
+  # covered by an existing relationship.
+  seeAlso: {}
+# references is a list of hyperlinks to relevant external references.
+# It's intended to be used for storing GitHub discussions, Google docs, etc.
+references: {}
+# featureNames is a list of the feature names introduced by the GEP, if there
+# are any. This will allow us to track which feature was introduced by which GEP.
+# This is the value added to supportedFeatures and the conformance tests, in string form.
+featureNames: {}
+# changelog is a list of hyperlinks to PRs that make changes to the GEP, in
+# ascending date order.
+changelog: {}
diff --git a/geps/gep-3798/index.md b/geps/gep-3798/index.md
new file mode 100644
index 00000000..84b4a603
--- /dev/null
+++ b/geps/gep-3798/index.md
@@ -0,0 +1,80 @@
+# GEP-3798: Client IP-Based Session Persistence
+
+* Issue: [#3798](https://github.com/kubernetes-sigs/gateway-api/issues/3798)
+* Status: Provisional
+
+(See [status definitions](../overview.md#gep-states).)
+
+## Notes and Disclaimers
+
+* This is currently targeting release as `Experimental` in [v1.4.0](https://github.com/kubernetes-sigs/gateway-api/milestone/22). However there was notable concern in [PR#3844](https://github.com/kubernetes-sigs/gateway-api/pull/3844) that it may be difficult to get multiple implementations who will be ready to implement this and move it forward. As such, the primary focus at this point should be finding representatives of implementations who may be interested in implementing this. Otherwise, this GEP may need to be `Deferred` and revisited as part of a later release.
+
+## TLDR
+
+### What
+ This GEP proposes the addition of Client IP-based session persistence to the Gateway API. This feature will allow Gateway API implementations to ensure that requests originating from a specific client IP address (or a subnet defined by an IP mask) are consistently routed to the same backend endpoint for a configurable duration. This aims to provide a standardized and centralized mechanism for client IP persistence across various Gateway API implementations.
+
+ As mentioned in the [GEP-1619](https://gateway-api.sigs.k8s.io/geps/gep-1619/#api), `SessionPersistence` can be applied via `BackendLBPolicy` and `RouteRule` API. Similar [edge case behaviour](https://gateway-api.sigs.k8s.io/geps/gep-1619/#edge-case-behavior) and [API Granularity](https://gateway-api.sigs.k8s.io/geps/gep-1619/#api-granularity) for ClientIP Persistence type should be applicable as well.
+
+ An important addition/difference compared to [GEP-1619](https://gateway-api.sigs.k8s.io/geps/gep-1619) is that the identity of the backend assigned to a client (or a group of clients in the same subnet) is stored on the server (load balancer / gateway) side as opposed to the client side.
+
+## Goals
+
+* Define an API extension within Gateway API to enable client IP-based session persistence.
+
+* Allow configuration of a session duration for which a client IP should stick to a backend.
+
+* Provide an optional mechanism to specify an IP mask for subnet-based persistence, allowing multiple clients from the same subnet to be routed to the same backend.
+
+* Improve portability of applications requiring client IP persistence across different Gateway API implementations.
+
+## Non-Goals
+
+This GEP does not dictate the specific algorithm or implementation details for how an individual Gateway controller maintains the client IP-to-backend mapping (e.g., in-memory, distributed cache).
+
+## Introduction
+
+### Why: The Problem This Solves
+Currently, achieving client IP-based session persistence within Kubernetes Gateway API environments often requires vendor-specific annotations or out-of-band configurations on the underlying load balancer or ingress controller. This approach has several drawbacks:
+
+* Inconsistent User Experience: Users have to learn different methods for configuring the same logical feature depending on their chosen Gateway API implementation. Configurations are not easily transferable between different Gateway API implementations, leading to vendor lock-in and increased operational overhead when migrating or using multiple controllers.
+
+* Reduced Visibility: The desired session persistence behavior is not explicitly declared within the Gateway API resources, making it harder to audit, manage, and understand the routing logic from a single source of truth.
+
+This GEP addresses these issues by providing a first-class API mechanism for client IP-based session persistence, enhancing the Gateway API's capabilities and promoting consistency and portability.
+
+### Who: Beneficiaries
+* Application Developers: Can define session persistence requirements directly in their Gateway API configurations, ensuring consistent behavior regardless of the underlying Gateway implementation. This simplifies application deployment and management for stateful workloads.
+
+* Platform Operators/Administrators: Gain a standardized way to configure and manage client IP-based session persistence across their clusters, reducing the need for custom scripts or deep knowledge of individual controller implementations. This improves operational efficiency and consistency.
+
+* Gateway API Implementers: Receive a clear specification for implementing client IP-based session persistence, fostering interoperability and reducing divergent approaches.
+
+* Users with Stateful/Legacy Applications: Applications that rely on client IP Persistence (e.g., certain legacy applications, gaming servers, or applications with in-memory session stores) will directly benefit from a reliable and configurable persistence mechanism.
+
+## API
+
+TODO: when we get to the implementation iterations, we need to consider whether we can implement this using functionality established in [GEP-1619](https://gateway-api.sigs.k8s.io/geps/gep-1619).
+
+### Conformance tests 
+
+NA
+
+## Alternatives
+
+Yet to do
+
+## References
+
+Below are references showing how ClientIP persistence is currently supported across some implementations:
+
+* [AVI](https://techdocs.broadcom.com/us/en/vmware-security-load-balancing/avi-load-balancer/avi-load-balancer/30-2/load-balancing-overview/persistence.html)
+* [Native k8s](https://kubernetes.io/docs/reference/networking/virtual-ips/#session-affinity)
+
+Below are some implementations of ClientIP persistence which allows configuring subnet Mask 
+
+* [F5](https://techdocs.f5.com/content/kb/en-us/products/big-ip_ltm/manuals/product/ltm-concepts-11-5-1/11.html#:~:text=is%20persisted%20properly.-,Source%20address%20affinity%20persistence,-Source%20address%20affinity)
+* [Fortinet](https://help.fortinet.com/fadc/4-8-0/olh/Content/FortiADC/handbook/slb_persistence.htm)
+* [Huwaei](https://info.support.huawei.com/hedex/api/pages/EDOC1100149308/AEJ0713J/18/resources/cli/session_persistence.html)
+* [NetScaler](https://docs.netscaler.com/en-us/citrix-adc/current-release/load-balancing/load-balancing-persistence/no-rule-persistence#:~:text=For%20IP%2Dbased%20persistence%2C%20you%20can%20also%20set%20the%20persistMask%20parameter)
+* [AVI](https://techdocs.broadcom.com/us/en/vmware-security-load-balancing/avi-load-balancer/avi-load-balancer/30-2/load-balancing-overview/persistence/client-ip-persistence.html)
diff --git a/geps/gep-3798/metadata.yaml b/geps/gep-3798/metadata.yaml
new file mode 100644
index 00000000..e7d33a7c
--- /dev/null
+++ b/geps/gep-3798/metadata.yaml
@@ -0,0 +1,37 @@
+apiVersion: internal.gateway.networking.k8s.io/v1alpha1
+kind: GEPDetails
+number: 3798
+name: Client IP-Based Session Persistence
+status: Provisional
+# Any authors who contribute to the GEP in any way should be listed here using
+# their GitHub handle.
+authors:
+  - arihantg
+relationships:
+  # obsoletes indicates that a GEP makes the linked GEP obsolete, and completely
+  # replaces that GEP. The obsoleted GEP MUST have its obsoletedBy field
+  # set back to this GEP, and MUST be moved to Declined.
+  obsoletes: {}
+  obsoletedBy: {}
+  # extends indicates that a GEP extends the linked GEP, adding more detail
+  # or additional implementation. The extended GEP MUST have its extendedBy
+  # field set back to this GEP.
+  extends: {}
+  extendedBy: {}
+  # seeAlso indicates other GEPs that are relevant in some way without being
+  # covered by an existing relationship.
+  seeAlso:
+    - number: 1619
+      name: Session Persistence
+      description: Session Persistence via BackendLBPolicy
+  
+# references is a list of hyperlinks to relevant external references.
+# It's intended to be used for storing GitHub discussions, Google docs, etc.
+references: {}
+# featureNames is a list of the feature names introduced by the GEP, if there
+# are any. This will allow us to track which feature was introduced by which GEP.
+# This is the value added to supportedFeatures and the conformance tests, in string form.
+featureNames: {}
+# changelog is a list of hyperlinks to PRs that make changes to the GEP, in
+# ascending date order.
+changelog: {}
diff --git a/geps/gep-696/index.md b/geps/gep-696/index.md
index bedcc6e6..4a4a97dd 100644
--- a/geps/gep-696/index.md
+++ b/geps/gep-696/index.md
@@ -47,6 +47,8 @@ Every feature should:
 3. Not exceed 128 characters.
 4. Contain only letters and numbers
 
+GEPs cannot move to Experimental without a Feature Name.
+
 ### Conformance tests 
 
 Conformance tests file names should try to follow the `pascal-case-name.go` format.
diff --git a/geps/gep-696/metadata.yaml b/geps/gep-696/metadata.yaml
index cd15a89c..0eedd6ca 100644
--- a/geps/gep-696/metadata.yaml
+++ b/geps/gep-696/metadata.yaml
@@ -29,6 +29,7 @@ relationships:
 references: {}
 # featureNames is a list of the feature names introduced by the GEP, if there
 # are any. This will allow us to track which feature was introduced by which GEP.
+# This is the value added to supportedFeatures and the conformance tests, in string form.
 featureNames: {}
 # changelog is a list of hyperlinks to PRs that make changes to the GEP, in
 # ascending date order.
diff --git a/geps/gep-91/index.md b/geps/gep-91/index.md
index 6fddddb5..5d28c9a1 100644
--- a/geps/gep-91/index.md
+++ b/geps/gep-91/index.md
@@ -1,4 +1,4 @@
-# GEP-91: Client Certificate Validation for TLS terminating at the Gateway Listener
+# GEP-91: Client Certificate Validation for TLS terminating at the Gateway
 
 * Issue: [#91](https://github.com/kubernetes-sigs/gateway-api/issues/91)
 * Status: Implementable
@@ -8,31 +8,18 @@
 ## TLDR
 
 This GEP proposes a way to validate the TLS certificate presented by the frontend client to the server
-(Gateway Listener in this case) during a [TLS Handshake Protocol][].
+(Gateway in this case) during a [TLS Handshake Protocol][].
 
 ## Goals
 
-* Define an API field to specify the CA Certificate within the Gateway Listener configuration that can be used as a trust anchor to validate the certificates presented by the client. This use case has been highlighted in the [TLS Configuration GEP][] under segment 1 and in the [Gateway API TLS Use Cases][] document under point 7.
+* Define an API field to specify the CA Certificate within the Gateway configuration that can be used as a trust anchor to validate the certificates presented by the client.
+This use case has been highlighted in the [TLS Configuration GEP][] under segment 1 and in the [Gateway API TLS Use Cases][] document under point 7.
+* Ensure the configuration mitigates the authentication bypass risks associated with HTTP/2 connection coalesing as described in [GEP-3567](https://gateway-api.sigs.k8s.io/geps/gep-3567/#interaction-with-client-cert-validation).
+* Supporting a mode where validating client certificates is optional, useful for debugging and migrating to strict TLS.
 
 ## Non-Goals
 * Define other fields that can be used to verify the client certificate such as the Certificate Hash.
 
-## Existing support in Implementations
-
-This feature is widely supported in implementations that support Gateway API.
-This table highlights the support. Please feel free to add any missing implementations not mentioned below.
-
-| Implementation | Support       |
-|----------------|------------|
-| Apache APISIX  | [ApisixTls.Client.CASecret](https://apisix.apache.org/docs/ingress-controller/tutorials/mtls/#mutual-authentication)      |
-| Contour        | [HTTPProxy.Spec.VirtualHost.Tls.ClientValidation.CASecret](https://projectcontour.io/docs/v1.17.1/config/tls-termination/)      |
-| Emissary Ingress| [TlSContext.Spec.Secret](https://www.getambassador.io/docs/emissary/latest/topics/running/tls/mtls)     |
-| Gloo Edge      | [VirtualService.Spec.SSLConfig.SecretRef](https://docs.solo.io/gloo-edge/latest/guides/security/tls/server_tls/#configuring-downstream-mtls-in-a-virtual-service)      |
-| Istio          | [Gateway.Spec.Servers.TLS.Mode](https://istio.io/latest/docs/tasks/traffic-management/ingress/secure-ingress/#configure-a-mutual-tls-ingress-gateway)      |
-| Kong           | [mTLS Plugin](https://docs.konghq.com/hub/kong-inc/mtls-auth/)      |
-| Traefik        | [TLSOption.Spec.ClientAuth](https://doc.traefik.io/traefik/https/tls/#client-authentication-mtls)    |
-| NGINX Ingress Controller | [ingressMTLS](https://docs.nginx.com/nginx-ingress-controller/configuration/policy-resource/#ingressmtls)    |
-
 ### API
 
 * Introduce a `FrontendValidation` field of type `FrontendTLSValidation` within [GatewayTLSConfig][] that can be used to validate the peer (frontend) with which the TLS connection is being made.
@@ -82,7 +69,7 @@ type GatewayTLSConfig struct {
     ......
     // FrontendValidation holds configuration information for validating the frontend (client).
     // Setting this field will require clients to send a client certificate
-    // required for validation during the TLS handshake. In browsers this may result in a dialog appearing 
+    // required for validation during the TLS handshake. In browsers this may result in a dialog appearing
     // that requests a user to specify the client certificate.
     // The maximum depth of a certificate chain accepted in verification is Implementation specific.
     FrontendValidation *FrontendTLSValidation `json:"frontendValidation,omitempty"`
@@ -151,16 +138,56 @@ spec:
 This section highlights use cases that may be covered in a future iteration of this GEP
 
 * Using system CA certificates as the trust anchor to validate the certificates presented by the frontend client.
-* Supporting a mode where validating client certificates is optional, useful for debugging and migrating to strict TLS.
 * Supporting an optional `subjectAltNames` field within `FrontendTLSValidation` that can be used to specify one or more alternate names to verify the subject identity in the certificate presented by the client. This field falls under Authorization, the initial focus here is on Client Authentication and will be revisited when Authorization is tackled as a whole in the project.
 * Specifying the verification depth in the client certificate chain. This is being deferred because the default verification depth differs across implementations.
 
+## Existing support in Implementations
+
+This feature is already widely supported by implementations that conform to the Gateway API. 
+The table below summarizes current support. Please feel free to add any implementations that are missing.
+This GEP aims to standardize this behavior as an official part of the upstream specification.
+
+| Implementation                      | Support                                                                                                                                                     | Granularity                  | Inline vs Policy |
+|------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------|------------------|
+| Acnodal EPIC                       |                                                                                                                                                             |                              |                  |
+| Airlock Microgateway               | [SidecarGateway.spec.applications[].downstream.tls.clientCertificate](https://docs.airlock.com/microgateway/latest/index/api/crds/sidecar-gateway/v1alpha1/index.html#sidecargatewayspecapplicationsdownstreamtls) | Per Listener                 | Inline           |
+| Amazon Elastic Kubernetes Service  |                                                                                                                                                             |                              |                  |
+| Apache APISIX                      | [ApisixTls.Client.CASecret](https://apisix.apache.org/docs/ingress-controller/tutorials/mtls/#mutual-authentication)                                       | Per SNI                      |                  |
+| Avi Kubernetes Operator            |                                                                                                                                                             |                              |                  |
+| Azure Application Gateway for Containers | [FrontendTLSPolicy](https://learn.microsoft.com/en-us/azure/application-gateway/for-containers/api-specification-kubernetes#alb.networking.azure.io/v1.FrontendTLSPolicy) | Per Gateway & Per Listener  | Policy           |
+| Cilium                             |                                                                                                                                                             |                              |                  |
+| Contour                            | [HTTPProxy.Spec.VirtualHost.Tls.ClientValidation.CASecret](https://projectcontour.io/docs/v1.17.1/config/tls-termination/)                                 | Per SNI                      | Inline           |
+| Easegress                          |                                                                                                                                                             |                              |                  |
+| Emissary Ingress                   | [TlSContext.Spec.CASecret](https://www.getambassador.io/docs/emissary/latest/howtos/client-cert-validation)                                                | Per SNI                      | Policy           |
+| Envoy Gateway                      | [ClientTrafficPolicy.Spec.TLS.ClientValidation](https://gateway.envoyproxy.io/docs/api/extension_types/#clientvalidationcontext)                           | Per Gateway & Per Listener  | Policy           |
+| Flomesh Service Mesh               |                                                                                                                                                             |                              |                  |
+| Gloo Gateway                       | [VirtualService.Spec.SSLConfig.SecretRef](https://docs.solo.io/gloo-edge/latest/guides/security/tls/server_tls/#configuring-downstream-mtls-in-a-virtual-service) | Per SNI                      | Inline           |
+| Google Cloud Service Mesh          |                                                                                                                                                             |                              |                  |
+| Google Kubernetes Engine           |                                                                                                                                                             |                              |                  |
+| HAProxy Ingress                    |                                                                                                                                                             |                              |                  |
+| HAProxy Kubernetes Ingress Controller | [ca-file](https://www.haproxy.com/documentation/haproxy-configuration-tutorials/security/authentication/client-certificate-authentication/#sidebar)      | Per SNI                      | Inline           |
+| HashiCorp Consul                   | [file-system-certificate](https://developer.hashicorp.com/consul/docs/north-south/api-gateway/secure-traffic/encrypt)                                      | Per Listener                 | Policy           |
+| Istio                              | [Gateway.Spec.Servers.TLS.Mode](https://istio.io/latest/docs/tasks/traffic-management/ingress/secure-ingress/#configure-a-mutual-tls-ingress-gateway)      | Per Server                  | Inline           |
+| kgateway                           |                                                                                                                                                             |                              |                  |
+| Kong Kubernetes Ingress Controller | [mTLS Plugin](https://docs.konghq.com/hub/kong-inc/mtls-auth/)                                                                                              | Per HTTP Proxy (Host/Port)   | Policy           |
+| Kong Gateway Operator              | [mTLS Plugin](https://docs.konghq.com/hub/kong-inc/mtls-auth/)                                                                                              | Per HTTP Proxy (Host/Port)   | Policy           |
+| Kuma                               |                                                                                                                                                             |                              |                  |
+| Linkerd                            |                                                                                                                                                             |                              |                  |
+| LiteSpeed Ingress Controller       |                                                                                                                                                             |                              |                  |
+| LoxiLB                             |                                                                                                                                                             |                              |                  |
+| NGINX Gateway Fabric               | [ingressMTLS](https://docs.nginx.com/nginx-ingress-controller/configuration/policy-resource/#ingressmtls)                                                  | Per Listener                 | Policy           |
+| ngrok Kubernetes Operator          | [TrafficPolicy.Terminate-TLS.Config.MutualTLSCertificateAuthorities](https://ngrok.com/docs/traffic-policy/actions/terminate-tls/#configuration-reference) | Per Endpoint (Host:Port)     | Policy           |
+| STUNner                            |                                                                                                                                                             |                              |                  |
+| Traefik Proxy                      | [TLSOption.Spec.ClientAuth](https://doc.traefik.io/traefik/https/tls/#client-authentication-mtls)                                                          | Per EntryPoint               | Inline           |
+| Tyk                                | [Enable Client Certificate](https://tyk.io/docs/basic-config-and-security/security/mutual-tls/client-mtls/#why-use-mutual-tls)                             | Per Gateway                  | Policy           |
+| WSO2 APK                           | [Authentication.Spec.Default.AuthTypes.MTLS](https://apk.docs.wso2.com/en/latest/catalogs/crds/authentication_types/#dp.wso2.com/v1alpha2.MutualSSLConfig) | Per API                      | Policy           |
+| Ingress-NGINX                      | [nginx.ingress.kubernetes.io/auth-tls-verify-client](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#client-certificate-authentication) | Per Ingress                  | Inline           |
 
 ## References
 
 [TLS Handshake Protocol]: https://www.rfc-editor.org/rfc/rfc5246#section-7.4
 [Certificate Path Validation]: https://www.rfc-editor.org/rfc/rfc5280#section-6
-[GatewayTLSConfig]: /references/spec/#gateway.networking.k8s.io/v1.GatewayTLSConfig
+[GatewayTLSConfig]: ../../reference/spec.md#gateway.networking.k8s.io/v1.GatewayTLSConfig
 [BackendTLSPolicy]: ../../api-types/backendtlspolicy.md
 [TLS Configuration GEP]: ../gep-2907/index.md
 [Gateway API TLS Use Cases]: https://docs.google.com/document/d/17sctu2uMJtHmJTGtBi_awGB0YzoCLodtR6rUNmKMCs8/edit?pli=1#heading=h.cxuq8vo8pcxm
diff --git a/geps/gep-995/index.md b/geps/gep-995/index.md
index 6236d1a2..25c40c74 100644
--- a/geps/gep-995/index.md
+++ b/geps/gep-995/index.md
@@ -1,7 +1,7 @@
 # GEP-995: Named route rules
 
 * Issue: [#995](https://github.com/kubernetes-sigs/gateway-api/issues/995)
-* Status: Experimental
+* Status: Standard
 
 ## TLDR
 
@@ -9,7 +9,7 @@ Add a new optional `name` field to the route rule types ([GRPCRouteRule](../../r
 
 ## Goals
 
-* Support referencing individual route rules by name from other resources, such as from metaresources ([GEP-2648](../gep-2648/index.md#apply-policies-to-sections-of-a-resource).)
+* Support referencing individual route rules by name from other resources, such as from metaresources ([GEP-2648](../gep-2648/index.md#section-names).)
 * Support referencing individual route rules by name from condition messages propagated in the status stanza of route resources as suggested in https://github.com/kubernetes-sigs/gateway-api/issues/1696#issuecomment-1666258188.
 * Support referencing individual route rules by name at other observability and networking tools that are part of the ecosystem based on Gateway API.
 * Provide a rather intuitive API for users of Kubernetes who are familiar with the same pattern employed already by other kinds of resources where lists of complex elements can be declared – e.g. service [ports](https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/#ServiceSpec), pod [containers](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#containers) and pod [volumes](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#volumes).
diff --git a/geps/gep-995/metadata.yaml b/geps/gep-995/metadata.yaml
index 547d7bfd..2552744a 100644
--- a/geps/gep-995/metadata.yaml
+++ b/geps/gep-995/metadata.yaml
@@ -2,7 +2,7 @@ apiVersion: internal.gateway.networking.k8s.io/v1alpha1
 kind: GEPDetails
 number: 995
 name: Named route rules
-status: Experimental
+status: Standard
 authors:
   - guicassolato
 changelog:
diff --git a/geps/overview.md b/geps/overview.md
index 808cdb0a..d270e820 100644
--- a/geps/overview.md
+++ b/geps/overview.md
@@ -151,6 +151,8 @@ use the `experimental` Golang build tag to denote experimental functionality.
 Some other requirements must be met before marking a GEP `Experimental`:
 
 - the graduation criteria to reach `Standard` MUST be filled out
+- the GEP must have at least one Feature Name for features described inside that
+  will need to be tested by conformance tests.
 - a proposed probationary period (see next section) must be included in the GEP
   and approved by maintainers.
 
diff --git a/go.mod b/go.mod
index fbe71e2a..a2eca0cf 100644
--- a/go.mod
+++ b/go.mod
@@ -1,33 +1,36 @@
 module sigs.k8s.io/gateway-api
 
-go 1.22.0
+go 1.24.0
 
 require (
-	github.com/ahmetb/gen-crd-api-reference-docs v0.3.0
-	github.com/miekg/dns v1.1.63
+	github.com/elastic/crd-ref-docs v0.1.0
+	github.com/miekg/dns v1.1.66
 	github.com/stretchr/testify v1.10.0
-	golang.org/x/net v0.35.0
-	golang.org/x/sync v0.11.0
-	google.golang.org/grpc v1.70.0
+	golang.org/x/net v0.41.0
+	golang.org/x/sync v0.15.0
+	google.golang.org/grpc v1.73.0
 	google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1
-	google.golang.org/protobuf v1.36.5
-	k8s.io/api v0.31.3
-	k8s.io/apiextensions-apiserver v0.31.3
-	k8s.io/apimachinery v0.31.3
-	k8s.io/client-go v0.31.3
-	k8s.io/code-generator v0.31.3
-	k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108
-	k8s.io/utils v0.0.0-20240711033017-18e509b52bc8
-	sigs.k8s.io/controller-runtime v0.19.4
-	sigs.k8s.io/controller-tools v0.16.5
-	sigs.k8s.io/structured-merge-diff/v4 v4.5.0
+	google.golang.org/protobuf v1.36.6
+	k8s.io/api v0.33.2
+	k8s.io/apiextensions-apiserver v0.33.2
+	k8s.io/apimachinery v0.33.2
+	k8s.io/client-go v0.33.2
+	k8s.io/code-generator v0.33.2
+	k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff
+	k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
+	sigs.k8s.io/controller-runtime v0.21.0
+	sigs.k8s.io/controller-tools v0.18.0
+	sigs.k8s.io/structured-merge-diff/v4 v4.7.0
 	sigs.k8s.io/yaml v1.4.0
 )
 
 require (
+	github.com/Masterminds/goutils v1.1.1 // indirect
+	github.com/Masterminds/semver v1.5.0 // indirect
+	github.com/Masterminds/sprig v2.22.0+incompatible // indirect
 	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
 	github.com/emicklei/go-restful/v3 v3.12.0 // indirect
-	github.com/evanphx/json-patch/v5 v5.9.0 // indirect
+	github.com/evanphx/json-patch/v5 v5.9.11 // indirect
 	github.com/fatih/color v1.18.0 // indirect
 	github.com/fxamacker/cbor/v2 v2.7.0 // indirect
 	github.com/go-logr/logr v1.4.2 // indirect
@@ -35,47 +38,50 @@ require (
 	github.com/go-openapi/jsonreference v0.21.0 // indirect
 	github.com/go-openapi/swag v0.23.0 // indirect
 	github.com/gobuffalo/flect v1.0.3 // indirect
+	github.com/goccy/go-yaml v1.11.3 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
-	github.com/golang/protobuf v1.5.4 // indirect
-	github.com/google/gnostic-models v0.6.8 // indirect
-	github.com/google/go-cmp v0.6.0 // indirect
-	github.com/google/gofuzz v1.2.0 // indirect
+	github.com/google/gnostic-models v0.6.9 // indirect
+	github.com/google/go-cmp v0.7.0 // indirect
 	github.com/google/uuid v1.6.0 // indirect
-	github.com/gorilla/websocket v1.5.1 // indirect
-	github.com/imdario/mergo v0.3.16 // indirect
+	github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect
+	github.com/huandu/xstrings v1.3.3 // indirect
+	github.com/imdario/mergo v0.3.11 // indirect
 	github.com/inconshreveable/mousetrap v1.1.0 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
 	github.com/mattn/go-isatty v0.0.20 // indirect
-	github.com/moby/spdystream v0.4.0 // indirect
+	github.com/mitchellh/copystructure v1.2.0 // indirect
+	github.com/mitchellh/reflectwalk v1.0.2 // indirect
+	github.com/moby/spdystream v0.5.0 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
 	github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
 	github.com/pkg/errors v0.9.1 // indirect
 	github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
-	github.com/russross/blackfriday/v2 v2.1.0 // indirect
-	github.com/spf13/cobra v1.8.1 // indirect
-	github.com/spf13/pflag v1.0.5 // indirect
+	github.com/spf13/cobra v1.9.1 // indirect
+	github.com/spf13/pflag v1.0.6 // indirect
 	github.com/x448/float16 v0.8.4 // indirect
-	golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f // indirect
-	golang.org/x/mod v0.21.0 // indirect
-	golang.org/x/oauth2 v0.24.0 // indirect
-	golang.org/x/sys v0.30.0 // indirect
-	golang.org/x/term v0.29.0 // indirect
-	golang.org/x/text v0.22.0 // indirect
-	golang.org/x/time v0.5.0 // indirect
-	golang.org/x/tools v0.26.0 // indirect
-	google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect
+	go.uber.org/multierr v1.11.0 // indirect
+	go.uber.org/zap v1.27.0 // indirect
+	golang.org/x/crypto v0.39.0 // indirect
+	golang.org/x/mod v0.25.0 // indirect
+	golang.org/x/oauth2 v0.28.0 // indirect
+	golang.org/x/sys v0.33.0 // indirect
+	golang.org/x/term v0.32.0 // indirect
+	golang.org/x/text v0.26.0 // indirect
+	golang.org/x/time v0.9.0 // indirect
+	golang.org/x/tools v0.33.0 // indirect
+	golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 // indirect
 	gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
-	k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 // indirect
-	k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect
-	k8s.io/klog v0.2.0 // indirect
+	k8s.io/gengo/v2 v2.0.0-20250207200755-1244d31929d7 // indirect
 	k8s.io/klog/v2 v2.130.1 // indirect
-	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
+	sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
+	sigs.k8s.io/randfill v1.0.0 // indirect
 )
diff --git a/go.sum b/go.sum
index 473085a7..e08b99f8 100644
--- a/go.sum
+++ b/go.sum
@@ -1,23 +1,30 @@
-github.com/ahmetb/gen-crd-api-reference-docs v0.3.0 h1:+XfOU14S4bGuwyvCijJwhhBIjYN+YXS18jrCY2EzJaY=
-github.com/ahmetb/gen-crd-api-reference-docs v0.3.0/go.mod h1:TdjdkYhlOifCQWPs1UdTma97kQQMozf5h26hTuG70u8=
+github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
+github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
+github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
+github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
+github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60=
+github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o=
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
-github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
+github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
+github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/elastic/crd-ref-docs v0.1.0 h1:Cr5kz89QB3Iuuj7dhAfLMApCrChEGAaIBTxGk/xuRKw=
+github.com/elastic/crd-ref-docs v0.1.0/go.mod h1:X83mMBdJt05heJUYiS3T0yJ/JkCuliuhSUNav5Gjo/U=
 github.com/emicklei/go-restful/v3 v3.12.0 h1:y2DdzBAURM29NFF94q6RaY4vjIH1rtwDapwQtU84iWk=
 github.com/emicklei/go-restful/v3 v3.12.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
-github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg=
-github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
+github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU=
+github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM=
 github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
 github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
 github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
 github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
 github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
 github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
 github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
 github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
@@ -30,32 +37,38 @@ github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF
 github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
 github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
 github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
+github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
+github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
+github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
+github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
+github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
+github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
 github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
 github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
 github.com/gobuffalo/flect v1.0.3 h1:xeWBM2nui+qnVvNM4S3foBhCAL2XgPU+a7FdpelbTq4=
 github.com/gobuffalo/flect v1.0.3/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs=
+github.com/goccy/go-yaml v1.11.3 h1:B3W9IdWbvrUu2OYQGwvU1nZtvMQJPBKgBUuweJjLj6I=
+github.com/goccy/go-yaml v1.11.3/go.mod h1:wKnAMd44+9JAAnGQpWVEgBzGt3YuTaQ4uXoHvE4m7WU=
 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
-github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
-github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw=
+github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw=
 github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
+github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
-github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af h1:kmjWCqn2qkEml422C2Rrd27c3VGxi6a/6HNq8QmHRKM=
-github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo=
+github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo=
+github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
 github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
 github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
-github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
-github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
-github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
+github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo=
+github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA=
+github.com/huandu/xstrings v1.3.3 h1:/Gcsuc1x8JVbJ9/rlye4xZnVAbEkGauT8lbebqcQws4=
+github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
+github.com/imdario/mergo v0.3.11 h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA=
+github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
 github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
 github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
@@ -64,13 +77,12 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
 github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
 github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
+github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
 github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
@@ -78,10 +90,14 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk
 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
 github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/miekg/dns v1.1.63 h1:8M5aAw6OMZfFXTT7K5V0Eu5YiiL8l7nUAkyN6C9YwaY=
-github.com/miekg/dns v1.1.63/go.mod h1:6NGHfjhpmr5lt3XPLuyfDJi5AXbNIPM9PY6H6sF1Nfs=
-github.com/moby/spdystream v0.4.0 h1:Vy79D6mHeJJjiPdFEL2yku1kl0chZpJfZcPpb16BRl8=
-github.com/moby/spdystream v0.4.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI=
+github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE=
+github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE=
+github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
+github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
+github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
+github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU=
+github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -95,29 +111,27 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
 github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
 github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
 github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
-github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA=
-github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To=
-github.com/onsi/gomega v1.34.2 h1:pNCwDkzrsv7MS9kpaQvVb1aVLahQXyJ/Tv5oAZMI3i8=
-github.com/onsi/gomega v1.34.2/go.mod h1:v1xfxRgk0KIsG+QOdm7p8UosrOzPYRo60fd3B/1Dukc=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg=
+github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
+github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y=
+github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
-github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
+github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
+github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
-github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
-github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
+github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
+github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
+github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
 github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
@@ -128,78 +142,82 @@ github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
 github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U=
-go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg=
-go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M=
-go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8=
-go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4=
-go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU=
-go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU=
-go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ=
-go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM=
-go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8=
+go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
+go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
+go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
+go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
+go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
+go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
+go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY=
+go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg=
+go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o=
+go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w=
+go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
+go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
 go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
 go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f h1:99ci1mjWVBWwJiEKYY6jWa4d2nTQVIEhZIptnrVb1XY=
-golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI=
+golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
+golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
-golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
+golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=
+golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
-golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
-golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
-golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
+golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
+golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc=
+golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
-golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
+golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
-golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
-golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
+golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
+golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
+golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
-golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
-golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
-golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
+golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
+golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
+golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ=
-golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0=
+golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc=
+golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1:hgh8P4EuoxpsuKMXX/To36nOFD7vixReXgn8lPGnt+o=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU=
-google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ=
-google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw=
+golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
+golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 h1:e0AIkUUhxyBKh6ssZNrAMeqhA7RKUj42346d1y02i2g=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
+google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok=
+google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc=
 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A=
 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA=
-google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
-google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
+google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
+google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
 gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
@@ -208,44 +226,40 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-k8s.io/api v0.31.3 h1:umzm5o8lFbdN/hIXbrK9oRpOproJO62CV1zqxXrLgk8=
-k8s.io/api v0.31.3/go.mod h1:UJrkIp9pnMOI9K2nlL6vwpxRzzEX5sWgn8kGQe92kCE=
-k8s.io/apiextensions-apiserver v0.31.3 h1:+GFGj2qFiU7rGCsA5o+p/rul1OQIq6oYpQw4+u+nciE=
-k8s.io/apiextensions-apiserver v0.31.3/go.mod h1:2DSpFhUZZJmn/cr/RweH1cEVVbzFw9YBu4T+U3mf1e4=
-k8s.io/apimachinery v0.31.3 h1:6l0WhcYgasZ/wk9ktLq5vLaoXJJr5ts6lkaQzgeYPq4=
-k8s.io/apimachinery v0.31.3/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo=
-k8s.io/client-go v0.31.3 h1:CAlZuM+PH2cm+86LOBemaJI/lQ5linJ6UFxKX/SoG+4=
-k8s.io/client-go v0.31.3/go.mod h1:2CgjPUTpv3fE5dNygAr2NcM8nhHzXvxB8KL5gYc3kJs=
-k8s.io/code-generator v0.31.3 h1:Pj0fYOBms+ZrsulLi4DMsCEx1jG8fWKRLy44onHsLBI=
-k8s.io/code-generator v0.31.3/go.mod h1:/umCIlT84g1+Yu5ZXtP1KGSRTnGiIzzX5AzUAxsNlts=
-k8s.io/gengo v0.0.0-20201203183100-97869a43a9d9/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
-k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 h1:pWEwq4Asjm4vjW7vcsmijwBhOr1/shsbSYiWXmNGlks=
-k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
-k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo=
-k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8=
-k8s.io/klog v0.2.0 h1:0ElL0OHzF3N+OhoJTL0uca20SxtYt4X4+bzHeqrB83c=
-k8s.io/klog v0.2.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
-k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
+k8s.io/api v0.33.2 h1:YgwIS5jKfA+BZg//OQhkJNIfie/kmRsO0BmNaVSimvY=
+k8s.io/api v0.33.2/go.mod h1:fhrbphQJSM2cXzCWgqU29xLDuks4mu7ti9vveEnpSXs=
+k8s.io/apiextensions-apiserver v0.33.2 h1:6gnkIbngnaUflR3XwE1mCefN3YS8yTD631JXQhsU6M8=
+k8s.io/apiextensions-apiserver v0.33.2/go.mod h1:IvVanieYsEHJImTKXGP6XCOjTwv2LUMos0YWc9O+QP8=
+k8s.io/apimachinery v0.33.2 h1:IHFVhqg59mb8PJWTLi8m1mAoepkUNYmptHsV+Z1m5jY=
+k8s.io/apimachinery v0.33.2/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM=
+k8s.io/client-go v0.33.2 h1:z8CIcc0P581x/J1ZYf4CNzRKxRvQAwoAolYPbtQes+E=
+k8s.io/client-go v0.33.2/go.mod h1:9mCgT4wROvL948w6f6ArJNb7yQd7QsvqavDeZHvNmHo=
+k8s.io/code-generator v0.33.2 h1:PCJ0Y6viTCxxJHMOyGqYwWEteM4q6y1Hqo2rNpl6jF4=
+k8s.io/code-generator v0.33.2/go.mod h1:hBjCA9kPMpjLWwxcr75ReaQfFXY8u+9bEJJ7kRw3J8c=
+k8s.io/gengo/v2 v2.0.0-20250207200755-1244d31929d7 h1:2OX19X59HxDprNCVrWi6jb7LW1PoqTlYqEq5H2oetog=
+k8s.io/gengo/v2 v2.0.0-20250207200755-1244d31929d7/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU=
 k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
 k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108 h1:Q8Z7VlGhcJgBHJHYugJ/K/7iB8a2eSxCyxdVjJp+lLY=
-k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98=
-k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A=
-k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-sigs.k8s.io/controller-runtime v0.19.4 h1:SUmheabttt0nx8uJtoII4oIP27BVVvAKFvdvGFwV/Qo=
-sigs.k8s.io/controller-runtime v0.19.4/go.mod h1:iRmWllt8IlaLjvTTDLhRBXIEtkCK6hwVBJJsYS9Ajf4=
-sigs.k8s.io/controller-tools v0.16.5 h1:5k9FNRqziBPwqr17AMEPPV/En39ZBplLAdOwwQHruP4=
-sigs.k8s.io/controller-tools v0.16.5/go.mod h1:8vztuRVzs8IuuJqKqbXCSlXcw+lkAv/M2sTpg55qjMY=
-sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
-sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
-sigs.k8s.io/structured-merge-diff/v4 v4.5.0 h1:nbCitCK2hfnhyiKo6uf2HxUPTCodY6Qaf85SbDIaMBk=
-sigs.k8s.io/structured-merge-diff/v4 v4.5.0/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
-sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
+k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4=
+k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8=
+k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
+k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+sigs.k8s.io/controller-runtime v0.21.0 h1:CYfjpEuicjUecRk+KAeyYh+ouUBn4llGyDYytIGcJS8=
+sigs.k8s.io/controller-runtime v0.21.0/go.mod h1:OSg14+F65eWqIu4DceX7k/+QRAbTTvxeQSNSOQpukWM=
+sigs.k8s.io/controller-tools v0.18.0 h1:rGxGZCZTV2wJreeRgqVoWab/mfcumTMmSwKzoM9xrsE=
+sigs.k8s.io/controller-tools v0.18.0/go.mod h1:gLKoiGBriyNh+x1rWtUQnakUYEujErjXs9pf+x/8n1U=
+sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
+sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
+sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
+sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
+sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
+sigs.k8s.io/structured-merge-diff/v4 v4.7.0 h1:qPeWmscJcXP0snki5IYF79Z8xrl8ETFxgMd7wez1XkI=
+sigs.k8s.io/structured-merge-diff/v4 v4.7.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps=
 sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
 sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
diff --git a/hack/api-docs/config.json b/hack/api-docs/config.json
deleted file mode 100644
index b07c34de..00000000
--- a/hack/api-docs/config.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-    "hideMemberFields": [
-        "TypeMeta"
-    ],
-    "hideTypePatterns": [
-        "ParseError$",
-        "List$",
-        "ReferencePolicy$"
-    ],
-    "externalPackages": [
-        {
-            "typeMatchPrefix": "^k8s\\.io/apimachinery/pkg/apis/meta/v1\\.Duration$",
-            "docsURLTemplate": "https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Duration"
-        },
-        {
-            "typeMatchPrefix": "^k8s\\.io/(api|apimachinery/pkg/apis)/",
-            "docsURLTemplate": "https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#{{lower .TypeIdentifier}}-{{arrIndex .PackageSegments -1}}-{{arrIndex .PackageSegments -2}}"
-        },
-        {
-            "typeMatchPrefix": "^github\\.com/knative/pkg/apis/duck/",
-            "docsURLTemplate": "https://godoc.org/github.com/knative/pkg/apis/duck/{{arrIndex .PackageSegments -1}}#{{.TypeIdentifier}}"
-        }
-    ],
-    "typeDisplayNamePrefixOverrides": {
-        "k8s.io/api/": "Kubernetes ",
-        "k8s.io/apimachinery/pkg/apis/": "Kubernetes "
-    },
-    "markdownDisabled": false
-}
diff --git a/hack/api-docs/members.tpl b/hack/api-docs/members.tpl
deleted file mode 100644
index 9f08d1aa..00000000
--- a/hack/api-docs/members.tpl
+++ /dev/null
@@ -1,48 +0,0 @@
-{{ define "members" }}
-
-{{ range .Members }}
-{{ if not (hiddenMember .)}}
-<tr>
-    <td>
-        <code>{{ fieldName . }}</code></br>
-        <em>
-            {{ if linkForType .Type }}
-                <a href="{{ linkForType .Type}}">
-                    {{ typeDisplayName .Type }}
-                </a>
-            {{ else }}
-                {{ typeDisplayName .Type }}
-            {{ end }}
-        </em>
-    </td>
-    <td>
-        {{ if fieldEmbedded . }}
-            <p>
-                (Members of <code>{{ fieldName . }}</code> are embedded into this type.)
-            </p>
-        {{ end}}
-
-        {{ if isOptionalMember .}}
-            <em>(Optional)</em>
-        {{ end }}
-
-        {{ safe (renderComments .CommentLines) }}
-
-    {{ if and (eq (.Type.Name.Name) "ObjectMeta") }}
-        Refer to the Kubernetes API documentation for the fields of the
-        <code>metadata</code> field.
-    {{ end }}
-
-    {{ if or (eq (fieldName .) "spec") }}
-        <br/>
-        <br/>
-        <table>
-            {{ template "members" .Type }}
-        </table>
-    {{ end }}
-    </td>
-</tr>
-{{ end }}
-{{ end }}
-
-{{ end }}
diff --git a/hack/api-docs/pkg.tpl b/hack/api-docs/pkg.tpl
deleted file mode 100644
index 059e6dc5..00000000
--- a/hack/api-docs/pkg.tpl
+++ /dev/null
@@ -1,59 +0,0 @@
-{{ define "link" }}
-<li>
-    <a href="#{{- packageAnchorID . -}}">{{ packageDisplayName . }}</a>
-</li>
-{{ end }}
-
-{{ define "package" }}
-<h2 id="{{- packageAnchorID . -}}">
-    {{- packageDisplayName . -}}
-</h2>
-
-{{ with (index .GoPackages 0 )}}
-    {{ with .DocComments }}
-    <p>
-        {{ safe (renderComments .) }}
-    </p>
-    {{ end }}
-{{ end }}
-
-Resource Types:
-<ul>
-{{- range (visibleTypes (sortedTypes .Types)) -}}
-    {{ if isExportedType . -}}
-    <li>
-        <a href="{{ linkForType . }}">{{ typeDisplayName . }}</a>
-    </li>
-    {{- end }}
-{{- end -}}
-</ul>
-
-{{ range (visibleTypes (sortedTypes .Types))}}
-    {{ template "type" .  }}
-{{ end }}
-<hr/>
-{{ end }}
-
-
-{{ define "packages" }}
-
-{{/* we manually iterate the packages slice so that we feature beta before alpha */}}
-
-<p>Packages:</p>
-<ul>
-    {{ template "link" index .packages 0 }}
-    {{ template "link" index .packages 3 }}
-    {{ template "link" index .packages 2 }}
-    {{ template "link" index .packages 1 }}
-</ul>
-
-{{ template "package" index .packages 0 }}
-{{ template "package" index .packages 3 }}
-{{ template "package" index .packages 2 }}
-{{ template "package" index .packages 1 }}
-
-<p><em>
-    Generated with <code>gen-crd-api-reference-docs</code>.
-</em></p>
-
-{{ end }}
diff --git a/hack/api-docs/type.tpl b/hack/api-docs/type.tpl
deleted file mode 100644
index 51a759d6..00000000
--- a/hack/api-docs/type.tpl
+++ /dev/null
@@ -1,80 +0,0 @@
-{{ define "type" }}
-
-<h3 id="{{ anchorIDForType . }}">
-    {{- .Name.Name }}
-    {{ if eq .Kind "Alias" }}(<code>{{.Underlying}}</code> alias){{ end -}}
-    <a class="headerlink" href="#{{ anchorIDForType . }}" title="Permanent link">¶</a>
-</h3>
-{{ with (typeReferences .) }}
-    <p>
-        (<em>Appears on:</em>
-        {{- $prev := "" -}}
-        {{- range . -}}
-            {{- if $prev -}}, {{ end -}}
-            {{ $prev = . }}
-            <a href="{{ linkForType . }}">{{ typeDisplayName . }}</a>
-        {{- end -}}
-        )
-    </p>
-{{ end }}
-
-
-<p>
-    {{ safe (renderComments .CommentLines) }}
-</p>
-
-{{ with (constantsOfType .) }}
-<table>
-    <thead>
-        <tr>
-            <th>Value</th>
-            <th>Description</th>
-        </tr>
-    </thead>
-    <tbody>
-      {{- range . -}}
-      <tr>
-        {{- /* renderComments implicitly creates a <p> element, so we do the
-               same here to make the value line up nicely.  */ -}}
-        <td><p>{{ typeDisplayName . }}</p></td>
-        <td>{{ safe (renderComments .CommentLines) }}</td>
-      </tr>
-      {{- end -}}
-    </tbody>
-</table>
-{{ end }}
-
-{{ if .Members }}
-<table>
-    <thead>
-        <tr>
-            <th>Field</th>
-            <th>Description</th>
-        </tr>
-    </thead>
-    <tbody>
-        {{ if isExportedType . }}
-        <tr>
-            <td>
-                <code>apiVersion</code></br>
-                string</td>
-            <td>
-                <code>
-                    {{apiGroup .}}
-                </code>
-            </td>
-        </tr>
-        <tr>
-            <td>
-                <code>kind</code></br>
-                string
-            </td>
-            <td><code>{{.Name.Name}}</code></td>
-        </tr>
-        {{ end }}
-        {{ template "members" .}}
-    </tbody>
-</table>
-{{ end }}
-
-{{ end }}
diff --git a/hack/build-install-yaml.sh b/hack/build-install-yaml.sh
index d3f52682..e1bf0f25 100755
--- a/hack/build-install-yaml.sh
+++ b/hack/build-install-yaml.sh
@@ -18,61 +18,40 @@ set -o errexit
 set -o nounset
 set -o pipefail
 
-thisyear=$(date +"%Y")
+readonly CHANNELS=(standard experimental)
+readonly YEAR=$(date +"%Y")
 
 mkdir -p release/
 
-# Make clean files with boilerplate
-cat hack/boilerplate/boilerplate.sh.txt > release/experimental-install.yaml
-
-if [[ "$OSTYPE" == "linux-gnu"* ]]; then
-    sed -i "s/YEAR/$thisyear/g" release/experimental-install.yaml
-elif [[ "$OSTYPE" == "darwin"* ]]; then
-    sed -i '' "s/YEAR/$thisyear/g" release/experimental-install.yaml
-else
-    echo "Unsupported OS"
-    exit 1
-fi
-
-cat << EOF >> release/experimental-install.yaml
+for CHANNEL in "${CHANNELS[@]}"; do
+    echo $CHANNEL
+    # Make clean files with boilerplate
+    cat hack/boilerplate/boilerplate.sh.txt > release/${CHANNEL}-install.yaml
+
+    if [[ "$OSTYPE" == "linux-gnu"* ]]; then
+        sed -i "s/YEAR/${YEAR}/g" release/${CHANNEL}-install.yaml
+    elif [[ "$OSTYPE" == "darwin"* ]]; then
+        sed -i '' "s/YEAR/${YEAR}/g" release/${CHANNEL}-install.yaml
+    else
+        echo "Unsupported OS"
+        exit 1
+    fi
+
+    cat << EOF >> release/${CHANNEL}-install.yaml
 #
-# Gateway API Experimental channel install
+# Gateway API ${CHANNEL^} channel install
 #
 EOF
 
-cat hack/boilerplate/boilerplate.sh.txt > release/standard-install.yaml
-
-if [[ "$OSTYPE" == "linux-gnu"* ]]; then
-    sed -i "s/YEAR/$thisyear/g" release/experimental-install.yaml
-elif [[ "$OSTYPE" == "darwin"* ]]; then
-    sed -i '' "s/YEAR/$thisyear/g" release/experimental-install.yaml
-else
-    echo "Unsupported OS"
-    exit 1
-fi
-
-cat << EOF >> release/standard-install.yaml
-#
-# Gateway API Standard channel install
-#
-EOF
-
-for file in config/crd/experimental/gateway*.yaml
-do
-    echo "---" >> release/experimental-install.yaml
-    echo "#" >> release/experimental-install.yaml
-    echo "# $file" >> release/experimental-install.yaml
-    echo "#" >> release/experimental-install.yaml
-    cat "$file" >> release/experimental-install.yaml
-done
+    for file in config/crd/${CHANNEL}/gateway*.yaml
+    do
+        echo "---" >> release/${CHANNEL}-install.yaml
+        echo "#" >> release/${CHANNEL}-install.yaml
+        echo "# $file" >> release/${CHANNEL}-install.yaml
+        echo "#" >> release/${CHANNEL}-install.yaml
+        cat "$file" >> release/${CHANNEL}-install.yaml
+    done
 
-for file in config/crd/standard/*.yaml
-do
-    echo "---" >> release/standard-install.yaml
-    echo "#" >> release/standard-install.yaml
-    echo "# $file" >> release/standard-install.yaml
-    echo "#" >> release/standard-install.yaml
-    cat "$file" >> release/standard-install.yaml
 done
 
 echo "Generated:" release/*-install.yaml
diff --git a/hack/mkdocs-copy-geps.py b/hack/mkdocs-copy-geps.py
index 4ee4d846..90566ccc 100644
--- a/hack/mkdocs-copy-geps.py
+++ b/hack/mkdocs-copy-geps.py
@@ -15,11 +15,50 @@
 import shutil
 import logging
 from mkdocs import plugins
+from mkdocs.structure.files import File
+from pathlib import Path
 
-log = logging.getLogger('mkdocs')
+log = logging.getLogger(f'mkdocs.plugins.{__name__}')
 
 
 @plugins.event_priority(100)
-def on_pre_build(config, **kwargs):
-    log.info("copying geps")
-    shutil.copytree("geps", "site-src/geps", dirs_exist_ok=True)
+def on_files(files, config, **kwargs):
+    log.info("adding geps")
+
+    # Check if site-src/geps exists (files copied out-of-band from MkDocs)
+    site_src_geps = Path('site-src/geps')
+    if site_src_geps.exists() and site_src_geps.is_dir():
+      log.info("Found site-src/gep/ directory. Deleting...")
+
+      # Iterate over the list of files in this directory and remove them from
+      # MkDocs
+      for root_dir, _, gep_files  in Path(site_src_geps).walk():
+        for filename in gep_files:
+          # Exclude the leading 'site-src/' to get the relative path as it
+          # exists on the site. (i.e., geps/overview.md)
+          path = '/'.join(root_dir.parts[1:])
+
+          existing_file = files.get_file_from_path(f'{path}/{filename}')
+          if existing_file:
+            files.remove(existing_file)
+
+      # Delete the 'site-src/geps' directory
+      shutil.rmtree(site_src_geps)
+
+    for root_dir, _, gep_files in Path('geps').walk():
+
+      # Iterate over the all the files in the GEP folder and add them to the site
+      for filename in gep_files:
+        file_path = str(root_dir / filename)
+
+        if files.get_file_from_path(file_path) is None:
+          new_file = File(
+            path=file_path,
+            src_dir='./',
+            dest_dir=config['site_dir'],
+            use_directory_urls=config['use_directory_urls']
+          )
+
+          files.append(new_file)
+
+    return files
diff --git a/hack/mkdocs-generate-conformance.py b/hack/mkdocs-generate-conformance.py
index 1328f7d0..bec9ecde 100644
--- a/hack/mkdocs-generate-conformance.py
+++ b/hack/mkdocs-generate-conformance.py
@@ -13,31 +13,61 @@
 # limitations under the License.
 
 import logging
+from io import StringIO
 from mkdocs import plugins
+from mkdocs.structure.files import File
 import yaml
 import pandas
 from fnmatch import fnmatch
 import glob
 import os
+import re
 
-log = logging.getLogger('mkdocs')
+log = logging.getLogger(f'mkdocs.plugins.{__name__}')
+
+
+def process_feature_name(feature):
+    """
+    Process feature names by splitting camelCase into space-separated words
+    """
+    # Split camelCase
+    words = re.findall(r'HTTPRoute|[A-Z]+(?=[A-Z][a-z])|[A-Z][a-z]+|[A-Z\d]+', feature)
+    # Join words with spaces
+    return ' '.join(words)
 
 
 @plugins.event_priority(100)
-def on_pre_build(config, **kwargs):
+def on_files(files, config, **kwargs):
     log.info("generating conformance")
 
     vers = getConformancePaths()
+    # Iterate over the list of versions. Exclude the pre 1.0 versions.
     for v in vers[3:]:
 
         confYamls = getYaml(v)
         releaseVersion = v.split(os.sep)[-2]
-        generate_conformance_tables(confYamls, releaseVersion)
+        file = generate_conformance_tables(confYamls, releaseVersion, config)
+
+        if file:
+          existing_file = files.get_file_from_path(file.src_uri)
+          if existing_file:
+              # Remove the existing file that is likely present in the
+              # repository
+              files.remove(existing_file)
+
+          # Add the generated file to the site
+          files.append(file)
+
+          # Write the generated file to the site-src directory
+          with open(os.path.join("site-src", file.src_uri), "w") as f:
+            f.write(file.content_string)
+
+    return files
 
 
 desc = """
 The following tables are populated from the conformance reports [uploaded by project implementations](https://github.com/kubernetes-sigs/gateway-api/tree/main/conformance/reports). They are separated into the extended features that each project supports listed in their reports.
-Implementations only appear in this page if they pass Core conformance for the resource type, and the features listed should be Extended features.
+Implementations only appear in this page if they pass Core conformance for the resource type, and the features listed should be Extended features. Implementations that submit conformance reports with skipped tests won't appear in the tables.
 """
 
 warning_text = """
@@ -51,7 +81,10 @@ warning_text = """
 
 
 
-def generate_conformance_tables(reports, currVersion):
+def generate_conformance_tables(reports, currVersion, mkdocsConfig):
+
+    # Enable Pandas copy-on-write
+    pandas.options.mode.copy_on_write = True
 
     gateway_tls_table = pandas.DataFrame()
     gateway_grpc_table = pandas.DataFrame()
@@ -79,7 +112,8 @@ def generate_conformance_tables(reports, currVersion):
     if entries.Project < 3:
         return
 
-    with open('site-src/implementations/'+versionFile+'.md', 'w') as f:
+    try:
+        f = StringIO()
 
         f.write(desc)
         f.write("\n\n")
@@ -90,7 +124,7 @@ def generate_conformance_tables(reports, currVersion):
         f.write("## Gateway Profile\n\n")
         f.write("### HTTPRoute\n\n")
         f.write(gateway_http_table.to_markdown()+'\n\n')
-        if currVersion != 'v1.0.0': 
+        if currVersion != 'v1.0.0':
             f.write('### GRPCRoute\n\n')
             f.write(gateway_grpc_table.to_markdown()+'\n\n')
             f.write('### TLSRoute\n\n')
@@ -100,6 +134,20 @@ def generate_conformance_tables(reports, currVersion):
         f.write("### HTTPRoute\n\n")
         f.write(mesh_http_table.to_markdown())
 
+        file_contents = f.getvalue()
+    finally:
+        f.close()
+
+    new_file = File(
+      src_dir=None,
+      dest_dir=mkdocsConfig['site_dir'],
+      path=f'implementations/{versionFile}.md',
+      use_directory_urls=mkdocsConfig['use_directory_urls'],
+    )
+    new_file.content_string = file_contents
+    new_file.generated_by = f'{__name__}'
+
+    return new_file
 
 def generate_profiles_report(reports, route,version):
 
@@ -114,11 +162,13 @@ def generate_profiles_report(reports, route,version):
                                'version','mode', 'extended.supportedFeatures']].T
     http_table.columns = http_table.iloc[0]
     http_table = http_table[1:].T
-    
+
     for row in http_table.itertuples():
         if type(row._4) is list:
             for feat in row._4:
-                http_table.loc[row.Index, feat] = ':white_check_mark:'
+                # Process feature name before using it as a column
+                processed_feat = process_feature_name(feat)
+                http_table.loc[row.Index, processed_feat] = ':white_check_mark:'
     http_table = http_table.fillna(':x:')
     http_table = http_table.drop(['extended.supportedFeatures'], axis=1)
 
@@ -130,8 +180,8 @@ def generate_profiles_report(reports, route,version):
 
 
 pathTemp = "conformance/reports/*/"
-allVersions = []
-reportedImplementationsPath = []
+allVersions = set()
+reportedImplementationsPath = set()
 
 # returns v1.0.0 and greater, since that's when reports started being generated in the comparison table
 
@@ -141,9 +191,10 @@ def getConformancePaths():
     report_path = versions[-1]+"**"
     for v in versions:
         vers = v.split(os.sep)[-2]
-        allVersions.append(vers)
-        reportedImplementationsPath.append(v+"**")
-    return reportedImplementationsPath
+        allVersions.add(vers)
+        reportedImplementationsPath.add(v+"**")
+
+    return sorted(list(reportedImplementationsPath))
 
 
 def getYaml(conf_path):
@@ -154,11 +205,12 @@ def getYaml(conf_path):
         if fnmatch(p, "*.yaml"):
 
             x = load_yaml(p)
-            profiles = pandas.json_normalize(
-                x, record_path=['profiles'], meta=["mode","implementation"], errors='ignore')
+            if 'profiles' in x:
+              profiles = pandas.json_normalize(
+                  x, record_path=['profiles'], meta=["mode","implementation"], errors='ignore')
 
-            implementation = pandas.json_normalize(profiles.implementation)
-            yamls.append(pandas.concat([implementation, profiles], axis=1))
+              implementation = pandas.json_normalize(profiles.implementation)
+              yamls.append(pandas.concat([implementation, profiles], axis=1))
 
     yamls = pandas.concat(yamls)
     return yamls
diff --git a/hack/api-docs/generate.sh b/hack/mkdocs/generate.sh
similarity index 59%
rename from hack/api-docs/generate.sh
rename to hack/mkdocs/generate.sh
index f7a3e76d..04436d37 100755
--- a/hack/api-docs/generate.sh
+++ b/hack/mkdocs/generate.sh
@@ -25,29 +25,12 @@ GOPATH=${GOPATH:-$(go env GOPATH)}
 GOBIN=${GOBIN:-$(go env GOBIN)}
 GOBIN=${GOBIN:-${GOPATH}/bin}
 
-readonly HERE=$(cd $(dirname $0) && pwd)
-readonly REPO=$(cd ${HERE}/../.. && pwd)
+echo $GOBIN
 
-gendoc::build() {
-    go install github.com/ahmetb/gen-crd-api-reference-docs
-}
+go install github.com/elastic/crd-ref-docs
 
-# Exec the doc generator.
-gendoc::exec() {
-    local readonly confdir="${REPO}/hack/api-docs"
-
-    ${GOBIN}/gen-crd-api-reference-docs \
-        -template-dir ${confdir} \
-        -config ${confdir}/config.json \
-        "$@"
-}
-
-if [ "$#" != "1" ]; then
-    echo "usage: generate.sh OUTFILE"
-    exit 2
-fi
-
-gendoc::build
-gendoc::exec \
-    -api-dir "sigs.k8s.io/gateway-api/apis/" \
-    -out-file "${1}"
+${GOBIN}/crd-ref-docs \
+    --source-path=${PWD}/apis \
+    --config=crd-ref-docs.yaml \
+    --renderer=markdown \
+    --output-path=${PWD}/site-src/reference/spec.md
diff --git a/hack/mkdocs/image/Dockerfile b/hack/mkdocs/image/Dockerfile
new file mode 100644
index 00000000..e4f76e11
--- /dev/null
+++ b/hack/mkdocs/image/Dockerfile
@@ -0,0 +1,26 @@
+# Copyright 2019 The Kubernetes Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM python:3.12
+
+COPY requirements.txt /requirements.txt
+RUN pip install -r /requirements.txt
+
+WORKDIR /docs
+
+EXPOSE 3000
+
+COPY entrypoint.sh /
+
+ENTRYPOINT ["/entrypoint.sh"]
\ No newline at end of file
diff --git a/hack/mkdocs/image/entrypoint.sh b/hack/mkdocs/image/entrypoint.sh
new file mode 100755
index 00000000..6b3fd338
--- /dev/null
+++ b/hack/mkdocs/image/entrypoint.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+# Copyright 2019 The Kubernetes Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -o errexit
+
+CMD=$1
+
+if [ "$CMD" == "build" ];
+then
+  mkdocs build
+  exit 0;
+fi
+
+mkdocs serve --dev-addr=0.0.0.0:3000 --livereload
\ No newline at end of file
diff --git a/requirements.txt b/hack/mkdocs/image/requirements.txt
similarity index 73%
rename from requirements.txt
rename to hack/mkdocs/image/requirements.txt
index 9b18a059..a075a431 100644
--- a/requirements.txt
+++ b/hack/mkdocs/image/requirements.txt
@@ -1,24 +1,23 @@
 Click==8.1.8
 htmlmin==0.1.12
-Jinja2==3.1.5
+Jinja2==3.1.6
 jsmin==3.0.1
 livereload==2.7.1
 # mkdocs 2.4.1 requires Markdown < 3.4.0
 # https://github.com/kubernetes-sigs/gateway-api/pull/1671#issuecomment-1400586465
-markdown~=3.7
+markdown~=3.8
 MarkupSafe==3.0.2
 mkdocs==1.6.1
 mkdocs-awesome-pages-plugin==2.10.1
 mkdocs-macros-plugin==1.3.7
-mkdocs-material==9.6.7
-mkdocs-material-extensions==1.3.1
+mkdocs-material==9.6.15
 mkdocs-redirects==1.2.2
 mkdocs-mermaid2-plugin==1.2.1
 pandas>=2.0.3
 pep562==1.1
-Pygments==2.19.1
-pymdown-extensions==10.14.3
+Pygments==2.19.2
+pymdown-extensions==10.16
 PyYAML==6.0.2
 six==1.17.0
 tabulate==0.9.0
-tornado==6.4.2
+tornado==6.5.1
\ No newline at end of file
diff --git a/hack/update-clientset.sh b/hack/update-clientset.sh
index d36dbd8f..e9fda1f3 100755
--- a/hack/update-clientset.sh
+++ b/hack/update-clientset.sh
@@ -42,16 +42,20 @@ readonly API_PATHS=(apis apisx)
 
 GATEWAY_INPUT_DIRS_SPACE=""
 GATEWAY_INPUT_DIRS_COMMA=""
+GATEWAY_API_DIRS_COMMA=""
 
 for API_PATH in "${API_PATHS[@]}"; do
   VERSIONS=($(find ./${API_PATH} -maxdepth 1 -name "v*" -exec bash -c 'basename {}' \; | LC_ALL=C sort -u))
   for VERSION in "${VERSIONS[@]}"; do
     GATEWAY_INPUT_DIRS_SPACE+="${APIS_PKG}/${API_PATH}/${VERSION} "
     GATEWAY_INPUT_DIRS_COMMA+="${APIS_PKG}/${API_PATH}/${VERSION},"
+    GATEWAY_API_DIRS_COMMA+="${API_PATH}/${VERSION},"
   done
 done
+
 GATEWAY_INPUT_DIRS_SPACE="${GATEWAY_INPUT_DIRS_SPACE%,}" # drop trailing space
 GATEWAY_INPUT_DIRS_COMMA="${GATEWAY_INPUT_DIRS_COMMA%,}" # drop trailing comma
+GATEWAY_API_DIRS_COMMA="${GATEWAY_API_DIRS_COMMA%,}" # drop trailing comma
 
 # throw away
 new_report="$(mktemp -t "$(basename "$0").api_violations.XXXXXX")"
diff --git a/hack/verify-golint.sh b/hack/verify-golint.sh
index 584bfe9b..66a5279c 100755
--- a/hack/verify-golint.sh
+++ b/hack/verify-golint.sh
@@ -18,7 +18,7 @@ set -o errexit
 set -o nounset
 set -o pipefail
 
-readonly VERSION="v1.60.3"
+readonly VERSION="v1.64.8"
 readonly KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
 
 cd "${KUBE_ROOT}"
diff --git a/mkdocs.yml b/mkdocs.yml
index 87d4a5c3..7765e320 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -85,6 +85,7 @@ nav:
     - Implementations:
         - List: implementations.md
         - Comparisons:
+          - v1.3: implementations/v1.3.md
           - v1.2: implementations/v1.2.md
           - v1.1: implementations/v1.1.md
           - v1.0: implementations/v1.0.md
@@ -117,30 +118,35 @@ nav:
       - HTTPRoute: api-types/httproute.md
       - Policy:
         - BackendTLSPolicy: api-types/backendtlspolicy.md
+        - BackendTrafficPolicy: api-types/backendtrafficpolicy.md
       - ReferenceGrant: api-types/referencegrant.md
-    - API specification: reference/spec.md
+    - API specification:
+      - Standard: reference/spec.md
+      - Experimental: reference/specx.md
     - Policy Attachment: reference/policy-attachment.md
   - Enhancements:
     - Overview: geps/overview.md
     - Provisional:
       - geps/gep-1494/index.md
       - geps/gep-1651/index.md
-      - geps/gep-1713/index.md
-      - geps/gep-1767/index.md
       - geps/gep-2648/index.md
+      - geps/gep-3779/index.md
+      - geps/gep-3792/index.md
+      - geps/gep-3793/index.md
     - Implementable:
       - geps/gep-91/index.md
       - geps/gep-3567/index.md
-      - geps/gep-3388/index.md
     - Experimental:
-      - geps/gep-995/index.md
       - geps/gep-1619/index.md
+      - geps/gep-1713/index.md
       - geps/gep-1731/index.md
       - geps/gep-1748/index.md
+      - geps/gep-1767/index.md
       - geps/gep-1897/index.md
       - geps/gep-2162/index.md
       - geps/gep-2649/index.md
       - geps/gep-3155/index.md
+      - geps/gep-3388/index.md
       - geps/gep-3567/index.md
     - Standard:
       - geps/gep-709/index.md
@@ -151,6 +157,7 @@ nav:
       - geps/gep-820/index.md
       - geps/gep-851/index.md
       - geps/gep-957/index.md
+      - geps/gep-995/index.md
       - geps/gep-1016/index.md
       - geps/gep-1294/index.md
       - geps/gep-1323/index.md
diff --git a/netlify.toml b/netlify.toml
index 5ff94e03..1612b103 100644
--- a/netlify.toml
+++ b/netlify.toml
@@ -1,10 +1,10 @@
 # Netlify build instructions
 [build]
-    command = "make docs"
+    command = "make build-docs-netlify"
     publish = "site"
 [build.environment]
-    PYTHON_VERSION = "3.9"
-    GO_VERSION = "1.22.8"
+    PYTHON_VERSION = "3.12"
+    GO_VERSION = "1.24.1"
 
 # Standard Netlify redirects
 [[redirects]]
@@ -30,4 +30,4 @@
     from = "/geps/gep-1426"
     to = "/geps/gep-1294"
     status = 301
-    force = true
\ No newline at end of file
+    force = true
diff --git a/pkg/client/clientset/versioned/clientset.go b/pkg/client/clientset/versioned/clientset.go
index c65cf8f5..bf774f19 100644
--- a/pkg/client/clientset/versioned/clientset.go
+++ b/pkg/client/clientset/versioned/clientset.go
@@ -19,8 +19,8 @@ limitations under the License.
 package versioned
 
 import (
-	"fmt"
-	"net/http"
+	fmt "fmt"
+	http "net/http"
 
 	discovery "k8s.io/client-go/discovery"
 	rest "k8s.io/client-go/rest"
diff --git a/pkg/client/clientset/versioned/fake/clientset_generated.go b/pkg/client/clientset/versioned/fake/clientset_generated.go
index ecf37e8b..b1600ecb 100644
--- a/pkg/client/clientset/versioned/fake/clientset_generated.go
+++ b/pkg/client/clientset/versioned/fake/clientset_generated.go
@@ -19,6 +19,7 @@ limitations under the License.
 package fake
 
 import (
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/runtime"
 	"k8s.io/apimachinery/pkg/watch"
 	"k8s.io/client-go/discovery"
@@ -58,9 +59,13 @@ func NewSimpleClientset(objects ...runtime.Object) *Clientset {
 	cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake}
 	cs.AddReactor("*", "*", testing.ObjectReaction(o))
 	cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) {
+		var opts metav1.ListOptions
+		if watchActcion, ok := action.(testing.WatchActionImpl); ok {
+			opts = watchActcion.ListOptions
+		}
 		gvr := action.GetResource()
 		ns := action.GetNamespace()
-		watch, err := o.Watch(gvr, ns)
+		watch, err := o.Watch(gvr, ns, opts)
 		if err != nil {
 			return false, nil, err
 		}
@@ -107,9 +112,13 @@ func NewClientset(objects ...runtime.Object) *Clientset {
 	cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake}
 	cs.AddReactor("*", "*", testing.ObjectReaction(o))
 	cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) {
+		var opts metav1.ListOptions
+		if watchActcion, ok := action.(testing.WatchActionImpl); ok {
+			opts = watchActcion.ListOptions
+		}
 		gvr := action.GetResource()
 		ns := action.GetNamespace()
-		watch, err := o.Watch(gvr, ns)
+		watch, err := o.Watch(gvr, ns, opts)
 		if err != nil {
 			return false, nil, err
 		}
diff --git a/pkg/client/clientset/versioned/typed/apis/v1/apis_client.go b/pkg/client/clientset/versioned/typed/apis/v1/apis_client.go
index 99dfe9e0..7ed0bc4d 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1/apis_client.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1/apis_client.go
@@ -19,11 +19,11 @@ limitations under the License.
 package v1
 
 import (
-	"net/http"
+	http "net/http"
 
 	rest "k8s.io/client-go/rest"
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
-	"sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
+	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
 type GatewayV1Interface interface {
@@ -60,9 +60,7 @@ func (c *GatewayV1Client) HTTPRoutes(namespace string) HTTPRouteInterface {
 // where httpClient was generated with rest.HTTPClientFor(c).
 func NewForConfig(c *rest.Config) (*GatewayV1Client, error) {
 	config := *c
-	if err := setConfigDefaults(&config); err != nil {
-		return nil, err
-	}
+	setConfigDefaults(&config)
 	httpClient, err := rest.HTTPClientFor(&config)
 	if err != nil {
 		return nil, err
@@ -74,9 +72,7 @@ func NewForConfig(c *rest.Config) (*GatewayV1Client, error) {
 // Note the http client provided takes precedence over the configured transport values.
 func NewForConfigAndClient(c *rest.Config, h *http.Client) (*GatewayV1Client, error) {
 	config := *c
-	if err := setConfigDefaults(&config); err != nil {
-		return nil, err
-	}
+	setConfigDefaults(&config)
 	client, err := rest.RESTClientForConfigAndClient(&config, h)
 	if err != nil {
 		return nil, err
@@ -99,17 +95,15 @@ func New(c rest.Interface) *GatewayV1Client {
 	return &GatewayV1Client{c}
 }
 
-func setConfigDefaults(config *rest.Config) error {
-	gv := v1.SchemeGroupVersion
+func setConfigDefaults(config *rest.Config) {
+	gv := apisv1.SchemeGroupVersion
 	config.GroupVersion = &gv
 	config.APIPath = "/apis"
-	config.NegotiatedSerializer = scheme.Codecs.WithoutConversion()
+	config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion()
 
 	if config.UserAgent == "" {
 		config.UserAgent = rest.DefaultKubernetesUserAgent()
 	}
-
-	return nil
 }
 
 // RESTClient returns a RESTClient that is used to communicate
diff --git a/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_apis_client.go b/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_apis_client.go
index 1563d4cf..0b68bad3 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_apis_client.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_apis_client.go
@@ -29,19 +29,19 @@ type FakeGatewayV1 struct {
 }
 
 func (c *FakeGatewayV1) GRPCRoutes(namespace string) v1.GRPCRouteInterface {
-	return &FakeGRPCRoutes{c, namespace}
+	return newFakeGRPCRoutes(c, namespace)
 }
 
 func (c *FakeGatewayV1) Gateways(namespace string) v1.GatewayInterface {
-	return &FakeGateways{c, namespace}
+	return newFakeGateways(c, namespace)
 }
 
 func (c *FakeGatewayV1) GatewayClasses() v1.GatewayClassInterface {
-	return &FakeGatewayClasses{c}
+	return newFakeGatewayClasses(c)
 }
 
 func (c *FakeGatewayV1) HTTPRoutes(namespace string) v1.HTTPRouteInterface {
-	return &FakeHTTPRoutes{c, namespace}
+	return newFakeHTTPRoutes(c, namespace)
 }
 
 // RESTClient returns a RESTClient that is used to communicate
diff --git a/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_gateway.go b/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_gateway.go
index 7c85aa8e..f38ec7ce 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_gateway.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_gateway.go
@@ -19,179 +19,31 @@ limitations under the License.
 package fake
 
 import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
+	gentype "k8s.io/client-go/gentype"
 	v1 "sigs.k8s.io/gateway-api/apis/v1"
 	apisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
+	typedapisv1 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apis/v1"
 )
 
-// FakeGateways implements GatewayInterface
-type FakeGateways struct {
+// fakeGateways implements GatewayInterface
+type fakeGateways struct {
+	*gentype.FakeClientWithListAndApply[*v1.Gateway, *v1.GatewayList, *apisv1.GatewayApplyConfiguration]
 	Fake *FakeGatewayV1
-	ns   string
-}
-
-var gatewaysResource = v1.SchemeGroupVersion.WithResource("gateways")
-
-var gatewaysKind = v1.SchemeGroupVersion.WithKind("Gateway")
-
-// Get takes name of the gateway, and returns the corresponding gateway object, and an error if there is any.
-func (c *FakeGateways) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Gateway, err error) {
-	emptyResult := &v1.Gateway{}
-	obj, err := c.Fake.
-		Invokes(testing.NewGetActionWithOptions(gatewaysResource, c.ns, name, options), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.Gateway), err
-}
-
-// List takes label and field selectors, and returns the list of Gateways that match those selectors.
-func (c *FakeGateways) List(ctx context.Context, opts metav1.ListOptions) (result *v1.GatewayList, err error) {
-	emptyResult := &v1.GatewayList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewListActionWithOptions(gatewaysResource, gatewaysKind, c.ns, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1.GatewayList{ListMeta: obj.(*v1.GatewayList).ListMeta}
-	for _, item := range obj.(*v1.GatewayList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested gateways.
-func (c *FakeGateways) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchActionWithOptions(gatewaysResource, c.ns, opts))
-
-}
-
-// Create takes the representation of a gateway and creates it.  Returns the server's representation of the gateway, and an error, if there is any.
-func (c *FakeGateways) Create(ctx context.Context, gateway *v1.Gateway, opts metav1.CreateOptions) (result *v1.Gateway, err error) {
-	emptyResult := &v1.Gateway{}
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateActionWithOptions(gatewaysResource, c.ns, gateway, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.Gateway), err
-}
-
-// Update takes the representation of a gateway and updates it. Returns the server's representation of the gateway, and an error, if there is any.
-func (c *FakeGateways) Update(ctx context.Context, gateway *v1.Gateway, opts metav1.UpdateOptions) (result *v1.Gateway, err error) {
-	emptyResult := &v1.Gateway{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateActionWithOptions(gatewaysResource, c.ns, gateway, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.Gateway), err
 }
 
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeGateways) UpdateStatus(ctx context.Context, gateway *v1.Gateway, opts metav1.UpdateOptions) (result *v1.Gateway, err error) {
-	emptyResult := &v1.Gateway{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateSubresourceActionWithOptions(gatewaysResource, "status", c.ns, gateway, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.Gateway), err
-}
-
-// Delete takes name of the gateway and deletes it. Returns an error if one occurs.
-func (c *FakeGateways) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteActionWithOptions(gatewaysResource, c.ns, name, opts), &v1.Gateway{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeGateways) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error {
-	action := testing.NewDeleteCollectionActionWithOptions(gatewaysResource, c.ns, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1.GatewayList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched gateway.
-func (c *FakeGateways) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Gateway, err error) {
-	emptyResult := &v1.Gateway{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(gatewaysResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.Gateway), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied gateway.
-func (c *FakeGateways) Apply(ctx context.Context, gateway *apisv1.GatewayApplyConfiguration, opts metav1.ApplyOptions) (result *v1.Gateway, err error) {
-	if gateway == nil {
-		return nil, fmt.Errorf("gateway provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(gateway)
-	if err != nil {
-		return nil, err
-	}
-	name := gateway.Name
-	if name == nil {
-		return nil, fmt.Errorf("gateway.Name must be provided to Apply")
-	}
-	emptyResult := &v1.Gateway{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(gatewaysResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.Gateway), err
-}
-
-// ApplyStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-func (c *FakeGateways) ApplyStatus(ctx context.Context, gateway *apisv1.GatewayApplyConfiguration, opts metav1.ApplyOptions) (result *v1.Gateway, err error) {
-	if gateway == nil {
-		return nil, fmt.Errorf("gateway provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(gateway)
-	if err != nil {
-		return nil, err
-	}
-	name := gateway.Name
-	if name == nil {
-		return nil, fmt.Errorf("gateway.Name must be provided to Apply")
-	}
-	emptyResult := &v1.Gateway{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(gatewaysResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions(), "status"), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
+func newFakeGateways(fake *FakeGatewayV1, namespace string) typedapisv1.GatewayInterface {
+	return &fakeGateways{
+		gentype.NewFakeClientWithListAndApply[*v1.Gateway, *v1.GatewayList, *apisv1.GatewayApplyConfiguration](
+			fake.Fake,
+			namespace,
+			v1.SchemeGroupVersion.WithResource("gateways"),
+			v1.SchemeGroupVersion.WithKind("Gateway"),
+			func() *v1.Gateway { return &v1.Gateway{} },
+			func() *v1.GatewayList { return &v1.GatewayList{} },
+			func(dst, src *v1.GatewayList) { dst.ListMeta = src.ListMeta },
+			func(list *v1.GatewayList) []*v1.Gateway { return gentype.ToPointerSlice(list.Items) },
+			func(list *v1.GatewayList, items []*v1.Gateway) { list.Items = gentype.FromPointerSlice(items) },
+		),
+		fake,
 	}
-	return obj.(*v1.Gateway), err
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_gatewayclass.go b/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_gatewayclass.go
index 02e9b847..c7d6be52 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_gatewayclass.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_gatewayclass.go
@@ -19,168 +19,33 @@ limitations under the License.
 package fake
 
 import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
+	gentype "k8s.io/client-go/gentype"
 	v1 "sigs.k8s.io/gateway-api/apis/v1"
 	apisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
+	typedapisv1 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apis/v1"
 )
 
-// FakeGatewayClasses implements GatewayClassInterface
-type FakeGatewayClasses struct {
+// fakeGatewayClasses implements GatewayClassInterface
+type fakeGatewayClasses struct {
+	*gentype.FakeClientWithListAndApply[*v1.GatewayClass, *v1.GatewayClassList, *apisv1.GatewayClassApplyConfiguration]
 	Fake *FakeGatewayV1
 }
 
-var gatewayclassesResource = v1.SchemeGroupVersion.WithResource("gatewayclasses")
-
-var gatewayclassesKind = v1.SchemeGroupVersion.WithKind("GatewayClass")
-
-// Get takes name of the gatewayClass, and returns the corresponding gatewayClass object, and an error if there is any.
-func (c *FakeGatewayClasses) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.GatewayClass, err error) {
-	emptyResult := &v1.GatewayClass{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootGetActionWithOptions(gatewayclassesResource, name, options), emptyResult)
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.GatewayClass), err
-}
-
-// List takes label and field selectors, and returns the list of GatewayClasses that match those selectors.
-func (c *FakeGatewayClasses) List(ctx context.Context, opts metav1.ListOptions) (result *v1.GatewayClassList, err error) {
-	emptyResult := &v1.GatewayClassList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootListActionWithOptions(gatewayclassesResource, gatewayclassesKind, opts), emptyResult)
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1.GatewayClassList{ListMeta: obj.(*v1.GatewayClassList).ListMeta}
-	for _, item := range obj.(*v1.GatewayClassList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested gatewayClasses.
-func (c *FakeGatewayClasses) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewRootWatchActionWithOptions(gatewayclassesResource, opts))
-}
-
-// Create takes the representation of a gatewayClass and creates it.  Returns the server's representation of the gatewayClass, and an error, if there is any.
-func (c *FakeGatewayClasses) Create(ctx context.Context, gatewayClass *v1.GatewayClass, opts metav1.CreateOptions) (result *v1.GatewayClass, err error) {
-	emptyResult := &v1.GatewayClass{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootCreateActionWithOptions(gatewayclassesResource, gatewayClass, opts), emptyResult)
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.GatewayClass), err
-}
-
-// Update takes the representation of a gatewayClass and updates it. Returns the server's representation of the gatewayClass, and an error, if there is any.
-func (c *FakeGatewayClasses) Update(ctx context.Context, gatewayClass *v1.GatewayClass, opts metav1.UpdateOptions) (result *v1.GatewayClass, err error) {
-	emptyResult := &v1.GatewayClass{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootUpdateActionWithOptions(gatewayclassesResource, gatewayClass, opts), emptyResult)
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.GatewayClass), err
-}
-
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeGatewayClasses) UpdateStatus(ctx context.Context, gatewayClass *v1.GatewayClass, opts metav1.UpdateOptions) (result *v1.GatewayClass, err error) {
-	emptyResult := &v1.GatewayClass{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootUpdateSubresourceActionWithOptions(gatewayclassesResource, "status", gatewayClass, opts), emptyResult)
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.GatewayClass), err
-}
-
-// Delete takes name of the gatewayClass and deletes it. Returns an error if one occurs.
-func (c *FakeGatewayClasses) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewRootDeleteActionWithOptions(gatewayclassesResource, name, opts), &v1.GatewayClass{})
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeGatewayClasses) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error {
-	action := testing.NewRootDeleteCollectionActionWithOptions(gatewayclassesResource, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1.GatewayClassList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched gatewayClass.
-func (c *FakeGatewayClasses) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.GatewayClass, err error) {
-	emptyResult := &v1.GatewayClass{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootPatchSubresourceActionWithOptions(gatewayclassesResource, name, pt, data, opts, subresources...), emptyResult)
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.GatewayClass), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied gatewayClass.
-func (c *FakeGatewayClasses) Apply(ctx context.Context, gatewayClass *apisv1.GatewayClassApplyConfiguration, opts metav1.ApplyOptions) (result *v1.GatewayClass, err error) {
-	if gatewayClass == nil {
-		return nil, fmt.Errorf("gatewayClass provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(gatewayClass)
-	if err != nil {
-		return nil, err
-	}
-	name := gatewayClass.Name
-	if name == nil {
-		return nil, fmt.Errorf("gatewayClass.Name must be provided to Apply")
-	}
-	emptyResult := &v1.GatewayClass{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootPatchSubresourceActionWithOptions(gatewayclassesResource, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.GatewayClass), err
-}
-
-// ApplyStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-func (c *FakeGatewayClasses) ApplyStatus(ctx context.Context, gatewayClass *apisv1.GatewayClassApplyConfiguration, opts metav1.ApplyOptions) (result *v1.GatewayClass, err error) {
-	if gatewayClass == nil {
-		return nil, fmt.Errorf("gatewayClass provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(gatewayClass)
-	if err != nil {
-		return nil, err
-	}
-	name := gatewayClass.Name
-	if name == nil {
-		return nil, fmt.Errorf("gatewayClass.Name must be provided to Apply")
-	}
-	emptyResult := &v1.GatewayClass{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootPatchSubresourceActionWithOptions(gatewayclassesResource, *name, types.ApplyPatchType, data, opts.ToPatchOptions(), "status"), emptyResult)
-	if obj == nil {
-		return emptyResult, err
+func newFakeGatewayClasses(fake *FakeGatewayV1) typedapisv1.GatewayClassInterface {
+	return &fakeGatewayClasses{
+		gentype.NewFakeClientWithListAndApply[*v1.GatewayClass, *v1.GatewayClassList, *apisv1.GatewayClassApplyConfiguration](
+			fake.Fake,
+			"",
+			v1.SchemeGroupVersion.WithResource("gatewayclasses"),
+			v1.SchemeGroupVersion.WithKind("GatewayClass"),
+			func() *v1.GatewayClass { return &v1.GatewayClass{} },
+			func() *v1.GatewayClassList { return &v1.GatewayClassList{} },
+			func(dst, src *v1.GatewayClassList) { dst.ListMeta = src.ListMeta },
+			func(list *v1.GatewayClassList) []*v1.GatewayClass { return gentype.ToPointerSlice(list.Items) },
+			func(list *v1.GatewayClassList, items []*v1.GatewayClass) {
+				list.Items = gentype.FromPointerSlice(items)
+			},
+		),
+		fake,
 	}
-	return obj.(*v1.GatewayClass), err
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_grpcroute.go b/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_grpcroute.go
index bda7bc36..bb992451 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_grpcroute.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_grpcroute.go
@@ -19,179 +19,31 @@ limitations under the License.
 package fake
 
 import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
+	gentype "k8s.io/client-go/gentype"
 	v1 "sigs.k8s.io/gateway-api/apis/v1"
 	apisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
+	typedapisv1 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apis/v1"
 )
 
-// FakeGRPCRoutes implements GRPCRouteInterface
-type FakeGRPCRoutes struct {
+// fakeGRPCRoutes implements GRPCRouteInterface
+type fakeGRPCRoutes struct {
+	*gentype.FakeClientWithListAndApply[*v1.GRPCRoute, *v1.GRPCRouteList, *apisv1.GRPCRouteApplyConfiguration]
 	Fake *FakeGatewayV1
-	ns   string
-}
-
-var grpcroutesResource = v1.SchemeGroupVersion.WithResource("grpcroutes")
-
-var grpcroutesKind = v1.SchemeGroupVersion.WithKind("GRPCRoute")
-
-// Get takes name of the gRPCRoute, and returns the corresponding gRPCRoute object, and an error if there is any.
-func (c *FakeGRPCRoutes) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.GRPCRoute, err error) {
-	emptyResult := &v1.GRPCRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewGetActionWithOptions(grpcroutesResource, c.ns, name, options), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.GRPCRoute), err
-}
-
-// List takes label and field selectors, and returns the list of GRPCRoutes that match those selectors.
-func (c *FakeGRPCRoutes) List(ctx context.Context, opts metav1.ListOptions) (result *v1.GRPCRouteList, err error) {
-	emptyResult := &v1.GRPCRouteList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewListActionWithOptions(grpcroutesResource, grpcroutesKind, c.ns, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1.GRPCRouteList{ListMeta: obj.(*v1.GRPCRouteList).ListMeta}
-	for _, item := range obj.(*v1.GRPCRouteList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested gRPCRoutes.
-func (c *FakeGRPCRoutes) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchActionWithOptions(grpcroutesResource, c.ns, opts))
-
-}
-
-// Create takes the representation of a gRPCRoute and creates it.  Returns the server's representation of the gRPCRoute, and an error, if there is any.
-func (c *FakeGRPCRoutes) Create(ctx context.Context, gRPCRoute *v1.GRPCRoute, opts metav1.CreateOptions) (result *v1.GRPCRoute, err error) {
-	emptyResult := &v1.GRPCRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateActionWithOptions(grpcroutesResource, c.ns, gRPCRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.GRPCRoute), err
-}
-
-// Update takes the representation of a gRPCRoute and updates it. Returns the server's representation of the gRPCRoute, and an error, if there is any.
-func (c *FakeGRPCRoutes) Update(ctx context.Context, gRPCRoute *v1.GRPCRoute, opts metav1.UpdateOptions) (result *v1.GRPCRoute, err error) {
-	emptyResult := &v1.GRPCRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateActionWithOptions(grpcroutesResource, c.ns, gRPCRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.GRPCRoute), err
 }
 
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeGRPCRoutes) UpdateStatus(ctx context.Context, gRPCRoute *v1.GRPCRoute, opts metav1.UpdateOptions) (result *v1.GRPCRoute, err error) {
-	emptyResult := &v1.GRPCRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateSubresourceActionWithOptions(grpcroutesResource, "status", c.ns, gRPCRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.GRPCRoute), err
-}
-
-// Delete takes name of the gRPCRoute and deletes it. Returns an error if one occurs.
-func (c *FakeGRPCRoutes) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteActionWithOptions(grpcroutesResource, c.ns, name, opts), &v1.GRPCRoute{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeGRPCRoutes) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error {
-	action := testing.NewDeleteCollectionActionWithOptions(grpcroutesResource, c.ns, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1.GRPCRouteList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched gRPCRoute.
-func (c *FakeGRPCRoutes) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.GRPCRoute, err error) {
-	emptyResult := &v1.GRPCRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(grpcroutesResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.GRPCRoute), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied gRPCRoute.
-func (c *FakeGRPCRoutes) Apply(ctx context.Context, gRPCRoute *apisv1.GRPCRouteApplyConfiguration, opts metav1.ApplyOptions) (result *v1.GRPCRoute, err error) {
-	if gRPCRoute == nil {
-		return nil, fmt.Errorf("gRPCRoute provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(gRPCRoute)
-	if err != nil {
-		return nil, err
-	}
-	name := gRPCRoute.Name
-	if name == nil {
-		return nil, fmt.Errorf("gRPCRoute.Name must be provided to Apply")
-	}
-	emptyResult := &v1.GRPCRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(grpcroutesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.GRPCRoute), err
-}
-
-// ApplyStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-func (c *FakeGRPCRoutes) ApplyStatus(ctx context.Context, gRPCRoute *apisv1.GRPCRouteApplyConfiguration, opts metav1.ApplyOptions) (result *v1.GRPCRoute, err error) {
-	if gRPCRoute == nil {
-		return nil, fmt.Errorf("gRPCRoute provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(gRPCRoute)
-	if err != nil {
-		return nil, err
-	}
-	name := gRPCRoute.Name
-	if name == nil {
-		return nil, fmt.Errorf("gRPCRoute.Name must be provided to Apply")
-	}
-	emptyResult := &v1.GRPCRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(grpcroutesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions(), "status"), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
+func newFakeGRPCRoutes(fake *FakeGatewayV1, namespace string) typedapisv1.GRPCRouteInterface {
+	return &fakeGRPCRoutes{
+		gentype.NewFakeClientWithListAndApply[*v1.GRPCRoute, *v1.GRPCRouteList, *apisv1.GRPCRouteApplyConfiguration](
+			fake.Fake,
+			namespace,
+			v1.SchemeGroupVersion.WithResource("grpcroutes"),
+			v1.SchemeGroupVersion.WithKind("GRPCRoute"),
+			func() *v1.GRPCRoute { return &v1.GRPCRoute{} },
+			func() *v1.GRPCRouteList { return &v1.GRPCRouteList{} },
+			func(dst, src *v1.GRPCRouteList) { dst.ListMeta = src.ListMeta },
+			func(list *v1.GRPCRouteList) []*v1.GRPCRoute { return gentype.ToPointerSlice(list.Items) },
+			func(list *v1.GRPCRouteList, items []*v1.GRPCRoute) { list.Items = gentype.FromPointerSlice(items) },
+		),
+		fake,
 	}
-	return obj.(*v1.GRPCRoute), err
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_httproute.go b/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_httproute.go
index 468b1e2d..19755678 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_httproute.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1/fake/fake_httproute.go
@@ -19,179 +19,31 @@ limitations under the License.
 package fake
 
 import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
+	gentype "k8s.io/client-go/gentype"
 	v1 "sigs.k8s.io/gateway-api/apis/v1"
 	apisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
+	typedapisv1 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apis/v1"
 )
 
-// FakeHTTPRoutes implements HTTPRouteInterface
-type FakeHTTPRoutes struct {
+// fakeHTTPRoutes implements HTTPRouteInterface
+type fakeHTTPRoutes struct {
+	*gentype.FakeClientWithListAndApply[*v1.HTTPRoute, *v1.HTTPRouteList, *apisv1.HTTPRouteApplyConfiguration]
 	Fake *FakeGatewayV1
-	ns   string
-}
-
-var httproutesResource = v1.SchemeGroupVersion.WithResource("httproutes")
-
-var httproutesKind = v1.SchemeGroupVersion.WithKind("HTTPRoute")
-
-// Get takes name of the hTTPRoute, and returns the corresponding hTTPRoute object, and an error if there is any.
-func (c *FakeHTTPRoutes) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.HTTPRoute, err error) {
-	emptyResult := &v1.HTTPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewGetActionWithOptions(httproutesResource, c.ns, name, options), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.HTTPRoute), err
-}
-
-// List takes label and field selectors, and returns the list of HTTPRoutes that match those selectors.
-func (c *FakeHTTPRoutes) List(ctx context.Context, opts metav1.ListOptions) (result *v1.HTTPRouteList, err error) {
-	emptyResult := &v1.HTTPRouteList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewListActionWithOptions(httproutesResource, httproutesKind, c.ns, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1.HTTPRouteList{ListMeta: obj.(*v1.HTTPRouteList).ListMeta}
-	for _, item := range obj.(*v1.HTTPRouteList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested hTTPRoutes.
-func (c *FakeHTTPRoutes) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchActionWithOptions(httproutesResource, c.ns, opts))
-
-}
-
-// Create takes the representation of a hTTPRoute and creates it.  Returns the server's representation of the hTTPRoute, and an error, if there is any.
-func (c *FakeHTTPRoutes) Create(ctx context.Context, hTTPRoute *v1.HTTPRoute, opts metav1.CreateOptions) (result *v1.HTTPRoute, err error) {
-	emptyResult := &v1.HTTPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateActionWithOptions(httproutesResource, c.ns, hTTPRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.HTTPRoute), err
-}
-
-// Update takes the representation of a hTTPRoute and updates it. Returns the server's representation of the hTTPRoute, and an error, if there is any.
-func (c *FakeHTTPRoutes) Update(ctx context.Context, hTTPRoute *v1.HTTPRoute, opts metav1.UpdateOptions) (result *v1.HTTPRoute, err error) {
-	emptyResult := &v1.HTTPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateActionWithOptions(httproutesResource, c.ns, hTTPRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.HTTPRoute), err
 }
 
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeHTTPRoutes) UpdateStatus(ctx context.Context, hTTPRoute *v1.HTTPRoute, opts metav1.UpdateOptions) (result *v1.HTTPRoute, err error) {
-	emptyResult := &v1.HTTPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateSubresourceActionWithOptions(httproutesResource, "status", c.ns, hTTPRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.HTTPRoute), err
-}
-
-// Delete takes name of the hTTPRoute and deletes it. Returns an error if one occurs.
-func (c *FakeHTTPRoutes) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteActionWithOptions(httproutesResource, c.ns, name, opts), &v1.HTTPRoute{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeHTTPRoutes) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error {
-	action := testing.NewDeleteCollectionActionWithOptions(httproutesResource, c.ns, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1.HTTPRouteList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched hTTPRoute.
-func (c *FakeHTTPRoutes) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.HTTPRoute, err error) {
-	emptyResult := &v1.HTTPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(httproutesResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.HTTPRoute), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied hTTPRoute.
-func (c *FakeHTTPRoutes) Apply(ctx context.Context, hTTPRoute *apisv1.HTTPRouteApplyConfiguration, opts metav1.ApplyOptions) (result *v1.HTTPRoute, err error) {
-	if hTTPRoute == nil {
-		return nil, fmt.Errorf("hTTPRoute provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(hTTPRoute)
-	if err != nil {
-		return nil, err
-	}
-	name := hTTPRoute.Name
-	if name == nil {
-		return nil, fmt.Errorf("hTTPRoute.Name must be provided to Apply")
-	}
-	emptyResult := &v1.HTTPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(httproutesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1.HTTPRoute), err
-}
-
-// ApplyStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-func (c *FakeHTTPRoutes) ApplyStatus(ctx context.Context, hTTPRoute *apisv1.HTTPRouteApplyConfiguration, opts metav1.ApplyOptions) (result *v1.HTTPRoute, err error) {
-	if hTTPRoute == nil {
-		return nil, fmt.Errorf("hTTPRoute provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(hTTPRoute)
-	if err != nil {
-		return nil, err
-	}
-	name := hTTPRoute.Name
-	if name == nil {
-		return nil, fmt.Errorf("hTTPRoute.Name must be provided to Apply")
-	}
-	emptyResult := &v1.HTTPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(httproutesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions(), "status"), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
+func newFakeHTTPRoutes(fake *FakeGatewayV1, namespace string) typedapisv1.HTTPRouteInterface {
+	return &fakeHTTPRoutes{
+		gentype.NewFakeClientWithListAndApply[*v1.HTTPRoute, *v1.HTTPRouteList, *apisv1.HTTPRouteApplyConfiguration](
+			fake.Fake,
+			namespace,
+			v1.SchemeGroupVersion.WithResource("httproutes"),
+			v1.SchemeGroupVersion.WithKind("HTTPRoute"),
+			func() *v1.HTTPRoute { return &v1.HTTPRoute{} },
+			func() *v1.HTTPRouteList { return &v1.HTTPRouteList{} },
+			func(dst, src *v1.HTTPRouteList) { dst.ListMeta = src.ListMeta },
+			func(list *v1.HTTPRouteList) []*v1.HTTPRoute { return gentype.ToPointerSlice(list.Items) },
+			func(list *v1.HTTPRouteList, items []*v1.HTTPRoute) { list.Items = gentype.FromPointerSlice(items) },
+		),
+		fake,
 	}
-	return obj.(*v1.HTTPRoute), err
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1/gateway.go b/pkg/client/clientset/versioned/typed/apis/v1/gateway.go
index 44e612b6..4b45900a 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1/gateway.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1/gateway.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1
 
 import (
-	"context"
+	context "context"
 
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	watch "k8s.io/apimachinery/pkg/watch"
 	gentype "k8s.io/client-go/gentype"
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
-	apisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
+	applyconfigurationapisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
 	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
@@ -38,36 +38,37 @@ type GatewaysGetter interface {
 
 // GatewayInterface has methods to work with Gateway resources.
 type GatewayInterface interface {
-	Create(ctx context.Context, gateway *v1.Gateway, opts metav1.CreateOptions) (*v1.Gateway, error)
-	Update(ctx context.Context, gateway *v1.Gateway, opts metav1.UpdateOptions) (*v1.Gateway, error)
+	Create(ctx context.Context, gateway *apisv1.Gateway, opts metav1.CreateOptions) (*apisv1.Gateway, error)
+	Update(ctx context.Context, gateway *apisv1.Gateway, opts metav1.UpdateOptions) (*apisv1.Gateway, error)
 	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-	UpdateStatus(ctx context.Context, gateway *v1.Gateway, opts metav1.UpdateOptions) (*v1.Gateway, error)
+	UpdateStatus(ctx context.Context, gateway *apisv1.Gateway, opts metav1.UpdateOptions) (*apisv1.Gateway, error)
 	Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error
 	DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error
-	Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Gateway, error)
-	List(ctx context.Context, opts metav1.ListOptions) (*v1.GatewayList, error)
+	Get(ctx context.Context, name string, opts metav1.GetOptions) (*apisv1.Gateway, error)
+	List(ctx context.Context, opts metav1.ListOptions) (*apisv1.GatewayList, error)
 	Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Gateway, err error)
-	Apply(ctx context.Context, gateway *apisv1.GatewayApplyConfiguration, opts metav1.ApplyOptions) (result *v1.Gateway, err error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *apisv1.Gateway, err error)
+	Apply(ctx context.Context, gateway *applyconfigurationapisv1.GatewayApplyConfiguration, opts metav1.ApplyOptions) (result *apisv1.Gateway, err error)
 	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-	ApplyStatus(ctx context.Context, gateway *apisv1.GatewayApplyConfiguration, opts metav1.ApplyOptions) (result *v1.Gateway, err error)
+	ApplyStatus(ctx context.Context, gateway *applyconfigurationapisv1.GatewayApplyConfiguration, opts metav1.ApplyOptions) (result *apisv1.Gateway, err error)
 	GatewayExpansion
 }
 
 // gateways implements GatewayInterface
 type gateways struct {
-	*gentype.ClientWithListAndApply[*v1.Gateway, *v1.GatewayList, *apisv1.GatewayApplyConfiguration]
+	*gentype.ClientWithListAndApply[*apisv1.Gateway, *apisv1.GatewayList, *applyconfigurationapisv1.GatewayApplyConfiguration]
 }
 
 // newGateways returns a Gateways
 func newGateways(c *GatewayV1Client, namespace string) *gateways {
 	return &gateways{
-		gentype.NewClientWithListAndApply[*v1.Gateway, *v1.GatewayList, *apisv1.GatewayApplyConfiguration](
+		gentype.NewClientWithListAndApply[*apisv1.Gateway, *apisv1.GatewayList, *applyconfigurationapisv1.GatewayApplyConfiguration](
 			"gateways",
 			c.RESTClient(),
 			scheme.ParameterCodec,
 			namespace,
-			func() *v1.Gateway { return &v1.Gateway{} },
-			func() *v1.GatewayList { return &v1.GatewayList{} }),
+			func() *apisv1.Gateway { return &apisv1.Gateway{} },
+			func() *apisv1.GatewayList { return &apisv1.GatewayList{} },
+		),
 	}
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1/gatewayclass.go b/pkg/client/clientset/versioned/typed/apis/v1/gatewayclass.go
index 7f68e5f0..b4bd78f3 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1/gatewayclass.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1/gatewayclass.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1
 
 import (
-	"context"
+	context "context"
 
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	watch "k8s.io/apimachinery/pkg/watch"
 	gentype "k8s.io/client-go/gentype"
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
-	apisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
+	applyconfigurationapisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
 	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
@@ -38,36 +38,37 @@ type GatewayClassesGetter interface {
 
 // GatewayClassInterface has methods to work with GatewayClass resources.
 type GatewayClassInterface interface {
-	Create(ctx context.Context, gatewayClass *v1.GatewayClass, opts metav1.CreateOptions) (*v1.GatewayClass, error)
-	Update(ctx context.Context, gatewayClass *v1.GatewayClass, opts metav1.UpdateOptions) (*v1.GatewayClass, error)
+	Create(ctx context.Context, gatewayClass *apisv1.GatewayClass, opts metav1.CreateOptions) (*apisv1.GatewayClass, error)
+	Update(ctx context.Context, gatewayClass *apisv1.GatewayClass, opts metav1.UpdateOptions) (*apisv1.GatewayClass, error)
 	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-	UpdateStatus(ctx context.Context, gatewayClass *v1.GatewayClass, opts metav1.UpdateOptions) (*v1.GatewayClass, error)
+	UpdateStatus(ctx context.Context, gatewayClass *apisv1.GatewayClass, opts metav1.UpdateOptions) (*apisv1.GatewayClass, error)
 	Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error
 	DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error
-	Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.GatewayClass, error)
-	List(ctx context.Context, opts metav1.ListOptions) (*v1.GatewayClassList, error)
+	Get(ctx context.Context, name string, opts metav1.GetOptions) (*apisv1.GatewayClass, error)
+	List(ctx context.Context, opts metav1.ListOptions) (*apisv1.GatewayClassList, error)
 	Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.GatewayClass, err error)
-	Apply(ctx context.Context, gatewayClass *apisv1.GatewayClassApplyConfiguration, opts metav1.ApplyOptions) (result *v1.GatewayClass, err error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *apisv1.GatewayClass, err error)
+	Apply(ctx context.Context, gatewayClass *applyconfigurationapisv1.GatewayClassApplyConfiguration, opts metav1.ApplyOptions) (result *apisv1.GatewayClass, err error)
 	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-	ApplyStatus(ctx context.Context, gatewayClass *apisv1.GatewayClassApplyConfiguration, opts metav1.ApplyOptions) (result *v1.GatewayClass, err error)
+	ApplyStatus(ctx context.Context, gatewayClass *applyconfigurationapisv1.GatewayClassApplyConfiguration, opts metav1.ApplyOptions) (result *apisv1.GatewayClass, err error)
 	GatewayClassExpansion
 }
 
 // gatewayClasses implements GatewayClassInterface
 type gatewayClasses struct {
-	*gentype.ClientWithListAndApply[*v1.GatewayClass, *v1.GatewayClassList, *apisv1.GatewayClassApplyConfiguration]
+	*gentype.ClientWithListAndApply[*apisv1.GatewayClass, *apisv1.GatewayClassList, *applyconfigurationapisv1.GatewayClassApplyConfiguration]
 }
 
 // newGatewayClasses returns a GatewayClasses
 func newGatewayClasses(c *GatewayV1Client) *gatewayClasses {
 	return &gatewayClasses{
-		gentype.NewClientWithListAndApply[*v1.GatewayClass, *v1.GatewayClassList, *apisv1.GatewayClassApplyConfiguration](
+		gentype.NewClientWithListAndApply[*apisv1.GatewayClass, *apisv1.GatewayClassList, *applyconfigurationapisv1.GatewayClassApplyConfiguration](
 			"gatewayclasses",
 			c.RESTClient(),
 			scheme.ParameterCodec,
 			"",
-			func() *v1.GatewayClass { return &v1.GatewayClass{} },
-			func() *v1.GatewayClassList { return &v1.GatewayClassList{} }),
+			func() *apisv1.GatewayClass { return &apisv1.GatewayClass{} },
+			func() *apisv1.GatewayClassList { return &apisv1.GatewayClassList{} },
+		),
 	}
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1/grpcroute.go b/pkg/client/clientset/versioned/typed/apis/v1/grpcroute.go
index 37d7406d..e57f5365 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1/grpcroute.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1/grpcroute.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1
 
 import (
-	"context"
+	context "context"
 
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	watch "k8s.io/apimachinery/pkg/watch"
 	gentype "k8s.io/client-go/gentype"
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
-	apisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
+	applyconfigurationapisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
 	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
@@ -38,36 +38,37 @@ type GRPCRoutesGetter interface {
 
 // GRPCRouteInterface has methods to work with GRPCRoute resources.
 type GRPCRouteInterface interface {
-	Create(ctx context.Context, gRPCRoute *v1.GRPCRoute, opts metav1.CreateOptions) (*v1.GRPCRoute, error)
-	Update(ctx context.Context, gRPCRoute *v1.GRPCRoute, opts metav1.UpdateOptions) (*v1.GRPCRoute, error)
+	Create(ctx context.Context, gRPCRoute *apisv1.GRPCRoute, opts metav1.CreateOptions) (*apisv1.GRPCRoute, error)
+	Update(ctx context.Context, gRPCRoute *apisv1.GRPCRoute, opts metav1.UpdateOptions) (*apisv1.GRPCRoute, error)
 	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-	UpdateStatus(ctx context.Context, gRPCRoute *v1.GRPCRoute, opts metav1.UpdateOptions) (*v1.GRPCRoute, error)
+	UpdateStatus(ctx context.Context, gRPCRoute *apisv1.GRPCRoute, opts metav1.UpdateOptions) (*apisv1.GRPCRoute, error)
 	Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error
 	DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error
-	Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.GRPCRoute, error)
-	List(ctx context.Context, opts metav1.ListOptions) (*v1.GRPCRouteList, error)
+	Get(ctx context.Context, name string, opts metav1.GetOptions) (*apisv1.GRPCRoute, error)
+	List(ctx context.Context, opts metav1.ListOptions) (*apisv1.GRPCRouteList, error)
 	Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.GRPCRoute, err error)
-	Apply(ctx context.Context, gRPCRoute *apisv1.GRPCRouteApplyConfiguration, opts metav1.ApplyOptions) (result *v1.GRPCRoute, err error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *apisv1.GRPCRoute, err error)
+	Apply(ctx context.Context, gRPCRoute *applyconfigurationapisv1.GRPCRouteApplyConfiguration, opts metav1.ApplyOptions) (result *apisv1.GRPCRoute, err error)
 	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-	ApplyStatus(ctx context.Context, gRPCRoute *apisv1.GRPCRouteApplyConfiguration, opts metav1.ApplyOptions) (result *v1.GRPCRoute, err error)
+	ApplyStatus(ctx context.Context, gRPCRoute *applyconfigurationapisv1.GRPCRouteApplyConfiguration, opts metav1.ApplyOptions) (result *apisv1.GRPCRoute, err error)
 	GRPCRouteExpansion
 }
 
 // gRPCRoutes implements GRPCRouteInterface
 type gRPCRoutes struct {
-	*gentype.ClientWithListAndApply[*v1.GRPCRoute, *v1.GRPCRouteList, *apisv1.GRPCRouteApplyConfiguration]
+	*gentype.ClientWithListAndApply[*apisv1.GRPCRoute, *apisv1.GRPCRouteList, *applyconfigurationapisv1.GRPCRouteApplyConfiguration]
 }
 
 // newGRPCRoutes returns a GRPCRoutes
 func newGRPCRoutes(c *GatewayV1Client, namespace string) *gRPCRoutes {
 	return &gRPCRoutes{
-		gentype.NewClientWithListAndApply[*v1.GRPCRoute, *v1.GRPCRouteList, *apisv1.GRPCRouteApplyConfiguration](
+		gentype.NewClientWithListAndApply[*apisv1.GRPCRoute, *apisv1.GRPCRouteList, *applyconfigurationapisv1.GRPCRouteApplyConfiguration](
 			"grpcroutes",
 			c.RESTClient(),
 			scheme.ParameterCodec,
 			namespace,
-			func() *v1.GRPCRoute { return &v1.GRPCRoute{} },
-			func() *v1.GRPCRouteList { return &v1.GRPCRouteList{} }),
+			func() *apisv1.GRPCRoute { return &apisv1.GRPCRoute{} },
+			func() *apisv1.GRPCRouteList { return &apisv1.GRPCRouteList{} },
+		),
 	}
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1/httproute.go b/pkg/client/clientset/versioned/typed/apis/v1/httproute.go
index d62867fa..07b0b843 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1/httproute.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1/httproute.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1
 
 import (
-	"context"
+	context "context"
 
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	watch "k8s.io/apimachinery/pkg/watch"
 	gentype "k8s.io/client-go/gentype"
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
-	apisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
+	applyconfigurationapisv1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1"
 	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
@@ -38,36 +38,37 @@ type HTTPRoutesGetter interface {
 
 // HTTPRouteInterface has methods to work with HTTPRoute resources.
 type HTTPRouteInterface interface {
-	Create(ctx context.Context, hTTPRoute *v1.HTTPRoute, opts metav1.CreateOptions) (*v1.HTTPRoute, error)
-	Update(ctx context.Context, hTTPRoute *v1.HTTPRoute, opts metav1.UpdateOptions) (*v1.HTTPRoute, error)
+	Create(ctx context.Context, hTTPRoute *apisv1.HTTPRoute, opts metav1.CreateOptions) (*apisv1.HTTPRoute, error)
+	Update(ctx context.Context, hTTPRoute *apisv1.HTTPRoute, opts metav1.UpdateOptions) (*apisv1.HTTPRoute, error)
 	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-	UpdateStatus(ctx context.Context, hTTPRoute *v1.HTTPRoute, opts metav1.UpdateOptions) (*v1.HTTPRoute, error)
+	UpdateStatus(ctx context.Context, hTTPRoute *apisv1.HTTPRoute, opts metav1.UpdateOptions) (*apisv1.HTTPRoute, error)
 	Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error
 	DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error
-	Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.HTTPRoute, error)
-	List(ctx context.Context, opts metav1.ListOptions) (*v1.HTTPRouteList, error)
+	Get(ctx context.Context, name string, opts metav1.GetOptions) (*apisv1.HTTPRoute, error)
+	List(ctx context.Context, opts metav1.ListOptions) (*apisv1.HTTPRouteList, error)
 	Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.HTTPRoute, err error)
-	Apply(ctx context.Context, hTTPRoute *apisv1.HTTPRouteApplyConfiguration, opts metav1.ApplyOptions) (result *v1.HTTPRoute, err error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *apisv1.HTTPRoute, err error)
+	Apply(ctx context.Context, hTTPRoute *applyconfigurationapisv1.HTTPRouteApplyConfiguration, opts metav1.ApplyOptions) (result *apisv1.HTTPRoute, err error)
 	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-	ApplyStatus(ctx context.Context, hTTPRoute *apisv1.HTTPRouteApplyConfiguration, opts metav1.ApplyOptions) (result *v1.HTTPRoute, err error)
+	ApplyStatus(ctx context.Context, hTTPRoute *applyconfigurationapisv1.HTTPRouteApplyConfiguration, opts metav1.ApplyOptions) (result *apisv1.HTTPRoute, err error)
 	HTTPRouteExpansion
 }
 
 // hTTPRoutes implements HTTPRouteInterface
 type hTTPRoutes struct {
-	*gentype.ClientWithListAndApply[*v1.HTTPRoute, *v1.HTTPRouteList, *apisv1.HTTPRouteApplyConfiguration]
+	*gentype.ClientWithListAndApply[*apisv1.HTTPRoute, *apisv1.HTTPRouteList, *applyconfigurationapisv1.HTTPRouteApplyConfiguration]
 }
 
 // newHTTPRoutes returns a HTTPRoutes
 func newHTTPRoutes(c *GatewayV1Client, namespace string) *hTTPRoutes {
 	return &hTTPRoutes{
-		gentype.NewClientWithListAndApply[*v1.HTTPRoute, *v1.HTTPRouteList, *apisv1.HTTPRouteApplyConfiguration](
+		gentype.NewClientWithListAndApply[*apisv1.HTTPRoute, *apisv1.HTTPRouteList, *applyconfigurationapisv1.HTTPRouteApplyConfiguration](
 			"httproutes",
 			c.RESTClient(),
 			scheme.ParameterCodec,
 			namespace,
-			func() *v1.HTTPRoute { return &v1.HTTPRoute{} },
-			func() *v1.HTTPRouteList { return &v1.HTTPRouteList{} }),
+			func() *apisv1.HTTPRoute { return &apisv1.HTTPRoute{} },
+			func() *apisv1.HTTPRouteList { return &apisv1.HTTPRouteList{} },
+		),
 	}
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha2/apis_client.go b/pkg/client/clientset/versioned/typed/apis/v1alpha2/apis_client.go
index 8431bb16..c25ef87c 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha2/apis_client.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha2/apis_client.go
@@ -19,16 +19,15 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"net/http"
+	http "net/http"
 
 	rest "k8s.io/client-go/rest"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-	"sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
 type GatewayV1alpha2Interface interface {
 	RESTClient() rest.Interface
-	BackendLBPoliciesGetter
 	GRPCRoutesGetter
 	ReferenceGrantsGetter
 	TCPRoutesGetter
@@ -41,10 +40,6 @@ type GatewayV1alpha2Client struct {
 	restClient rest.Interface
 }
 
-func (c *GatewayV1alpha2Client) BackendLBPolicies(namespace string) BackendLBPolicyInterface {
-	return newBackendLBPolicies(c, namespace)
-}
-
 func (c *GatewayV1alpha2Client) GRPCRoutes(namespace string) GRPCRouteInterface {
 	return newGRPCRoutes(c, namespace)
 }
@@ -70,9 +65,7 @@ func (c *GatewayV1alpha2Client) UDPRoutes(namespace string) UDPRouteInterface {
 // where httpClient was generated with rest.HTTPClientFor(c).
 func NewForConfig(c *rest.Config) (*GatewayV1alpha2Client, error) {
 	config := *c
-	if err := setConfigDefaults(&config); err != nil {
-		return nil, err
-	}
+	setConfigDefaults(&config)
 	httpClient, err := rest.HTTPClientFor(&config)
 	if err != nil {
 		return nil, err
@@ -84,9 +77,7 @@ func NewForConfig(c *rest.Config) (*GatewayV1alpha2Client, error) {
 // Note the http client provided takes precedence over the configured transport values.
 func NewForConfigAndClient(c *rest.Config, h *http.Client) (*GatewayV1alpha2Client, error) {
 	config := *c
-	if err := setConfigDefaults(&config); err != nil {
-		return nil, err
-	}
+	setConfigDefaults(&config)
 	client, err := rest.RESTClientForConfigAndClient(&config, h)
 	if err != nil {
 		return nil, err
@@ -109,17 +100,15 @@ func New(c rest.Interface) *GatewayV1alpha2Client {
 	return &GatewayV1alpha2Client{c}
 }
 
-func setConfigDefaults(config *rest.Config) error {
-	gv := v1alpha2.SchemeGroupVersion
+func setConfigDefaults(config *rest.Config) {
+	gv := apisv1alpha2.SchemeGroupVersion
 	config.GroupVersion = &gv
 	config.APIPath = "/apis"
-	config.NegotiatedSerializer = scheme.Codecs.WithoutConversion()
+	config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion()
 
 	if config.UserAgent == "" {
 		config.UserAgent = rest.DefaultKubernetesUserAgent()
 	}
-
-	return nil
 }
 
 // RESTClient returns a RESTClient that is used to communicate
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha2/backendlbpolicy.go b/pkg/client/clientset/versioned/typed/apis/v1alpha2/backendlbpolicy.go
deleted file mode 100644
index 6fde1bb8..00000000
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha2/backendlbpolicy.go
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package v1alpha2
-
-import (
-	"context"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	gentype "k8s.io/client-go/gentype"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-	apisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
-	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
-)
-
-// BackendLBPoliciesGetter has a method to return a BackendLBPolicyInterface.
-// A group's client should implement this interface.
-type BackendLBPoliciesGetter interface {
-	BackendLBPolicies(namespace string) BackendLBPolicyInterface
-}
-
-// BackendLBPolicyInterface has methods to work with BackendLBPolicy resources.
-type BackendLBPolicyInterface interface {
-	Create(ctx context.Context, backendLBPolicy *v1alpha2.BackendLBPolicy, opts v1.CreateOptions) (*v1alpha2.BackendLBPolicy, error)
-	Update(ctx context.Context, backendLBPolicy *v1alpha2.BackendLBPolicy, opts v1.UpdateOptions) (*v1alpha2.BackendLBPolicy, error)
-	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-	UpdateStatus(ctx context.Context, backendLBPolicy *v1alpha2.BackendLBPolicy, opts v1.UpdateOptions) (*v1alpha2.BackendLBPolicy, error)
-	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
-	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
-	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha2.BackendLBPolicy, error)
-	List(ctx context.Context, opts v1.ListOptions) (*v1alpha2.BackendLBPolicyList, error)
-	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha2.BackendLBPolicy, err error)
-	Apply(ctx context.Context, backendLBPolicy *apisv1alpha2.BackendLBPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.BackendLBPolicy, err error)
-	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-	ApplyStatus(ctx context.Context, backendLBPolicy *apisv1alpha2.BackendLBPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.BackendLBPolicy, err error)
-	BackendLBPolicyExpansion
-}
-
-// backendLBPolicies implements BackendLBPolicyInterface
-type backendLBPolicies struct {
-	*gentype.ClientWithListAndApply[*v1alpha2.BackendLBPolicy, *v1alpha2.BackendLBPolicyList, *apisv1alpha2.BackendLBPolicyApplyConfiguration]
-}
-
-// newBackendLBPolicies returns a BackendLBPolicies
-func newBackendLBPolicies(c *GatewayV1alpha2Client, namespace string) *backendLBPolicies {
-	return &backendLBPolicies{
-		gentype.NewClientWithListAndApply[*v1alpha2.BackendLBPolicy, *v1alpha2.BackendLBPolicyList, *apisv1alpha2.BackendLBPolicyApplyConfiguration](
-			"backendlbpolicies",
-			c.RESTClient(),
-			scheme.ParameterCodec,
-			namespace,
-			func() *v1alpha2.BackendLBPolicy { return &v1alpha2.BackendLBPolicy{} },
-			func() *v1alpha2.BackendLBPolicyList { return &v1alpha2.BackendLBPolicyList{} }),
-	}
-}
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_apis_client.go b/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_apis_client.go
index 7ea0de64..8fa03db5 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_apis_client.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_apis_client.go
@@ -28,28 +28,24 @@ type FakeGatewayV1alpha2 struct {
 	*testing.Fake
 }
 
-func (c *FakeGatewayV1alpha2) BackendLBPolicies(namespace string) v1alpha2.BackendLBPolicyInterface {
-	return &FakeBackendLBPolicies{c, namespace}
-}
-
 func (c *FakeGatewayV1alpha2) GRPCRoutes(namespace string) v1alpha2.GRPCRouteInterface {
-	return &FakeGRPCRoutes{c, namespace}
+	return newFakeGRPCRoutes(c, namespace)
 }
 
 func (c *FakeGatewayV1alpha2) ReferenceGrants(namespace string) v1alpha2.ReferenceGrantInterface {
-	return &FakeReferenceGrants{c, namespace}
+	return newFakeReferenceGrants(c, namespace)
 }
 
 func (c *FakeGatewayV1alpha2) TCPRoutes(namespace string) v1alpha2.TCPRouteInterface {
-	return &FakeTCPRoutes{c, namespace}
+	return newFakeTCPRoutes(c, namespace)
 }
 
 func (c *FakeGatewayV1alpha2) TLSRoutes(namespace string) v1alpha2.TLSRouteInterface {
-	return &FakeTLSRoutes{c, namespace}
+	return newFakeTLSRoutes(c, namespace)
 }
 
 func (c *FakeGatewayV1alpha2) UDPRoutes(namespace string) v1alpha2.UDPRouteInterface {
-	return &FakeUDPRoutes{c, namespace}
+	return newFakeUDPRoutes(c, namespace)
 }
 
 // RESTClient returns a RESTClient that is used to communicate
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_backendlbpolicy.go b/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_backendlbpolicy.go
deleted file mode 100644
index c95451a6..00000000
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_backendlbpolicy.go
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package fake
-
-import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-	apisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
-)
-
-// FakeBackendLBPolicies implements BackendLBPolicyInterface
-type FakeBackendLBPolicies struct {
-	Fake *FakeGatewayV1alpha2
-	ns   string
-}
-
-var backendlbpoliciesResource = v1alpha2.SchemeGroupVersion.WithResource("backendlbpolicies")
-
-var backendlbpoliciesKind = v1alpha2.SchemeGroupVersion.WithKind("BackendLBPolicy")
-
-// Get takes name of the backendLBPolicy, and returns the corresponding backendLBPolicy object, and an error if there is any.
-func (c *FakeBackendLBPolicies) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha2.BackendLBPolicy, err error) {
-	emptyResult := &v1alpha2.BackendLBPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewGetActionWithOptions(backendlbpoliciesResource, c.ns, name, options), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.BackendLBPolicy), err
-}
-
-// List takes label and field selectors, and returns the list of BackendLBPolicies that match those selectors.
-func (c *FakeBackendLBPolicies) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha2.BackendLBPolicyList, err error) {
-	emptyResult := &v1alpha2.BackendLBPolicyList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewListActionWithOptions(backendlbpoliciesResource, backendlbpoliciesKind, c.ns, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1alpha2.BackendLBPolicyList{ListMeta: obj.(*v1alpha2.BackendLBPolicyList).ListMeta}
-	for _, item := range obj.(*v1alpha2.BackendLBPolicyList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested backendLBPolicies.
-func (c *FakeBackendLBPolicies) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchActionWithOptions(backendlbpoliciesResource, c.ns, opts))
-
-}
-
-// Create takes the representation of a backendLBPolicy and creates it.  Returns the server's representation of the backendLBPolicy, and an error, if there is any.
-func (c *FakeBackendLBPolicies) Create(ctx context.Context, backendLBPolicy *v1alpha2.BackendLBPolicy, opts v1.CreateOptions) (result *v1alpha2.BackendLBPolicy, err error) {
-	emptyResult := &v1alpha2.BackendLBPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateActionWithOptions(backendlbpoliciesResource, c.ns, backendLBPolicy, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.BackendLBPolicy), err
-}
-
-// Update takes the representation of a backendLBPolicy and updates it. Returns the server's representation of the backendLBPolicy, and an error, if there is any.
-func (c *FakeBackendLBPolicies) Update(ctx context.Context, backendLBPolicy *v1alpha2.BackendLBPolicy, opts v1.UpdateOptions) (result *v1alpha2.BackendLBPolicy, err error) {
-	emptyResult := &v1alpha2.BackendLBPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateActionWithOptions(backendlbpoliciesResource, c.ns, backendLBPolicy, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.BackendLBPolicy), err
-}
-
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeBackendLBPolicies) UpdateStatus(ctx context.Context, backendLBPolicy *v1alpha2.BackendLBPolicy, opts v1.UpdateOptions) (result *v1alpha2.BackendLBPolicy, err error) {
-	emptyResult := &v1alpha2.BackendLBPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateSubresourceActionWithOptions(backendlbpoliciesResource, "status", c.ns, backendLBPolicy, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.BackendLBPolicy), err
-}
-
-// Delete takes name of the backendLBPolicy and deletes it. Returns an error if one occurs.
-func (c *FakeBackendLBPolicies) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteActionWithOptions(backendlbpoliciesResource, c.ns, name, opts), &v1alpha2.BackendLBPolicy{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeBackendLBPolicies) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
-	action := testing.NewDeleteCollectionActionWithOptions(backendlbpoliciesResource, c.ns, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1alpha2.BackendLBPolicyList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched backendLBPolicy.
-func (c *FakeBackendLBPolicies) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha2.BackendLBPolicy, err error) {
-	emptyResult := &v1alpha2.BackendLBPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(backendlbpoliciesResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.BackendLBPolicy), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied backendLBPolicy.
-func (c *FakeBackendLBPolicies) Apply(ctx context.Context, backendLBPolicy *apisv1alpha2.BackendLBPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.BackendLBPolicy, err error) {
-	if backendLBPolicy == nil {
-		return nil, fmt.Errorf("backendLBPolicy provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(backendLBPolicy)
-	if err != nil {
-		return nil, err
-	}
-	name := backendLBPolicy.Name
-	if name == nil {
-		return nil, fmt.Errorf("backendLBPolicy.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha2.BackendLBPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(backendlbpoliciesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.BackendLBPolicy), err
-}
-
-// ApplyStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-func (c *FakeBackendLBPolicies) ApplyStatus(ctx context.Context, backendLBPolicy *apisv1alpha2.BackendLBPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.BackendLBPolicy, err error) {
-	if backendLBPolicy == nil {
-		return nil, fmt.Errorf("backendLBPolicy provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(backendLBPolicy)
-	if err != nil {
-		return nil, err
-	}
-	name := backendLBPolicy.Name
-	if name == nil {
-		return nil, fmt.Errorf("backendLBPolicy.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha2.BackendLBPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(backendlbpoliciesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions(), "status"), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.BackendLBPolicy), err
-}
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_grpcroute.go b/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_grpcroute.go
index dbe6013e..111d8e69 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_grpcroute.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_grpcroute.go
@@ -19,179 +19,33 @@ limitations under the License.
 package fake
 
 import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
+	gentype "k8s.io/client-go/gentype"
 	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 	apisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
+	typedapisv1alpha2 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apis/v1alpha2"
 )
 
-// FakeGRPCRoutes implements GRPCRouteInterface
-type FakeGRPCRoutes struct {
+// fakeGRPCRoutes implements GRPCRouteInterface
+type fakeGRPCRoutes struct {
+	*gentype.FakeClientWithListAndApply[*v1alpha2.GRPCRoute, *v1alpha2.GRPCRouteList, *apisv1alpha2.GRPCRouteApplyConfiguration]
 	Fake *FakeGatewayV1alpha2
-	ns   string
-}
-
-var grpcroutesResource = v1alpha2.SchemeGroupVersion.WithResource("grpcroutes")
-
-var grpcroutesKind = v1alpha2.SchemeGroupVersion.WithKind("GRPCRoute")
-
-// Get takes name of the gRPCRoute, and returns the corresponding gRPCRoute object, and an error if there is any.
-func (c *FakeGRPCRoutes) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha2.GRPCRoute, err error) {
-	emptyResult := &v1alpha2.GRPCRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewGetActionWithOptions(grpcroutesResource, c.ns, name, options), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.GRPCRoute), err
-}
-
-// List takes label and field selectors, and returns the list of GRPCRoutes that match those selectors.
-func (c *FakeGRPCRoutes) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha2.GRPCRouteList, err error) {
-	emptyResult := &v1alpha2.GRPCRouteList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewListActionWithOptions(grpcroutesResource, grpcroutesKind, c.ns, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1alpha2.GRPCRouteList{ListMeta: obj.(*v1alpha2.GRPCRouteList).ListMeta}
-	for _, item := range obj.(*v1alpha2.GRPCRouteList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested gRPCRoutes.
-func (c *FakeGRPCRoutes) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchActionWithOptions(grpcroutesResource, c.ns, opts))
-
-}
-
-// Create takes the representation of a gRPCRoute and creates it.  Returns the server's representation of the gRPCRoute, and an error, if there is any.
-func (c *FakeGRPCRoutes) Create(ctx context.Context, gRPCRoute *v1alpha2.GRPCRoute, opts v1.CreateOptions) (result *v1alpha2.GRPCRoute, err error) {
-	emptyResult := &v1alpha2.GRPCRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateActionWithOptions(grpcroutesResource, c.ns, gRPCRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.GRPCRoute), err
-}
-
-// Update takes the representation of a gRPCRoute and updates it. Returns the server's representation of the gRPCRoute, and an error, if there is any.
-func (c *FakeGRPCRoutes) Update(ctx context.Context, gRPCRoute *v1alpha2.GRPCRoute, opts v1.UpdateOptions) (result *v1alpha2.GRPCRoute, err error) {
-	emptyResult := &v1alpha2.GRPCRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateActionWithOptions(grpcroutesResource, c.ns, gRPCRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.GRPCRoute), err
 }
 
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeGRPCRoutes) UpdateStatus(ctx context.Context, gRPCRoute *v1alpha2.GRPCRoute, opts v1.UpdateOptions) (result *v1alpha2.GRPCRoute, err error) {
-	emptyResult := &v1alpha2.GRPCRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateSubresourceActionWithOptions(grpcroutesResource, "status", c.ns, gRPCRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.GRPCRoute), err
-}
-
-// Delete takes name of the gRPCRoute and deletes it. Returns an error if one occurs.
-func (c *FakeGRPCRoutes) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteActionWithOptions(grpcroutesResource, c.ns, name, opts), &v1alpha2.GRPCRoute{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeGRPCRoutes) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
-	action := testing.NewDeleteCollectionActionWithOptions(grpcroutesResource, c.ns, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1alpha2.GRPCRouteList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched gRPCRoute.
-func (c *FakeGRPCRoutes) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha2.GRPCRoute, err error) {
-	emptyResult := &v1alpha2.GRPCRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(grpcroutesResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.GRPCRoute), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied gRPCRoute.
-func (c *FakeGRPCRoutes) Apply(ctx context.Context, gRPCRoute *apisv1alpha2.GRPCRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.GRPCRoute, err error) {
-	if gRPCRoute == nil {
-		return nil, fmt.Errorf("gRPCRoute provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(gRPCRoute)
-	if err != nil {
-		return nil, err
-	}
-	name := gRPCRoute.Name
-	if name == nil {
-		return nil, fmt.Errorf("gRPCRoute.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha2.GRPCRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(grpcroutesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.GRPCRoute), err
-}
-
-// ApplyStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-func (c *FakeGRPCRoutes) ApplyStatus(ctx context.Context, gRPCRoute *apisv1alpha2.GRPCRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.GRPCRoute, err error) {
-	if gRPCRoute == nil {
-		return nil, fmt.Errorf("gRPCRoute provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(gRPCRoute)
-	if err != nil {
-		return nil, err
-	}
-	name := gRPCRoute.Name
-	if name == nil {
-		return nil, fmt.Errorf("gRPCRoute.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha2.GRPCRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(grpcroutesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions(), "status"), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
+func newFakeGRPCRoutes(fake *FakeGatewayV1alpha2, namespace string) typedapisv1alpha2.GRPCRouteInterface {
+	return &fakeGRPCRoutes{
+		gentype.NewFakeClientWithListAndApply[*v1alpha2.GRPCRoute, *v1alpha2.GRPCRouteList, *apisv1alpha2.GRPCRouteApplyConfiguration](
+			fake.Fake,
+			namespace,
+			v1alpha2.SchemeGroupVersion.WithResource("grpcroutes"),
+			v1alpha2.SchemeGroupVersion.WithKind("GRPCRoute"),
+			func() *v1alpha2.GRPCRoute { return &v1alpha2.GRPCRoute{} },
+			func() *v1alpha2.GRPCRouteList { return &v1alpha2.GRPCRouteList{} },
+			func(dst, src *v1alpha2.GRPCRouteList) { dst.ListMeta = src.ListMeta },
+			func(list *v1alpha2.GRPCRouteList) []*v1alpha2.GRPCRoute { return gentype.ToPointerSlice(list.Items) },
+			func(list *v1alpha2.GRPCRouteList, items []*v1alpha2.GRPCRoute) {
+				list.Items = gentype.FromPointerSlice(items)
+			},
+		),
+		fake,
 	}
-	return obj.(*v1alpha2.GRPCRoute), err
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_referencegrant.go b/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_referencegrant.go
index 4268d0b0..1b57120c 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_referencegrant.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_referencegrant.go
@@ -19,142 +19,35 @@ limitations under the License.
 package fake
 
 import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
+	gentype "k8s.io/client-go/gentype"
 	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 	apisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
+	typedapisv1alpha2 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apis/v1alpha2"
 )
 
-// FakeReferenceGrants implements ReferenceGrantInterface
-type FakeReferenceGrants struct {
+// fakeReferenceGrants implements ReferenceGrantInterface
+type fakeReferenceGrants struct {
+	*gentype.FakeClientWithListAndApply[*v1alpha2.ReferenceGrant, *v1alpha2.ReferenceGrantList, *apisv1alpha2.ReferenceGrantApplyConfiguration]
 	Fake *FakeGatewayV1alpha2
-	ns   string
-}
-
-var referencegrantsResource = v1alpha2.SchemeGroupVersion.WithResource("referencegrants")
-
-var referencegrantsKind = v1alpha2.SchemeGroupVersion.WithKind("ReferenceGrant")
-
-// Get takes name of the referenceGrant, and returns the corresponding referenceGrant object, and an error if there is any.
-func (c *FakeReferenceGrants) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha2.ReferenceGrant, err error) {
-	emptyResult := &v1alpha2.ReferenceGrant{}
-	obj, err := c.Fake.
-		Invokes(testing.NewGetActionWithOptions(referencegrantsResource, c.ns, name, options), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.ReferenceGrant), err
-}
-
-// List takes label and field selectors, and returns the list of ReferenceGrants that match those selectors.
-func (c *FakeReferenceGrants) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha2.ReferenceGrantList, err error) {
-	emptyResult := &v1alpha2.ReferenceGrantList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewListActionWithOptions(referencegrantsResource, referencegrantsKind, c.ns, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1alpha2.ReferenceGrantList{ListMeta: obj.(*v1alpha2.ReferenceGrantList).ListMeta}
-	for _, item := range obj.(*v1alpha2.ReferenceGrantList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested referenceGrants.
-func (c *FakeReferenceGrants) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchActionWithOptions(referencegrantsResource, c.ns, opts))
-
 }
 
-// Create takes the representation of a referenceGrant and creates it.  Returns the server's representation of the referenceGrant, and an error, if there is any.
-func (c *FakeReferenceGrants) Create(ctx context.Context, referenceGrant *v1alpha2.ReferenceGrant, opts v1.CreateOptions) (result *v1alpha2.ReferenceGrant, err error) {
-	emptyResult := &v1alpha2.ReferenceGrant{}
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateActionWithOptions(referencegrantsResource, c.ns, referenceGrant, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.ReferenceGrant), err
-}
-
-// Update takes the representation of a referenceGrant and updates it. Returns the server's representation of the referenceGrant, and an error, if there is any.
-func (c *FakeReferenceGrants) Update(ctx context.Context, referenceGrant *v1alpha2.ReferenceGrant, opts v1.UpdateOptions) (result *v1alpha2.ReferenceGrant, err error) {
-	emptyResult := &v1alpha2.ReferenceGrant{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateActionWithOptions(referencegrantsResource, c.ns, referenceGrant, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.ReferenceGrant), err
-}
-
-// Delete takes name of the referenceGrant and deletes it. Returns an error if one occurs.
-func (c *FakeReferenceGrants) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteActionWithOptions(referencegrantsResource, c.ns, name, opts), &v1alpha2.ReferenceGrant{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeReferenceGrants) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
-	action := testing.NewDeleteCollectionActionWithOptions(referencegrantsResource, c.ns, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1alpha2.ReferenceGrantList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched referenceGrant.
-func (c *FakeReferenceGrants) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha2.ReferenceGrant, err error) {
-	emptyResult := &v1alpha2.ReferenceGrant{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(referencegrantsResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.ReferenceGrant), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied referenceGrant.
-func (c *FakeReferenceGrants) Apply(ctx context.Context, referenceGrant *apisv1alpha2.ReferenceGrantApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.ReferenceGrant, err error) {
-	if referenceGrant == nil {
-		return nil, fmt.Errorf("referenceGrant provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(referenceGrant)
-	if err != nil {
-		return nil, err
-	}
-	name := referenceGrant.Name
-	if name == nil {
-		return nil, fmt.Errorf("referenceGrant.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha2.ReferenceGrant{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(referencegrantsResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
+func newFakeReferenceGrants(fake *FakeGatewayV1alpha2, namespace string) typedapisv1alpha2.ReferenceGrantInterface {
+	return &fakeReferenceGrants{
+		gentype.NewFakeClientWithListAndApply[*v1alpha2.ReferenceGrant, *v1alpha2.ReferenceGrantList, *apisv1alpha2.ReferenceGrantApplyConfiguration](
+			fake.Fake,
+			namespace,
+			v1alpha2.SchemeGroupVersion.WithResource("referencegrants"),
+			v1alpha2.SchemeGroupVersion.WithKind("ReferenceGrant"),
+			func() *v1alpha2.ReferenceGrant { return &v1alpha2.ReferenceGrant{} },
+			func() *v1alpha2.ReferenceGrantList { return &v1alpha2.ReferenceGrantList{} },
+			func(dst, src *v1alpha2.ReferenceGrantList) { dst.ListMeta = src.ListMeta },
+			func(list *v1alpha2.ReferenceGrantList) []*v1alpha2.ReferenceGrant {
+				return gentype.ToPointerSlice(list.Items)
+			},
+			func(list *v1alpha2.ReferenceGrantList, items []*v1alpha2.ReferenceGrant) {
+				list.Items = gentype.FromPointerSlice(items)
+			},
+		),
+		fake,
 	}
-	return obj.(*v1alpha2.ReferenceGrant), err
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_tcproute.go b/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_tcproute.go
index bb90b445..180357c6 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_tcproute.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_tcproute.go
@@ -19,179 +19,33 @@ limitations under the License.
 package fake
 
 import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
+	gentype "k8s.io/client-go/gentype"
 	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 	apisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
+	typedapisv1alpha2 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apis/v1alpha2"
 )
 
-// FakeTCPRoutes implements TCPRouteInterface
-type FakeTCPRoutes struct {
+// fakeTCPRoutes implements TCPRouteInterface
+type fakeTCPRoutes struct {
+	*gentype.FakeClientWithListAndApply[*v1alpha2.TCPRoute, *v1alpha2.TCPRouteList, *apisv1alpha2.TCPRouteApplyConfiguration]
 	Fake *FakeGatewayV1alpha2
-	ns   string
-}
-
-var tcproutesResource = v1alpha2.SchemeGroupVersion.WithResource("tcproutes")
-
-var tcproutesKind = v1alpha2.SchemeGroupVersion.WithKind("TCPRoute")
-
-// Get takes name of the tCPRoute, and returns the corresponding tCPRoute object, and an error if there is any.
-func (c *FakeTCPRoutes) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha2.TCPRoute, err error) {
-	emptyResult := &v1alpha2.TCPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewGetActionWithOptions(tcproutesResource, c.ns, name, options), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.TCPRoute), err
-}
-
-// List takes label and field selectors, and returns the list of TCPRoutes that match those selectors.
-func (c *FakeTCPRoutes) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha2.TCPRouteList, err error) {
-	emptyResult := &v1alpha2.TCPRouteList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewListActionWithOptions(tcproutesResource, tcproutesKind, c.ns, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1alpha2.TCPRouteList{ListMeta: obj.(*v1alpha2.TCPRouteList).ListMeta}
-	for _, item := range obj.(*v1alpha2.TCPRouteList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested tCPRoutes.
-func (c *FakeTCPRoutes) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchActionWithOptions(tcproutesResource, c.ns, opts))
-
-}
-
-// Create takes the representation of a tCPRoute and creates it.  Returns the server's representation of the tCPRoute, and an error, if there is any.
-func (c *FakeTCPRoutes) Create(ctx context.Context, tCPRoute *v1alpha2.TCPRoute, opts v1.CreateOptions) (result *v1alpha2.TCPRoute, err error) {
-	emptyResult := &v1alpha2.TCPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateActionWithOptions(tcproutesResource, c.ns, tCPRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.TCPRoute), err
-}
-
-// Update takes the representation of a tCPRoute and updates it. Returns the server's representation of the tCPRoute, and an error, if there is any.
-func (c *FakeTCPRoutes) Update(ctx context.Context, tCPRoute *v1alpha2.TCPRoute, opts v1.UpdateOptions) (result *v1alpha2.TCPRoute, err error) {
-	emptyResult := &v1alpha2.TCPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateActionWithOptions(tcproutesResource, c.ns, tCPRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.TCPRoute), err
 }
 
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeTCPRoutes) UpdateStatus(ctx context.Context, tCPRoute *v1alpha2.TCPRoute, opts v1.UpdateOptions) (result *v1alpha2.TCPRoute, err error) {
-	emptyResult := &v1alpha2.TCPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateSubresourceActionWithOptions(tcproutesResource, "status", c.ns, tCPRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.TCPRoute), err
-}
-
-// Delete takes name of the tCPRoute and deletes it. Returns an error if one occurs.
-func (c *FakeTCPRoutes) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteActionWithOptions(tcproutesResource, c.ns, name, opts), &v1alpha2.TCPRoute{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeTCPRoutes) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
-	action := testing.NewDeleteCollectionActionWithOptions(tcproutesResource, c.ns, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1alpha2.TCPRouteList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched tCPRoute.
-func (c *FakeTCPRoutes) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha2.TCPRoute, err error) {
-	emptyResult := &v1alpha2.TCPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(tcproutesResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.TCPRoute), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied tCPRoute.
-func (c *FakeTCPRoutes) Apply(ctx context.Context, tCPRoute *apisv1alpha2.TCPRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.TCPRoute, err error) {
-	if tCPRoute == nil {
-		return nil, fmt.Errorf("tCPRoute provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(tCPRoute)
-	if err != nil {
-		return nil, err
-	}
-	name := tCPRoute.Name
-	if name == nil {
-		return nil, fmt.Errorf("tCPRoute.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha2.TCPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(tcproutesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.TCPRoute), err
-}
-
-// ApplyStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-func (c *FakeTCPRoutes) ApplyStatus(ctx context.Context, tCPRoute *apisv1alpha2.TCPRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.TCPRoute, err error) {
-	if tCPRoute == nil {
-		return nil, fmt.Errorf("tCPRoute provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(tCPRoute)
-	if err != nil {
-		return nil, err
-	}
-	name := tCPRoute.Name
-	if name == nil {
-		return nil, fmt.Errorf("tCPRoute.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha2.TCPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(tcproutesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions(), "status"), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
+func newFakeTCPRoutes(fake *FakeGatewayV1alpha2, namespace string) typedapisv1alpha2.TCPRouteInterface {
+	return &fakeTCPRoutes{
+		gentype.NewFakeClientWithListAndApply[*v1alpha2.TCPRoute, *v1alpha2.TCPRouteList, *apisv1alpha2.TCPRouteApplyConfiguration](
+			fake.Fake,
+			namespace,
+			v1alpha2.SchemeGroupVersion.WithResource("tcproutes"),
+			v1alpha2.SchemeGroupVersion.WithKind("TCPRoute"),
+			func() *v1alpha2.TCPRoute { return &v1alpha2.TCPRoute{} },
+			func() *v1alpha2.TCPRouteList { return &v1alpha2.TCPRouteList{} },
+			func(dst, src *v1alpha2.TCPRouteList) { dst.ListMeta = src.ListMeta },
+			func(list *v1alpha2.TCPRouteList) []*v1alpha2.TCPRoute { return gentype.ToPointerSlice(list.Items) },
+			func(list *v1alpha2.TCPRouteList, items []*v1alpha2.TCPRoute) {
+				list.Items = gentype.FromPointerSlice(items)
+			},
+		),
+		fake,
 	}
-	return obj.(*v1alpha2.TCPRoute), err
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_tlsroute.go b/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_tlsroute.go
index 360a9ae1..5242c25f 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_tlsroute.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_tlsroute.go
@@ -19,179 +19,33 @@ limitations under the License.
 package fake
 
 import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
+	gentype "k8s.io/client-go/gentype"
 	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 	apisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
+	typedapisv1alpha2 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apis/v1alpha2"
 )
 
-// FakeTLSRoutes implements TLSRouteInterface
-type FakeTLSRoutes struct {
+// fakeTLSRoutes implements TLSRouteInterface
+type fakeTLSRoutes struct {
+	*gentype.FakeClientWithListAndApply[*v1alpha2.TLSRoute, *v1alpha2.TLSRouteList, *apisv1alpha2.TLSRouteApplyConfiguration]
 	Fake *FakeGatewayV1alpha2
-	ns   string
-}
-
-var tlsroutesResource = v1alpha2.SchemeGroupVersion.WithResource("tlsroutes")
-
-var tlsroutesKind = v1alpha2.SchemeGroupVersion.WithKind("TLSRoute")
-
-// Get takes name of the tLSRoute, and returns the corresponding tLSRoute object, and an error if there is any.
-func (c *FakeTLSRoutes) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha2.TLSRoute, err error) {
-	emptyResult := &v1alpha2.TLSRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewGetActionWithOptions(tlsroutesResource, c.ns, name, options), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.TLSRoute), err
-}
-
-// List takes label and field selectors, and returns the list of TLSRoutes that match those selectors.
-func (c *FakeTLSRoutes) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha2.TLSRouteList, err error) {
-	emptyResult := &v1alpha2.TLSRouteList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewListActionWithOptions(tlsroutesResource, tlsroutesKind, c.ns, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1alpha2.TLSRouteList{ListMeta: obj.(*v1alpha2.TLSRouteList).ListMeta}
-	for _, item := range obj.(*v1alpha2.TLSRouteList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested tLSRoutes.
-func (c *FakeTLSRoutes) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchActionWithOptions(tlsroutesResource, c.ns, opts))
-
-}
-
-// Create takes the representation of a tLSRoute and creates it.  Returns the server's representation of the tLSRoute, and an error, if there is any.
-func (c *FakeTLSRoutes) Create(ctx context.Context, tLSRoute *v1alpha2.TLSRoute, opts v1.CreateOptions) (result *v1alpha2.TLSRoute, err error) {
-	emptyResult := &v1alpha2.TLSRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateActionWithOptions(tlsroutesResource, c.ns, tLSRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.TLSRoute), err
-}
-
-// Update takes the representation of a tLSRoute and updates it. Returns the server's representation of the tLSRoute, and an error, if there is any.
-func (c *FakeTLSRoutes) Update(ctx context.Context, tLSRoute *v1alpha2.TLSRoute, opts v1.UpdateOptions) (result *v1alpha2.TLSRoute, err error) {
-	emptyResult := &v1alpha2.TLSRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateActionWithOptions(tlsroutesResource, c.ns, tLSRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.TLSRoute), err
 }
 
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeTLSRoutes) UpdateStatus(ctx context.Context, tLSRoute *v1alpha2.TLSRoute, opts v1.UpdateOptions) (result *v1alpha2.TLSRoute, err error) {
-	emptyResult := &v1alpha2.TLSRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateSubresourceActionWithOptions(tlsroutesResource, "status", c.ns, tLSRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.TLSRoute), err
-}
-
-// Delete takes name of the tLSRoute and deletes it. Returns an error if one occurs.
-func (c *FakeTLSRoutes) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteActionWithOptions(tlsroutesResource, c.ns, name, opts), &v1alpha2.TLSRoute{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeTLSRoutes) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
-	action := testing.NewDeleteCollectionActionWithOptions(tlsroutesResource, c.ns, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1alpha2.TLSRouteList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched tLSRoute.
-func (c *FakeTLSRoutes) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha2.TLSRoute, err error) {
-	emptyResult := &v1alpha2.TLSRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(tlsroutesResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.TLSRoute), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied tLSRoute.
-func (c *FakeTLSRoutes) Apply(ctx context.Context, tLSRoute *apisv1alpha2.TLSRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.TLSRoute, err error) {
-	if tLSRoute == nil {
-		return nil, fmt.Errorf("tLSRoute provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(tLSRoute)
-	if err != nil {
-		return nil, err
-	}
-	name := tLSRoute.Name
-	if name == nil {
-		return nil, fmt.Errorf("tLSRoute.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha2.TLSRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(tlsroutesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.TLSRoute), err
-}
-
-// ApplyStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-func (c *FakeTLSRoutes) ApplyStatus(ctx context.Context, tLSRoute *apisv1alpha2.TLSRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.TLSRoute, err error) {
-	if tLSRoute == nil {
-		return nil, fmt.Errorf("tLSRoute provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(tLSRoute)
-	if err != nil {
-		return nil, err
-	}
-	name := tLSRoute.Name
-	if name == nil {
-		return nil, fmt.Errorf("tLSRoute.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha2.TLSRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(tlsroutesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions(), "status"), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
+func newFakeTLSRoutes(fake *FakeGatewayV1alpha2, namespace string) typedapisv1alpha2.TLSRouteInterface {
+	return &fakeTLSRoutes{
+		gentype.NewFakeClientWithListAndApply[*v1alpha2.TLSRoute, *v1alpha2.TLSRouteList, *apisv1alpha2.TLSRouteApplyConfiguration](
+			fake.Fake,
+			namespace,
+			v1alpha2.SchemeGroupVersion.WithResource("tlsroutes"),
+			v1alpha2.SchemeGroupVersion.WithKind("TLSRoute"),
+			func() *v1alpha2.TLSRoute { return &v1alpha2.TLSRoute{} },
+			func() *v1alpha2.TLSRouteList { return &v1alpha2.TLSRouteList{} },
+			func(dst, src *v1alpha2.TLSRouteList) { dst.ListMeta = src.ListMeta },
+			func(list *v1alpha2.TLSRouteList) []*v1alpha2.TLSRoute { return gentype.ToPointerSlice(list.Items) },
+			func(list *v1alpha2.TLSRouteList, items []*v1alpha2.TLSRoute) {
+				list.Items = gentype.FromPointerSlice(items)
+			},
+		),
+		fake,
 	}
-	return obj.(*v1alpha2.TLSRoute), err
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_udproute.go b/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_udproute.go
index 2defe25c..423d5bbd 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_udproute.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha2/fake/fake_udproute.go
@@ -19,179 +19,33 @@ limitations under the License.
 package fake
 
 import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
+	gentype "k8s.io/client-go/gentype"
 	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 	apisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
+	typedapisv1alpha2 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apis/v1alpha2"
 )
 
-// FakeUDPRoutes implements UDPRouteInterface
-type FakeUDPRoutes struct {
+// fakeUDPRoutes implements UDPRouteInterface
+type fakeUDPRoutes struct {
+	*gentype.FakeClientWithListAndApply[*v1alpha2.UDPRoute, *v1alpha2.UDPRouteList, *apisv1alpha2.UDPRouteApplyConfiguration]
 	Fake *FakeGatewayV1alpha2
-	ns   string
-}
-
-var udproutesResource = v1alpha2.SchemeGroupVersion.WithResource("udproutes")
-
-var udproutesKind = v1alpha2.SchemeGroupVersion.WithKind("UDPRoute")
-
-// Get takes name of the uDPRoute, and returns the corresponding uDPRoute object, and an error if there is any.
-func (c *FakeUDPRoutes) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha2.UDPRoute, err error) {
-	emptyResult := &v1alpha2.UDPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewGetActionWithOptions(udproutesResource, c.ns, name, options), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.UDPRoute), err
-}
-
-// List takes label and field selectors, and returns the list of UDPRoutes that match those selectors.
-func (c *FakeUDPRoutes) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha2.UDPRouteList, err error) {
-	emptyResult := &v1alpha2.UDPRouteList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewListActionWithOptions(udproutesResource, udproutesKind, c.ns, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1alpha2.UDPRouteList{ListMeta: obj.(*v1alpha2.UDPRouteList).ListMeta}
-	for _, item := range obj.(*v1alpha2.UDPRouteList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested uDPRoutes.
-func (c *FakeUDPRoutes) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchActionWithOptions(udproutesResource, c.ns, opts))
-
-}
-
-// Create takes the representation of a uDPRoute and creates it.  Returns the server's representation of the uDPRoute, and an error, if there is any.
-func (c *FakeUDPRoutes) Create(ctx context.Context, uDPRoute *v1alpha2.UDPRoute, opts v1.CreateOptions) (result *v1alpha2.UDPRoute, err error) {
-	emptyResult := &v1alpha2.UDPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateActionWithOptions(udproutesResource, c.ns, uDPRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.UDPRoute), err
-}
-
-// Update takes the representation of a uDPRoute and updates it. Returns the server's representation of the uDPRoute, and an error, if there is any.
-func (c *FakeUDPRoutes) Update(ctx context.Context, uDPRoute *v1alpha2.UDPRoute, opts v1.UpdateOptions) (result *v1alpha2.UDPRoute, err error) {
-	emptyResult := &v1alpha2.UDPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateActionWithOptions(udproutesResource, c.ns, uDPRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.UDPRoute), err
 }
 
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeUDPRoutes) UpdateStatus(ctx context.Context, uDPRoute *v1alpha2.UDPRoute, opts v1.UpdateOptions) (result *v1alpha2.UDPRoute, err error) {
-	emptyResult := &v1alpha2.UDPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateSubresourceActionWithOptions(udproutesResource, "status", c.ns, uDPRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.UDPRoute), err
-}
-
-// Delete takes name of the uDPRoute and deletes it. Returns an error if one occurs.
-func (c *FakeUDPRoutes) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteActionWithOptions(udproutesResource, c.ns, name, opts), &v1alpha2.UDPRoute{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeUDPRoutes) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
-	action := testing.NewDeleteCollectionActionWithOptions(udproutesResource, c.ns, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1alpha2.UDPRouteList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched uDPRoute.
-func (c *FakeUDPRoutes) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha2.UDPRoute, err error) {
-	emptyResult := &v1alpha2.UDPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(udproutesResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.UDPRoute), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied uDPRoute.
-func (c *FakeUDPRoutes) Apply(ctx context.Context, uDPRoute *apisv1alpha2.UDPRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.UDPRoute, err error) {
-	if uDPRoute == nil {
-		return nil, fmt.Errorf("uDPRoute provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(uDPRoute)
-	if err != nil {
-		return nil, err
-	}
-	name := uDPRoute.Name
-	if name == nil {
-		return nil, fmt.Errorf("uDPRoute.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha2.UDPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(udproutesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha2.UDPRoute), err
-}
-
-// ApplyStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-func (c *FakeUDPRoutes) ApplyStatus(ctx context.Context, uDPRoute *apisv1alpha2.UDPRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.UDPRoute, err error) {
-	if uDPRoute == nil {
-		return nil, fmt.Errorf("uDPRoute provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(uDPRoute)
-	if err != nil {
-		return nil, err
-	}
-	name := uDPRoute.Name
-	if name == nil {
-		return nil, fmt.Errorf("uDPRoute.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha2.UDPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(udproutesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions(), "status"), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
+func newFakeUDPRoutes(fake *FakeGatewayV1alpha2, namespace string) typedapisv1alpha2.UDPRouteInterface {
+	return &fakeUDPRoutes{
+		gentype.NewFakeClientWithListAndApply[*v1alpha2.UDPRoute, *v1alpha2.UDPRouteList, *apisv1alpha2.UDPRouteApplyConfiguration](
+			fake.Fake,
+			namespace,
+			v1alpha2.SchemeGroupVersion.WithResource("udproutes"),
+			v1alpha2.SchemeGroupVersion.WithKind("UDPRoute"),
+			func() *v1alpha2.UDPRoute { return &v1alpha2.UDPRoute{} },
+			func() *v1alpha2.UDPRouteList { return &v1alpha2.UDPRouteList{} },
+			func(dst, src *v1alpha2.UDPRouteList) { dst.ListMeta = src.ListMeta },
+			func(list *v1alpha2.UDPRouteList) []*v1alpha2.UDPRoute { return gentype.ToPointerSlice(list.Items) },
+			func(list *v1alpha2.UDPRouteList, items []*v1alpha2.UDPRoute) {
+				list.Items = gentype.FromPointerSlice(items)
+			},
+		),
+		fake,
 	}
-	return obj.(*v1alpha2.UDPRoute), err
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha2/generated_expansion.go b/pkg/client/clientset/versioned/typed/apis/v1alpha2/generated_expansion.go
index c0fe07b4..c57afdec 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha2/generated_expansion.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha2/generated_expansion.go
@@ -18,8 +18,6 @@ limitations under the License.
 
 package v1alpha2
 
-type BackendLBPolicyExpansion interface{}
-
 type GRPCRouteExpansion interface{}
 
 type ReferenceGrantExpansion interface{}
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha2/grpcroute.go b/pkg/client/clientset/versioned/typed/apis/v1alpha2/grpcroute.go
index aa10accc..ce972fa8 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha2/grpcroute.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha2/grpcroute.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"context"
+	context "context"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	watch "k8s.io/apimachinery/pkg/watch"
 	gentype "k8s.io/client-go/gentype"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-	apisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	applyconfigurationapisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
 	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
@@ -38,36 +38,37 @@ type GRPCRoutesGetter interface {
 
 // GRPCRouteInterface has methods to work with GRPCRoute resources.
 type GRPCRouteInterface interface {
-	Create(ctx context.Context, gRPCRoute *v1alpha2.GRPCRoute, opts v1.CreateOptions) (*v1alpha2.GRPCRoute, error)
-	Update(ctx context.Context, gRPCRoute *v1alpha2.GRPCRoute, opts v1.UpdateOptions) (*v1alpha2.GRPCRoute, error)
+	Create(ctx context.Context, gRPCRoute *apisv1alpha2.GRPCRoute, opts v1.CreateOptions) (*apisv1alpha2.GRPCRoute, error)
+	Update(ctx context.Context, gRPCRoute *apisv1alpha2.GRPCRoute, opts v1.UpdateOptions) (*apisv1alpha2.GRPCRoute, error)
 	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-	UpdateStatus(ctx context.Context, gRPCRoute *v1alpha2.GRPCRoute, opts v1.UpdateOptions) (*v1alpha2.GRPCRoute, error)
+	UpdateStatus(ctx context.Context, gRPCRoute *apisv1alpha2.GRPCRoute, opts v1.UpdateOptions) (*apisv1alpha2.GRPCRoute, error)
 	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
 	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
-	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha2.GRPCRoute, error)
-	List(ctx context.Context, opts v1.ListOptions) (*v1alpha2.GRPCRouteList, error)
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*apisv1alpha2.GRPCRoute, error)
+	List(ctx context.Context, opts v1.ListOptions) (*apisv1alpha2.GRPCRouteList, error)
 	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha2.GRPCRoute, err error)
-	Apply(ctx context.Context, gRPCRoute *apisv1alpha2.GRPCRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.GRPCRoute, err error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *apisv1alpha2.GRPCRoute, err error)
+	Apply(ctx context.Context, gRPCRoute *applyconfigurationapisv1alpha2.GRPCRouteApplyConfiguration, opts v1.ApplyOptions) (result *apisv1alpha2.GRPCRoute, err error)
 	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-	ApplyStatus(ctx context.Context, gRPCRoute *apisv1alpha2.GRPCRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.GRPCRoute, err error)
+	ApplyStatus(ctx context.Context, gRPCRoute *applyconfigurationapisv1alpha2.GRPCRouteApplyConfiguration, opts v1.ApplyOptions) (result *apisv1alpha2.GRPCRoute, err error)
 	GRPCRouteExpansion
 }
 
 // gRPCRoutes implements GRPCRouteInterface
 type gRPCRoutes struct {
-	*gentype.ClientWithListAndApply[*v1alpha2.GRPCRoute, *v1alpha2.GRPCRouteList, *apisv1alpha2.GRPCRouteApplyConfiguration]
+	*gentype.ClientWithListAndApply[*apisv1alpha2.GRPCRoute, *apisv1alpha2.GRPCRouteList, *applyconfigurationapisv1alpha2.GRPCRouteApplyConfiguration]
 }
 
 // newGRPCRoutes returns a GRPCRoutes
 func newGRPCRoutes(c *GatewayV1alpha2Client, namespace string) *gRPCRoutes {
 	return &gRPCRoutes{
-		gentype.NewClientWithListAndApply[*v1alpha2.GRPCRoute, *v1alpha2.GRPCRouteList, *apisv1alpha2.GRPCRouteApplyConfiguration](
+		gentype.NewClientWithListAndApply[*apisv1alpha2.GRPCRoute, *apisv1alpha2.GRPCRouteList, *applyconfigurationapisv1alpha2.GRPCRouteApplyConfiguration](
 			"grpcroutes",
 			c.RESTClient(),
 			scheme.ParameterCodec,
 			namespace,
-			func() *v1alpha2.GRPCRoute { return &v1alpha2.GRPCRoute{} },
-			func() *v1alpha2.GRPCRouteList { return &v1alpha2.GRPCRouteList{} }),
+			func() *apisv1alpha2.GRPCRoute { return &apisv1alpha2.GRPCRoute{} },
+			func() *apisv1alpha2.GRPCRouteList { return &apisv1alpha2.GRPCRouteList{} },
+		),
 	}
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha2/referencegrant.go b/pkg/client/clientset/versioned/typed/apis/v1alpha2/referencegrant.go
index d0154afd..131013e3 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha2/referencegrant.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha2/referencegrant.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"context"
+	context "context"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	watch "k8s.io/apimachinery/pkg/watch"
 	gentype "k8s.io/client-go/gentype"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-	apisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	applyconfigurationapisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
 	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
@@ -38,32 +38,33 @@ type ReferenceGrantsGetter interface {
 
 // ReferenceGrantInterface has methods to work with ReferenceGrant resources.
 type ReferenceGrantInterface interface {
-	Create(ctx context.Context, referenceGrant *v1alpha2.ReferenceGrant, opts v1.CreateOptions) (*v1alpha2.ReferenceGrant, error)
-	Update(ctx context.Context, referenceGrant *v1alpha2.ReferenceGrant, opts v1.UpdateOptions) (*v1alpha2.ReferenceGrant, error)
+	Create(ctx context.Context, referenceGrant *apisv1alpha2.ReferenceGrant, opts v1.CreateOptions) (*apisv1alpha2.ReferenceGrant, error)
+	Update(ctx context.Context, referenceGrant *apisv1alpha2.ReferenceGrant, opts v1.UpdateOptions) (*apisv1alpha2.ReferenceGrant, error)
 	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
 	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
-	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha2.ReferenceGrant, error)
-	List(ctx context.Context, opts v1.ListOptions) (*v1alpha2.ReferenceGrantList, error)
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*apisv1alpha2.ReferenceGrant, error)
+	List(ctx context.Context, opts v1.ListOptions) (*apisv1alpha2.ReferenceGrantList, error)
 	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha2.ReferenceGrant, err error)
-	Apply(ctx context.Context, referenceGrant *apisv1alpha2.ReferenceGrantApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.ReferenceGrant, err error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *apisv1alpha2.ReferenceGrant, err error)
+	Apply(ctx context.Context, referenceGrant *applyconfigurationapisv1alpha2.ReferenceGrantApplyConfiguration, opts v1.ApplyOptions) (result *apisv1alpha2.ReferenceGrant, err error)
 	ReferenceGrantExpansion
 }
 
 // referenceGrants implements ReferenceGrantInterface
 type referenceGrants struct {
-	*gentype.ClientWithListAndApply[*v1alpha2.ReferenceGrant, *v1alpha2.ReferenceGrantList, *apisv1alpha2.ReferenceGrantApplyConfiguration]
+	*gentype.ClientWithListAndApply[*apisv1alpha2.ReferenceGrant, *apisv1alpha2.ReferenceGrantList, *applyconfigurationapisv1alpha2.ReferenceGrantApplyConfiguration]
 }
 
 // newReferenceGrants returns a ReferenceGrants
 func newReferenceGrants(c *GatewayV1alpha2Client, namespace string) *referenceGrants {
 	return &referenceGrants{
-		gentype.NewClientWithListAndApply[*v1alpha2.ReferenceGrant, *v1alpha2.ReferenceGrantList, *apisv1alpha2.ReferenceGrantApplyConfiguration](
+		gentype.NewClientWithListAndApply[*apisv1alpha2.ReferenceGrant, *apisv1alpha2.ReferenceGrantList, *applyconfigurationapisv1alpha2.ReferenceGrantApplyConfiguration](
 			"referencegrants",
 			c.RESTClient(),
 			scheme.ParameterCodec,
 			namespace,
-			func() *v1alpha2.ReferenceGrant { return &v1alpha2.ReferenceGrant{} },
-			func() *v1alpha2.ReferenceGrantList { return &v1alpha2.ReferenceGrantList{} }),
+			func() *apisv1alpha2.ReferenceGrant { return &apisv1alpha2.ReferenceGrant{} },
+			func() *apisv1alpha2.ReferenceGrantList { return &apisv1alpha2.ReferenceGrantList{} },
+		),
 	}
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha2/tcproute.go b/pkg/client/clientset/versioned/typed/apis/v1alpha2/tcproute.go
index b46cc0c5..d85ccca1 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha2/tcproute.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha2/tcproute.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"context"
+	context "context"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	watch "k8s.io/apimachinery/pkg/watch"
 	gentype "k8s.io/client-go/gentype"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-	apisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	applyconfigurationapisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
 	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
@@ -38,36 +38,37 @@ type TCPRoutesGetter interface {
 
 // TCPRouteInterface has methods to work with TCPRoute resources.
 type TCPRouteInterface interface {
-	Create(ctx context.Context, tCPRoute *v1alpha2.TCPRoute, opts v1.CreateOptions) (*v1alpha2.TCPRoute, error)
-	Update(ctx context.Context, tCPRoute *v1alpha2.TCPRoute, opts v1.UpdateOptions) (*v1alpha2.TCPRoute, error)
+	Create(ctx context.Context, tCPRoute *apisv1alpha2.TCPRoute, opts v1.CreateOptions) (*apisv1alpha2.TCPRoute, error)
+	Update(ctx context.Context, tCPRoute *apisv1alpha2.TCPRoute, opts v1.UpdateOptions) (*apisv1alpha2.TCPRoute, error)
 	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-	UpdateStatus(ctx context.Context, tCPRoute *v1alpha2.TCPRoute, opts v1.UpdateOptions) (*v1alpha2.TCPRoute, error)
+	UpdateStatus(ctx context.Context, tCPRoute *apisv1alpha2.TCPRoute, opts v1.UpdateOptions) (*apisv1alpha2.TCPRoute, error)
 	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
 	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
-	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha2.TCPRoute, error)
-	List(ctx context.Context, opts v1.ListOptions) (*v1alpha2.TCPRouteList, error)
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*apisv1alpha2.TCPRoute, error)
+	List(ctx context.Context, opts v1.ListOptions) (*apisv1alpha2.TCPRouteList, error)
 	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha2.TCPRoute, err error)
-	Apply(ctx context.Context, tCPRoute *apisv1alpha2.TCPRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.TCPRoute, err error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *apisv1alpha2.TCPRoute, err error)
+	Apply(ctx context.Context, tCPRoute *applyconfigurationapisv1alpha2.TCPRouteApplyConfiguration, opts v1.ApplyOptions) (result *apisv1alpha2.TCPRoute, err error)
 	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-	ApplyStatus(ctx context.Context, tCPRoute *apisv1alpha2.TCPRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.TCPRoute, err error)
+	ApplyStatus(ctx context.Context, tCPRoute *applyconfigurationapisv1alpha2.TCPRouteApplyConfiguration, opts v1.ApplyOptions) (result *apisv1alpha2.TCPRoute, err error)
 	TCPRouteExpansion
 }
 
 // tCPRoutes implements TCPRouteInterface
 type tCPRoutes struct {
-	*gentype.ClientWithListAndApply[*v1alpha2.TCPRoute, *v1alpha2.TCPRouteList, *apisv1alpha2.TCPRouteApplyConfiguration]
+	*gentype.ClientWithListAndApply[*apisv1alpha2.TCPRoute, *apisv1alpha2.TCPRouteList, *applyconfigurationapisv1alpha2.TCPRouteApplyConfiguration]
 }
 
 // newTCPRoutes returns a TCPRoutes
 func newTCPRoutes(c *GatewayV1alpha2Client, namespace string) *tCPRoutes {
 	return &tCPRoutes{
-		gentype.NewClientWithListAndApply[*v1alpha2.TCPRoute, *v1alpha2.TCPRouteList, *apisv1alpha2.TCPRouteApplyConfiguration](
+		gentype.NewClientWithListAndApply[*apisv1alpha2.TCPRoute, *apisv1alpha2.TCPRouteList, *applyconfigurationapisv1alpha2.TCPRouteApplyConfiguration](
 			"tcproutes",
 			c.RESTClient(),
 			scheme.ParameterCodec,
 			namespace,
-			func() *v1alpha2.TCPRoute { return &v1alpha2.TCPRoute{} },
-			func() *v1alpha2.TCPRouteList { return &v1alpha2.TCPRouteList{} }),
+			func() *apisv1alpha2.TCPRoute { return &apisv1alpha2.TCPRoute{} },
+			func() *apisv1alpha2.TCPRouteList { return &apisv1alpha2.TCPRouteList{} },
+		),
 	}
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha2/tlsroute.go b/pkg/client/clientset/versioned/typed/apis/v1alpha2/tlsroute.go
index e73625bb..908ef811 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha2/tlsroute.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha2/tlsroute.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"context"
+	context "context"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	watch "k8s.io/apimachinery/pkg/watch"
 	gentype "k8s.io/client-go/gentype"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-	apisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	applyconfigurationapisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
 	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
@@ -38,36 +38,37 @@ type TLSRoutesGetter interface {
 
 // TLSRouteInterface has methods to work with TLSRoute resources.
 type TLSRouteInterface interface {
-	Create(ctx context.Context, tLSRoute *v1alpha2.TLSRoute, opts v1.CreateOptions) (*v1alpha2.TLSRoute, error)
-	Update(ctx context.Context, tLSRoute *v1alpha2.TLSRoute, opts v1.UpdateOptions) (*v1alpha2.TLSRoute, error)
+	Create(ctx context.Context, tLSRoute *apisv1alpha2.TLSRoute, opts v1.CreateOptions) (*apisv1alpha2.TLSRoute, error)
+	Update(ctx context.Context, tLSRoute *apisv1alpha2.TLSRoute, opts v1.UpdateOptions) (*apisv1alpha2.TLSRoute, error)
 	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-	UpdateStatus(ctx context.Context, tLSRoute *v1alpha2.TLSRoute, opts v1.UpdateOptions) (*v1alpha2.TLSRoute, error)
+	UpdateStatus(ctx context.Context, tLSRoute *apisv1alpha2.TLSRoute, opts v1.UpdateOptions) (*apisv1alpha2.TLSRoute, error)
 	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
 	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
-	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha2.TLSRoute, error)
-	List(ctx context.Context, opts v1.ListOptions) (*v1alpha2.TLSRouteList, error)
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*apisv1alpha2.TLSRoute, error)
+	List(ctx context.Context, opts v1.ListOptions) (*apisv1alpha2.TLSRouteList, error)
 	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha2.TLSRoute, err error)
-	Apply(ctx context.Context, tLSRoute *apisv1alpha2.TLSRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.TLSRoute, err error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *apisv1alpha2.TLSRoute, err error)
+	Apply(ctx context.Context, tLSRoute *applyconfigurationapisv1alpha2.TLSRouteApplyConfiguration, opts v1.ApplyOptions) (result *apisv1alpha2.TLSRoute, err error)
 	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-	ApplyStatus(ctx context.Context, tLSRoute *apisv1alpha2.TLSRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.TLSRoute, err error)
+	ApplyStatus(ctx context.Context, tLSRoute *applyconfigurationapisv1alpha2.TLSRouteApplyConfiguration, opts v1.ApplyOptions) (result *apisv1alpha2.TLSRoute, err error)
 	TLSRouteExpansion
 }
 
 // tLSRoutes implements TLSRouteInterface
 type tLSRoutes struct {
-	*gentype.ClientWithListAndApply[*v1alpha2.TLSRoute, *v1alpha2.TLSRouteList, *apisv1alpha2.TLSRouteApplyConfiguration]
+	*gentype.ClientWithListAndApply[*apisv1alpha2.TLSRoute, *apisv1alpha2.TLSRouteList, *applyconfigurationapisv1alpha2.TLSRouteApplyConfiguration]
 }
 
 // newTLSRoutes returns a TLSRoutes
 func newTLSRoutes(c *GatewayV1alpha2Client, namespace string) *tLSRoutes {
 	return &tLSRoutes{
-		gentype.NewClientWithListAndApply[*v1alpha2.TLSRoute, *v1alpha2.TLSRouteList, *apisv1alpha2.TLSRouteApplyConfiguration](
+		gentype.NewClientWithListAndApply[*apisv1alpha2.TLSRoute, *apisv1alpha2.TLSRouteList, *applyconfigurationapisv1alpha2.TLSRouteApplyConfiguration](
 			"tlsroutes",
 			c.RESTClient(),
 			scheme.ParameterCodec,
 			namespace,
-			func() *v1alpha2.TLSRoute { return &v1alpha2.TLSRoute{} },
-			func() *v1alpha2.TLSRouteList { return &v1alpha2.TLSRouteList{} }),
+			func() *apisv1alpha2.TLSRoute { return &apisv1alpha2.TLSRoute{} },
+			func() *apisv1alpha2.TLSRouteList { return &apisv1alpha2.TLSRouteList{} },
+		),
 	}
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha2/udproute.go b/pkg/client/clientset/versioned/typed/apis/v1alpha2/udproute.go
index 128a861c..236e5201 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha2/udproute.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha2/udproute.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"context"
+	context "context"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	watch "k8s.io/apimachinery/pkg/watch"
 	gentype "k8s.io/client-go/gentype"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-	apisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	applyconfigurationapisv1alpha2 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha2"
 	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
@@ -38,36 +38,37 @@ type UDPRoutesGetter interface {
 
 // UDPRouteInterface has methods to work with UDPRoute resources.
 type UDPRouteInterface interface {
-	Create(ctx context.Context, uDPRoute *v1alpha2.UDPRoute, opts v1.CreateOptions) (*v1alpha2.UDPRoute, error)
-	Update(ctx context.Context, uDPRoute *v1alpha2.UDPRoute, opts v1.UpdateOptions) (*v1alpha2.UDPRoute, error)
+	Create(ctx context.Context, uDPRoute *apisv1alpha2.UDPRoute, opts v1.CreateOptions) (*apisv1alpha2.UDPRoute, error)
+	Update(ctx context.Context, uDPRoute *apisv1alpha2.UDPRoute, opts v1.UpdateOptions) (*apisv1alpha2.UDPRoute, error)
 	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-	UpdateStatus(ctx context.Context, uDPRoute *v1alpha2.UDPRoute, opts v1.UpdateOptions) (*v1alpha2.UDPRoute, error)
+	UpdateStatus(ctx context.Context, uDPRoute *apisv1alpha2.UDPRoute, opts v1.UpdateOptions) (*apisv1alpha2.UDPRoute, error)
 	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
 	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
-	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha2.UDPRoute, error)
-	List(ctx context.Context, opts v1.ListOptions) (*v1alpha2.UDPRouteList, error)
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*apisv1alpha2.UDPRoute, error)
+	List(ctx context.Context, opts v1.ListOptions) (*apisv1alpha2.UDPRouteList, error)
 	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha2.UDPRoute, err error)
-	Apply(ctx context.Context, uDPRoute *apisv1alpha2.UDPRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.UDPRoute, err error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *apisv1alpha2.UDPRoute, err error)
+	Apply(ctx context.Context, uDPRoute *applyconfigurationapisv1alpha2.UDPRouteApplyConfiguration, opts v1.ApplyOptions) (result *apisv1alpha2.UDPRoute, err error)
 	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-	ApplyStatus(ctx context.Context, uDPRoute *apisv1alpha2.UDPRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha2.UDPRoute, err error)
+	ApplyStatus(ctx context.Context, uDPRoute *applyconfigurationapisv1alpha2.UDPRouteApplyConfiguration, opts v1.ApplyOptions) (result *apisv1alpha2.UDPRoute, err error)
 	UDPRouteExpansion
 }
 
 // uDPRoutes implements UDPRouteInterface
 type uDPRoutes struct {
-	*gentype.ClientWithListAndApply[*v1alpha2.UDPRoute, *v1alpha2.UDPRouteList, *apisv1alpha2.UDPRouteApplyConfiguration]
+	*gentype.ClientWithListAndApply[*apisv1alpha2.UDPRoute, *apisv1alpha2.UDPRouteList, *applyconfigurationapisv1alpha2.UDPRouteApplyConfiguration]
 }
 
 // newUDPRoutes returns a UDPRoutes
 func newUDPRoutes(c *GatewayV1alpha2Client, namespace string) *uDPRoutes {
 	return &uDPRoutes{
-		gentype.NewClientWithListAndApply[*v1alpha2.UDPRoute, *v1alpha2.UDPRouteList, *apisv1alpha2.UDPRouteApplyConfiguration](
+		gentype.NewClientWithListAndApply[*apisv1alpha2.UDPRoute, *apisv1alpha2.UDPRouteList, *applyconfigurationapisv1alpha2.UDPRouteApplyConfiguration](
 			"udproutes",
 			c.RESTClient(),
 			scheme.ParameterCodec,
 			namespace,
-			func() *v1alpha2.UDPRoute { return &v1alpha2.UDPRoute{} },
-			func() *v1alpha2.UDPRouteList { return &v1alpha2.UDPRouteList{} }),
+			func() *apisv1alpha2.UDPRoute { return &apisv1alpha2.UDPRoute{} },
+			func() *apisv1alpha2.UDPRouteList { return &apisv1alpha2.UDPRouteList{} },
+		),
 	}
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha3/apis_client.go b/pkg/client/clientset/versioned/typed/apis/v1alpha3/apis_client.go
index cdb327c3..681d5090 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha3/apis_client.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha3/apis_client.go
@@ -19,11 +19,11 @@ limitations under the License.
 package v1alpha3
 
 import (
-	"net/http"
+	http "net/http"
 
 	rest "k8s.io/client-go/rest"
-	v1alpha3 "sigs.k8s.io/gateway-api/apis/v1alpha3"
-	"sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
+	apisv1alpha3 "sigs.k8s.io/gateway-api/apis/v1alpha3"
+	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
 type GatewayV1alpha3Interface interface {
@@ -45,9 +45,7 @@ func (c *GatewayV1alpha3Client) BackendTLSPolicies(namespace string) BackendTLSP
 // where httpClient was generated with rest.HTTPClientFor(c).
 func NewForConfig(c *rest.Config) (*GatewayV1alpha3Client, error) {
 	config := *c
-	if err := setConfigDefaults(&config); err != nil {
-		return nil, err
-	}
+	setConfigDefaults(&config)
 	httpClient, err := rest.HTTPClientFor(&config)
 	if err != nil {
 		return nil, err
@@ -59,9 +57,7 @@ func NewForConfig(c *rest.Config) (*GatewayV1alpha3Client, error) {
 // Note the http client provided takes precedence over the configured transport values.
 func NewForConfigAndClient(c *rest.Config, h *http.Client) (*GatewayV1alpha3Client, error) {
 	config := *c
-	if err := setConfigDefaults(&config); err != nil {
-		return nil, err
-	}
+	setConfigDefaults(&config)
 	client, err := rest.RESTClientForConfigAndClient(&config, h)
 	if err != nil {
 		return nil, err
@@ -84,17 +80,15 @@ func New(c rest.Interface) *GatewayV1alpha3Client {
 	return &GatewayV1alpha3Client{c}
 }
 
-func setConfigDefaults(config *rest.Config) error {
-	gv := v1alpha3.SchemeGroupVersion
+func setConfigDefaults(config *rest.Config) {
+	gv := apisv1alpha3.SchemeGroupVersion
 	config.GroupVersion = &gv
 	config.APIPath = "/apis"
-	config.NegotiatedSerializer = scheme.Codecs.WithoutConversion()
+	config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion()
 
 	if config.UserAgent == "" {
 		config.UserAgent = rest.DefaultKubernetesUserAgent()
 	}
-
-	return nil
 }
 
 // RESTClient returns a RESTClient that is used to communicate
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha3/backendtlspolicy.go b/pkg/client/clientset/versioned/typed/apis/v1alpha3/backendtlspolicy.go
index 3cb0b128..ca0286d8 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha3/backendtlspolicy.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha3/backendtlspolicy.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1alpha3
 
 import (
-	"context"
+	context "context"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	watch "k8s.io/apimachinery/pkg/watch"
 	gentype "k8s.io/client-go/gentype"
-	v1alpha3 "sigs.k8s.io/gateway-api/apis/v1alpha3"
-	apisv1alpha3 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha3"
+	apisv1alpha3 "sigs.k8s.io/gateway-api/apis/v1alpha3"
+	applyconfigurationapisv1alpha3 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha3"
 	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
@@ -38,36 +38,37 @@ type BackendTLSPoliciesGetter interface {
 
 // BackendTLSPolicyInterface has methods to work with BackendTLSPolicy resources.
 type BackendTLSPolicyInterface interface {
-	Create(ctx context.Context, backendTLSPolicy *v1alpha3.BackendTLSPolicy, opts v1.CreateOptions) (*v1alpha3.BackendTLSPolicy, error)
-	Update(ctx context.Context, backendTLSPolicy *v1alpha3.BackendTLSPolicy, opts v1.UpdateOptions) (*v1alpha3.BackendTLSPolicy, error)
+	Create(ctx context.Context, backendTLSPolicy *apisv1alpha3.BackendTLSPolicy, opts v1.CreateOptions) (*apisv1alpha3.BackendTLSPolicy, error)
+	Update(ctx context.Context, backendTLSPolicy *apisv1alpha3.BackendTLSPolicy, opts v1.UpdateOptions) (*apisv1alpha3.BackendTLSPolicy, error)
 	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-	UpdateStatus(ctx context.Context, backendTLSPolicy *v1alpha3.BackendTLSPolicy, opts v1.UpdateOptions) (*v1alpha3.BackendTLSPolicy, error)
+	UpdateStatus(ctx context.Context, backendTLSPolicy *apisv1alpha3.BackendTLSPolicy, opts v1.UpdateOptions) (*apisv1alpha3.BackendTLSPolicy, error)
 	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
 	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
-	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha3.BackendTLSPolicy, error)
-	List(ctx context.Context, opts v1.ListOptions) (*v1alpha3.BackendTLSPolicyList, error)
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*apisv1alpha3.BackendTLSPolicy, error)
+	List(ctx context.Context, opts v1.ListOptions) (*apisv1alpha3.BackendTLSPolicyList, error)
 	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha3.BackendTLSPolicy, err error)
-	Apply(ctx context.Context, backendTLSPolicy *apisv1alpha3.BackendTLSPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha3.BackendTLSPolicy, err error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *apisv1alpha3.BackendTLSPolicy, err error)
+	Apply(ctx context.Context, backendTLSPolicy *applyconfigurationapisv1alpha3.BackendTLSPolicyApplyConfiguration, opts v1.ApplyOptions) (result *apisv1alpha3.BackendTLSPolicy, err error)
 	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-	ApplyStatus(ctx context.Context, backendTLSPolicy *apisv1alpha3.BackendTLSPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha3.BackendTLSPolicy, err error)
+	ApplyStatus(ctx context.Context, backendTLSPolicy *applyconfigurationapisv1alpha3.BackendTLSPolicyApplyConfiguration, opts v1.ApplyOptions) (result *apisv1alpha3.BackendTLSPolicy, err error)
 	BackendTLSPolicyExpansion
 }
 
 // backendTLSPolicies implements BackendTLSPolicyInterface
 type backendTLSPolicies struct {
-	*gentype.ClientWithListAndApply[*v1alpha3.BackendTLSPolicy, *v1alpha3.BackendTLSPolicyList, *apisv1alpha3.BackendTLSPolicyApplyConfiguration]
+	*gentype.ClientWithListAndApply[*apisv1alpha3.BackendTLSPolicy, *apisv1alpha3.BackendTLSPolicyList, *applyconfigurationapisv1alpha3.BackendTLSPolicyApplyConfiguration]
 }
 
 // newBackendTLSPolicies returns a BackendTLSPolicies
 func newBackendTLSPolicies(c *GatewayV1alpha3Client, namespace string) *backendTLSPolicies {
 	return &backendTLSPolicies{
-		gentype.NewClientWithListAndApply[*v1alpha3.BackendTLSPolicy, *v1alpha3.BackendTLSPolicyList, *apisv1alpha3.BackendTLSPolicyApplyConfiguration](
+		gentype.NewClientWithListAndApply[*apisv1alpha3.BackendTLSPolicy, *apisv1alpha3.BackendTLSPolicyList, *applyconfigurationapisv1alpha3.BackendTLSPolicyApplyConfiguration](
 			"backendtlspolicies",
 			c.RESTClient(),
 			scheme.ParameterCodec,
 			namespace,
-			func() *v1alpha3.BackendTLSPolicy { return &v1alpha3.BackendTLSPolicy{} },
-			func() *v1alpha3.BackendTLSPolicyList { return &v1alpha3.BackendTLSPolicyList{} }),
+			func() *apisv1alpha3.BackendTLSPolicy { return &apisv1alpha3.BackendTLSPolicy{} },
+			func() *apisv1alpha3.BackendTLSPolicyList { return &apisv1alpha3.BackendTLSPolicyList{} },
+		),
 	}
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha3/fake/fake_apis_client.go b/pkg/client/clientset/versioned/typed/apis/v1alpha3/fake/fake_apis_client.go
index 76f13e27..0ab453c2 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha3/fake/fake_apis_client.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha3/fake/fake_apis_client.go
@@ -29,7 +29,7 @@ type FakeGatewayV1alpha3 struct {
 }
 
 func (c *FakeGatewayV1alpha3) BackendTLSPolicies(namespace string) v1alpha3.BackendTLSPolicyInterface {
-	return &FakeBackendTLSPolicies{c, namespace}
+	return newFakeBackendTLSPolicies(c, namespace)
 }
 
 // RESTClient returns a RESTClient that is used to communicate
diff --git a/pkg/client/clientset/versioned/typed/apis/v1alpha3/fake/fake_backendtlspolicy.go b/pkg/client/clientset/versioned/typed/apis/v1alpha3/fake/fake_backendtlspolicy.go
index fbddc317..215cd900 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1alpha3/fake/fake_backendtlspolicy.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1alpha3/fake/fake_backendtlspolicy.go
@@ -19,179 +19,35 @@ limitations under the License.
 package fake
 
 import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
+	gentype "k8s.io/client-go/gentype"
 	v1alpha3 "sigs.k8s.io/gateway-api/apis/v1alpha3"
 	apisv1alpha3 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1alpha3"
+	typedapisv1alpha3 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apis/v1alpha3"
 )
 
-// FakeBackendTLSPolicies implements BackendTLSPolicyInterface
-type FakeBackendTLSPolicies struct {
+// fakeBackendTLSPolicies implements BackendTLSPolicyInterface
+type fakeBackendTLSPolicies struct {
+	*gentype.FakeClientWithListAndApply[*v1alpha3.BackendTLSPolicy, *v1alpha3.BackendTLSPolicyList, *apisv1alpha3.BackendTLSPolicyApplyConfiguration]
 	Fake *FakeGatewayV1alpha3
-	ns   string
-}
-
-var backendtlspoliciesResource = v1alpha3.SchemeGroupVersion.WithResource("backendtlspolicies")
-
-var backendtlspoliciesKind = v1alpha3.SchemeGroupVersion.WithKind("BackendTLSPolicy")
-
-// Get takes name of the backendTLSPolicy, and returns the corresponding backendTLSPolicy object, and an error if there is any.
-func (c *FakeBackendTLSPolicies) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha3.BackendTLSPolicy, err error) {
-	emptyResult := &v1alpha3.BackendTLSPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewGetActionWithOptions(backendtlspoliciesResource, c.ns, name, options), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha3.BackendTLSPolicy), err
-}
-
-// List takes label and field selectors, and returns the list of BackendTLSPolicies that match those selectors.
-func (c *FakeBackendTLSPolicies) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha3.BackendTLSPolicyList, err error) {
-	emptyResult := &v1alpha3.BackendTLSPolicyList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewListActionWithOptions(backendtlspoliciesResource, backendtlspoliciesKind, c.ns, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1alpha3.BackendTLSPolicyList{ListMeta: obj.(*v1alpha3.BackendTLSPolicyList).ListMeta}
-	for _, item := range obj.(*v1alpha3.BackendTLSPolicyList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested backendTLSPolicies.
-func (c *FakeBackendTLSPolicies) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchActionWithOptions(backendtlspoliciesResource, c.ns, opts))
-
-}
-
-// Create takes the representation of a backendTLSPolicy and creates it.  Returns the server's representation of the backendTLSPolicy, and an error, if there is any.
-func (c *FakeBackendTLSPolicies) Create(ctx context.Context, backendTLSPolicy *v1alpha3.BackendTLSPolicy, opts v1.CreateOptions) (result *v1alpha3.BackendTLSPolicy, err error) {
-	emptyResult := &v1alpha3.BackendTLSPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateActionWithOptions(backendtlspoliciesResource, c.ns, backendTLSPolicy, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha3.BackendTLSPolicy), err
-}
-
-// Update takes the representation of a backendTLSPolicy and updates it. Returns the server's representation of the backendTLSPolicy, and an error, if there is any.
-func (c *FakeBackendTLSPolicies) Update(ctx context.Context, backendTLSPolicy *v1alpha3.BackendTLSPolicy, opts v1.UpdateOptions) (result *v1alpha3.BackendTLSPolicy, err error) {
-	emptyResult := &v1alpha3.BackendTLSPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateActionWithOptions(backendtlspoliciesResource, c.ns, backendTLSPolicy, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha3.BackendTLSPolicy), err
 }
 
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeBackendTLSPolicies) UpdateStatus(ctx context.Context, backendTLSPolicy *v1alpha3.BackendTLSPolicy, opts v1.UpdateOptions) (result *v1alpha3.BackendTLSPolicy, err error) {
-	emptyResult := &v1alpha3.BackendTLSPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateSubresourceActionWithOptions(backendtlspoliciesResource, "status", c.ns, backendTLSPolicy, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha3.BackendTLSPolicy), err
-}
-
-// Delete takes name of the backendTLSPolicy and deletes it. Returns an error if one occurs.
-func (c *FakeBackendTLSPolicies) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteActionWithOptions(backendtlspoliciesResource, c.ns, name, opts), &v1alpha3.BackendTLSPolicy{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeBackendTLSPolicies) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
-	action := testing.NewDeleteCollectionActionWithOptions(backendtlspoliciesResource, c.ns, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1alpha3.BackendTLSPolicyList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched backendTLSPolicy.
-func (c *FakeBackendTLSPolicies) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha3.BackendTLSPolicy, err error) {
-	emptyResult := &v1alpha3.BackendTLSPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(backendtlspoliciesResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha3.BackendTLSPolicy), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied backendTLSPolicy.
-func (c *FakeBackendTLSPolicies) Apply(ctx context.Context, backendTLSPolicy *apisv1alpha3.BackendTLSPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha3.BackendTLSPolicy, err error) {
-	if backendTLSPolicy == nil {
-		return nil, fmt.Errorf("backendTLSPolicy provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(backendTLSPolicy)
-	if err != nil {
-		return nil, err
-	}
-	name := backendTLSPolicy.Name
-	if name == nil {
-		return nil, fmt.Errorf("backendTLSPolicy.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha3.BackendTLSPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(backendtlspoliciesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha3.BackendTLSPolicy), err
-}
-
-// ApplyStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-func (c *FakeBackendTLSPolicies) ApplyStatus(ctx context.Context, backendTLSPolicy *apisv1alpha3.BackendTLSPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha3.BackendTLSPolicy, err error) {
-	if backendTLSPolicy == nil {
-		return nil, fmt.Errorf("backendTLSPolicy provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(backendTLSPolicy)
-	if err != nil {
-		return nil, err
-	}
-	name := backendTLSPolicy.Name
-	if name == nil {
-		return nil, fmt.Errorf("backendTLSPolicy.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha3.BackendTLSPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(backendtlspoliciesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions(), "status"), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
+func newFakeBackendTLSPolicies(fake *FakeGatewayV1alpha3, namespace string) typedapisv1alpha3.BackendTLSPolicyInterface {
+	return &fakeBackendTLSPolicies{
+		gentype.NewFakeClientWithListAndApply[*v1alpha3.BackendTLSPolicy, *v1alpha3.BackendTLSPolicyList, *apisv1alpha3.BackendTLSPolicyApplyConfiguration](
+			fake.Fake,
+			namespace,
+			v1alpha3.SchemeGroupVersion.WithResource("backendtlspolicies"),
+			v1alpha3.SchemeGroupVersion.WithKind("BackendTLSPolicy"),
+			func() *v1alpha3.BackendTLSPolicy { return &v1alpha3.BackendTLSPolicy{} },
+			func() *v1alpha3.BackendTLSPolicyList { return &v1alpha3.BackendTLSPolicyList{} },
+			func(dst, src *v1alpha3.BackendTLSPolicyList) { dst.ListMeta = src.ListMeta },
+			func(list *v1alpha3.BackendTLSPolicyList) []*v1alpha3.BackendTLSPolicy {
+				return gentype.ToPointerSlice(list.Items)
+			},
+			func(list *v1alpha3.BackendTLSPolicyList, items []*v1alpha3.BackendTLSPolicy) {
+				list.Items = gentype.FromPointerSlice(items)
+			},
+		),
+		fake,
 	}
-	return obj.(*v1alpha3.BackendTLSPolicy), err
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1beta1/apis_client.go b/pkg/client/clientset/versioned/typed/apis/v1beta1/apis_client.go
index ef8e0e29..498e0373 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1beta1/apis_client.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1beta1/apis_client.go
@@ -19,11 +19,11 @@ limitations under the License.
 package v1beta1
 
 import (
-	"net/http"
+	http "net/http"
 
 	rest "k8s.io/client-go/rest"
-	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
-	"sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
+	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
 type GatewayV1beta1Interface interface {
@@ -60,9 +60,7 @@ func (c *GatewayV1beta1Client) ReferenceGrants(namespace string) ReferenceGrantI
 // where httpClient was generated with rest.HTTPClientFor(c).
 func NewForConfig(c *rest.Config) (*GatewayV1beta1Client, error) {
 	config := *c
-	if err := setConfigDefaults(&config); err != nil {
-		return nil, err
-	}
+	setConfigDefaults(&config)
 	httpClient, err := rest.HTTPClientFor(&config)
 	if err != nil {
 		return nil, err
@@ -74,9 +72,7 @@ func NewForConfig(c *rest.Config) (*GatewayV1beta1Client, error) {
 // Note the http client provided takes precedence over the configured transport values.
 func NewForConfigAndClient(c *rest.Config, h *http.Client) (*GatewayV1beta1Client, error) {
 	config := *c
-	if err := setConfigDefaults(&config); err != nil {
-		return nil, err
-	}
+	setConfigDefaults(&config)
 	client, err := rest.RESTClientForConfigAndClient(&config, h)
 	if err != nil {
 		return nil, err
@@ -99,17 +95,15 @@ func New(c rest.Interface) *GatewayV1beta1Client {
 	return &GatewayV1beta1Client{c}
 }
 
-func setConfigDefaults(config *rest.Config) error {
-	gv := v1beta1.SchemeGroupVersion
+func setConfigDefaults(config *rest.Config) {
+	gv := apisv1beta1.SchemeGroupVersion
 	config.GroupVersion = &gv
 	config.APIPath = "/apis"
-	config.NegotiatedSerializer = scheme.Codecs.WithoutConversion()
+	config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion()
 
 	if config.UserAgent == "" {
 		config.UserAgent = rest.DefaultKubernetesUserAgent()
 	}
-
-	return nil
 }
 
 // RESTClient returns a RESTClient that is used to communicate
diff --git a/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_apis_client.go b/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_apis_client.go
index 418e8161..4c4261d0 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_apis_client.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_apis_client.go
@@ -29,19 +29,19 @@ type FakeGatewayV1beta1 struct {
 }
 
 func (c *FakeGatewayV1beta1) Gateways(namespace string) v1beta1.GatewayInterface {
-	return &FakeGateways{c, namespace}
+	return newFakeGateways(c, namespace)
 }
 
 func (c *FakeGatewayV1beta1) GatewayClasses() v1beta1.GatewayClassInterface {
-	return &FakeGatewayClasses{c}
+	return newFakeGatewayClasses(c)
 }
 
 func (c *FakeGatewayV1beta1) HTTPRoutes(namespace string) v1beta1.HTTPRouteInterface {
-	return &FakeHTTPRoutes{c, namespace}
+	return newFakeHTTPRoutes(c, namespace)
 }
 
 func (c *FakeGatewayV1beta1) ReferenceGrants(namespace string) v1beta1.ReferenceGrantInterface {
-	return &FakeReferenceGrants{c, namespace}
+	return newFakeReferenceGrants(c, namespace)
 }
 
 // RESTClient returns a RESTClient that is used to communicate
diff --git a/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_gateway.go b/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_gateway.go
index 2f309e4d..50d0c525 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_gateway.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_gateway.go
@@ -19,179 +19,33 @@ limitations under the License.
 package fake
 
 import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
+	gentype "k8s.io/client-go/gentype"
 	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 	apisv1beta1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1beta1"
+	typedapisv1beta1 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apis/v1beta1"
 )
 
-// FakeGateways implements GatewayInterface
-type FakeGateways struct {
+// fakeGateways implements GatewayInterface
+type fakeGateways struct {
+	*gentype.FakeClientWithListAndApply[*v1beta1.Gateway, *v1beta1.GatewayList, *apisv1beta1.GatewayApplyConfiguration]
 	Fake *FakeGatewayV1beta1
-	ns   string
-}
-
-var gatewaysResource = v1beta1.SchemeGroupVersion.WithResource("gateways")
-
-var gatewaysKind = v1beta1.SchemeGroupVersion.WithKind("Gateway")
-
-// Get takes name of the gateway, and returns the corresponding gateway object, and an error if there is any.
-func (c *FakeGateways) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.Gateway, err error) {
-	emptyResult := &v1beta1.Gateway{}
-	obj, err := c.Fake.
-		Invokes(testing.NewGetActionWithOptions(gatewaysResource, c.ns, name, options), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.Gateway), err
-}
-
-// List takes label and field selectors, and returns the list of Gateways that match those selectors.
-func (c *FakeGateways) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.GatewayList, err error) {
-	emptyResult := &v1beta1.GatewayList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewListActionWithOptions(gatewaysResource, gatewaysKind, c.ns, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1beta1.GatewayList{ListMeta: obj.(*v1beta1.GatewayList).ListMeta}
-	for _, item := range obj.(*v1beta1.GatewayList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested gateways.
-func (c *FakeGateways) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchActionWithOptions(gatewaysResource, c.ns, opts))
-
-}
-
-// Create takes the representation of a gateway and creates it.  Returns the server's representation of the gateway, and an error, if there is any.
-func (c *FakeGateways) Create(ctx context.Context, gateway *v1beta1.Gateway, opts v1.CreateOptions) (result *v1beta1.Gateway, err error) {
-	emptyResult := &v1beta1.Gateway{}
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateActionWithOptions(gatewaysResource, c.ns, gateway, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.Gateway), err
-}
-
-// Update takes the representation of a gateway and updates it. Returns the server's representation of the gateway, and an error, if there is any.
-func (c *FakeGateways) Update(ctx context.Context, gateway *v1beta1.Gateway, opts v1.UpdateOptions) (result *v1beta1.Gateway, err error) {
-	emptyResult := &v1beta1.Gateway{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateActionWithOptions(gatewaysResource, c.ns, gateway, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.Gateway), err
 }
 
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeGateways) UpdateStatus(ctx context.Context, gateway *v1beta1.Gateway, opts v1.UpdateOptions) (result *v1beta1.Gateway, err error) {
-	emptyResult := &v1beta1.Gateway{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateSubresourceActionWithOptions(gatewaysResource, "status", c.ns, gateway, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.Gateway), err
-}
-
-// Delete takes name of the gateway and deletes it. Returns an error if one occurs.
-func (c *FakeGateways) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteActionWithOptions(gatewaysResource, c.ns, name, opts), &v1beta1.Gateway{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeGateways) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
-	action := testing.NewDeleteCollectionActionWithOptions(gatewaysResource, c.ns, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1beta1.GatewayList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched gateway.
-func (c *FakeGateways) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.Gateway, err error) {
-	emptyResult := &v1beta1.Gateway{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(gatewaysResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.Gateway), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied gateway.
-func (c *FakeGateways) Apply(ctx context.Context, gateway *apisv1beta1.GatewayApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.Gateway, err error) {
-	if gateway == nil {
-		return nil, fmt.Errorf("gateway provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(gateway)
-	if err != nil {
-		return nil, err
-	}
-	name := gateway.Name
-	if name == nil {
-		return nil, fmt.Errorf("gateway.Name must be provided to Apply")
-	}
-	emptyResult := &v1beta1.Gateway{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(gatewaysResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.Gateway), err
-}
-
-// ApplyStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-func (c *FakeGateways) ApplyStatus(ctx context.Context, gateway *apisv1beta1.GatewayApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.Gateway, err error) {
-	if gateway == nil {
-		return nil, fmt.Errorf("gateway provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(gateway)
-	if err != nil {
-		return nil, err
-	}
-	name := gateway.Name
-	if name == nil {
-		return nil, fmt.Errorf("gateway.Name must be provided to Apply")
-	}
-	emptyResult := &v1beta1.Gateway{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(gatewaysResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions(), "status"), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
+func newFakeGateways(fake *FakeGatewayV1beta1, namespace string) typedapisv1beta1.GatewayInterface {
+	return &fakeGateways{
+		gentype.NewFakeClientWithListAndApply[*v1beta1.Gateway, *v1beta1.GatewayList, *apisv1beta1.GatewayApplyConfiguration](
+			fake.Fake,
+			namespace,
+			v1beta1.SchemeGroupVersion.WithResource("gateways"),
+			v1beta1.SchemeGroupVersion.WithKind("Gateway"),
+			func() *v1beta1.Gateway { return &v1beta1.Gateway{} },
+			func() *v1beta1.GatewayList { return &v1beta1.GatewayList{} },
+			func(dst, src *v1beta1.GatewayList) { dst.ListMeta = src.ListMeta },
+			func(list *v1beta1.GatewayList) []*v1beta1.Gateway { return gentype.ToPointerSlice(list.Items) },
+			func(list *v1beta1.GatewayList, items []*v1beta1.Gateway) {
+				list.Items = gentype.FromPointerSlice(items)
+			},
+		),
+		fake,
 	}
-	return obj.(*v1beta1.Gateway), err
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_gatewayclass.go b/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_gatewayclass.go
index d18395c2..9ce931a7 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_gatewayclass.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_gatewayclass.go
@@ -19,168 +19,35 @@ limitations under the License.
 package fake
 
 import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
+	gentype "k8s.io/client-go/gentype"
 	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 	apisv1beta1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1beta1"
+	typedapisv1beta1 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apis/v1beta1"
 )
 
-// FakeGatewayClasses implements GatewayClassInterface
-type FakeGatewayClasses struct {
+// fakeGatewayClasses implements GatewayClassInterface
+type fakeGatewayClasses struct {
+	*gentype.FakeClientWithListAndApply[*v1beta1.GatewayClass, *v1beta1.GatewayClassList, *apisv1beta1.GatewayClassApplyConfiguration]
 	Fake *FakeGatewayV1beta1
 }
 
-var gatewayclassesResource = v1beta1.SchemeGroupVersion.WithResource("gatewayclasses")
-
-var gatewayclassesKind = v1beta1.SchemeGroupVersion.WithKind("GatewayClass")
-
-// Get takes name of the gatewayClass, and returns the corresponding gatewayClass object, and an error if there is any.
-func (c *FakeGatewayClasses) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.GatewayClass, err error) {
-	emptyResult := &v1beta1.GatewayClass{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootGetActionWithOptions(gatewayclassesResource, name, options), emptyResult)
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.GatewayClass), err
-}
-
-// List takes label and field selectors, and returns the list of GatewayClasses that match those selectors.
-func (c *FakeGatewayClasses) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.GatewayClassList, err error) {
-	emptyResult := &v1beta1.GatewayClassList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootListActionWithOptions(gatewayclassesResource, gatewayclassesKind, opts), emptyResult)
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1beta1.GatewayClassList{ListMeta: obj.(*v1beta1.GatewayClassList).ListMeta}
-	for _, item := range obj.(*v1beta1.GatewayClassList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested gatewayClasses.
-func (c *FakeGatewayClasses) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewRootWatchActionWithOptions(gatewayclassesResource, opts))
-}
-
-// Create takes the representation of a gatewayClass and creates it.  Returns the server's representation of the gatewayClass, and an error, if there is any.
-func (c *FakeGatewayClasses) Create(ctx context.Context, gatewayClass *v1beta1.GatewayClass, opts v1.CreateOptions) (result *v1beta1.GatewayClass, err error) {
-	emptyResult := &v1beta1.GatewayClass{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootCreateActionWithOptions(gatewayclassesResource, gatewayClass, opts), emptyResult)
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.GatewayClass), err
-}
-
-// Update takes the representation of a gatewayClass and updates it. Returns the server's representation of the gatewayClass, and an error, if there is any.
-func (c *FakeGatewayClasses) Update(ctx context.Context, gatewayClass *v1beta1.GatewayClass, opts v1.UpdateOptions) (result *v1beta1.GatewayClass, err error) {
-	emptyResult := &v1beta1.GatewayClass{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootUpdateActionWithOptions(gatewayclassesResource, gatewayClass, opts), emptyResult)
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.GatewayClass), err
-}
-
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeGatewayClasses) UpdateStatus(ctx context.Context, gatewayClass *v1beta1.GatewayClass, opts v1.UpdateOptions) (result *v1beta1.GatewayClass, err error) {
-	emptyResult := &v1beta1.GatewayClass{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootUpdateSubresourceActionWithOptions(gatewayclassesResource, "status", gatewayClass, opts), emptyResult)
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.GatewayClass), err
-}
-
-// Delete takes name of the gatewayClass and deletes it. Returns an error if one occurs.
-func (c *FakeGatewayClasses) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewRootDeleteActionWithOptions(gatewayclassesResource, name, opts), &v1beta1.GatewayClass{})
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeGatewayClasses) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
-	action := testing.NewRootDeleteCollectionActionWithOptions(gatewayclassesResource, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1beta1.GatewayClassList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched gatewayClass.
-func (c *FakeGatewayClasses) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.GatewayClass, err error) {
-	emptyResult := &v1beta1.GatewayClass{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootPatchSubresourceActionWithOptions(gatewayclassesResource, name, pt, data, opts, subresources...), emptyResult)
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.GatewayClass), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied gatewayClass.
-func (c *FakeGatewayClasses) Apply(ctx context.Context, gatewayClass *apisv1beta1.GatewayClassApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.GatewayClass, err error) {
-	if gatewayClass == nil {
-		return nil, fmt.Errorf("gatewayClass provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(gatewayClass)
-	if err != nil {
-		return nil, err
-	}
-	name := gatewayClass.Name
-	if name == nil {
-		return nil, fmt.Errorf("gatewayClass.Name must be provided to Apply")
-	}
-	emptyResult := &v1beta1.GatewayClass{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootPatchSubresourceActionWithOptions(gatewayclassesResource, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.GatewayClass), err
-}
-
-// ApplyStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-func (c *FakeGatewayClasses) ApplyStatus(ctx context.Context, gatewayClass *apisv1beta1.GatewayClassApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.GatewayClass, err error) {
-	if gatewayClass == nil {
-		return nil, fmt.Errorf("gatewayClass provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(gatewayClass)
-	if err != nil {
-		return nil, err
-	}
-	name := gatewayClass.Name
-	if name == nil {
-		return nil, fmt.Errorf("gatewayClass.Name must be provided to Apply")
-	}
-	emptyResult := &v1beta1.GatewayClass{}
-	obj, err := c.Fake.
-		Invokes(testing.NewRootPatchSubresourceActionWithOptions(gatewayclassesResource, *name, types.ApplyPatchType, data, opts.ToPatchOptions(), "status"), emptyResult)
-	if obj == nil {
-		return emptyResult, err
+func newFakeGatewayClasses(fake *FakeGatewayV1beta1) typedapisv1beta1.GatewayClassInterface {
+	return &fakeGatewayClasses{
+		gentype.NewFakeClientWithListAndApply[*v1beta1.GatewayClass, *v1beta1.GatewayClassList, *apisv1beta1.GatewayClassApplyConfiguration](
+			fake.Fake,
+			"",
+			v1beta1.SchemeGroupVersion.WithResource("gatewayclasses"),
+			v1beta1.SchemeGroupVersion.WithKind("GatewayClass"),
+			func() *v1beta1.GatewayClass { return &v1beta1.GatewayClass{} },
+			func() *v1beta1.GatewayClassList { return &v1beta1.GatewayClassList{} },
+			func(dst, src *v1beta1.GatewayClassList) { dst.ListMeta = src.ListMeta },
+			func(list *v1beta1.GatewayClassList) []*v1beta1.GatewayClass {
+				return gentype.ToPointerSlice(list.Items)
+			},
+			func(list *v1beta1.GatewayClassList, items []*v1beta1.GatewayClass) {
+				list.Items = gentype.FromPointerSlice(items)
+			},
+		),
+		fake,
 	}
-	return obj.(*v1beta1.GatewayClass), err
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_httproute.go b/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_httproute.go
index 6ec049f8..ad54a2ac 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_httproute.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_httproute.go
@@ -19,179 +19,33 @@ limitations under the License.
 package fake
 
 import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
+	gentype "k8s.io/client-go/gentype"
 	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 	apisv1beta1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1beta1"
+	typedapisv1beta1 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apis/v1beta1"
 )
 
-// FakeHTTPRoutes implements HTTPRouteInterface
-type FakeHTTPRoutes struct {
+// fakeHTTPRoutes implements HTTPRouteInterface
+type fakeHTTPRoutes struct {
+	*gentype.FakeClientWithListAndApply[*v1beta1.HTTPRoute, *v1beta1.HTTPRouteList, *apisv1beta1.HTTPRouteApplyConfiguration]
 	Fake *FakeGatewayV1beta1
-	ns   string
-}
-
-var httproutesResource = v1beta1.SchemeGroupVersion.WithResource("httproutes")
-
-var httproutesKind = v1beta1.SchemeGroupVersion.WithKind("HTTPRoute")
-
-// Get takes name of the hTTPRoute, and returns the corresponding hTTPRoute object, and an error if there is any.
-func (c *FakeHTTPRoutes) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.HTTPRoute, err error) {
-	emptyResult := &v1beta1.HTTPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewGetActionWithOptions(httproutesResource, c.ns, name, options), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.HTTPRoute), err
-}
-
-// List takes label and field selectors, and returns the list of HTTPRoutes that match those selectors.
-func (c *FakeHTTPRoutes) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.HTTPRouteList, err error) {
-	emptyResult := &v1beta1.HTTPRouteList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewListActionWithOptions(httproutesResource, httproutesKind, c.ns, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1beta1.HTTPRouteList{ListMeta: obj.(*v1beta1.HTTPRouteList).ListMeta}
-	for _, item := range obj.(*v1beta1.HTTPRouteList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested hTTPRoutes.
-func (c *FakeHTTPRoutes) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchActionWithOptions(httproutesResource, c.ns, opts))
-
-}
-
-// Create takes the representation of a hTTPRoute and creates it.  Returns the server's representation of the hTTPRoute, and an error, if there is any.
-func (c *FakeHTTPRoutes) Create(ctx context.Context, hTTPRoute *v1beta1.HTTPRoute, opts v1.CreateOptions) (result *v1beta1.HTTPRoute, err error) {
-	emptyResult := &v1beta1.HTTPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateActionWithOptions(httproutesResource, c.ns, hTTPRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.HTTPRoute), err
-}
-
-// Update takes the representation of a hTTPRoute and updates it. Returns the server's representation of the hTTPRoute, and an error, if there is any.
-func (c *FakeHTTPRoutes) Update(ctx context.Context, hTTPRoute *v1beta1.HTTPRoute, opts v1.UpdateOptions) (result *v1beta1.HTTPRoute, err error) {
-	emptyResult := &v1beta1.HTTPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateActionWithOptions(httproutesResource, c.ns, hTTPRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.HTTPRoute), err
 }
 
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeHTTPRoutes) UpdateStatus(ctx context.Context, hTTPRoute *v1beta1.HTTPRoute, opts v1.UpdateOptions) (result *v1beta1.HTTPRoute, err error) {
-	emptyResult := &v1beta1.HTTPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateSubresourceActionWithOptions(httproutesResource, "status", c.ns, hTTPRoute, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.HTTPRoute), err
-}
-
-// Delete takes name of the hTTPRoute and deletes it. Returns an error if one occurs.
-func (c *FakeHTTPRoutes) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteActionWithOptions(httproutesResource, c.ns, name, opts), &v1beta1.HTTPRoute{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeHTTPRoutes) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
-	action := testing.NewDeleteCollectionActionWithOptions(httproutesResource, c.ns, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1beta1.HTTPRouteList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched hTTPRoute.
-func (c *FakeHTTPRoutes) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.HTTPRoute, err error) {
-	emptyResult := &v1beta1.HTTPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(httproutesResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.HTTPRoute), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied hTTPRoute.
-func (c *FakeHTTPRoutes) Apply(ctx context.Context, hTTPRoute *apisv1beta1.HTTPRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.HTTPRoute, err error) {
-	if hTTPRoute == nil {
-		return nil, fmt.Errorf("hTTPRoute provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(hTTPRoute)
-	if err != nil {
-		return nil, err
-	}
-	name := hTTPRoute.Name
-	if name == nil {
-		return nil, fmt.Errorf("hTTPRoute.Name must be provided to Apply")
-	}
-	emptyResult := &v1beta1.HTTPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(httproutesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.HTTPRoute), err
-}
-
-// ApplyStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-func (c *FakeHTTPRoutes) ApplyStatus(ctx context.Context, hTTPRoute *apisv1beta1.HTTPRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.HTTPRoute, err error) {
-	if hTTPRoute == nil {
-		return nil, fmt.Errorf("hTTPRoute provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(hTTPRoute)
-	if err != nil {
-		return nil, err
-	}
-	name := hTTPRoute.Name
-	if name == nil {
-		return nil, fmt.Errorf("hTTPRoute.Name must be provided to Apply")
-	}
-	emptyResult := &v1beta1.HTTPRoute{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(httproutesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions(), "status"), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
+func newFakeHTTPRoutes(fake *FakeGatewayV1beta1, namespace string) typedapisv1beta1.HTTPRouteInterface {
+	return &fakeHTTPRoutes{
+		gentype.NewFakeClientWithListAndApply[*v1beta1.HTTPRoute, *v1beta1.HTTPRouteList, *apisv1beta1.HTTPRouteApplyConfiguration](
+			fake.Fake,
+			namespace,
+			v1beta1.SchemeGroupVersion.WithResource("httproutes"),
+			v1beta1.SchemeGroupVersion.WithKind("HTTPRoute"),
+			func() *v1beta1.HTTPRoute { return &v1beta1.HTTPRoute{} },
+			func() *v1beta1.HTTPRouteList { return &v1beta1.HTTPRouteList{} },
+			func(dst, src *v1beta1.HTTPRouteList) { dst.ListMeta = src.ListMeta },
+			func(list *v1beta1.HTTPRouteList) []*v1beta1.HTTPRoute { return gentype.ToPointerSlice(list.Items) },
+			func(list *v1beta1.HTTPRouteList, items []*v1beta1.HTTPRoute) {
+				list.Items = gentype.FromPointerSlice(items)
+			},
+		),
+		fake,
 	}
-	return obj.(*v1beta1.HTTPRoute), err
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_referencegrant.go b/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_referencegrant.go
index 610c6a96..5489087f 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_referencegrant.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1beta1/fake/fake_referencegrant.go
@@ -19,142 +19,35 @@ limitations under the License.
 package fake
 
 import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
+	gentype "k8s.io/client-go/gentype"
 	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 	apisv1beta1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1beta1"
+	typedapisv1beta1 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apis/v1beta1"
 )
 
-// FakeReferenceGrants implements ReferenceGrantInterface
-type FakeReferenceGrants struct {
+// fakeReferenceGrants implements ReferenceGrantInterface
+type fakeReferenceGrants struct {
+	*gentype.FakeClientWithListAndApply[*v1beta1.ReferenceGrant, *v1beta1.ReferenceGrantList, *apisv1beta1.ReferenceGrantApplyConfiguration]
 	Fake *FakeGatewayV1beta1
-	ns   string
-}
-
-var referencegrantsResource = v1beta1.SchemeGroupVersion.WithResource("referencegrants")
-
-var referencegrantsKind = v1beta1.SchemeGroupVersion.WithKind("ReferenceGrant")
-
-// Get takes name of the referenceGrant, and returns the corresponding referenceGrant object, and an error if there is any.
-func (c *FakeReferenceGrants) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ReferenceGrant, err error) {
-	emptyResult := &v1beta1.ReferenceGrant{}
-	obj, err := c.Fake.
-		Invokes(testing.NewGetActionWithOptions(referencegrantsResource, c.ns, name, options), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.ReferenceGrant), err
-}
-
-// List takes label and field selectors, and returns the list of ReferenceGrants that match those selectors.
-func (c *FakeReferenceGrants) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ReferenceGrantList, err error) {
-	emptyResult := &v1beta1.ReferenceGrantList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewListActionWithOptions(referencegrantsResource, referencegrantsKind, c.ns, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1beta1.ReferenceGrantList{ListMeta: obj.(*v1beta1.ReferenceGrantList).ListMeta}
-	for _, item := range obj.(*v1beta1.ReferenceGrantList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested referenceGrants.
-func (c *FakeReferenceGrants) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchActionWithOptions(referencegrantsResource, c.ns, opts))
-
 }
 
-// Create takes the representation of a referenceGrant and creates it.  Returns the server's representation of the referenceGrant, and an error, if there is any.
-func (c *FakeReferenceGrants) Create(ctx context.Context, referenceGrant *v1beta1.ReferenceGrant, opts v1.CreateOptions) (result *v1beta1.ReferenceGrant, err error) {
-	emptyResult := &v1beta1.ReferenceGrant{}
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateActionWithOptions(referencegrantsResource, c.ns, referenceGrant, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.ReferenceGrant), err
-}
-
-// Update takes the representation of a referenceGrant and updates it. Returns the server's representation of the referenceGrant, and an error, if there is any.
-func (c *FakeReferenceGrants) Update(ctx context.Context, referenceGrant *v1beta1.ReferenceGrant, opts v1.UpdateOptions) (result *v1beta1.ReferenceGrant, err error) {
-	emptyResult := &v1beta1.ReferenceGrant{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateActionWithOptions(referencegrantsResource, c.ns, referenceGrant, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.ReferenceGrant), err
-}
-
-// Delete takes name of the referenceGrant and deletes it. Returns an error if one occurs.
-func (c *FakeReferenceGrants) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteActionWithOptions(referencegrantsResource, c.ns, name, opts), &v1beta1.ReferenceGrant{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeReferenceGrants) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
-	action := testing.NewDeleteCollectionActionWithOptions(referencegrantsResource, c.ns, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1beta1.ReferenceGrantList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched referenceGrant.
-func (c *FakeReferenceGrants) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ReferenceGrant, err error) {
-	emptyResult := &v1beta1.ReferenceGrant{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(referencegrantsResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1beta1.ReferenceGrant), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied referenceGrant.
-func (c *FakeReferenceGrants) Apply(ctx context.Context, referenceGrant *apisv1beta1.ReferenceGrantApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ReferenceGrant, err error) {
-	if referenceGrant == nil {
-		return nil, fmt.Errorf("referenceGrant provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(referenceGrant)
-	if err != nil {
-		return nil, err
-	}
-	name := referenceGrant.Name
-	if name == nil {
-		return nil, fmt.Errorf("referenceGrant.Name must be provided to Apply")
-	}
-	emptyResult := &v1beta1.ReferenceGrant{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(referencegrantsResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
+func newFakeReferenceGrants(fake *FakeGatewayV1beta1, namespace string) typedapisv1beta1.ReferenceGrantInterface {
+	return &fakeReferenceGrants{
+		gentype.NewFakeClientWithListAndApply[*v1beta1.ReferenceGrant, *v1beta1.ReferenceGrantList, *apisv1beta1.ReferenceGrantApplyConfiguration](
+			fake.Fake,
+			namespace,
+			v1beta1.SchemeGroupVersion.WithResource("referencegrants"),
+			v1beta1.SchemeGroupVersion.WithKind("ReferenceGrant"),
+			func() *v1beta1.ReferenceGrant { return &v1beta1.ReferenceGrant{} },
+			func() *v1beta1.ReferenceGrantList { return &v1beta1.ReferenceGrantList{} },
+			func(dst, src *v1beta1.ReferenceGrantList) { dst.ListMeta = src.ListMeta },
+			func(list *v1beta1.ReferenceGrantList) []*v1beta1.ReferenceGrant {
+				return gentype.ToPointerSlice(list.Items)
+			},
+			func(list *v1beta1.ReferenceGrantList, items []*v1beta1.ReferenceGrant) {
+				list.Items = gentype.FromPointerSlice(items)
+			},
+		),
+		fake,
 	}
-	return obj.(*v1beta1.ReferenceGrant), err
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1beta1/gateway.go b/pkg/client/clientset/versioned/typed/apis/v1beta1/gateway.go
index 5a784116..7302770d 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1beta1/gateway.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1beta1/gateway.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1beta1
 
 import (
-	"context"
+	context "context"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	watch "k8s.io/apimachinery/pkg/watch"
 	gentype "k8s.io/client-go/gentype"
-	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
-	apisv1beta1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1beta1"
+	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	applyconfigurationapisv1beta1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1beta1"
 	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
@@ -38,36 +38,37 @@ type GatewaysGetter interface {
 
 // GatewayInterface has methods to work with Gateway resources.
 type GatewayInterface interface {
-	Create(ctx context.Context, gateway *v1beta1.Gateway, opts v1.CreateOptions) (*v1beta1.Gateway, error)
-	Update(ctx context.Context, gateway *v1beta1.Gateway, opts v1.UpdateOptions) (*v1beta1.Gateway, error)
+	Create(ctx context.Context, gateway *apisv1beta1.Gateway, opts v1.CreateOptions) (*apisv1beta1.Gateway, error)
+	Update(ctx context.Context, gateway *apisv1beta1.Gateway, opts v1.UpdateOptions) (*apisv1beta1.Gateway, error)
 	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-	UpdateStatus(ctx context.Context, gateway *v1beta1.Gateway, opts v1.UpdateOptions) (*v1beta1.Gateway, error)
+	UpdateStatus(ctx context.Context, gateway *apisv1beta1.Gateway, opts v1.UpdateOptions) (*apisv1beta1.Gateway, error)
 	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
 	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
-	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1beta1.Gateway, error)
-	List(ctx context.Context, opts v1.ListOptions) (*v1beta1.GatewayList, error)
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*apisv1beta1.Gateway, error)
+	List(ctx context.Context, opts v1.ListOptions) (*apisv1beta1.GatewayList, error)
 	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.Gateway, err error)
-	Apply(ctx context.Context, gateway *apisv1beta1.GatewayApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.Gateway, err error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *apisv1beta1.Gateway, err error)
+	Apply(ctx context.Context, gateway *applyconfigurationapisv1beta1.GatewayApplyConfiguration, opts v1.ApplyOptions) (result *apisv1beta1.Gateway, err error)
 	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-	ApplyStatus(ctx context.Context, gateway *apisv1beta1.GatewayApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.Gateway, err error)
+	ApplyStatus(ctx context.Context, gateway *applyconfigurationapisv1beta1.GatewayApplyConfiguration, opts v1.ApplyOptions) (result *apisv1beta1.Gateway, err error)
 	GatewayExpansion
 }
 
 // gateways implements GatewayInterface
 type gateways struct {
-	*gentype.ClientWithListAndApply[*v1beta1.Gateway, *v1beta1.GatewayList, *apisv1beta1.GatewayApplyConfiguration]
+	*gentype.ClientWithListAndApply[*apisv1beta1.Gateway, *apisv1beta1.GatewayList, *applyconfigurationapisv1beta1.GatewayApplyConfiguration]
 }
 
 // newGateways returns a Gateways
 func newGateways(c *GatewayV1beta1Client, namespace string) *gateways {
 	return &gateways{
-		gentype.NewClientWithListAndApply[*v1beta1.Gateway, *v1beta1.GatewayList, *apisv1beta1.GatewayApplyConfiguration](
+		gentype.NewClientWithListAndApply[*apisv1beta1.Gateway, *apisv1beta1.GatewayList, *applyconfigurationapisv1beta1.GatewayApplyConfiguration](
 			"gateways",
 			c.RESTClient(),
 			scheme.ParameterCodec,
 			namespace,
-			func() *v1beta1.Gateway { return &v1beta1.Gateway{} },
-			func() *v1beta1.GatewayList { return &v1beta1.GatewayList{} }),
+			func() *apisv1beta1.Gateway { return &apisv1beta1.Gateway{} },
+			func() *apisv1beta1.GatewayList { return &apisv1beta1.GatewayList{} },
+		),
 	}
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1beta1/gatewayclass.go b/pkg/client/clientset/versioned/typed/apis/v1beta1/gatewayclass.go
index d9b14b03..6e37b2a5 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1beta1/gatewayclass.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1beta1/gatewayclass.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1beta1
 
 import (
-	"context"
+	context "context"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	watch "k8s.io/apimachinery/pkg/watch"
 	gentype "k8s.io/client-go/gentype"
-	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
-	apisv1beta1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1beta1"
+	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	applyconfigurationapisv1beta1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1beta1"
 	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
@@ -38,36 +38,37 @@ type GatewayClassesGetter interface {
 
 // GatewayClassInterface has methods to work with GatewayClass resources.
 type GatewayClassInterface interface {
-	Create(ctx context.Context, gatewayClass *v1beta1.GatewayClass, opts v1.CreateOptions) (*v1beta1.GatewayClass, error)
-	Update(ctx context.Context, gatewayClass *v1beta1.GatewayClass, opts v1.UpdateOptions) (*v1beta1.GatewayClass, error)
+	Create(ctx context.Context, gatewayClass *apisv1beta1.GatewayClass, opts v1.CreateOptions) (*apisv1beta1.GatewayClass, error)
+	Update(ctx context.Context, gatewayClass *apisv1beta1.GatewayClass, opts v1.UpdateOptions) (*apisv1beta1.GatewayClass, error)
 	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-	UpdateStatus(ctx context.Context, gatewayClass *v1beta1.GatewayClass, opts v1.UpdateOptions) (*v1beta1.GatewayClass, error)
+	UpdateStatus(ctx context.Context, gatewayClass *apisv1beta1.GatewayClass, opts v1.UpdateOptions) (*apisv1beta1.GatewayClass, error)
 	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
 	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
-	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1beta1.GatewayClass, error)
-	List(ctx context.Context, opts v1.ListOptions) (*v1beta1.GatewayClassList, error)
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*apisv1beta1.GatewayClass, error)
+	List(ctx context.Context, opts v1.ListOptions) (*apisv1beta1.GatewayClassList, error)
 	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.GatewayClass, err error)
-	Apply(ctx context.Context, gatewayClass *apisv1beta1.GatewayClassApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.GatewayClass, err error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *apisv1beta1.GatewayClass, err error)
+	Apply(ctx context.Context, gatewayClass *applyconfigurationapisv1beta1.GatewayClassApplyConfiguration, opts v1.ApplyOptions) (result *apisv1beta1.GatewayClass, err error)
 	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-	ApplyStatus(ctx context.Context, gatewayClass *apisv1beta1.GatewayClassApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.GatewayClass, err error)
+	ApplyStatus(ctx context.Context, gatewayClass *applyconfigurationapisv1beta1.GatewayClassApplyConfiguration, opts v1.ApplyOptions) (result *apisv1beta1.GatewayClass, err error)
 	GatewayClassExpansion
 }
 
 // gatewayClasses implements GatewayClassInterface
 type gatewayClasses struct {
-	*gentype.ClientWithListAndApply[*v1beta1.GatewayClass, *v1beta1.GatewayClassList, *apisv1beta1.GatewayClassApplyConfiguration]
+	*gentype.ClientWithListAndApply[*apisv1beta1.GatewayClass, *apisv1beta1.GatewayClassList, *applyconfigurationapisv1beta1.GatewayClassApplyConfiguration]
 }
 
 // newGatewayClasses returns a GatewayClasses
 func newGatewayClasses(c *GatewayV1beta1Client) *gatewayClasses {
 	return &gatewayClasses{
-		gentype.NewClientWithListAndApply[*v1beta1.GatewayClass, *v1beta1.GatewayClassList, *apisv1beta1.GatewayClassApplyConfiguration](
+		gentype.NewClientWithListAndApply[*apisv1beta1.GatewayClass, *apisv1beta1.GatewayClassList, *applyconfigurationapisv1beta1.GatewayClassApplyConfiguration](
 			"gatewayclasses",
 			c.RESTClient(),
 			scheme.ParameterCodec,
 			"",
-			func() *v1beta1.GatewayClass { return &v1beta1.GatewayClass{} },
-			func() *v1beta1.GatewayClassList { return &v1beta1.GatewayClassList{} }),
+			func() *apisv1beta1.GatewayClass { return &apisv1beta1.GatewayClass{} },
+			func() *apisv1beta1.GatewayClassList { return &apisv1beta1.GatewayClassList{} },
+		),
 	}
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1beta1/httproute.go b/pkg/client/clientset/versioned/typed/apis/v1beta1/httproute.go
index 9123a629..84029931 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1beta1/httproute.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1beta1/httproute.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1beta1
 
 import (
-	"context"
+	context "context"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	watch "k8s.io/apimachinery/pkg/watch"
 	gentype "k8s.io/client-go/gentype"
-	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
-	apisv1beta1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1beta1"
+	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	applyconfigurationapisv1beta1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1beta1"
 	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
@@ -38,36 +38,37 @@ type HTTPRoutesGetter interface {
 
 // HTTPRouteInterface has methods to work with HTTPRoute resources.
 type HTTPRouteInterface interface {
-	Create(ctx context.Context, hTTPRoute *v1beta1.HTTPRoute, opts v1.CreateOptions) (*v1beta1.HTTPRoute, error)
-	Update(ctx context.Context, hTTPRoute *v1beta1.HTTPRoute, opts v1.UpdateOptions) (*v1beta1.HTTPRoute, error)
+	Create(ctx context.Context, hTTPRoute *apisv1beta1.HTTPRoute, opts v1.CreateOptions) (*apisv1beta1.HTTPRoute, error)
+	Update(ctx context.Context, hTTPRoute *apisv1beta1.HTTPRoute, opts v1.UpdateOptions) (*apisv1beta1.HTTPRoute, error)
 	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-	UpdateStatus(ctx context.Context, hTTPRoute *v1beta1.HTTPRoute, opts v1.UpdateOptions) (*v1beta1.HTTPRoute, error)
+	UpdateStatus(ctx context.Context, hTTPRoute *apisv1beta1.HTTPRoute, opts v1.UpdateOptions) (*apisv1beta1.HTTPRoute, error)
 	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
 	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
-	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1beta1.HTTPRoute, error)
-	List(ctx context.Context, opts v1.ListOptions) (*v1beta1.HTTPRouteList, error)
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*apisv1beta1.HTTPRoute, error)
+	List(ctx context.Context, opts v1.ListOptions) (*apisv1beta1.HTTPRouteList, error)
 	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.HTTPRoute, err error)
-	Apply(ctx context.Context, hTTPRoute *apisv1beta1.HTTPRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.HTTPRoute, err error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *apisv1beta1.HTTPRoute, err error)
+	Apply(ctx context.Context, hTTPRoute *applyconfigurationapisv1beta1.HTTPRouteApplyConfiguration, opts v1.ApplyOptions) (result *apisv1beta1.HTTPRoute, err error)
 	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-	ApplyStatus(ctx context.Context, hTTPRoute *apisv1beta1.HTTPRouteApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.HTTPRoute, err error)
+	ApplyStatus(ctx context.Context, hTTPRoute *applyconfigurationapisv1beta1.HTTPRouteApplyConfiguration, opts v1.ApplyOptions) (result *apisv1beta1.HTTPRoute, err error)
 	HTTPRouteExpansion
 }
 
 // hTTPRoutes implements HTTPRouteInterface
 type hTTPRoutes struct {
-	*gentype.ClientWithListAndApply[*v1beta1.HTTPRoute, *v1beta1.HTTPRouteList, *apisv1beta1.HTTPRouteApplyConfiguration]
+	*gentype.ClientWithListAndApply[*apisv1beta1.HTTPRoute, *apisv1beta1.HTTPRouteList, *applyconfigurationapisv1beta1.HTTPRouteApplyConfiguration]
 }
 
 // newHTTPRoutes returns a HTTPRoutes
 func newHTTPRoutes(c *GatewayV1beta1Client, namespace string) *hTTPRoutes {
 	return &hTTPRoutes{
-		gentype.NewClientWithListAndApply[*v1beta1.HTTPRoute, *v1beta1.HTTPRouteList, *apisv1beta1.HTTPRouteApplyConfiguration](
+		gentype.NewClientWithListAndApply[*apisv1beta1.HTTPRoute, *apisv1beta1.HTTPRouteList, *applyconfigurationapisv1beta1.HTTPRouteApplyConfiguration](
 			"httproutes",
 			c.RESTClient(),
 			scheme.ParameterCodec,
 			namespace,
-			func() *v1beta1.HTTPRoute { return &v1beta1.HTTPRoute{} },
-			func() *v1beta1.HTTPRouteList { return &v1beta1.HTTPRouteList{} }),
+			func() *apisv1beta1.HTTPRoute { return &apisv1beta1.HTTPRoute{} },
+			func() *apisv1beta1.HTTPRouteList { return &apisv1beta1.HTTPRouteList{} },
+		),
 	}
 }
diff --git a/pkg/client/clientset/versioned/typed/apis/v1beta1/referencegrant.go b/pkg/client/clientset/versioned/typed/apis/v1beta1/referencegrant.go
index 8ea52fad..be6227c4 100644
--- a/pkg/client/clientset/versioned/typed/apis/v1beta1/referencegrant.go
+++ b/pkg/client/clientset/versioned/typed/apis/v1beta1/referencegrant.go
@@ -19,14 +19,14 @@ limitations under the License.
 package v1beta1
 
 import (
-	"context"
+	context "context"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	types "k8s.io/apimachinery/pkg/types"
 	watch "k8s.io/apimachinery/pkg/watch"
 	gentype "k8s.io/client-go/gentype"
-	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
-	apisv1beta1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1beta1"
+	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	applyconfigurationapisv1beta1 "sigs.k8s.io/gateway-api/applyconfiguration/apis/v1beta1"
 	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
@@ -38,32 +38,33 @@ type ReferenceGrantsGetter interface {
 
 // ReferenceGrantInterface has methods to work with ReferenceGrant resources.
 type ReferenceGrantInterface interface {
-	Create(ctx context.Context, referenceGrant *v1beta1.ReferenceGrant, opts v1.CreateOptions) (*v1beta1.ReferenceGrant, error)
-	Update(ctx context.Context, referenceGrant *v1beta1.ReferenceGrant, opts v1.UpdateOptions) (*v1beta1.ReferenceGrant, error)
+	Create(ctx context.Context, referenceGrant *apisv1beta1.ReferenceGrant, opts v1.CreateOptions) (*apisv1beta1.ReferenceGrant, error)
+	Update(ctx context.Context, referenceGrant *apisv1beta1.ReferenceGrant, opts v1.UpdateOptions) (*apisv1beta1.ReferenceGrant, error)
 	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
 	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
-	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1beta1.ReferenceGrant, error)
-	List(ctx context.Context, opts v1.ListOptions) (*v1beta1.ReferenceGrantList, error)
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*apisv1beta1.ReferenceGrant, error)
+	List(ctx context.Context, opts v1.ListOptions) (*apisv1beta1.ReferenceGrantList, error)
 	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ReferenceGrant, err error)
-	Apply(ctx context.Context, referenceGrant *apisv1beta1.ReferenceGrantApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ReferenceGrant, err error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *apisv1beta1.ReferenceGrant, err error)
+	Apply(ctx context.Context, referenceGrant *applyconfigurationapisv1beta1.ReferenceGrantApplyConfiguration, opts v1.ApplyOptions) (result *apisv1beta1.ReferenceGrant, err error)
 	ReferenceGrantExpansion
 }
 
 // referenceGrants implements ReferenceGrantInterface
 type referenceGrants struct {
-	*gentype.ClientWithListAndApply[*v1beta1.ReferenceGrant, *v1beta1.ReferenceGrantList, *apisv1beta1.ReferenceGrantApplyConfiguration]
+	*gentype.ClientWithListAndApply[*apisv1beta1.ReferenceGrant, *apisv1beta1.ReferenceGrantList, *applyconfigurationapisv1beta1.ReferenceGrantApplyConfiguration]
 }
 
 // newReferenceGrants returns a ReferenceGrants
 func newReferenceGrants(c *GatewayV1beta1Client, namespace string) *referenceGrants {
 	return &referenceGrants{
-		gentype.NewClientWithListAndApply[*v1beta1.ReferenceGrant, *v1beta1.ReferenceGrantList, *apisv1beta1.ReferenceGrantApplyConfiguration](
+		gentype.NewClientWithListAndApply[*apisv1beta1.ReferenceGrant, *apisv1beta1.ReferenceGrantList, *applyconfigurationapisv1beta1.ReferenceGrantApplyConfiguration](
 			"referencegrants",
 			c.RESTClient(),
 			scheme.ParameterCodec,
 			namespace,
-			func() *v1beta1.ReferenceGrant { return &v1beta1.ReferenceGrant{} },
-			func() *v1beta1.ReferenceGrantList { return &v1beta1.ReferenceGrantList{} }),
+			func() *apisv1beta1.ReferenceGrant { return &apisv1beta1.ReferenceGrant{} },
+			func() *apisv1beta1.ReferenceGrantList { return &apisv1beta1.ReferenceGrantList{} },
+		),
 	}
 }
diff --git a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/apisx_client.go b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/apisx_client.go
index 9cbdd892..234356e4 100644
--- a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/apisx_client.go
+++ b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/apisx_client.go
@@ -19,17 +19,17 @@ limitations under the License.
 package v1alpha1
 
 import (
-	"net/http"
+	http "net/http"
 
 	rest "k8s.io/client-go/rest"
-	v1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
-	"sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
+	apisxv1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
+	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
 )
 
 type ExperimentalV1alpha1Interface interface {
 	RESTClient() rest.Interface
-	BackendTrafficPoliciesGetter
-	ListenerSetsGetter
+	XBackendTrafficPoliciesGetter
+	XListenerSetsGetter
 }
 
 // ExperimentalV1alpha1Client is used to interact with features provided by the gateway.networking.x-k8s.io group.
@@ -37,12 +37,12 @@ type ExperimentalV1alpha1Client struct {
 	restClient rest.Interface
 }
 
-func (c *ExperimentalV1alpha1Client) BackendTrafficPolicies(namespace string) BackendTrafficPolicyInterface {
-	return newBackendTrafficPolicies(c, namespace)
+func (c *ExperimentalV1alpha1Client) XBackendTrafficPolicies(namespace string) XBackendTrafficPolicyInterface {
+	return newXBackendTrafficPolicies(c, namespace)
 }
 
-func (c *ExperimentalV1alpha1Client) ListenerSets(namespace string) ListenerSetInterface {
-	return newListenerSets(c, namespace)
+func (c *ExperimentalV1alpha1Client) XListenerSets(namespace string) XListenerSetInterface {
+	return newXListenerSets(c, namespace)
 }
 
 // NewForConfig creates a new ExperimentalV1alpha1Client for the given config.
@@ -50,9 +50,7 @@ func (c *ExperimentalV1alpha1Client) ListenerSets(namespace string) ListenerSetI
 // where httpClient was generated with rest.HTTPClientFor(c).
 func NewForConfig(c *rest.Config) (*ExperimentalV1alpha1Client, error) {
 	config := *c
-	if err := setConfigDefaults(&config); err != nil {
-		return nil, err
-	}
+	setConfigDefaults(&config)
 	httpClient, err := rest.HTTPClientFor(&config)
 	if err != nil {
 		return nil, err
@@ -64,9 +62,7 @@ func NewForConfig(c *rest.Config) (*ExperimentalV1alpha1Client, error) {
 // Note the http client provided takes precedence over the configured transport values.
 func NewForConfigAndClient(c *rest.Config, h *http.Client) (*ExperimentalV1alpha1Client, error) {
 	config := *c
-	if err := setConfigDefaults(&config); err != nil {
-		return nil, err
-	}
+	setConfigDefaults(&config)
 	client, err := rest.RESTClientForConfigAndClient(&config, h)
 	if err != nil {
 		return nil, err
@@ -89,17 +85,15 @@ func New(c rest.Interface) *ExperimentalV1alpha1Client {
 	return &ExperimentalV1alpha1Client{c}
 }
 
-func setConfigDefaults(config *rest.Config) error {
-	gv := v1alpha1.SchemeGroupVersion
+func setConfigDefaults(config *rest.Config) {
+	gv := apisxv1alpha1.SchemeGroupVersion
 	config.GroupVersion = &gv
 	config.APIPath = "/apis"
-	config.NegotiatedSerializer = scheme.Codecs.WithoutConversion()
+	config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion()
 
 	if config.UserAgent == "" {
 		config.UserAgent = rest.DefaultKubernetesUserAgent()
 	}
-
-	return nil
 }
 
 // RESTClient returns a RESTClient that is used to communicate
diff --git a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/backendtrafficpolicy.go b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/backendtrafficpolicy.go
deleted file mode 100644
index 74455d90..00000000
--- a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/backendtrafficpolicy.go
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package v1alpha1
-
-import (
-	"context"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	gentype "k8s.io/client-go/gentype"
-	v1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
-	apisxv1alpha1 "sigs.k8s.io/gateway-api/applyconfiguration/apisx/v1alpha1"
-	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
-)
-
-// BackendTrafficPoliciesGetter has a method to return a BackendTrafficPolicyInterface.
-// A group's client should implement this interface.
-type BackendTrafficPoliciesGetter interface {
-	BackendTrafficPolicies(namespace string) BackendTrafficPolicyInterface
-}
-
-// BackendTrafficPolicyInterface has methods to work with BackendTrafficPolicy resources.
-type BackendTrafficPolicyInterface interface {
-	Create(ctx context.Context, backendTrafficPolicy *v1alpha1.BackendTrafficPolicy, opts v1.CreateOptions) (*v1alpha1.BackendTrafficPolicy, error)
-	Update(ctx context.Context, backendTrafficPolicy *v1alpha1.BackendTrafficPolicy, opts v1.UpdateOptions) (*v1alpha1.BackendTrafficPolicy, error)
-	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-	UpdateStatus(ctx context.Context, backendTrafficPolicy *v1alpha1.BackendTrafficPolicy, opts v1.UpdateOptions) (*v1alpha1.BackendTrafficPolicy, error)
-	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
-	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
-	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.BackendTrafficPolicy, error)
-	List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.BackendTrafficPolicyList, error)
-	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.BackendTrafficPolicy, err error)
-	Apply(ctx context.Context, backendTrafficPolicy *apisxv1alpha1.BackendTrafficPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.BackendTrafficPolicy, err error)
-	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-	ApplyStatus(ctx context.Context, backendTrafficPolicy *apisxv1alpha1.BackendTrafficPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.BackendTrafficPolicy, err error)
-	BackendTrafficPolicyExpansion
-}
-
-// backendTrafficPolicies implements BackendTrafficPolicyInterface
-type backendTrafficPolicies struct {
-	*gentype.ClientWithListAndApply[*v1alpha1.BackendTrafficPolicy, *v1alpha1.BackendTrafficPolicyList, *apisxv1alpha1.BackendTrafficPolicyApplyConfiguration]
-}
-
-// newBackendTrafficPolicies returns a BackendTrafficPolicies
-func newBackendTrafficPolicies(c *ExperimentalV1alpha1Client, namespace string) *backendTrafficPolicies {
-	return &backendTrafficPolicies{
-		gentype.NewClientWithListAndApply[*v1alpha1.BackendTrafficPolicy, *v1alpha1.BackendTrafficPolicyList, *apisxv1alpha1.BackendTrafficPolicyApplyConfiguration](
-			"backendtrafficpolicies",
-			c.RESTClient(),
-			scheme.ParameterCodec,
-			namespace,
-			func() *v1alpha1.BackendTrafficPolicy { return &v1alpha1.BackendTrafficPolicy{} },
-			func() *v1alpha1.BackendTrafficPolicyList { return &v1alpha1.BackendTrafficPolicyList{} }),
-	}
-}
diff --git a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_apisx_client.go b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_apisx_client.go
index 12f35d1b..962c5f3e 100644
--- a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_apisx_client.go
+++ b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_apisx_client.go
@@ -28,12 +28,12 @@ type FakeExperimentalV1alpha1 struct {
 	*testing.Fake
 }
 
-func (c *FakeExperimentalV1alpha1) BackendTrafficPolicies(namespace string) v1alpha1.BackendTrafficPolicyInterface {
-	return &FakeBackendTrafficPolicies{c, namespace}
+func (c *FakeExperimentalV1alpha1) XBackendTrafficPolicies(namespace string) v1alpha1.XBackendTrafficPolicyInterface {
+	return newFakeXBackendTrafficPolicies(c, namespace)
 }
 
-func (c *FakeExperimentalV1alpha1) ListenerSets(namespace string) v1alpha1.ListenerSetInterface {
-	return &FakeListenerSets{c, namespace}
+func (c *FakeExperimentalV1alpha1) XListenerSets(namespace string) v1alpha1.XListenerSetInterface {
+	return newFakeXListenerSets(c, namespace)
 }
 
 // RESTClient returns a RESTClient that is used to communicate
diff --git a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_backendtrafficpolicy.go b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_backendtrafficpolicy.go
deleted file mode 100644
index 905e295b..00000000
--- a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_backendtrafficpolicy.go
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package fake
-
-import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
-	v1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
-	apisxv1alpha1 "sigs.k8s.io/gateway-api/applyconfiguration/apisx/v1alpha1"
-)
-
-// FakeBackendTrafficPolicies implements BackendTrafficPolicyInterface
-type FakeBackendTrafficPolicies struct {
-	Fake *FakeExperimentalV1alpha1
-	ns   string
-}
-
-var backendtrafficpoliciesResource = v1alpha1.SchemeGroupVersion.WithResource("backendtrafficpolicies")
-
-var backendtrafficpoliciesKind = v1alpha1.SchemeGroupVersion.WithKind("BackendTrafficPolicy")
-
-// Get takes name of the backendTrafficPolicy, and returns the corresponding backendTrafficPolicy object, and an error if there is any.
-func (c *FakeBackendTrafficPolicies) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.BackendTrafficPolicy, err error) {
-	emptyResult := &v1alpha1.BackendTrafficPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewGetActionWithOptions(backendtrafficpoliciesResource, c.ns, name, options), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha1.BackendTrafficPolicy), err
-}
-
-// List takes label and field selectors, and returns the list of BackendTrafficPolicies that match those selectors.
-func (c *FakeBackendTrafficPolicies) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.BackendTrafficPolicyList, err error) {
-	emptyResult := &v1alpha1.BackendTrafficPolicyList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewListActionWithOptions(backendtrafficpoliciesResource, backendtrafficpoliciesKind, c.ns, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1alpha1.BackendTrafficPolicyList{ListMeta: obj.(*v1alpha1.BackendTrafficPolicyList).ListMeta}
-	for _, item := range obj.(*v1alpha1.BackendTrafficPolicyList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested backendTrafficPolicies.
-func (c *FakeBackendTrafficPolicies) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchActionWithOptions(backendtrafficpoliciesResource, c.ns, opts))
-
-}
-
-// Create takes the representation of a backendTrafficPolicy and creates it.  Returns the server's representation of the backendTrafficPolicy, and an error, if there is any.
-func (c *FakeBackendTrafficPolicies) Create(ctx context.Context, backendTrafficPolicy *v1alpha1.BackendTrafficPolicy, opts v1.CreateOptions) (result *v1alpha1.BackendTrafficPolicy, err error) {
-	emptyResult := &v1alpha1.BackendTrafficPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateActionWithOptions(backendtrafficpoliciesResource, c.ns, backendTrafficPolicy, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha1.BackendTrafficPolicy), err
-}
-
-// Update takes the representation of a backendTrafficPolicy and updates it. Returns the server's representation of the backendTrafficPolicy, and an error, if there is any.
-func (c *FakeBackendTrafficPolicies) Update(ctx context.Context, backendTrafficPolicy *v1alpha1.BackendTrafficPolicy, opts v1.UpdateOptions) (result *v1alpha1.BackendTrafficPolicy, err error) {
-	emptyResult := &v1alpha1.BackendTrafficPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateActionWithOptions(backendtrafficpoliciesResource, c.ns, backendTrafficPolicy, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha1.BackendTrafficPolicy), err
-}
-
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeBackendTrafficPolicies) UpdateStatus(ctx context.Context, backendTrafficPolicy *v1alpha1.BackendTrafficPolicy, opts v1.UpdateOptions) (result *v1alpha1.BackendTrafficPolicy, err error) {
-	emptyResult := &v1alpha1.BackendTrafficPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateSubresourceActionWithOptions(backendtrafficpoliciesResource, "status", c.ns, backendTrafficPolicy, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha1.BackendTrafficPolicy), err
-}
-
-// Delete takes name of the backendTrafficPolicy and deletes it. Returns an error if one occurs.
-func (c *FakeBackendTrafficPolicies) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteActionWithOptions(backendtrafficpoliciesResource, c.ns, name, opts), &v1alpha1.BackendTrafficPolicy{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeBackendTrafficPolicies) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
-	action := testing.NewDeleteCollectionActionWithOptions(backendtrafficpoliciesResource, c.ns, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1alpha1.BackendTrafficPolicyList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched backendTrafficPolicy.
-func (c *FakeBackendTrafficPolicies) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.BackendTrafficPolicy, err error) {
-	emptyResult := &v1alpha1.BackendTrafficPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(backendtrafficpoliciesResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha1.BackendTrafficPolicy), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied backendTrafficPolicy.
-func (c *FakeBackendTrafficPolicies) Apply(ctx context.Context, backendTrafficPolicy *apisxv1alpha1.BackendTrafficPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.BackendTrafficPolicy, err error) {
-	if backendTrafficPolicy == nil {
-		return nil, fmt.Errorf("backendTrafficPolicy provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(backendTrafficPolicy)
-	if err != nil {
-		return nil, err
-	}
-	name := backendTrafficPolicy.Name
-	if name == nil {
-		return nil, fmt.Errorf("backendTrafficPolicy.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha1.BackendTrafficPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(backendtrafficpoliciesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha1.BackendTrafficPolicy), err
-}
-
-// ApplyStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-func (c *FakeBackendTrafficPolicies) ApplyStatus(ctx context.Context, backendTrafficPolicy *apisxv1alpha1.BackendTrafficPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.BackendTrafficPolicy, err error) {
-	if backendTrafficPolicy == nil {
-		return nil, fmt.Errorf("backendTrafficPolicy provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(backendTrafficPolicy)
-	if err != nil {
-		return nil, err
-	}
-	name := backendTrafficPolicy.Name
-	if name == nil {
-		return nil, fmt.Errorf("backendTrafficPolicy.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha1.BackendTrafficPolicy{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(backendtrafficpoliciesResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions(), "status"), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha1.BackendTrafficPolicy), err
-}
diff --git a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_listenerset.go b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_listenerset.go
deleted file mode 100644
index 6888d2cb..00000000
--- a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_listenerset.go
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package fake
-
-import (
-	"context"
-	json "encoding/json"
-	"fmt"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	labels "k8s.io/apimachinery/pkg/labels"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	testing "k8s.io/client-go/testing"
-	v1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
-	apisxv1alpha1 "sigs.k8s.io/gateway-api/applyconfiguration/apisx/v1alpha1"
-)
-
-// FakeListenerSets implements ListenerSetInterface
-type FakeListenerSets struct {
-	Fake *FakeExperimentalV1alpha1
-	ns   string
-}
-
-var listenersetsResource = v1alpha1.SchemeGroupVersion.WithResource("listenersets")
-
-var listenersetsKind = v1alpha1.SchemeGroupVersion.WithKind("ListenerSet")
-
-// Get takes name of the listenerSet, and returns the corresponding listenerSet object, and an error if there is any.
-func (c *FakeListenerSets) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ListenerSet, err error) {
-	emptyResult := &v1alpha1.ListenerSet{}
-	obj, err := c.Fake.
-		Invokes(testing.NewGetActionWithOptions(listenersetsResource, c.ns, name, options), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha1.ListenerSet), err
-}
-
-// List takes label and field selectors, and returns the list of ListenerSets that match those selectors.
-func (c *FakeListenerSets) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ListenerSetList, err error) {
-	emptyResult := &v1alpha1.ListenerSetList{}
-	obj, err := c.Fake.
-		Invokes(testing.NewListActionWithOptions(listenersetsResource, listenersetsKind, c.ns, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-
-	label, _, _ := testing.ExtractFromListOptions(opts)
-	if label == nil {
-		label = labels.Everything()
-	}
-	list := &v1alpha1.ListenerSetList{ListMeta: obj.(*v1alpha1.ListenerSetList).ListMeta}
-	for _, item := range obj.(*v1alpha1.ListenerSetList).Items {
-		if label.Matches(labels.Set(item.Labels)) {
-			list.Items = append(list.Items, item)
-		}
-	}
-	return list, err
-}
-
-// Watch returns a watch.Interface that watches the requested listenerSets.
-func (c *FakeListenerSets) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
-	return c.Fake.
-		InvokesWatch(testing.NewWatchActionWithOptions(listenersetsResource, c.ns, opts))
-
-}
-
-// Create takes the representation of a listenerSet and creates it.  Returns the server's representation of the listenerSet, and an error, if there is any.
-func (c *FakeListenerSets) Create(ctx context.Context, listenerSet *v1alpha1.ListenerSet, opts v1.CreateOptions) (result *v1alpha1.ListenerSet, err error) {
-	emptyResult := &v1alpha1.ListenerSet{}
-	obj, err := c.Fake.
-		Invokes(testing.NewCreateActionWithOptions(listenersetsResource, c.ns, listenerSet, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha1.ListenerSet), err
-}
-
-// Update takes the representation of a listenerSet and updates it. Returns the server's representation of the listenerSet, and an error, if there is any.
-func (c *FakeListenerSets) Update(ctx context.Context, listenerSet *v1alpha1.ListenerSet, opts v1.UpdateOptions) (result *v1alpha1.ListenerSet, err error) {
-	emptyResult := &v1alpha1.ListenerSet{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateActionWithOptions(listenersetsResource, c.ns, listenerSet, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha1.ListenerSet), err
-}
-
-// UpdateStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-func (c *FakeListenerSets) UpdateStatus(ctx context.Context, listenerSet *v1alpha1.ListenerSet, opts v1.UpdateOptions) (result *v1alpha1.ListenerSet, err error) {
-	emptyResult := &v1alpha1.ListenerSet{}
-	obj, err := c.Fake.
-		Invokes(testing.NewUpdateSubresourceActionWithOptions(listenersetsResource, "status", c.ns, listenerSet, opts), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha1.ListenerSet), err
-}
-
-// Delete takes name of the listenerSet and deletes it. Returns an error if one occurs.
-func (c *FakeListenerSets) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
-	_, err := c.Fake.
-		Invokes(testing.NewDeleteActionWithOptions(listenersetsResource, c.ns, name, opts), &v1alpha1.ListenerSet{})
-
-	return err
-}
-
-// DeleteCollection deletes a collection of objects.
-func (c *FakeListenerSets) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
-	action := testing.NewDeleteCollectionActionWithOptions(listenersetsResource, c.ns, opts, listOpts)
-
-	_, err := c.Fake.Invokes(action, &v1alpha1.ListenerSetList{})
-	return err
-}
-
-// Patch applies the patch and returns the patched listenerSet.
-func (c *FakeListenerSets) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ListenerSet, err error) {
-	emptyResult := &v1alpha1.ListenerSet{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(listenersetsResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha1.ListenerSet), err
-}
-
-// Apply takes the given apply declarative configuration, applies it and returns the applied listenerSet.
-func (c *FakeListenerSets) Apply(ctx context.Context, listenerSet *apisxv1alpha1.ListenerSetApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.ListenerSet, err error) {
-	if listenerSet == nil {
-		return nil, fmt.Errorf("listenerSet provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(listenerSet)
-	if err != nil {
-		return nil, err
-	}
-	name := listenerSet.Name
-	if name == nil {
-		return nil, fmt.Errorf("listenerSet.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha1.ListenerSet{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(listenersetsResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions()), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha1.ListenerSet), err
-}
-
-// ApplyStatus was generated because the type contains a Status member.
-// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-func (c *FakeListenerSets) ApplyStatus(ctx context.Context, listenerSet *apisxv1alpha1.ListenerSetApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.ListenerSet, err error) {
-	if listenerSet == nil {
-		return nil, fmt.Errorf("listenerSet provided to Apply must not be nil")
-	}
-	data, err := json.Marshal(listenerSet)
-	if err != nil {
-		return nil, err
-	}
-	name := listenerSet.Name
-	if name == nil {
-		return nil, fmt.Errorf("listenerSet.Name must be provided to Apply")
-	}
-	emptyResult := &v1alpha1.ListenerSet{}
-	obj, err := c.Fake.
-		Invokes(testing.NewPatchSubresourceActionWithOptions(listenersetsResource, c.ns, *name, types.ApplyPatchType, data, opts.ToPatchOptions(), "status"), emptyResult)
-
-	if obj == nil {
-		return emptyResult, err
-	}
-	return obj.(*v1alpha1.ListenerSet), err
-}
diff --git a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_xbackendtrafficpolicy.go b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_xbackendtrafficpolicy.go
new file mode 100644
index 00000000..2418d4db
--- /dev/null
+++ b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_xbackendtrafficpolicy.go
@@ -0,0 +1,53 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package fake
+
+import (
+	gentype "k8s.io/client-go/gentype"
+	v1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
+	apisxv1alpha1 "sigs.k8s.io/gateway-api/applyconfiguration/apisx/v1alpha1"
+	typedapisxv1alpha1 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apisx/v1alpha1"
+)
+
+// fakeXBackendTrafficPolicies implements XBackendTrafficPolicyInterface
+type fakeXBackendTrafficPolicies struct {
+	*gentype.FakeClientWithListAndApply[*v1alpha1.XBackendTrafficPolicy, *v1alpha1.XBackendTrafficPolicyList, *apisxv1alpha1.XBackendTrafficPolicyApplyConfiguration]
+	Fake *FakeExperimentalV1alpha1
+}
+
+func newFakeXBackendTrafficPolicies(fake *FakeExperimentalV1alpha1, namespace string) typedapisxv1alpha1.XBackendTrafficPolicyInterface {
+	return &fakeXBackendTrafficPolicies{
+		gentype.NewFakeClientWithListAndApply[*v1alpha1.XBackendTrafficPolicy, *v1alpha1.XBackendTrafficPolicyList, *apisxv1alpha1.XBackendTrafficPolicyApplyConfiguration](
+			fake.Fake,
+			namespace,
+			v1alpha1.SchemeGroupVersion.WithResource("xbackendtrafficpolicies"),
+			v1alpha1.SchemeGroupVersion.WithKind("XBackendTrafficPolicy"),
+			func() *v1alpha1.XBackendTrafficPolicy { return &v1alpha1.XBackendTrafficPolicy{} },
+			func() *v1alpha1.XBackendTrafficPolicyList { return &v1alpha1.XBackendTrafficPolicyList{} },
+			func(dst, src *v1alpha1.XBackendTrafficPolicyList) { dst.ListMeta = src.ListMeta },
+			func(list *v1alpha1.XBackendTrafficPolicyList) []*v1alpha1.XBackendTrafficPolicy {
+				return gentype.ToPointerSlice(list.Items)
+			},
+			func(list *v1alpha1.XBackendTrafficPolicyList, items []*v1alpha1.XBackendTrafficPolicy) {
+				list.Items = gentype.FromPointerSlice(items)
+			},
+		),
+		fake,
+	}
+}
diff --git a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_xlistenerset.go b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_xlistenerset.go
new file mode 100644
index 00000000..0c595fc0
--- /dev/null
+++ b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/fake/fake_xlistenerset.go
@@ -0,0 +1,53 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package fake
+
+import (
+	gentype "k8s.io/client-go/gentype"
+	v1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
+	apisxv1alpha1 "sigs.k8s.io/gateway-api/applyconfiguration/apisx/v1alpha1"
+	typedapisxv1alpha1 "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/typed/apisx/v1alpha1"
+)
+
+// fakeXListenerSets implements XListenerSetInterface
+type fakeXListenerSets struct {
+	*gentype.FakeClientWithListAndApply[*v1alpha1.XListenerSet, *v1alpha1.XListenerSetList, *apisxv1alpha1.XListenerSetApplyConfiguration]
+	Fake *FakeExperimentalV1alpha1
+}
+
+func newFakeXListenerSets(fake *FakeExperimentalV1alpha1, namespace string) typedapisxv1alpha1.XListenerSetInterface {
+	return &fakeXListenerSets{
+		gentype.NewFakeClientWithListAndApply[*v1alpha1.XListenerSet, *v1alpha1.XListenerSetList, *apisxv1alpha1.XListenerSetApplyConfiguration](
+			fake.Fake,
+			namespace,
+			v1alpha1.SchemeGroupVersion.WithResource("xlistenersets"),
+			v1alpha1.SchemeGroupVersion.WithKind("XListenerSet"),
+			func() *v1alpha1.XListenerSet { return &v1alpha1.XListenerSet{} },
+			func() *v1alpha1.XListenerSetList { return &v1alpha1.XListenerSetList{} },
+			func(dst, src *v1alpha1.XListenerSetList) { dst.ListMeta = src.ListMeta },
+			func(list *v1alpha1.XListenerSetList) []*v1alpha1.XListenerSet {
+				return gentype.ToPointerSlice(list.Items)
+			},
+			func(list *v1alpha1.XListenerSetList, items []*v1alpha1.XListenerSet) {
+				list.Items = gentype.FromPointerSlice(items)
+			},
+		),
+		fake,
+	}
+}
diff --git a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/generated_expansion.go b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/generated_expansion.go
index ad8c5e14..bf328780 100644
--- a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/generated_expansion.go
+++ b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/generated_expansion.go
@@ -18,6 +18,6 @@ limitations under the License.
 
 package v1alpha1
 
-type BackendTrafficPolicyExpansion interface{}
+type XBackendTrafficPolicyExpansion interface{}
 
-type ListenerSetExpansion interface{}
+type XListenerSetExpansion interface{}
diff --git a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/listenerset.go b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/listenerset.go
deleted file mode 100644
index c383f147..00000000
--- a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/listenerset.go
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by client-gen. DO NOT EDIT.
-
-package v1alpha1
-
-import (
-	"context"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	types "k8s.io/apimachinery/pkg/types"
-	watch "k8s.io/apimachinery/pkg/watch"
-	gentype "k8s.io/client-go/gentype"
-	v1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
-	apisxv1alpha1 "sigs.k8s.io/gateway-api/applyconfiguration/apisx/v1alpha1"
-	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
-)
-
-// ListenerSetsGetter has a method to return a ListenerSetInterface.
-// A group's client should implement this interface.
-type ListenerSetsGetter interface {
-	ListenerSets(namespace string) ListenerSetInterface
-}
-
-// ListenerSetInterface has methods to work with ListenerSet resources.
-type ListenerSetInterface interface {
-	Create(ctx context.Context, listenerSet *v1alpha1.ListenerSet, opts v1.CreateOptions) (*v1alpha1.ListenerSet, error)
-	Update(ctx context.Context, listenerSet *v1alpha1.ListenerSet, opts v1.UpdateOptions) (*v1alpha1.ListenerSet, error)
-	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
-	UpdateStatus(ctx context.Context, listenerSet *v1alpha1.ListenerSet, opts v1.UpdateOptions) (*v1alpha1.ListenerSet, error)
-	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
-	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
-	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.ListenerSet, error)
-	List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.ListenerSetList, error)
-	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
-	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ListenerSet, err error)
-	Apply(ctx context.Context, listenerSet *apisxv1alpha1.ListenerSetApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.ListenerSet, err error)
-	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
-	ApplyStatus(ctx context.Context, listenerSet *apisxv1alpha1.ListenerSetApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.ListenerSet, err error)
-	ListenerSetExpansion
-}
-
-// listenerSets implements ListenerSetInterface
-type listenerSets struct {
-	*gentype.ClientWithListAndApply[*v1alpha1.ListenerSet, *v1alpha1.ListenerSetList, *apisxv1alpha1.ListenerSetApplyConfiguration]
-}
-
-// newListenerSets returns a ListenerSets
-func newListenerSets(c *ExperimentalV1alpha1Client, namespace string) *listenerSets {
-	return &listenerSets{
-		gentype.NewClientWithListAndApply[*v1alpha1.ListenerSet, *v1alpha1.ListenerSetList, *apisxv1alpha1.ListenerSetApplyConfiguration](
-			"listenersets",
-			c.RESTClient(),
-			scheme.ParameterCodec,
-			namespace,
-			func() *v1alpha1.ListenerSet { return &v1alpha1.ListenerSet{} },
-			func() *v1alpha1.ListenerSetList { return &v1alpha1.ListenerSetList{} }),
-	}
-}
diff --git a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/xbackendtrafficpolicy.go b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/xbackendtrafficpolicy.go
new file mode 100644
index 00000000..e27b8fb4
--- /dev/null
+++ b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/xbackendtrafficpolicy.go
@@ -0,0 +1,74 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+	context "context"
+
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	types "k8s.io/apimachinery/pkg/types"
+	watch "k8s.io/apimachinery/pkg/watch"
+	gentype "k8s.io/client-go/gentype"
+	apisxv1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
+	applyconfigurationapisxv1alpha1 "sigs.k8s.io/gateway-api/applyconfiguration/apisx/v1alpha1"
+	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
+)
+
+// XBackendTrafficPoliciesGetter has a method to return a XBackendTrafficPolicyInterface.
+// A group's client should implement this interface.
+type XBackendTrafficPoliciesGetter interface {
+	XBackendTrafficPolicies(namespace string) XBackendTrafficPolicyInterface
+}
+
+// XBackendTrafficPolicyInterface has methods to work with XBackendTrafficPolicy resources.
+type XBackendTrafficPolicyInterface interface {
+	Create(ctx context.Context, xBackendTrafficPolicy *apisxv1alpha1.XBackendTrafficPolicy, opts v1.CreateOptions) (*apisxv1alpha1.XBackendTrafficPolicy, error)
+	Update(ctx context.Context, xBackendTrafficPolicy *apisxv1alpha1.XBackendTrafficPolicy, opts v1.UpdateOptions) (*apisxv1alpha1.XBackendTrafficPolicy, error)
+	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
+	UpdateStatus(ctx context.Context, xBackendTrafficPolicy *apisxv1alpha1.XBackendTrafficPolicy, opts v1.UpdateOptions) (*apisxv1alpha1.XBackendTrafficPolicy, error)
+	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
+	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*apisxv1alpha1.XBackendTrafficPolicy, error)
+	List(ctx context.Context, opts v1.ListOptions) (*apisxv1alpha1.XBackendTrafficPolicyList, error)
+	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *apisxv1alpha1.XBackendTrafficPolicy, err error)
+	Apply(ctx context.Context, xBackendTrafficPolicy *applyconfigurationapisxv1alpha1.XBackendTrafficPolicyApplyConfiguration, opts v1.ApplyOptions) (result *apisxv1alpha1.XBackendTrafficPolicy, err error)
+	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
+	ApplyStatus(ctx context.Context, xBackendTrafficPolicy *applyconfigurationapisxv1alpha1.XBackendTrafficPolicyApplyConfiguration, opts v1.ApplyOptions) (result *apisxv1alpha1.XBackendTrafficPolicy, err error)
+	XBackendTrafficPolicyExpansion
+}
+
+// xBackendTrafficPolicies implements XBackendTrafficPolicyInterface
+type xBackendTrafficPolicies struct {
+	*gentype.ClientWithListAndApply[*apisxv1alpha1.XBackendTrafficPolicy, *apisxv1alpha1.XBackendTrafficPolicyList, *applyconfigurationapisxv1alpha1.XBackendTrafficPolicyApplyConfiguration]
+}
+
+// newXBackendTrafficPolicies returns a XBackendTrafficPolicies
+func newXBackendTrafficPolicies(c *ExperimentalV1alpha1Client, namespace string) *xBackendTrafficPolicies {
+	return &xBackendTrafficPolicies{
+		gentype.NewClientWithListAndApply[*apisxv1alpha1.XBackendTrafficPolicy, *apisxv1alpha1.XBackendTrafficPolicyList, *applyconfigurationapisxv1alpha1.XBackendTrafficPolicyApplyConfiguration](
+			"xbackendtrafficpolicies",
+			c.RESTClient(),
+			scheme.ParameterCodec,
+			namespace,
+			func() *apisxv1alpha1.XBackendTrafficPolicy { return &apisxv1alpha1.XBackendTrafficPolicy{} },
+			func() *apisxv1alpha1.XBackendTrafficPolicyList { return &apisxv1alpha1.XBackendTrafficPolicyList{} },
+		),
+	}
+}
diff --git a/pkg/client/clientset/versioned/typed/apisx/v1alpha1/xlistenerset.go b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/xlistenerset.go
new file mode 100644
index 00000000..1ad3ba96
--- /dev/null
+++ b/pkg/client/clientset/versioned/typed/apisx/v1alpha1/xlistenerset.go
@@ -0,0 +1,74 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+	context "context"
+
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	types "k8s.io/apimachinery/pkg/types"
+	watch "k8s.io/apimachinery/pkg/watch"
+	gentype "k8s.io/client-go/gentype"
+	apisxv1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
+	applyconfigurationapisxv1alpha1 "sigs.k8s.io/gateway-api/applyconfiguration/apisx/v1alpha1"
+	scheme "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/scheme"
+)
+
+// XListenerSetsGetter has a method to return a XListenerSetInterface.
+// A group's client should implement this interface.
+type XListenerSetsGetter interface {
+	XListenerSets(namespace string) XListenerSetInterface
+}
+
+// XListenerSetInterface has methods to work with XListenerSet resources.
+type XListenerSetInterface interface {
+	Create(ctx context.Context, xListenerSet *apisxv1alpha1.XListenerSet, opts v1.CreateOptions) (*apisxv1alpha1.XListenerSet, error)
+	Update(ctx context.Context, xListenerSet *apisxv1alpha1.XListenerSet, opts v1.UpdateOptions) (*apisxv1alpha1.XListenerSet, error)
+	// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
+	UpdateStatus(ctx context.Context, xListenerSet *apisxv1alpha1.XListenerSet, opts v1.UpdateOptions) (*apisxv1alpha1.XListenerSet, error)
+	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
+	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*apisxv1alpha1.XListenerSet, error)
+	List(ctx context.Context, opts v1.ListOptions) (*apisxv1alpha1.XListenerSetList, error)
+	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *apisxv1alpha1.XListenerSet, err error)
+	Apply(ctx context.Context, xListenerSet *applyconfigurationapisxv1alpha1.XListenerSetApplyConfiguration, opts v1.ApplyOptions) (result *apisxv1alpha1.XListenerSet, err error)
+	// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
+	ApplyStatus(ctx context.Context, xListenerSet *applyconfigurationapisxv1alpha1.XListenerSetApplyConfiguration, opts v1.ApplyOptions) (result *apisxv1alpha1.XListenerSet, err error)
+	XListenerSetExpansion
+}
+
+// xListenerSets implements XListenerSetInterface
+type xListenerSets struct {
+	*gentype.ClientWithListAndApply[*apisxv1alpha1.XListenerSet, *apisxv1alpha1.XListenerSetList, *applyconfigurationapisxv1alpha1.XListenerSetApplyConfiguration]
+}
+
+// newXListenerSets returns a XListenerSets
+func newXListenerSets(c *ExperimentalV1alpha1Client, namespace string) *xListenerSets {
+	return &xListenerSets{
+		gentype.NewClientWithListAndApply[*apisxv1alpha1.XListenerSet, *apisxv1alpha1.XListenerSetList, *applyconfigurationapisxv1alpha1.XListenerSetApplyConfiguration](
+			"xlistenersets",
+			c.RESTClient(),
+			scheme.ParameterCodec,
+			namespace,
+			func() *apisxv1alpha1.XListenerSet { return &apisxv1alpha1.XListenerSet{} },
+			func() *apisxv1alpha1.XListenerSetList { return &apisxv1alpha1.XListenerSetList{} },
+		),
+	}
+}
diff --git a/pkg/client/informers/externalversions/apis/v1/gateway.go b/pkg/client/informers/externalversions/apis/v1/gateway.go
index 640db805..6884889e 100644
--- a/pkg/client/informers/externalversions/apis/v1/gateway.go
+++ b/pkg/client/informers/externalversions/apis/v1/gateway.go
@@ -19,24 +19,24 @@ limitations under the License.
 package v1
 
 import (
-	"context"
+	context "context"
 	time "time"
 
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 	watch "k8s.io/apimachinery/pkg/watch"
 	cache "k8s.io/client-go/tools/cache"
-	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
+	gatewayapiapisv1 "sigs.k8s.io/gateway-api/apis/v1"
 	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
 	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1"
 )
 
 // GatewayInformer provides access to a shared informer and lister for
 // Gateways.
 type GatewayInformer interface {
 	Informer() cache.SharedIndexInformer
-	Lister() v1.GatewayLister
+	Lister() apisv1.GatewayLister
 }
 
 type gatewayInformer struct {
@@ -62,16 +62,28 @@ func NewFilteredGatewayInformer(client versioned.Interface, namespace string, re
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1().Gateways(namespace).List(context.TODO(), options)
+				return client.GatewayV1().Gateways(namespace).List(context.Background(), options)
 			},
 			WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1().Gateways(namespace).Watch(context.TODO(), options)
+				return client.GatewayV1().Gateways(namespace).Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1().Gateways(namespace).List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1().Gateways(namespace).Watch(ctx, options)
 			},
 		},
-		&apisv1.Gateway{},
+		&gatewayapiapisv1.Gateway{},
 		resyncPeriod,
 		indexers,
 	)
@@ -82,9 +94,9 @@ func (f *gatewayInformer) defaultInformer(client versioned.Interface, resyncPeri
 }
 
 func (f *gatewayInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisv1.Gateway{}, f.defaultInformer)
+	return f.factory.InformerFor(&gatewayapiapisv1.Gateway{}, f.defaultInformer)
 }
 
-func (f *gatewayInformer) Lister() v1.GatewayLister {
-	return v1.NewGatewayLister(f.Informer().GetIndexer())
+func (f *gatewayInformer) Lister() apisv1.GatewayLister {
+	return apisv1.NewGatewayLister(f.Informer().GetIndexer())
 }
diff --git a/pkg/client/informers/externalversions/apis/v1/gatewayclass.go b/pkg/client/informers/externalversions/apis/v1/gatewayclass.go
index 4b2a2577..f601378b 100644
--- a/pkg/client/informers/externalversions/apis/v1/gatewayclass.go
+++ b/pkg/client/informers/externalversions/apis/v1/gatewayclass.go
@@ -19,24 +19,24 @@ limitations under the License.
 package v1
 
 import (
-	"context"
+	context "context"
 	time "time"
 
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 	watch "k8s.io/apimachinery/pkg/watch"
 	cache "k8s.io/client-go/tools/cache"
-	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
+	gatewayapiapisv1 "sigs.k8s.io/gateway-api/apis/v1"
 	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
 	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1"
 )
 
 // GatewayClassInformer provides access to a shared informer and lister for
 // GatewayClasses.
 type GatewayClassInformer interface {
 	Informer() cache.SharedIndexInformer
-	Lister() v1.GatewayClassLister
+	Lister() apisv1.GatewayClassLister
 }
 
 type gatewayClassInformer struct {
@@ -61,16 +61,28 @@ func NewFilteredGatewayClassInformer(client versioned.Interface, resyncPeriod ti
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1().GatewayClasses().List(context.TODO(), options)
+				return client.GatewayV1().GatewayClasses().List(context.Background(), options)
 			},
 			WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1().GatewayClasses().Watch(context.TODO(), options)
+				return client.GatewayV1().GatewayClasses().Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1().GatewayClasses().List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1().GatewayClasses().Watch(ctx, options)
 			},
 		},
-		&apisv1.GatewayClass{},
+		&gatewayapiapisv1.GatewayClass{},
 		resyncPeriod,
 		indexers,
 	)
@@ -81,9 +93,9 @@ func (f *gatewayClassInformer) defaultInformer(client versioned.Interface, resyn
 }
 
 func (f *gatewayClassInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisv1.GatewayClass{}, f.defaultInformer)
+	return f.factory.InformerFor(&gatewayapiapisv1.GatewayClass{}, f.defaultInformer)
 }
 
-func (f *gatewayClassInformer) Lister() v1.GatewayClassLister {
-	return v1.NewGatewayClassLister(f.Informer().GetIndexer())
+func (f *gatewayClassInformer) Lister() apisv1.GatewayClassLister {
+	return apisv1.NewGatewayClassLister(f.Informer().GetIndexer())
 }
diff --git a/pkg/client/informers/externalversions/apis/v1/grpcroute.go b/pkg/client/informers/externalversions/apis/v1/grpcroute.go
index f27004eb..34fb7351 100644
--- a/pkg/client/informers/externalversions/apis/v1/grpcroute.go
+++ b/pkg/client/informers/externalversions/apis/v1/grpcroute.go
@@ -19,24 +19,24 @@ limitations under the License.
 package v1
 
 import (
-	"context"
+	context "context"
 	time "time"
 
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 	watch "k8s.io/apimachinery/pkg/watch"
 	cache "k8s.io/client-go/tools/cache"
-	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
+	gatewayapiapisv1 "sigs.k8s.io/gateway-api/apis/v1"
 	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
 	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1"
 )
 
 // GRPCRouteInformer provides access to a shared informer and lister for
 // GRPCRoutes.
 type GRPCRouteInformer interface {
 	Informer() cache.SharedIndexInformer
-	Lister() v1.GRPCRouteLister
+	Lister() apisv1.GRPCRouteLister
 }
 
 type gRPCRouteInformer struct {
@@ -62,16 +62,28 @@ func NewFilteredGRPCRouteInformer(client versioned.Interface, namespace string,
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1().GRPCRoutes(namespace).List(context.TODO(), options)
+				return client.GatewayV1().GRPCRoutes(namespace).List(context.Background(), options)
 			},
 			WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1().GRPCRoutes(namespace).Watch(context.TODO(), options)
+				return client.GatewayV1().GRPCRoutes(namespace).Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1().GRPCRoutes(namespace).List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1().GRPCRoutes(namespace).Watch(ctx, options)
 			},
 		},
-		&apisv1.GRPCRoute{},
+		&gatewayapiapisv1.GRPCRoute{},
 		resyncPeriod,
 		indexers,
 	)
@@ -82,9 +94,9 @@ func (f *gRPCRouteInformer) defaultInformer(client versioned.Interface, resyncPe
 }
 
 func (f *gRPCRouteInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisv1.GRPCRoute{}, f.defaultInformer)
+	return f.factory.InformerFor(&gatewayapiapisv1.GRPCRoute{}, f.defaultInformer)
 }
 
-func (f *gRPCRouteInformer) Lister() v1.GRPCRouteLister {
-	return v1.NewGRPCRouteLister(f.Informer().GetIndexer())
+func (f *gRPCRouteInformer) Lister() apisv1.GRPCRouteLister {
+	return apisv1.NewGRPCRouteLister(f.Informer().GetIndexer())
 }
diff --git a/pkg/client/informers/externalversions/apis/v1/httproute.go b/pkg/client/informers/externalversions/apis/v1/httproute.go
index 92140431..06da9dae 100644
--- a/pkg/client/informers/externalversions/apis/v1/httproute.go
+++ b/pkg/client/informers/externalversions/apis/v1/httproute.go
@@ -19,24 +19,24 @@ limitations under the License.
 package v1
 
 import (
-	"context"
+	context "context"
 	time "time"
 
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 	watch "k8s.io/apimachinery/pkg/watch"
 	cache "k8s.io/client-go/tools/cache"
-	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
+	gatewayapiapisv1 "sigs.k8s.io/gateway-api/apis/v1"
 	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
 	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1"
+	apisv1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1"
 )
 
 // HTTPRouteInformer provides access to a shared informer and lister for
 // HTTPRoutes.
 type HTTPRouteInformer interface {
 	Informer() cache.SharedIndexInformer
-	Lister() v1.HTTPRouteLister
+	Lister() apisv1.HTTPRouteLister
 }
 
 type hTTPRouteInformer struct {
@@ -62,16 +62,28 @@ func NewFilteredHTTPRouteInformer(client versioned.Interface, namespace string,
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1().HTTPRoutes(namespace).List(context.TODO(), options)
+				return client.GatewayV1().HTTPRoutes(namespace).List(context.Background(), options)
 			},
 			WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1().HTTPRoutes(namespace).Watch(context.TODO(), options)
+				return client.GatewayV1().HTTPRoutes(namespace).Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1().HTTPRoutes(namespace).List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1().HTTPRoutes(namespace).Watch(ctx, options)
 			},
 		},
-		&apisv1.HTTPRoute{},
+		&gatewayapiapisv1.HTTPRoute{},
 		resyncPeriod,
 		indexers,
 	)
@@ -82,9 +94,9 @@ func (f *hTTPRouteInformer) defaultInformer(client versioned.Interface, resyncPe
 }
 
 func (f *hTTPRouteInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisv1.HTTPRoute{}, f.defaultInformer)
+	return f.factory.InformerFor(&gatewayapiapisv1.HTTPRoute{}, f.defaultInformer)
 }
 
-func (f *hTTPRouteInformer) Lister() v1.HTTPRouteLister {
-	return v1.NewHTTPRouteLister(f.Informer().GetIndexer())
+func (f *hTTPRouteInformer) Lister() apisv1.HTTPRouteLister {
+	return apisv1.NewHTTPRouteLister(f.Informer().GetIndexer())
 }
diff --git a/pkg/client/informers/externalversions/apis/v1alpha2/backendlbpolicy.go b/pkg/client/informers/externalversions/apis/v1alpha2/backendlbpolicy.go
deleted file mode 100644
index e5cdbe7c..00000000
--- a/pkg/client/informers/externalversions/apis/v1alpha2/backendlbpolicy.go
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package v1alpha2
-
-import (
-	"context"
-	time "time"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	runtime "k8s.io/apimachinery/pkg/runtime"
-	watch "k8s.io/apimachinery/pkg/watch"
-	cache "k8s.io/client-go/tools/cache"
-	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
-	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1alpha2 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1alpha2"
-)
-
-// BackendLBPolicyInformer provides access to a shared informer and lister for
-// BackendLBPolicies.
-type BackendLBPolicyInformer interface {
-	Informer() cache.SharedIndexInformer
-	Lister() v1alpha2.BackendLBPolicyLister
-}
-
-type backendLBPolicyInformer struct {
-	factory          internalinterfaces.SharedInformerFactory
-	tweakListOptions internalinterfaces.TweakListOptionsFunc
-	namespace        string
-}
-
-// NewBackendLBPolicyInformer constructs a new informer for BackendLBPolicy type.
-// Always prefer using an informer factory to get a shared informer instead of getting an independent
-// one. This reduces memory footprint and number of connections to the server.
-func NewBackendLBPolicyInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
-	return NewFilteredBackendLBPolicyInformer(client, namespace, resyncPeriod, indexers, nil)
-}
-
-// NewFilteredBackendLBPolicyInformer constructs a new informer for BackendLBPolicy type.
-// Always prefer using an informer factory to get a shared informer instead of getting an independent
-// one. This reduces memory footprint and number of connections to the server.
-func NewFilteredBackendLBPolicyInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
-	return cache.NewSharedIndexInformer(
-		&cache.ListWatch{
-			ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
-				if tweakListOptions != nil {
-					tweakListOptions(&options)
-				}
-				return client.GatewayV1alpha2().BackendLBPolicies(namespace).List(context.TODO(), options)
-			},
-			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
-				if tweakListOptions != nil {
-					tweakListOptions(&options)
-				}
-				return client.GatewayV1alpha2().BackendLBPolicies(namespace).Watch(context.TODO(), options)
-			},
-		},
-		&apisv1alpha2.BackendLBPolicy{},
-		resyncPeriod,
-		indexers,
-	)
-}
-
-func (f *backendLBPolicyInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
-	return NewFilteredBackendLBPolicyInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
-}
-
-func (f *backendLBPolicyInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisv1alpha2.BackendLBPolicy{}, f.defaultInformer)
-}
-
-func (f *backendLBPolicyInformer) Lister() v1alpha2.BackendLBPolicyLister {
-	return v1alpha2.NewBackendLBPolicyLister(f.Informer().GetIndexer())
-}
diff --git a/pkg/client/informers/externalversions/apis/v1alpha2/grpcroute.go b/pkg/client/informers/externalversions/apis/v1alpha2/grpcroute.go
index d7360bdb..cda505ce 100644
--- a/pkg/client/informers/externalversions/apis/v1alpha2/grpcroute.go
+++ b/pkg/client/informers/externalversions/apis/v1alpha2/grpcroute.go
@@ -19,24 +19,24 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"context"
+	context "context"
 	time "time"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 	watch "k8s.io/apimachinery/pkg/watch"
 	cache "k8s.io/client-go/tools/cache"
-	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	gatewayapiapisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
 	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1alpha2 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1alpha2"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1alpha2"
 )
 
 // GRPCRouteInformer provides access to a shared informer and lister for
 // GRPCRoutes.
 type GRPCRouteInformer interface {
 	Informer() cache.SharedIndexInformer
-	Lister() v1alpha2.GRPCRouteLister
+	Lister() apisv1alpha2.GRPCRouteLister
 }
 
 type gRPCRouteInformer struct {
@@ -62,16 +62,28 @@ func NewFilteredGRPCRouteInformer(client versioned.Interface, namespace string,
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1alpha2().GRPCRoutes(namespace).List(context.TODO(), options)
+				return client.GatewayV1alpha2().GRPCRoutes(namespace).List(context.Background(), options)
 			},
 			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1alpha2().GRPCRoutes(namespace).Watch(context.TODO(), options)
+				return client.GatewayV1alpha2().GRPCRoutes(namespace).Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1alpha2().GRPCRoutes(namespace).List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1alpha2().GRPCRoutes(namespace).Watch(ctx, options)
 			},
 		},
-		&apisv1alpha2.GRPCRoute{},
+		&gatewayapiapisv1alpha2.GRPCRoute{},
 		resyncPeriod,
 		indexers,
 	)
@@ -82,9 +94,9 @@ func (f *gRPCRouteInformer) defaultInformer(client versioned.Interface, resyncPe
 }
 
 func (f *gRPCRouteInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisv1alpha2.GRPCRoute{}, f.defaultInformer)
+	return f.factory.InformerFor(&gatewayapiapisv1alpha2.GRPCRoute{}, f.defaultInformer)
 }
 
-func (f *gRPCRouteInformer) Lister() v1alpha2.GRPCRouteLister {
-	return v1alpha2.NewGRPCRouteLister(f.Informer().GetIndexer())
+func (f *gRPCRouteInformer) Lister() apisv1alpha2.GRPCRouteLister {
+	return apisv1alpha2.NewGRPCRouteLister(f.Informer().GetIndexer())
 }
diff --git a/pkg/client/informers/externalversions/apis/v1alpha2/interface.go b/pkg/client/informers/externalversions/apis/v1alpha2/interface.go
index 8f21c3d8..9e5c505d 100644
--- a/pkg/client/informers/externalversions/apis/v1alpha2/interface.go
+++ b/pkg/client/informers/externalversions/apis/v1alpha2/interface.go
@@ -24,8 +24,6 @@ import (
 
 // Interface provides access to all the informers in this group version.
 type Interface interface {
-	// BackendLBPolicies returns a BackendLBPolicyInformer.
-	BackendLBPolicies() BackendLBPolicyInformer
 	// GRPCRoutes returns a GRPCRouteInformer.
 	GRPCRoutes() GRPCRouteInformer
 	// ReferenceGrants returns a ReferenceGrantInformer.
@@ -49,11 +47,6 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList
 	return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
 }
 
-// BackendLBPolicies returns a BackendLBPolicyInformer.
-func (v *version) BackendLBPolicies() BackendLBPolicyInformer {
-	return &backendLBPolicyInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
-}
-
 // GRPCRoutes returns a GRPCRouteInformer.
 func (v *version) GRPCRoutes() GRPCRouteInformer {
 	return &gRPCRouteInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
diff --git a/pkg/client/informers/externalversions/apis/v1alpha2/referencegrant.go b/pkg/client/informers/externalversions/apis/v1alpha2/referencegrant.go
index d7a91c43..8519c9eb 100644
--- a/pkg/client/informers/externalversions/apis/v1alpha2/referencegrant.go
+++ b/pkg/client/informers/externalversions/apis/v1alpha2/referencegrant.go
@@ -19,24 +19,24 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"context"
+	context "context"
 	time "time"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 	watch "k8s.io/apimachinery/pkg/watch"
 	cache "k8s.io/client-go/tools/cache"
-	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	gatewayapiapisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
 	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1alpha2 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1alpha2"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1alpha2"
 )
 
 // ReferenceGrantInformer provides access to a shared informer and lister for
 // ReferenceGrants.
 type ReferenceGrantInformer interface {
 	Informer() cache.SharedIndexInformer
-	Lister() v1alpha2.ReferenceGrantLister
+	Lister() apisv1alpha2.ReferenceGrantLister
 }
 
 type referenceGrantInformer struct {
@@ -62,16 +62,28 @@ func NewFilteredReferenceGrantInformer(client versioned.Interface, namespace str
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1alpha2().ReferenceGrants(namespace).List(context.TODO(), options)
+				return client.GatewayV1alpha2().ReferenceGrants(namespace).List(context.Background(), options)
 			},
 			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1alpha2().ReferenceGrants(namespace).Watch(context.TODO(), options)
+				return client.GatewayV1alpha2().ReferenceGrants(namespace).Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1alpha2().ReferenceGrants(namespace).List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1alpha2().ReferenceGrants(namespace).Watch(ctx, options)
 			},
 		},
-		&apisv1alpha2.ReferenceGrant{},
+		&gatewayapiapisv1alpha2.ReferenceGrant{},
 		resyncPeriod,
 		indexers,
 	)
@@ -82,9 +94,9 @@ func (f *referenceGrantInformer) defaultInformer(client versioned.Interface, res
 }
 
 func (f *referenceGrantInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisv1alpha2.ReferenceGrant{}, f.defaultInformer)
+	return f.factory.InformerFor(&gatewayapiapisv1alpha2.ReferenceGrant{}, f.defaultInformer)
 }
 
-func (f *referenceGrantInformer) Lister() v1alpha2.ReferenceGrantLister {
-	return v1alpha2.NewReferenceGrantLister(f.Informer().GetIndexer())
+func (f *referenceGrantInformer) Lister() apisv1alpha2.ReferenceGrantLister {
+	return apisv1alpha2.NewReferenceGrantLister(f.Informer().GetIndexer())
 }
diff --git a/pkg/client/informers/externalversions/apis/v1alpha2/tcproute.go b/pkg/client/informers/externalversions/apis/v1alpha2/tcproute.go
index 4a0c2b6c..da3c1292 100644
--- a/pkg/client/informers/externalversions/apis/v1alpha2/tcproute.go
+++ b/pkg/client/informers/externalversions/apis/v1alpha2/tcproute.go
@@ -19,24 +19,24 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"context"
+	context "context"
 	time "time"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 	watch "k8s.io/apimachinery/pkg/watch"
 	cache "k8s.io/client-go/tools/cache"
-	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	gatewayapiapisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
 	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1alpha2 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1alpha2"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1alpha2"
 )
 
 // TCPRouteInformer provides access to a shared informer and lister for
 // TCPRoutes.
 type TCPRouteInformer interface {
 	Informer() cache.SharedIndexInformer
-	Lister() v1alpha2.TCPRouteLister
+	Lister() apisv1alpha2.TCPRouteLister
 }
 
 type tCPRouteInformer struct {
@@ -62,16 +62,28 @@ func NewFilteredTCPRouteInformer(client versioned.Interface, namespace string, r
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1alpha2().TCPRoutes(namespace).List(context.TODO(), options)
+				return client.GatewayV1alpha2().TCPRoutes(namespace).List(context.Background(), options)
 			},
 			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1alpha2().TCPRoutes(namespace).Watch(context.TODO(), options)
+				return client.GatewayV1alpha2().TCPRoutes(namespace).Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1alpha2().TCPRoutes(namespace).List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1alpha2().TCPRoutes(namespace).Watch(ctx, options)
 			},
 		},
-		&apisv1alpha2.TCPRoute{},
+		&gatewayapiapisv1alpha2.TCPRoute{},
 		resyncPeriod,
 		indexers,
 	)
@@ -82,9 +94,9 @@ func (f *tCPRouteInformer) defaultInformer(client versioned.Interface, resyncPer
 }
 
 func (f *tCPRouteInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisv1alpha2.TCPRoute{}, f.defaultInformer)
+	return f.factory.InformerFor(&gatewayapiapisv1alpha2.TCPRoute{}, f.defaultInformer)
 }
 
-func (f *tCPRouteInformer) Lister() v1alpha2.TCPRouteLister {
-	return v1alpha2.NewTCPRouteLister(f.Informer().GetIndexer())
+func (f *tCPRouteInformer) Lister() apisv1alpha2.TCPRouteLister {
+	return apisv1alpha2.NewTCPRouteLister(f.Informer().GetIndexer())
 }
diff --git a/pkg/client/informers/externalversions/apis/v1alpha2/tlsroute.go b/pkg/client/informers/externalversions/apis/v1alpha2/tlsroute.go
index 00eb0cb6..fbc9d1fe 100644
--- a/pkg/client/informers/externalversions/apis/v1alpha2/tlsroute.go
+++ b/pkg/client/informers/externalversions/apis/v1alpha2/tlsroute.go
@@ -19,24 +19,24 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"context"
+	context "context"
 	time "time"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 	watch "k8s.io/apimachinery/pkg/watch"
 	cache "k8s.io/client-go/tools/cache"
-	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	gatewayapiapisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
 	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1alpha2 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1alpha2"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1alpha2"
 )
 
 // TLSRouteInformer provides access to a shared informer and lister for
 // TLSRoutes.
 type TLSRouteInformer interface {
 	Informer() cache.SharedIndexInformer
-	Lister() v1alpha2.TLSRouteLister
+	Lister() apisv1alpha2.TLSRouteLister
 }
 
 type tLSRouteInformer struct {
@@ -62,16 +62,28 @@ func NewFilteredTLSRouteInformer(client versioned.Interface, namespace string, r
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1alpha2().TLSRoutes(namespace).List(context.TODO(), options)
+				return client.GatewayV1alpha2().TLSRoutes(namespace).List(context.Background(), options)
 			},
 			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1alpha2().TLSRoutes(namespace).Watch(context.TODO(), options)
+				return client.GatewayV1alpha2().TLSRoutes(namespace).Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1alpha2().TLSRoutes(namespace).List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1alpha2().TLSRoutes(namespace).Watch(ctx, options)
 			},
 		},
-		&apisv1alpha2.TLSRoute{},
+		&gatewayapiapisv1alpha2.TLSRoute{},
 		resyncPeriod,
 		indexers,
 	)
@@ -82,9 +94,9 @@ func (f *tLSRouteInformer) defaultInformer(client versioned.Interface, resyncPer
 }
 
 func (f *tLSRouteInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisv1alpha2.TLSRoute{}, f.defaultInformer)
+	return f.factory.InformerFor(&gatewayapiapisv1alpha2.TLSRoute{}, f.defaultInformer)
 }
 
-func (f *tLSRouteInformer) Lister() v1alpha2.TLSRouteLister {
-	return v1alpha2.NewTLSRouteLister(f.Informer().GetIndexer())
+func (f *tLSRouteInformer) Lister() apisv1alpha2.TLSRouteLister {
+	return apisv1alpha2.NewTLSRouteLister(f.Informer().GetIndexer())
 }
diff --git a/pkg/client/informers/externalversions/apis/v1alpha2/udproute.go b/pkg/client/informers/externalversions/apis/v1alpha2/udproute.go
index 2040c818..1eb0f23e 100644
--- a/pkg/client/informers/externalversions/apis/v1alpha2/udproute.go
+++ b/pkg/client/informers/externalversions/apis/v1alpha2/udproute.go
@@ -19,24 +19,24 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"context"
+	context "context"
 	time "time"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 	watch "k8s.io/apimachinery/pkg/watch"
 	cache "k8s.io/client-go/tools/cache"
-	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	gatewayapiapisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
 	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1alpha2 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1alpha2"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1alpha2"
 )
 
 // UDPRouteInformer provides access to a shared informer and lister for
 // UDPRoutes.
 type UDPRouteInformer interface {
 	Informer() cache.SharedIndexInformer
-	Lister() v1alpha2.UDPRouteLister
+	Lister() apisv1alpha2.UDPRouteLister
 }
 
 type uDPRouteInformer struct {
@@ -62,16 +62,28 @@ func NewFilteredUDPRouteInformer(client versioned.Interface, namespace string, r
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1alpha2().UDPRoutes(namespace).List(context.TODO(), options)
+				return client.GatewayV1alpha2().UDPRoutes(namespace).List(context.Background(), options)
 			},
 			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1alpha2().UDPRoutes(namespace).Watch(context.TODO(), options)
+				return client.GatewayV1alpha2().UDPRoutes(namespace).Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1alpha2().UDPRoutes(namespace).List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1alpha2().UDPRoutes(namespace).Watch(ctx, options)
 			},
 		},
-		&apisv1alpha2.UDPRoute{},
+		&gatewayapiapisv1alpha2.UDPRoute{},
 		resyncPeriod,
 		indexers,
 	)
@@ -82,9 +94,9 @@ func (f *uDPRouteInformer) defaultInformer(client versioned.Interface, resyncPer
 }
 
 func (f *uDPRouteInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisv1alpha2.UDPRoute{}, f.defaultInformer)
+	return f.factory.InformerFor(&gatewayapiapisv1alpha2.UDPRoute{}, f.defaultInformer)
 }
 
-func (f *uDPRouteInformer) Lister() v1alpha2.UDPRouteLister {
-	return v1alpha2.NewUDPRouteLister(f.Informer().GetIndexer())
+func (f *uDPRouteInformer) Lister() apisv1alpha2.UDPRouteLister {
+	return apisv1alpha2.NewUDPRouteLister(f.Informer().GetIndexer())
 }
diff --git a/pkg/client/informers/externalversions/apis/v1alpha3/backendtlspolicy.go b/pkg/client/informers/externalversions/apis/v1alpha3/backendtlspolicy.go
index 927db8da..933c815e 100644
--- a/pkg/client/informers/externalversions/apis/v1alpha3/backendtlspolicy.go
+++ b/pkg/client/informers/externalversions/apis/v1alpha3/backendtlspolicy.go
@@ -19,24 +19,24 @@ limitations under the License.
 package v1alpha3
 
 import (
-	"context"
+	context "context"
 	time "time"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 	watch "k8s.io/apimachinery/pkg/watch"
 	cache "k8s.io/client-go/tools/cache"
-	apisv1alpha3 "sigs.k8s.io/gateway-api/apis/v1alpha3"
+	gatewayapiapisv1alpha3 "sigs.k8s.io/gateway-api/apis/v1alpha3"
 	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
 	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1alpha3 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1alpha3"
+	apisv1alpha3 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1alpha3"
 )
 
 // BackendTLSPolicyInformer provides access to a shared informer and lister for
 // BackendTLSPolicies.
 type BackendTLSPolicyInformer interface {
 	Informer() cache.SharedIndexInformer
-	Lister() v1alpha3.BackendTLSPolicyLister
+	Lister() apisv1alpha3.BackendTLSPolicyLister
 }
 
 type backendTLSPolicyInformer struct {
@@ -62,16 +62,28 @@ func NewFilteredBackendTLSPolicyInformer(client versioned.Interface, namespace s
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1alpha3().BackendTLSPolicies(namespace).List(context.TODO(), options)
+				return client.GatewayV1alpha3().BackendTLSPolicies(namespace).List(context.Background(), options)
 			},
 			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1alpha3().BackendTLSPolicies(namespace).Watch(context.TODO(), options)
+				return client.GatewayV1alpha3().BackendTLSPolicies(namespace).Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1alpha3().BackendTLSPolicies(namespace).List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1alpha3().BackendTLSPolicies(namespace).Watch(ctx, options)
 			},
 		},
-		&apisv1alpha3.BackendTLSPolicy{},
+		&gatewayapiapisv1alpha3.BackendTLSPolicy{},
 		resyncPeriod,
 		indexers,
 	)
@@ -82,9 +94,9 @@ func (f *backendTLSPolicyInformer) defaultInformer(client versioned.Interface, r
 }
 
 func (f *backendTLSPolicyInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisv1alpha3.BackendTLSPolicy{}, f.defaultInformer)
+	return f.factory.InformerFor(&gatewayapiapisv1alpha3.BackendTLSPolicy{}, f.defaultInformer)
 }
 
-func (f *backendTLSPolicyInformer) Lister() v1alpha3.BackendTLSPolicyLister {
-	return v1alpha3.NewBackendTLSPolicyLister(f.Informer().GetIndexer())
+func (f *backendTLSPolicyInformer) Lister() apisv1alpha3.BackendTLSPolicyLister {
+	return apisv1alpha3.NewBackendTLSPolicyLister(f.Informer().GetIndexer())
 }
diff --git a/pkg/client/informers/externalversions/apis/v1beta1/gateway.go b/pkg/client/informers/externalversions/apis/v1beta1/gateway.go
index 5da7a413..6f601416 100644
--- a/pkg/client/informers/externalversions/apis/v1beta1/gateway.go
+++ b/pkg/client/informers/externalversions/apis/v1beta1/gateway.go
@@ -19,24 +19,24 @@ limitations under the License.
 package v1beta1
 
 import (
-	"context"
+	context "context"
 	time "time"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 	watch "k8s.io/apimachinery/pkg/watch"
 	cache "k8s.io/client-go/tools/cache"
-	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	gatewayapiapisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
 	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1beta1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1beta1"
+	apisv1beta1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1beta1"
 )
 
 // GatewayInformer provides access to a shared informer and lister for
 // Gateways.
 type GatewayInformer interface {
 	Informer() cache.SharedIndexInformer
-	Lister() v1beta1.GatewayLister
+	Lister() apisv1beta1.GatewayLister
 }
 
 type gatewayInformer struct {
@@ -62,16 +62,28 @@ func NewFilteredGatewayInformer(client versioned.Interface, namespace string, re
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1beta1().Gateways(namespace).List(context.TODO(), options)
+				return client.GatewayV1beta1().Gateways(namespace).List(context.Background(), options)
 			},
 			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1beta1().Gateways(namespace).Watch(context.TODO(), options)
+				return client.GatewayV1beta1().Gateways(namespace).Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1beta1().Gateways(namespace).List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1beta1().Gateways(namespace).Watch(ctx, options)
 			},
 		},
-		&apisv1beta1.Gateway{},
+		&gatewayapiapisv1beta1.Gateway{},
 		resyncPeriod,
 		indexers,
 	)
@@ -82,9 +94,9 @@ func (f *gatewayInformer) defaultInformer(client versioned.Interface, resyncPeri
 }
 
 func (f *gatewayInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisv1beta1.Gateway{}, f.defaultInformer)
+	return f.factory.InformerFor(&gatewayapiapisv1beta1.Gateway{}, f.defaultInformer)
 }
 
-func (f *gatewayInformer) Lister() v1beta1.GatewayLister {
-	return v1beta1.NewGatewayLister(f.Informer().GetIndexer())
+func (f *gatewayInformer) Lister() apisv1beta1.GatewayLister {
+	return apisv1beta1.NewGatewayLister(f.Informer().GetIndexer())
 }
diff --git a/pkg/client/informers/externalversions/apis/v1beta1/gatewayclass.go b/pkg/client/informers/externalversions/apis/v1beta1/gatewayclass.go
index 0f5e1be1..846bee3e 100644
--- a/pkg/client/informers/externalversions/apis/v1beta1/gatewayclass.go
+++ b/pkg/client/informers/externalversions/apis/v1beta1/gatewayclass.go
@@ -19,24 +19,24 @@ limitations under the License.
 package v1beta1
 
 import (
-	"context"
+	context "context"
 	time "time"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 	watch "k8s.io/apimachinery/pkg/watch"
 	cache "k8s.io/client-go/tools/cache"
-	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	gatewayapiapisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
 	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1beta1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1beta1"
+	apisv1beta1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1beta1"
 )
 
 // GatewayClassInformer provides access to a shared informer and lister for
 // GatewayClasses.
 type GatewayClassInformer interface {
 	Informer() cache.SharedIndexInformer
-	Lister() v1beta1.GatewayClassLister
+	Lister() apisv1beta1.GatewayClassLister
 }
 
 type gatewayClassInformer struct {
@@ -61,16 +61,28 @@ func NewFilteredGatewayClassInformer(client versioned.Interface, resyncPeriod ti
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1beta1().GatewayClasses().List(context.TODO(), options)
+				return client.GatewayV1beta1().GatewayClasses().List(context.Background(), options)
 			},
 			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1beta1().GatewayClasses().Watch(context.TODO(), options)
+				return client.GatewayV1beta1().GatewayClasses().Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1beta1().GatewayClasses().List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1beta1().GatewayClasses().Watch(ctx, options)
 			},
 		},
-		&apisv1beta1.GatewayClass{},
+		&gatewayapiapisv1beta1.GatewayClass{},
 		resyncPeriod,
 		indexers,
 	)
@@ -81,9 +93,9 @@ func (f *gatewayClassInformer) defaultInformer(client versioned.Interface, resyn
 }
 
 func (f *gatewayClassInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisv1beta1.GatewayClass{}, f.defaultInformer)
+	return f.factory.InformerFor(&gatewayapiapisv1beta1.GatewayClass{}, f.defaultInformer)
 }
 
-func (f *gatewayClassInformer) Lister() v1beta1.GatewayClassLister {
-	return v1beta1.NewGatewayClassLister(f.Informer().GetIndexer())
+func (f *gatewayClassInformer) Lister() apisv1beta1.GatewayClassLister {
+	return apisv1beta1.NewGatewayClassLister(f.Informer().GetIndexer())
 }
diff --git a/pkg/client/informers/externalversions/apis/v1beta1/httproute.go b/pkg/client/informers/externalversions/apis/v1beta1/httproute.go
index bcdc7bb7..c2217d1d 100644
--- a/pkg/client/informers/externalversions/apis/v1beta1/httproute.go
+++ b/pkg/client/informers/externalversions/apis/v1beta1/httproute.go
@@ -19,24 +19,24 @@ limitations under the License.
 package v1beta1
 
 import (
-	"context"
+	context "context"
 	time "time"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 	watch "k8s.io/apimachinery/pkg/watch"
 	cache "k8s.io/client-go/tools/cache"
-	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	gatewayapiapisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
 	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1beta1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1beta1"
+	apisv1beta1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1beta1"
 )
 
 // HTTPRouteInformer provides access to a shared informer and lister for
 // HTTPRoutes.
 type HTTPRouteInformer interface {
 	Informer() cache.SharedIndexInformer
-	Lister() v1beta1.HTTPRouteLister
+	Lister() apisv1beta1.HTTPRouteLister
 }
 
 type hTTPRouteInformer struct {
@@ -62,16 +62,28 @@ func NewFilteredHTTPRouteInformer(client versioned.Interface, namespace string,
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1beta1().HTTPRoutes(namespace).List(context.TODO(), options)
+				return client.GatewayV1beta1().HTTPRoutes(namespace).List(context.Background(), options)
 			},
 			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1beta1().HTTPRoutes(namespace).Watch(context.TODO(), options)
+				return client.GatewayV1beta1().HTTPRoutes(namespace).Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1beta1().HTTPRoutes(namespace).List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1beta1().HTTPRoutes(namespace).Watch(ctx, options)
 			},
 		},
-		&apisv1beta1.HTTPRoute{},
+		&gatewayapiapisv1beta1.HTTPRoute{},
 		resyncPeriod,
 		indexers,
 	)
@@ -82,9 +94,9 @@ func (f *hTTPRouteInformer) defaultInformer(client versioned.Interface, resyncPe
 }
 
 func (f *hTTPRouteInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisv1beta1.HTTPRoute{}, f.defaultInformer)
+	return f.factory.InformerFor(&gatewayapiapisv1beta1.HTTPRoute{}, f.defaultInformer)
 }
 
-func (f *hTTPRouteInformer) Lister() v1beta1.HTTPRouteLister {
-	return v1beta1.NewHTTPRouteLister(f.Informer().GetIndexer())
+func (f *hTTPRouteInformer) Lister() apisv1beta1.HTTPRouteLister {
+	return apisv1beta1.NewHTTPRouteLister(f.Informer().GetIndexer())
 }
diff --git a/pkg/client/informers/externalversions/apis/v1beta1/referencegrant.go b/pkg/client/informers/externalversions/apis/v1beta1/referencegrant.go
index 0e533d22..f6209ffc 100644
--- a/pkg/client/informers/externalversions/apis/v1beta1/referencegrant.go
+++ b/pkg/client/informers/externalversions/apis/v1beta1/referencegrant.go
@@ -19,24 +19,24 @@ limitations under the License.
 package v1beta1
 
 import (
-	"context"
+	context "context"
 	time "time"
 
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 	watch "k8s.io/apimachinery/pkg/watch"
 	cache "k8s.io/client-go/tools/cache"
-	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	gatewayapiapisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
 	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1beta1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1beta1"
+	apisv1beta1 "sigs.k8s.io/gateway-api/pkg/client/listers/apis/v1beta1"
 )
 
 // ReferenceGrantInformer provides access to a shared informer and lister for
 // ReferenceGrants.
 type ReferenceGrantInformer interface {
 	Informer() cache.SharedIndexInformer
-	Lister() v1beta1.ReferenceGrantLister
+	Lister() apisv1beta1.ReferenceGrantLister
 }
 
 type referenceGrantInformer struct {
@@ -62,16 +62,28 @@ func NewFilteredReferenceGrantInformer(client versioned.Interface, namespace str
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1beta1().ReferenceGrants(namespace).List(context.TODO(), options)
+				return client.GatewayV1beta1().ReferenceGrants(namespace).List(context.Background(), options)
 			},
 			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
 				if tweakListOptions != nil {
 					tweakListOptions(&options)
 				}
-				return client.GatewayV1beta1().ReferenceGrants(namespace).Watch(context.TODO(), options)
+				return client.GatewayV1beta1().ReferenceGrants(namespace).Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1beta1().ReferenceGrants(namespace).List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.GatewayV1beta1().ReferenceGrants(namespace).Watch(ctx, options)
 			},
 		},
-		&apisv1beta1.ReferenceGrant{},
+		&gatewayapiapisv1beta1.ReferenceGrant{},
 		resyncPeriod,
 		indexers,
 	)
@@ -82,9 +94,9 @@ func (f *referenceGrantInformer) defaultInformer(client versioned.Interface, res
 }
 
 func (f *referenceGrantInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisv1beta1.ReferenceGrant{}, f.defaultInformer)
+	return f.factory.InformerFor(&gatewayapiapisv1beta1.ReferenceGrant{}, f.defaultInformer)
 }
 
-func (f *referenceGrantInformer) Lister() v1beta1.ReferenceGrantLister {
-	return v1beta1.NewReferenceGrantLister(f.Informer().GetIndexer())
+func (f *referenceGrantInformer) Lister() apisv1beta1.ReferenceGrantLister {
+	return apisv1beta1.NewReferenceGrantLister(f.Informer().GetIndexer())
 }
diff --git a/pkg/client/informers/externalversions/apisx/v1alpha1/backendtrafficpolicy.go b/pkg/client/informers/externalversions/apisx/v1alpha1/backendtrafficpolicy.go
deleted file mode 100644
index 27a5e77f..00000000
--- a/pkg/client/informers/externalversions/apisx/v1alpha1/backendtrafficpolicy.go
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package v1alpha1
-
-import (
-	"context"
-	time "time"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	runtime "k8s.io/apimachinery/pkg/runtime"
-	watch "k8s.io/apimachinery/pkg/watch"
-	cache "k8s.io/client-go/tools/cache"
-	apisxv1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
-	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
-	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1alpha1 "sigs.k8s.io/gateway-api/pkg/client/listers/apisx/v1alpha1"
-)
-
-// BackendTrafficPolicyInformer provides access to a shared informer and lister for
-// BackendTrafficPolicies.
-type BackendTrafficPolicyInformer interface {
-	Informer() cache.SharedIndexInformer
-	Lister() v1alpha1.BackendTrafficPolicyLister
-}
-
-type backendTrafficPolicyInformer struct {
-	factory          internalinterfaces.SharedInformerFactory
-	tweakListOptions internalinterfaces.TweakListOptionsFunc
-	namespace        string
-}
-
-// NewBackendTrafficPolicyInformer constructs a new informer for BackendTrafficPolicy type.
-// Always prefer using an informer factory to get a shared informer instead of getting an independent
-// one. This reduces memory footprint and number of connections to the server.
-func NewBackendTrafficPolicyInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
-	return NewFilteredBackendTrafficPolicyInformer(client, namespace, resyncPeriod, indexers, nil)
-}
-
-// NewFilteredBackendTrafficPolicyInformer constructs a new informer for BackendTrafficPolicy type.
-// Always prefer using an informer factory to get a shared informer instead of getting an independent
-// one. This reduces memory footprint and number of connections to the server.
-func NewFilteredBackendTrafficPolicyInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
-	return cache.NewSharedIndexInformer(
-		&cache.ListWatch{
-			ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
-				if tweakListOptions != nil {
-					tweakListOptions(&options)
-				}
-				return client.ExperimentalV1alpha1().BackendTrafficPolicies(namespace).List(context.TODO(), options)
-			},
-			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
-				if tweakListOptions != nil {
-					tweakListOptions(&options)
-				}
-				return client.ExperimentalV1alpha1().BackendTrafficPolicies(namespace).Watch(context.TODO(), options)
-			},
-		},
-		&apisxv1alpha1.BackendTrafficPolicy{},
-		resyncPeriod,
-		indexers,
-	)
-}
-
-func (f *backendTrafficPolicyInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
-	return NewFilteredBackendTrafficPolicyInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
-}
-
-func (f *backendTrafficPolicyInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisxv1alpha1.BackendTrafficPolicy{}, f.defaultInformer)
-}
-
-func (f *backendTrafficPolicyInformer) Lister() v1alpha1.BackendTrafficPolicyLister {
-	return v1alpha1.NewBackendTrafficPolicyLister(f.Informer().GetIndexer())
-}
diff --git a/pkg/client/informers/externalversions/apisx/v1alpha1/interface.go b/pkg/client/informers/externalversions/apisx/v1alpha1/interface.go
index b95538a9..9d995d42 100644
--- a/pkg/client/informers/externalversions/apisx/v1alpha1/interface.go
+++ b/pkg/client/informers/externalversions/apisx/v1alpha1/interface.go
@@ -24,10 +24,10 @@ import (
 
 // Interface provides access to all the informers in this group version.
 type Interface interface {
-	// BackendTrafficPolicies returns a BackendTrafficPolicyInformer.
-	BackendTrafficPolicies() BackendTrafficPolicyInformer
-	// ListenerSets returns a ListenerSetInformer.
-	ListenerSets() ListenerSetInformer
+	// XBackendTrafficPolicies returns a XBackendTrafficPolicyInformer.
+	XBackendTrafficPolicies() XBackendTrafficPolicyInformer
+	// XListenerSets returns a XListenerSetInformer.
+	XListenerSets() XListenerSetInformer
 }
 
 type version struct {
@@ -41,12 +41,12 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList
 	return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
 }
 
-// BackendTrafficPolicies returns a BackendTrafficPolicyInformer.
-func (v *version) BackendTrafficPolicies() BackendTrafficPolicyInformer {
-	return &backendTrafficPolicyInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+// XBackendTrafficPolicies returns a XBackendTrafficPolicyInformer.
+func (v *version) XBackendTrafficPolicies() XBackendTrafficPolicyInformer {
+	return &xBackendTrafficPolicyInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
 }
 
-// ListenerSets returns a ListenerSetInformer.
-func (v *version) ListenerSets() ListenerSetInformer {
-	return &listenerSetInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+// XListenerSets returns a XListenerSetInformer.
+func (v *version) XListenerSets() XListenerSetInformer {
+	return &xListenerSetInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
 }
diff --git a/pkg/client/informers/externalversions/apisx/v1alpha1/listenerset.go b/pkg/client/informers/externalversions/apisx/v1alpha1/listenerset.go
deleted file mode 100644
index 38f8f050..00000000
--- a/pkg/client/informers/externalversions/apisx/v1alpha1/listenerset.go
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package v1alpha1
-
-import (
-	"context"
-	time "time"
-
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	runtime "k8s.io/apimachinery/pkg/runtime"
-	watch "k8s.io/apimachinery/pkg/watch"
-	cache "k8s.io/client-go/tools/cache"
-	apisxv1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
-	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
-	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
-	v1alpha1 "sigs.k8s.io/gateway-api/pkg/client/listers/apisx/v1alpha1"
-)
-
-// ListenerSetInformer provides access to a shared informer and lister for
-// ListenerSets.
-type ListenerSetInformer interface {
-	Informer() cache.SharedIndexInformer
-	Lister() v1alpha1.ListenerSetLister
-}
-
-type listenerSetInformer struct {
-	factory          internalinterfaces.SharedInformerFactory
-	tweakListOptions internalinterfaces.TweakListOptionsFunc
-	namespace        string
-}
-
-// NewListenerSetInformer constructs a new informer for ListenerSet type.
-// Always prefer using an informer factory to get a shared informer instead of getting an independent
-// one. This reduces memory footprint and number of connections to the server.
-func NewListenerSetInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
-	return NewFilteredListenerSetInformer(client, namespace, resyncPeriod, indexers, nil)
-}
-
-// NewFilteredListenerSetInformer constructs a new informer for ListenerSet type.
-// Always prefer using an informer factory to get a shared informer instead of getting an independent
-// one. This reduces memory footprint and number of connections to the server.
-func NewFilteredListenerSetInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
-	return cache.NewSharedIndexInformer(
-		&cache.ListWatch{
-			ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
-				if tweakListOptions != nil {
-					tweakListOptions(&options)
-				}
-				return client.ExperimentalV1alpha1().ListenerSets(namespace).List(context.TODO(), options)
-			},
-			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
-				if tweakListOptions != nil {
-					tweakListOptions(&options)
-				}
-				return client.ExperimentalV1alpha1().ListenerSets(namespace).Watch(context.TODO(), options)
-			},
-		},
-		&apisxv1alpha1.ListenerSet{},
-		resyncPeriod,
-		indexers,
-	)
-}
-
-func (f *listenerSetInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
-	return NewFilteredListenerSetInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
-}
-
-func (f *listenerSetInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apisxv1alpha1.ListenerSet{}, f.defaultInformer)
-}
-
-func (f *listenerSetInformer) Lister() v1alpha1.ListenerSetLister {
-	return v1alpha1.NewListenerSetLister(f.Informer().GetIndexer())
-}
diff --git a/pkg/client/informers/externalversions/apisx/v1alpha1/xbackendtrafficpolicy.go b/pkg/client/informers/externalversions/apisx/v1alpha1/xbackendtrafficpolicy.go
new file mode 100644
index 00000000..a1ef9b1c
--- /dev/null
+++ b/pkg/client/informers/externalversions/apisx/v1alpha1/xbackendtrafficpolicy.go
@@ -0,0 +1,102 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Code generated by informer-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+	context "context"
+	time "time"
+
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	runtime "k8s.io/apimachinery/pkg/runtime"
+	watch "k8s.io/apimachinery/pkg/watch"
+	cache "k8s.io/client-go/tools/cache"
+	gatewayapiapisxv1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
+	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
+	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
+	apisxv1alpha1 "sigs.k8s.io/gateway-api/pkg/client/listers/apisx/v1alpha1"
+)
+
+// XBackendTrafficPolicyInformer provides access to a shared informer and lister for
+// XBackendTrafficPolicies.
+type XBackendTrafficPolicyInformer interface {
+	Informer() cache.SharedIndexInformer
+	Lister() apisxv1alpha1.XBackendTrafficPolicyLister
+}
+
+type xBackendTrafficPolicyInformer struct {
+	factory          internalinterfaces.SharedInformerFactory
+	tweakListOptions internalinterfaces.TweakListOptionsFunc
+	namespace        string
+}
+
+// NewXBackendTrafficPolicyInformer constructs a new informer for XBackendTrafficPolicy type.
+// Always prefer using an informer factory to get a shared informer instead of getting an independent
+// one. This reduces memory footprint and number of connections to the server.
+func NewXBackendTrafficPolicyInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+	return NewFilteredXBackendTrafficPolicyInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredXBackendTrafficPolicyInformer constructs a new informer for XBackendTrafficPolicy type.
+// Always prefer using an informer factory to get a shared informer instead of getting an independent
+// one. This reduces memory footprint and number of connections to the server.
+func NewFilteredXBackendTrafficPolicyInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+	return cache.NewSharedIndexInformer(
+		&cache.ListWatch{
+			ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.ExperimentalV1alpha1().XBackendTrafficPolicies(namespace).List(context.Background(), options)
+			},
+			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.ExperimentalV1alpha1().XBackendTrafficPolicies(namespace).Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.ExperimentalV1alpha1().XBackendTrafficPolicies(namespace).List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.ExperimentalV1alpha1().XBackendTrafficPolicies(namespace).Watch(ctx, options)
+			},
+		},
+		&gatewayapiapisxv1alpha1.XBackendTrafficPolicy{},
+		resyncPeriod,
+		indexers,
+	)
+}
+
+func (f *xBackendTrafficPolicyInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+	return NewFilteredXBackendTrafficPolicyInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *xBackendTrafficPolicyInformer) Informer() cache.SharedIndexInformer {
+	return f.factory.InformerFor(&gatewayapiapisxv1alpha1.XBackendTrafficPolicy{}, f.defaultInformer)
+}
+
+func (f *xBackendTrafficPolicyInformer) Lister() apisxv1alpha1.XBackendTrafficPolicyLister {
+	return apisxv1alpha1.NewXBackendTrafficPolicyLister(f.Informer().GetIndexer())
+}
diff --git a/pkg/client/informers/externalversions/apisx/v1alpha1/xlistenerset.go b/pkg/client/informers/externalversions/apisx/v1alpha1/xlistenerset.go
new file mode 100644
index 00000000..189f25bf
--- /dev/null
+++ b/pkg/client/informers/externalversions/apisx/v1alpha1/xlistenerset.go
@@ -0,0 +1,102 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Code generated by informer-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+	context "context"
+	time "time"
+
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	runtime "k8s.io/apimachinery/pkg/runtime"
+	watch "k8s.io/apimachinery/pkg/watch"
+	cache "k8s.io/client-go/tools/cache"
+	gatewayapiapisxv1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
+	versioned "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
+	internalinterfaces "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/internalinterfaces"
+	apisxv1alpha1 "sigs.k8s.io/gateway-api/pkg/client/listers/apisx/v1alpha1"
+)
+
+// XListenerSetInformer provides access to a shared informer and lister for
+// XListenerSets.
+type XListenerSetInformer interface {
+	Informer() cache.SharedIndexInformer
+	Lister() apisxv1alpha1.XListenerSetLister
+}
+
+type xListenerSetInformer struct {
+	factory          internalinterfaces.SharedInformerFactory
+	tweakListOptions internalinterfaces.TweakListOptionsFunc
+	namespace        string
+}
+
+// NewXListenerSetInformer constructs a new informer for XListenerSet type.
+// Always prefer using an informer factory to get a shared informer instead of getting an independent
+// one. This reduces memory footprint and number of connections to the server.
+func NewXListenerSetInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+	return NewFilteredXListenerSetInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredXListenerSetInformer constructs a new informer for XListenerSet type.
+// Always prefer using an informer factory to get a shared informer instead of getting an independent
+// one. This reduces memory footprint and number of connections to the server.
+func NewFilteredXListenerSetInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+	return cache.NewSharedIndexInformer(
+		&cache.ListWatch{
+			ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.ExperimentalV1alpha1().XListenerSets(namespace).List(context.Background(), options)
+			},
+			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.ExperimentalV1alpha1().XListenerSets(namespace).Watch(context.Background(), options)
+			},
+			ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.ExperimentalV1alpha1().XListenerSets(namespace).List(ctx, options)
+			},
+			WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+				if tweakListOptions != nil {
+					tweakListOptions(&options)
+				}
+				return client.ExperimentalV1alpha1().XListenerSets(namespace).Watch(ctx, options)
+			},
+		},
+		&gatewayapiapisxv1alpha1.XListenerSet{},
+		resyncPeriod,
+		indexers,
+	)
+}
+
+func (f *xListenerSetInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+	return NewFilteredXListenerSetInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *xListenerSetInformer) Informer() cache.SharedIndexInformer {
+	return f.factory.InformerFor(&gatewayapiapisxv1alpha1.XListenerSet{}, f.defaultInformer)
+}
+
+func (f *xListenerSetInformer) Lister() apisxv1alpha1.XListenerSetLister {
+	return apisxv1alpha1.NewXListenerSetLister(f.Informer().GetIndexer())
+}
diff --git a/pkg/client/informers/externalversions/generic.go b/pkg/client/informers/externalversions/generic.go
index d034a3b0..1d90930c 100644
--- a/pkg/client/informers/externalversions/generic.go
+++ b/pkg/client/informers/externalversions/generic.go
@@ -19,7 +19,7 @@ limitations under the License.
 package externalversions
 
 import (
-	"fmt"
+	fmt "fmt"
 
 	schema "k8s.io/apimachinery/pkg/runtime/schema"
 	cache "k8s.io/client-go/tools/cache"
@@ -67,8 +67,6 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource
 		return &genericInformer{resource: resource.GroupResource(), informer: f.Gateway().V1().HTTPRoutes().Informer()}, nil
 
 		// Group=gateway.networking.k8s.io, Version=v1alpha2
-	case v1alpha2.SchemeGroupVersion.WithResource("backendlbpolicies"):
-		return &genericInformer{resource: resource.GroupResource(), informer: f.Gateway().V1alpha2().BackendLBPolicies().Informer()}, nil
 	case v1alpha2.SchemeGroupVersion.WithResource("grpcroutes"):
 		return &genericInformer{resource: resource.GroupResource(), informer: f.Gateway().V1alpha2().GRPCRoutes().Informer()}, nil
 	case v1alpha2.SchemeGroupVersion.WithResource("referencegrants"):
@@ -95,10 +93,10 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource
 		return &genericInformer{resource: resource.GroupResource(), informer: f.Gateway().V1beta1().ReferenceGrants().Informer()}, nil
 
 		// Group=gateway.networking.x-k8s.io, Version=v1alpha1
-	case v1alpha1.SchemeGroupVersion.WithResource("backendtrafficpolicies"):
-		return &genericInformer{resource: resource.GroupResource(), informer: f.Experimental().V1alpha1().BackendTrafficPolicies().Informer()}, nil
-	case v1alpha1.SchemeGroupVersion.WithResource("listenersets"):
-		return &genericInformer{resource: resource.GroupResource(), informer: f.Experimental().V1alpha1().ListenerSets().Informer()}, nil
+	case v1alpha1.SchemeGroupVersion.WithResource("xbackendtrafficpolicies"):
+		return &genericInformer{resource: resource.GroupResource(), informer: f.Experimental().V1alpha1().XBackendTrafficPolicies().Informer()}, nil
+	case v1alpha1.SchemeGroupVersion.WithResource("xlistenersets"):
+		return &genericInformer{resource: resource.GroupResource(), informer: f.Experimental().V1alpha1().XListenerSets().Informer()}, nil
 
 	}
 
diff --git a/pkg/client/listers/apis/v1/gateway.go b/pkg/client/listers/apis/v1/gateway.go
index a709b862..389df604 100644
--- a/pkg/client/listers/apis/v1/gateway.go
+++ b/pkg/client/listers/apis/v1/gateway.go
@@ -19,10 +19,10 @@ limitations under the License.
 package v1
 
 import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // GatewayLister helps list Gateways.
@@ -30,7 +30,7 @@ import (
 type GatewayLister interface {
 	// List lists all Gateways in the indexer.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1.Gateway, err error)
+	List(selector labels.Selector) (ret []*apisv1.Gateway, err error)
 	// Gateways returns an object that can list and get Gateways.
 	Gateways(namespace string) GatewayNamespaceLister
 	GatewayListerExpansion
@@ -38,17 +38,17 @@ type GatewayLister interface {
 
 // gatewayLister implements the GatewayLister interface.
 type gatewayLister struct {
-	listers.ResourceIndexer[*v1.Gateway]
+	listers.ResourceIndexer[*apisv1.Gateway]
 }
 
 // NewGatewayLister returns a new GatewayLister.
 func NewGatewayLister(indexer cache.Indexer) GatewayLister {
-	return &gatewayLister{listers.New[*v1.Gateway](indexer, v1.Resource("gateway"))}
+	return &gatewayLister{listers.New[*apisv1.Gateway](indexer, apisv1.Resource("gateway"))}
 }
 
 // Gateways returns an object that can list and get Gateways.
 func (s *gatewayLister) Gateways(namespace string) GatewayNamespaceLister {
-	return gatewayNamespaceLister{listers.NewNamespaced[*v1.Gateway](s.ResourceIndexer, namespace)}
+	return gatewayNamespaceLister{listers.NewNamespaced[*apisv1.Gateway](s.ResourceIndexer, namespace)}
 }
 
 // GatewayNamespaceLister helps list and get Gateways.
@@ -56,15 +56,15 @@ func (s *gatewayLister) Gateways(namespace string) GatewayNamespaceLister {
 type GatewayNamespaceLister interface {
 	// List lists all Gateways in the indexer for a given namespace.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1.Gateway, err error)
+	List(selector labels.Selector) (ret []*apisv1.Gateway, err error)
 	// Get retrieves the Gateway from the indexer for a given namespace and name.
 	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1.Gateway, error)
+	Get(name string) (*apisv1.Gateway, error)
 	GatewayNamespaceListerExpansion
 }
 
 // gatewayNamespaceLister implements the GatewayNamespaceLister
 // interface.
 type gatewayNamespaceLister struct {
-	listers.ResourceIndexer[*v1.Gateway]
+	listers.ResourceIndexer[*apisv1.Gateway]
 }
diff --git a/pkg/client/listers/apis/v1/gatewayclass.go b/pkg/client/listers/apis/v1/gatewayclass.go
index 477e9198..e8a3021e 100644
--- a/pkg/client/listers/apis/v1/gatewayclass.go
+++ b/pkg/client/listers/apis/v1/gatewayclass.go
@@ -19,10 +19,10 @@ limitations under the License.
 package v1
 
 import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // GatewayClassLister helps list GatewayClasses.
@@ -30,19 +30,19 @@ import (
 type GatewayClassLister interface {
 	// List lists all GatewayClasses in the indexer.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1.GatewayClass, err error)
+	List(selector labels.Selector) (ret []*apisv1.GatewayClass, err error)
 	// Get retrieves the GatewayClass from the index for a given name.
 	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1.GatewayClass, error)
+	Get(name string) (*apisv1.GatewayClass, error)
 	GatewayClassListerExpansion
 }
 
 // gatewayClassLister implements the GatewayClassLister interface.
 type gatewayClassLister struct {
-	listers.ResourceIndexer[*v1.GatewayClass]
+	listers.ResourceIndexer[*apisv1.GatewayClass]
 }
 
 // NewGatewayClassLister returns a new GatewayClassLister.
 func NewGatewayClassLister(indexer cache.Indexer) GatewayClassLister {
-	return &gatewayClassLister{listers.New[*v1.GatewayClass](indexer, v1.Resource("gatewayclass"))}
+	return &gatewayClassLister{listers.New[*apisv1.GatewayClass](indexer, apisv1.Resource("gatewayclass"))}
 }
diff --git a/pkg/client/listers/apis/v1/grpcroute.go b/pkg/client/listers/apis/v1/grpcroute.go
index 0409c9a4..10d4b8da 100644
--- a/pkg/client/listers/apis/v1/grpcroute.go
+++ b/pkg/client/listers/apis/v1/grpcroute.go
@@ -19,10 +19,10 @@ limitations under the License.
 package v1
 
 import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // GRPCRouteLister helps list GRPCRoutes.
@@ -30,7 +30,7 @@ import (
 type GRPCRouteLister interface {
 	// List lists all GRPCRoutes in the indexer.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1.GRPCRoute, err error)
+	List(selector labels.Selector) (ret []*apisv1.GRPCRoute, err error)
 	// GRPCRoutes returns an object that can list and get GRPCRoutes.
 	GRPCRoutes(namespace string) GRPCRouteNamespaceLister
 	GRPCRouteListerExpansion
@@ -38,17 +38,17 @@ type GRPCRouteLister interface {
 
 // gRPCRouteLister implements the GRPCRouteLister interface.
 type gRPCRouteLister struct {
-	listers.ResourceIndexer[*v1.GRPCRoute]
+	listers.ResourceIndexer[*apisv1.GRPCRoute]
 }
 
 // NewGRPCRouteLister returns a new GRPCRouteLister.
 func NewGRPCRouteLister(indexer cache.Indexer) GRPCRouteLister {
-	return &gRPCRouteLister{listers.New[*v1.GRPCRoute](indexer, v1.Resource("grpcroute"))}
+	return &gRPCRouteLister{listers.New[*apisv1.GRPCRoute](indexer, apisv1.Resource("grpcroute"))}
 }
 
 // GRPCRoutes returns an object that can list and get GRPCRoutes.
 func (s *gRPCRouteLister) GRPCRoutes(namespace string) GRPCRouteNamespaceLister {
-	return gRPCRouteNamespaceLister{listers.NewNamespaced[*v1.GRPCRoute](s.ResourceIndexer, namespace)}
+	return gRPCRouteNamespaceLister{listers.NewNamespaced[*apisv1.GRPCRoute](s.ResourceIndexer, namespace)}
 }
 
 // GRPCRouteNamespaceLister helps list and get GRPCRoutes.
@@ -56,15 +56,15 @@ func (s *gRPCRouteLister) GRPCRoutes(namespace string) GRPCRouteNamespaceLister
 type GRPCRouteNamespaceLister interface {
 	// List lists all GRPCRoutes in the indexer for a given namespace.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1.GRPCRoute, err error)
+	List(selector labels.Selector) (ret []*apisv1.GRPCRoute, err error)
 	// Get retrieves the GRPCRoute from the indexer for a given namespace and name.
 	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1.GRPCRoute, error)
+	Get(name string) (*apisv1.GRPCRoute, error)
 	GRPCRouteNamespaceListerExpansion
 }
 
 // gRPCRouteNamespaceLister implements the GRPCRouteNamespaceLister
 // interface.
 type gRPCRouteNamespaceLister struct {
-	listers.ResourceIndexer[*v1.GRPCRoute]
+	listers.ResourceIndexer[*apisv1.GRPCRoute]
 }
diff --git a/pkg/client/listers/apis/v1/httproute.go b/pkg/client/listers/apis/v1/httproute.go
index 2cbbe09d..e1f03d45 100644
--- a/pkg/client/listers/apis/v1/httproute.go
+++ b/pkg/client/listers/apis/v1/httproute.go
@@ -19,10 +19,10 @@ limitations under the License.
 package v1
 
 import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisv1 "sigs.k8s.io/gateway-api/apis/v1"
 )
 
 // HTTPRouteLister helps list HTTPRoutes.
@@ -30,7 +30,7 @@ import (
 type HTTPRouteLister interface {
 	// List lists all HTTPRoutes in the indexer.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1.HTTPRoute, err error)
+	List(selector labels.Selector) (ret []*apisv1.HTTPRoute, err error)
 	// HTTPRoutes returns an object that can list and get HTTPRoutes.
 	HTTPRoutes(namespace string) HTTPRouteNamespaceLister
 	HTTPRouteListerExpansion
@@ -38,17 +38,17 @@ type HTTPRouteLister interface {
 
 // hTTPRouteLister implements the HTTPRouteLister interface.
 type hTTPRouteLister struct {
-	listers.ResourceIndexer[*v1.HTTPRoute]
+	listers.ResourceIndexer[*apisv1.HTTPRoute]
 }
 
 // NewHTTPRouteLister returns a new HTTPRouteLister.
 func NewHTTPRouteLister(indexer cache.Indexer) HTTPRouteLister {
-	return &hTTPRouteLister{listers.New[*v1.HTTPRoute](indexer, v1.Resource("httproute"))}
+	return &hTTPRouteLister{listers.New[*apisv1.HTTPRoute](indexer, apisv1.Resource("httproute"))}
 }
 
 // HTTPRoutes returns an object that can list and get HTTPRoutes.
 func (s *hTTPRouteLister) HTTPRoutes(namespace string) HTTPRouteNamespaceLister {
-	return hTTPRouteNamespaceLister{listers.NewNamespaced[*v1.HTTPRoute](s.ResourceIndexer, namespace)}
+	return hTTPRouteNamespaceLister{listers.NewNamespaced[*apisv1.HTTPRoute](s.ResourceIndexer, namespace)}
 }
 
 // HTTPRouteNamespaceLister helps list and get HTTPRoutes.
@@ -56,15 +56,15 @@ func (s *hTTPRouteLister) HTTPRoutes(namespace string) HTTPRouteNamespaceLister
 type HTTPRouteNamespaceLister interface {
 	// List lists all HTTPRoutes in the indexer for a given namespace.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1.HTTPRoute, err error)
+	List(selector labels.Selector) (ret []*apisv1.HTTPRoute, err error)
 	// Get retrieves the HTTPRoute from the indexer for a given namespace and name.
 	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1.HTTPRoute, error)
+	Get(name string) (*apisv1.HTTPRoute, error)
 	HTTPRouteNamespaceListerExpansion
 }
 
 // hTTPRouteNamespaceLister implements the HTTPRouteNamespaceLister
 // interface.
 type hTTPRouteNamespaceLister struct {
-	listers.ResourceIndexer[*v1.HTTPRoute]
+	listers.ResourceIndexer[*apisv1.HTTPRoute]
 }
diff --git a/pkg/client/listers/apis/v1alpha2/backendlbpolicy.go b/pkg/client/listers/apis/v1alpha2/backendlbpolicy.go
deleted file mode 100644
index 3b09cd2d..00000000
--- a/pkg/client/listers/apis/v1alpha2/backendlbpolicy.go
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by lister-gen. DO NOT EDIT.
-
-package v1alpha2
-
-import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-)
-
-// BackendLBPolicyLister helps list BackendLBPolicies.
-// All objects returned here must be treated as read-only.
-type BackendLBPolicyLister interface {
-	// List lists all BackendLBPolicies in the indexer.
-	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha2.BackendLBPolicy, err error)
-	// BackendLBPolicies returns an object that can list and get BackendLBPolicies.
-	BackendLBPolicies(namespace string) BackendLBPolicyNamespaceLister
-	BackendLBPolicyListerExpansion
-}
-
-// backendLBPolicyLister implements the BackendLBPolicyLister interface.
-type backendLBPolicyLister struct {
-	listers.ResourceIndexer[*v1alpha2.BackendLBPolicy]
-}
-
-// NewBackendLBPolicyLister returns a new BackendLBPolicyLister.
-func NewBackendLBPolicyLister(indexer cache.Indexer) BackendLBPolicyLister {
-	return &backendLBPolicyLister{listers.New[*v1alpha2.BackendLBPolicy](indexer, v1alpha2.Resource("backendlbpolicy"))}
-}
-
-// BackendLBPolicies returns an object that can list and get BackendLBPolicies.
-func (s *backendLBPolicyLister) BackendLBPolicies(namespace string) BackendLBPolicyNamespaceLister {
-	return backendLBPolicyNamespaceLister{listers.NewNamespaced[*v1alpha2.BackendLBPolicy](s.ResourceIndexer, namespace)}
-}
-
-// BackendLBPolicyNamespaceLister helps list and get BackendLBPolicies.
-// All objects returned here must be treated as read-only.
-type BackendLBPolicyNamespaceLister interface {
-	// List lists all BackendLBPolicies in the indexer for a given namespace.
-	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha2.BackendLBPolicy, err error)
-	// Get retrieves the BackendLBPolicy from the indexer for a given namespace and name.
-	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1alpha2.BackendLBPolicy, error)
-	BackendLBPolicyNamespaceListerExpansion
-}
-
-// backendLBPolicyNamespaceLister implements the BackendLBPolicyNamespaceLister
-// interface.
-type backendLBPolicyNamespaceLister struct {
-	listers.ResourceIndexer[*v1alpha2.BackendLBPolicy]
-}
diff --git a/pkg/client/listers/apis/v1alpha2/expansion_generated.go b/pkg/client/listers/apis/v1alpha2/expansion_generated.go
index d311d491..a3ba069b 100644
--- a/pkg/client/listers/apis/v1alpha2/expansion_generated.go
+++ b/pkg/client/listers/apis/v1alpha2/expansion_generated.go
@@ -18,14 +18,6 @@ limitations under the License.
 
 package v1alpha2
 
-// BackendLBPolicyListerExpansion allows custom methods to be added to
-// BackendLBPolicyLister.
-type BackendLBPolicyListerExpansion interface{}
-
-// BackendLBPolicyNamespaceListerExpansion allows custom methods to be added to
-// BackendLBPolicyNamespaceLister.
-type BackendLBPolicyNamespaceListerExpansion interface{}
-
 // GRPCRouteListerExpansion allows custom methods to be added to
 // GRPCRouteLister.
 type GRPCRouteListerExpansion interface{}
diff --git a/pkg/client/listers/apis/v1alpha2/grpcroute.go b/pkg/client/listers/apis/v1alpha2/grpcroute.go
index 9ec44ce2..6e447be1 100644
--- a/pkg/client/listers/apis/v1alpha2/grpcroute.go
+++ b/pkg/client/listers/apis/v1alpha2/grpcroute.go
@@ -19,10 +19,10 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 )
 
 // GRPCRouteLister helps list GRPCRoutes.
@@ -30,7 +30,7 @@ import (
 type GRPCRouteLister interface {
 	// List lists all GRPCRoutes in the indexer.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha2.GRPCRoute, err error)
+	List(selector labels.Selector) (ret []*apisv1alpha2.GRPCRoute, err error)
 	// GRPCRoutes returns an object that can list and get GRPCRoutes.
 	GRPCRoutes(namespace string) GRPCRouteNamespaceLister
 	GRPCRouteListerExpansion
@@ -38,17 +38,17 @@ type GRPCRouteLister interface {
 
 // gRPCRouteLister implements the GRPCRouteLister interface.
 type gRPCRouteLister struct {
-	listers.ResourceIndexer[*v1alpha2.GRPCRoute]
+	listers.ResourceIndexer[*apisv1alpha2.GRPCRoute]
 }
 
 // NewGRPCRouteLister returns a new GRPCRouteLister.
 func NewGRPCRouteLister(indexer cache.Indexer) GRPCRouteLister {
-	return &gRPCRouteLister{listers.New[*v1alpha2.GRPCRoute](indexer, v1alpha2.Resource("grpcroute"))}
+	return &gRPCRouteLister{listers.New[*apisv1alpha2.GRPCRoute](indexer, apisv1alpha2.Resource("grpcroute"))}
 }
 
 // GRPCRoutes returns an object that can list and get GRPCRoutes.
 func (s *gRPCRouteLister) GRPCRoutes(namespace string) GRPCRouteNamespaceLister {
-	return gRPCRouteNamespaceLister{listers.NewNamespaced[*v1alpha2.GRPCRoute](s.ResourceIndexer, namespace)}
+	return gRPCRouteNamespaceLister{listers.NewNamespaced[*apisv1alpha2.GRPCRoute](s.ResourceIndexer, namespace)}
 }
 
 // GRPCRouteNamespaceLister helps list and get GRPCRoutes.
@@ -56,15 +56,15 @@ func (s *gRPCRouteLister) GRPCRoutes(namespace string) GRPCRouteNamespaceLister
 type GRPCRouteNamespaceLister interface {
 	// List lists all GRPCRoutes in the indexer for a given namespace.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha2.GRPCRoute, err error)
+	List(selector labels.Selector) (ret []*apisv1alpha2.GRPCRoute, err error)
 	// Get retrieves the GRPCRoute from the indexer for a given namespace and name.
 	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1alpha2.GRPCRoute, error)
+	Get(name string) (*apisv1alpha2.GRPCRoute, error)
 	GRPCRouteNamespaceListerExpansion
 }
 
 // gRPCRouteNamespaceLister implements the GRPCRouteNamespaceLister
 // interface.
 type gRPCRouteNamespaceLister struct {
-	listers.ResourceIndexer[*v1alpha2.GRPCRoute]
+	listers.ResourceIndexer[*apisv1alpha2.GRPCRoute]
 }
diff --git a/pkg/client/listers/apis/v1alpha2/referencegrant.go b/pkg/client/listers/apis/v1alpha2/referencegrant.go
index 8df80e92..92695743 100644
--- a/pkg/client/listers/apis/v1alpha2/referencegrant.go
+++ b/pkg/client/listers/apis/v1alpha2/referencegrant.go
@@ -19,10 +19,10 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 )
 
 // ReferenceGrantLister helps list ReferenceGrants.
@@ -30,7 +30,7 @@ import (
 type ReferenceGrantLister interface {
 	// List lists all ReferenceGrants in the indexer.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha2.ReferenceGrant, err error)
+	List(selector labels.Selector) (ret []*apisv1alpha2.ReferenceGrant, err error)
 	// ReferenceGrants returns an object that can list and get ReferenceGrants.
 	ReferenceGrants(namespace string) ReferenceGrantNamespaceLister
 	ReferenceGrantListerExpansion
@@ -38,17 +38,17 @@ type ReferenceGrantLister interface {
 
 // referenceGrantLister implements the ReferenceGrantLister interface.
 type referenceGrantLister struct {
-	listers.ResourceIndexer[*v1alpha2.ReferenceGrant]
+	listers.ResourceIndexer[*apisv1alpha2.ReferenceGrant]
 }
 
 // NewReferenceGrantLister returns a new ReferenceGrantLister.
 func NewReferenceGrantLister(indexer cache.Indexer) ReferenceGrantLister {
-	return &referenceGrantLister{listers.New[*v1alpha2.ReferenceGrant](indexer, v1alpha2.Resource("referencegrant"))}
+	return &referenceGrantLister{listers.New[*apisv1alpha2.ReferenceGrant](indexer, apisv1alpha2.Resource("referencegrant"))}
 }
 
 // ReferenceGrants returns an object that can list and get ReferenceGrants.
 func (s *referenceGrantLister) ReferenceGrants(namespace string) ReferenceGrantNamespaceLister {
-	return referenceGrantNamespaceLister{listers.NewNamespaced[*v1alpha2.ReferenceGrant](s.ResourceIndexer, namespace)}
+	return referenceGrantNamespaceLister{listers.NewNamespaced[*apisv1alpha2.ReferenceGrant](s.ResourceIndexer, namespace)}
 }
 
 // ReferenceGrantNamespaceLister helps list and get ReferenceGrants.
@@ -56,15 +56,15 @@ func (s *referenceGrantLister) ReferenceGrants(namespace string) ReferenceGrantN
 type ReferenceGrantNamespaceLister interface {
 	// List lists all ReferenceGrants in the indexer for a given namespace.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha2.ReferenceGrant, err error)
+	List(selector labels.Selector) (ret []*apisv1alpha2.ReferenceGrant, err error)
 	// Get retrieves the ReferenceGrant from the indexer for a given namespace and name.
 	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1alpha2.ReferenceGrant, error)
+	Get(name string) (*apisv1alpha2.ReferenceGrant, error)
 	ReferenceGrantNamespaceListerExpansion
 }
 
 // referenceGrantNamespaceLister implements the ReferenceGrantNamespaceLister
 // interface.
 type referenceGrantNamespaceLister struct {
-	listers.ResourceIndexer[*v1alpha2.ReferenceGrant]
+	listers.ResourceIndexer[*apisv1alpha2.ReferenceGrant]
 }
diff --git a/pkg/client/listers/apis/v1alpha2/tcproute.go b/pkg/client/listers/apis/v1alpha2/tcproute.go
index 4b34f9a2..4cbfe234 100644
--- a/pkg/client/listers/apis/v1alpha2/tcproute.go
+++ b/pkg/client/listers/apis/v1alpha2/tcproute.go
@@ -19,10 +19,10 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 )
 
 // TCPRouteLister helps list TCPRoutes.
@@ -30,7 +30,7 @@ import (
 type TCPRouteLister interface {
 	// List lists all TCPRoutes in the indexer.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha2.TCPRoute, err error)
+	List(selector labels.Selector) (ret []*apisv1alpha2.TCPRoute, err error)
 	// TCPRoutes returns an object that can list and get TCPRoutes.
 	TCPRoutes(namespace string) TCPRouteNamespaceLister
 	TCPRouteListerExpansion
@@ -38,17 +38,17 @@ type TCPRouteLister interface {
 
 // tCPRouteLister implements the TCPRouteLister interface.
 type tCPRouteLister struct {
-	listers.ResourceIndexer[*v1alpha2.TCPRoute]
+	listers.ResourceIndexer[*apisv1alpha2.TCPRoute]
 }
 
 // NewTCPRouteLister returns a new TCPRouteLister.
 func NewTCPRouteLister(indexer cache.Indexer) TCPRouteLister {
-	return &tCPRouteLister{listers.New[*v1alpha2.TCPRoute](indexer, v1alpha2.Resource("tcproute"))}
+	return &tCPRouteLister{listers.New[*apisv1alpha2.TCPRoute](indexer, apisv1alpha2.Resource("tcproute"))}
 }
 
 // TCPRoutes returns an object that can list and get TCPRoutes.
 func (s *tCPRouteLister) TCPRoutes(namespace string) TCPRouteNamespaceLister {
-	return tCPRouteNamespaceLister{listers.NewNamespaced[*v1alpha2.TCPRoute](s.ResourceIndexer, namespace)}
+	return tCPRouteNamespaceLister{listers.NewNamespaced[*apisv1alpha2.TCPRoute](s.ResourceIndexer, namespace)}
 }
 
 // TCPRouteNamespaceLister helps list and get TCPRoutes.
@@ -56,15 +56,15 @@ func (s *tCPRouteLister) TCPRoutes(namespace string) TCPRouteNamespaceLister {
 type TCPRouteNamespaceLister interface {
 	// List lists all TCPRoutes in the indexer for a given namespace.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha2.TCPRoute, err error)
+	List(selector labels.Selector) (ret []*apisv1alpha2.TCPRoute, err error)
 	// Get retrieves the TCPRoute from the indexer for a given namespace and name.
 	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1alpha2.TCPRoute, error)
+	Get(name string) (*apisv1alpha2.TCPRoute, error)
 	TCPRouteNamespaceListerExpansion
 }
 
 // tCPRouteNamespaceLister implements the TCPRouteNamespaceLister
 // interface.
 type tCPRouteNamespaceLister struct {
-	listers.ResourceIndexer[*v1alpha2.TCPRoute]
+	listers.ResourceIndexer[*apisv1alpha2.TCPRoute]
 }
diff --git a/pkg/client/listers/apis/v1alpha2/tlsroute.go b/pkg/client/listers/apis/v1alpha2/tlsroute.go
index ad021d0d..be8e9026 100644
--- a/pkg/client/listers/apis/v1alpha2/tlsroute.go
+++ b/pkg/client/listers/apis/v1alpha2/tlsroute.go
@@ -19,10 +19,10 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 )
 
 // TLSRouteLister helps list TLSRoutes.
@@ -30,7 +30,7 @@ import (
 type TLSRouteLister interface {
 	// List lists all TLSRoutes in the indexer.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha2.TLSRoute, err error)
+	List(selector labels.Selector) (ret []*apisv1alpha2.TLSRoute, err error)
 	// TLSRoutes returns an object that can list and get TLSRoutes.
 	TLSRoutes(namespace string) TLSRouteNamespaceLister
 	TLSRouteListerExpansion
@@ -38,17 +38,17 @@ type TLSRouteLister interface {
 
 // tLSRouteLister implements the TLSRouteLister interface.
 type tLSRouteLister struct {
-	listers.ResourceIndexer[*v1alpha2.TLSRoute]
+	listers.ResourceIndexer[*apisv1alpha2.TLSRoute]
 }
 
 // NewTLSRouteLister returns a new TLSRouteLister.
 func NewTLSRouteLister(indexer cache.Indexer) TLSRouteLister {
-	return &tLSRouteLister{listers.New[*v1alpha2.TLSRoute](indexer, v1alpha2.Resource("tlsroute"))}
+	return &tLSRouteLister{listers.New[*apisv1alpha2.TLSRoute](indexer, apisv1alpha2.Resource("tlsroute"))}
 }
 
 // TLSRoutes returns an object that can list and get TLSRoutes.
 func (s *tLSRouteLister) TLSRoutes(namespace string) TLSRouteNamespaceLister {
-	return tLSRouteNamespaceLister{listers.NewNamespaced[*v1alpha2.TLSRoute](s.ResourceIndexer, namespace)}
+	return tLSRouteNamespaceLister{listers.NewNamespaced[*apisv1alpha2.TLSRoute](s.ResourceIndexer, namespace)}
 }
 
 // TLSRouteNamespaceLister helps list and get TLSRoutes.
@@ -56,15 +56,15 @@ func (s *tLSRouteLister) TLSRoutes(namespace string) TLSRouteNamespaceLister {
 type TLSRouteNamespaceLister interface {
 	// List lists all TLSRoutes in the indexer for a given namespace.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha2.TLSRoute, err error)
+	List(selector labels.Selector) (ret []*apisv1alpha2.TLSRoute, err error)
 	// Get retrieves the TLSRoute from the indexer for a given namespace and name.
 	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1alpha2.TLSRoute, error)
+	Get(name string) (*apisv1alpha2.TLSRoute, error)
 	TLSRouteNamespaceListerExpansion
 }
 
 // tLSRouteNamespaceLister implements the TLSRouteNamespaceLister
 // interface.
 type tLSRouteNamespaceLister struct {
-	listers.ResourceIndexer[*v1alpha2.TLSRoute]
+	listers.ResourceIndexer[*apisv1alpha2.TLSRoute]
 }
diff --git a/pkg/client/listers/apis/v1alpha2/udproute.go b/pkg/client/listers/apis/v1alpha2/udproute.go
index e4e4a206..39834ce2 100644
--- a/pkg/client/listers/apis/v1alpha2/udproute.go
+++ b/pkg/client/listers/apis/v1alpha2/udproute.go
@@ -19,10 +19,10 @@ limitations under the License.
 package v1alpha2
 
 import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 )
 
 // UDPRouteLister helps list UDPRoutes.
@@ -30,7 +30,7 @@ import (
 type UDPRouteLister interface {
 	// List lists all UDPRoutes in the indexer.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha2.UDPRoute, err error)
+	List(selector labels.Selector) (ret []*apisv1alpha2.UDPRoute, err error)
 	// UDPRoutes returns an object that can list and get UDPRoutes.
 	UDPRoutes(namespace string) UDPRouteNamespaceLister
 	UDPRouteListerExpansion
@@ -38,17 +38,17 @@ type UDPRouteLister interface {
 
 // uDPRouteLister implements the UDPRouteLister interface.
 type uDPRouteLister struct {
-	listers.ResourceIndexer[*v1alpha2.UDPRoute]
+	listers.ResourceIndexer[*apisv1alpha2.UDPRoute]
 }
 
 // NewUDPRouteLister returns a new UDPRouteLister.
 func NewUDPRouteLister(indexer cache.Indexer) UDPRouteLister {
-	return &uDPRouteLister{listers.New[*v1alpha2.UDPRoute](indexer, v1alpha2.Resource("udproute"))}
+	return &uDPRouteLister{listers.New[*apisv1alpha2.UDPRoute](indexer, apisv1alpha2.Resource("udproute"))}
 }
 
 // UDPRoutes returns an object that can list and get UDPRoutes.
 func (s *uDPRouteLister) UDPRoutes(namespace string) UDPRouteNamespaceLister {
-	return uDPRouteNamespaceLister{listers.NewNamespaced[*v1alpha2.UDPRoute](s.ResourceIndexer, namespace)}
+	return uDPRouteNamespaceLister{listers.NewNamespaced[*apisv1alpha2.UDPRoute](s.ResourceIndexer, namespace)}
 }
 
 // UDPRouteNamespaceLister helps list and get UDPRoutes.
@@ -56,15 +56,15 @@ func (s *uDPRouteLister) UDPRoutes(namespace string) UDPRouteNamespaceLister {
 type UDPRouteNamespaceLister interface {
 	// List lists all UDPRoutes in the indexer for a given namespace.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha2.UDPRoute, err error)
+	List(selector labels.Selector) (ret []*apisv1alpha2.UDPRoute, err error)
 	// Get retrieves the UDPRoute from the indexer for a given namespace and name.
 	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1alpha2.UDPRoute, error)
+	Get(name string) (*apisv1alpha2.UDPRoute, error)
 	UDPRouteNamespaceListerExpansion
 }
 
 // uDPRouteNamespaceLister implements the UDPRouteNamespaceLister
 // interface.
 type uDPRouteNamespaceLister struct {
-	listers.ResourceIndexer[*v1alpha2.UDPRoute]
+	listers.ResourceIndexer[*apisv1alpha2.UDPRoute]
 }
diff --git a/pkg/client/listers/apis/v1alpha3/backendtlspolicy.go b/pkg/client/listers/apis/v1alpha3/backendtlspolicy.go
index c881c849..85d77da3 100644
--- a/pkg/client/listers/apis/v1alpha3/backendtlspolicy.go
+++ b/pkg/client/listers/apis/v1alpha3/backendtlspolicy.go
@@ -19,10 +19,10 @@ limitations under the License.
 package v1alpha3
 
 import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1alpha3 "sigs.k8s.io/gateway-api/apis/v1alpha3"
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisv1alpha3 "sigs.k8s.io/gateway-api/apis/v1alpha3"
 )
 
 // BackendTLSPolicyLister helps list BackendTLSPolicies.
@@ -30,7 +30,7 @@ import (
 type BackendTLSPolicyLister interface {
 	// List lists all BackendTLSPolicies in the indexer.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha3.BackendTLSPolicy, err error)
+	List(selector labels.Selector) (ret []*apisv1alpha3.BackendTLSPolicy, err error)
 	// BackendTLSPolicies returns an object that can list and get BackendTLSPolicies.
 	BackendTLSPolicies(namespace string) BackendTLSPolicyNamespaceLister
 	BackendTLSPolicyListerExpansion
@@ -38,17 +38,17 @@ type BackendTLSPolicyLister interface {
 
 // backendTLSPolicyLister implements the BackendTLSPolicyLister interface.
 type backendTLSPolicyLister struct {
-	listers.ResourceIndexer[*v1alpha3.BackendTLSPolicy]
+	listers.ResourceIndexer[*apisv1alpha3.BackendTLSPolicy]
 }
 
 // NewBackendTLSPolicyLister returns a new BackendTLSPolicyLister.
 func NewBackendTLSPolicyLister(indexer cache.Indexer) BackendTLSPolicyLister {
-	return &backendTLSPolicyLister{listers.New[*v1alpha3.BackendTLSPolicy](indexer, v1alpha3.Resource("backendtlspolicy"))}
+	return &backendTLSPolicyLister{listers.New[*apisv1alpha3.BackendTLSPolicy](indexer, apisv1alpha3.Resource("backendtlspolicy"))}
 }
 
 // BackendTLSPolicies returns an object that can list and get BackendTLSPolicies.
 func (s *backendTLSPolicyLister) BackendTLSPolicies(namespace string) BackendTLSPolicyNamespaceLister {
-	return backendTLSPolicyNamespaceLister{listers.NewNamespaced[*v1alpha3.BackendTLSPolicy](s.ResourceIndexer, namespace)}
+	return backendTLSPolicyNamespaceLister{listers.NewNamespaced[*apisv1alpha3.BackendTLSPolicy](s.ResourceIndexer, namespace)}
 }
 
 // BackendTLSPolicyNamespaceLister helps list and get BackendTLSPolicies.
@@ -56,15 +56,15 @@ func (s *backendTLSPolicyLister) BackendTLSPolicies(namespace string) BackendTLS
 type BackendTLSPolicyNamespaceLister interface {
 	// List lists all BackendTLSPolicies in the indexer for a given namespace.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha3.BackendTLSPolicy, err error)
+	List(selector labels.Selector) (ret []*apisv1alpha3.BackendTLSPolicy, err error)
 	// Get retrieves the BackendTLSPolicy from the indexer for a given namespace and name.
 	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1alpha3.BackendTLSPolicy, error)
+	Get(name string) (*apisv1alpha3.BackendTLSPolicy, error)
 	BackendTLSPolicyNamespaceListerExpansion
 }
 
 // backendTLSPolicyNamespaceLister implements the BackendTLSPolicyNamespaceLister
 // interface.
 type backendTLSPolicyNamespaceLister struct {
-	listers.ResourceIndexer[*v1alpha3.BackendTLSPolicy]
+	listers.ResourceIndexer[*apisv1alpha3.BackendTLSPolicy]
 }
diff --git a/pkg/client/listers/apis/v1beta1/gateway.go b/pkg/client/listers/apis/v1beta1/gateway.go
index 2b20013c..fc297bee 100644
--- a/pkg/client/listers/apis/v1beta1/gateway.go
+++ b/pkg/client/listers/apis/v1beta1/gateway.go
@@ -19,10 +19,10 @@ limitations under the License.
 package v1beta1
 
 import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 )
 
 // GatewayLister helps list Gateways.
@@ -30,7 +30,7 @@ import (
 type GatewayLister interface {
 	// List lists all Gateways in the indexer.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1beta1.Gateway, err error)
+	List(selector labels.Selector) (ret []*apisv1beta1.Gateway, err error)
 	// Gateways returns an object that can list and get Gateways.
 	Gateways(namespace string) GatewayNamespaceLister
 	GatewayListerExpansion
@@ -38,17 +38,17 @@ type GatewayLister interface {
 
 // gatewayLister implements the GatewayLister interface.
 type gatewayLister struct {
-	listers.ResourceIndexer[*v1beta1.Gateway]
+	listers.ResourceIndexer[*apisv1beta1.Gateway]
 }
 
 // NewGatewayLister returns a new GatewayLister.
 func NewGatewayLister(indexer cache.Indexer) GatewayLister {
-	return &gatewayLister{listers.New[*v1beta1.Gateway](indexer, v1beta1.Resource("gateway"))}
+	return &gatewayLister{listers.New[*apisv1beta1.Gateway](indexer, apisv1beta1.Resource("gateway"))}
 }
 
 // Gateways returns an object that can list and get Gateways.
 func (s *gatewayLister) Gateways(namespace string) GatewayNamespaceLister {
-	return gatewayNamespaceLister{listers.NewNamespaced[*v1beta1.Gateway](s.ResourceIndexer, namespace)}
+	return gatewayNamespaceLister{listers.NewNamespaced[*apisv1beta1.Gateway](s.ResourceIndexer, namespace)}
 }
 
 // GatewayNamespaceLister helps list and get Gateways.
@@ -56,15 +56,15 @@ func (s *gatewayLister) Gateways(namespace string) GatewayNamespaceLister {
 type GatewayNamespaceLister interface {
 	// List lists all Gateways in the indexer for a given namespace.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1beta1.Gateway, err error)
+	List(selector labels.Selector) (ret []*apisv1beta1.Gateway, err error)
 	// Get retrieves the Gateway from the indexer for a given namespace and name.
 	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1beta1.Gateway, error)
+	Get(name string) (*apisv1beta1.Gateway, error)
 	GatewayNamespaceListerExpansion
 }
 
 // gatewayNamespaceLister implements the GatewayNamespaceLister
 // interface.
 type gatewayNamespaceLister struct {
-	listers.ResourceIndexer[*v1beta1.Gateway]
+	listers.ResourceIndexer[*apisv1beta1.Gateway]
 }
diff --git a/pkg/client/listers/apis/v1beta1/gatewayclass.go b/pkg/client/listers/apis/v1beta1/gatewayclass.go
index c2ae2ec0..3c2343f0 100644
--- a/pkg/client/listers/apis/v1beta1/gatewayclass.go
+++ b/pkg/client/listers/apis/v1beta1/gatewayclass.go
@@ -19,10 +19,10 @@ limitations under the License.
 package v1beta1
 
 import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 )
 
 // GatewayClassLister helps list GatewayClasses.
@@ -30,19 +30,19 @@ import (
 type GatewayClassLister interface {
 	// List lists all GatewayClasses in the indexer.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1beta1.GatewayClass, err error)
+	List(selector labels.Selector) (ret []*apisv1beta1.GatewayClass, err error)
 	// Get retrieves the GatewayClass from the index for a given name.
 	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1beta1.GatewayClass, error)
+	Get(name string) (*apisv1beta1.GatewayClass, error)
 	GatewayClassListerExpansion
 }
 
 // gatewayClassLister implements the GatewayClassLister interface.
 type gatewayClassLister struct {
-	listers.ResourceIndexer[*v1beta1.GatewayClass]
+	listers.ResourceIndexer[*apisv1beta1.GatewayClass]
 }
 
 // NewGatewayClassLister returns a new GatewayClassLister.
 func NewGatewayClassLister(indexer cache.Indexer) GatewayClassLister {
-	return &gatewayClassLister{listers.New[*v1beta1.GatewayClass](indexer, v1beta1.Resource("gatewayclass"))}
+	return &gatewayClassLister{listers.New[*apisv1beta1.GatewayClass](indexer, apisv1beta1.Resource("gatewayclass"))}
 }
diff --git a/pkg/client/listers/apis/v1beta1/httproute.go b/pkg/client/listers/apis/v1beta1/httproute.go
index 24322698..62fe4b48 100644
--- a/pkg/client/listers/apis/v1beta1/httproute.go
+++ b/pkg/client/listers/apis/v1beta1/httproute.go
@@ -19,10 +19,10 @@ limitations under the License.
 package v1beta1
 
 import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 )
 
 // HTTPRouteLister helps list HTTPRoutes.
@@ -30,7 +30,7 @@ import (
 type HTTPRouteLister interface {
 	// List lists all HTTPRoutes in the indexer.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1beta1.HTTPRoute, err error)
+	List(selector labels.Selector) (ret []*apisv1beta1.HTTPRoute, err error)
 	// HTTPRoutes returns an object that can list and get HTTPRoutes.
 	HTTPRoutes(namespace string) HTTPRouteNamespaceLister
 	HTTPRouteListerExpansion
@@ -38,17 +38,17 @@ type HTTPRouteLister interface {
 
 // hTTPRouteLister implements the HTTPRouteLister interface.
 type hTTPRouteLister struct {
-	listers.ResourceIndexer[*v1beta1.HTTPRoute]
+	listers.ResourceIndexer[*apisv1beta1.HTTPRoute]
 }
 
 // NewHTTPRouteLister returns a new HTTPRouteLister.
 func NewHTTPRouteLister(indexer cache.Indexer) HTTPRouteLister {
-	return &hTTPRouteLister{listers.New[*v1beta1.HTTPRoute](indexer, v1beta1.Resource("httproute"))}
+	return &hTTPRouteLister{listers.New[*apisv1beta1.HTTPRoute](indexer, apisv1beta1.Resource("httproute"))}
 }
 
 // HTTPRoutes returns an object that can list and get HTTPRoutes.
 func (s *hTTPRouteLister) HTTPRoutes(namespace string) HTTPRouteNamespaceLister {
-	return hTTPRouteNamespaceLister{listers.NewNamespaced[*v1beta1.HTTPRoute](s.ResourceIndexer, namespace)}
+	return hTTPRouteNamespaceLister{listers.NewNamespaced[*apisv1beta1.HTTPRoute](s.ResourceIndexer, namespace)}
 }
 
 // HTTPRouteNamespaceLister helps list and get HTTPRoutes.
@@ -56,15 +56,15 @@ func (s *hTTPRouteLister) HTTPRoutes(namespace string) HTTPRouteNamespaceLister
 type HTTPRouteNamespaceLister interface {
 	// List lists all HTTPRoutes in the indexer for a given namespace.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1beta1.HTTPRoute, err error)
+	List(selector labels.Selector) (ret []*apisv1beta1.HTTPRoute, err error)
 	// Get retrieves the HTTPRoute from the indexer for a given namespace and name.
 	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1beta1.HTTPRoute, error)
+	Get(name string) (*apisv1beta1.HTTPRoute, error)
 	HTTPRouteNamespaceListerExpansion
 }
 
 // hTTPRouteNamespaceLister implements the HTTPRouteNamespaceLister
 // interface.
 type hTTPRouteNamespaceLister struct {
-	listers.ResourceIndexer[*v1beta1.HTTPRoute]
+	listers.ResourceIndexer[*apisv1beta1.HTTPRoute]
 }
diff --git a/pkg/client/listers/apis/v1beta1/referencegrant.go b/pkg/client/listers/apis/v1beta1/referencegrant.go
index 5263fef6..703018d0 100644
--- a/pkg/client/listers/apis/v1beta1/referencegrant.go
+++ b/pkg/client/listers/apis/v1beta1/referencegrant.go
@@ -19,10 +19,10 @@ limitations under the License.
 package v1beta1
 
 import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 )
 
 // ReferenceGrantLister helps list ReferenceGrants.
@@ -30,7 +30,7 @@ import (
 type ReferenceGrantLister interface {
 	// List lists all ReferenceGrants in the indexer.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1beta1.ReferenceGrant, err error)
+	List(selector labels.Selector) (ret []*apisv1beta1.ReferenceGrant, err error)
 	// ReferenceGrants returns an object that can list and get ReferenceGrants.
 	ReferenceGrants(namespace string) ReferenceGrantNamespaceLister
 	ReferenceGrantListerExpansion
@@ -38,17 +38,17 @@ type ReferenceGrantLister interface {
 
 // referenceGrantLister implements the ReferenceGrantLister interface.
 type referenceGrantLister struct {
-	listers.ResourceIndexer[*v1beta1.ReferenceGrant]
+	listers.ResourceIndexer[*apisv1beta1.ReferenceGrant]
 }
 
 // NewReferenceGrantLister returns a new ReferenceGrantLister.
 func NewReferenceGrantLister(indexer cache.Indexer) ReferenceGrantLister {
-	return &referenceGrantLister{listers.New[*v1beta1.ReferenceGrant](indexer, v1beta1.Resource("referencegrant"))}
+	return &referenceGrantLister{listers.New[*apisv1beta1.ReferenceGrant](indexer, apisv1beta1.Resource("referencegrant"))}
 }
 
 // ReferenceGrants returns an object that can list and get ReferenceGrants.
 func (s *referenceGrantLister) ReferenceGrants(namespace string) ReferenceGrantNamespaceLister {
-	return referenceGrantNamespaceLister{listers.NewNamespaced[*v1beta1.ReferenceGrant](s.ResourceIndexer, namespace)}
+	return referenceGrantNamespaceLister{listers.NewNamespaced[*apisv1beta1.ReferenceGrant](s.ResourceIndexer, namespace)}
 }
 
 // ReferenceGrantNamespaceLister helps list and get ReferenceGrants.
@@ -56,15 +56,15 @@ func (s *referenceGrantLister) ReferenceGrants(namespace string) ReferenceGrantN
 type ReferenceGrantNamespaceLister interface {
 	// List lists all ReferenceGrants in the indexer for a given namespace.
 	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1beta1.ReferenceGrant, err error)
+	List(selector labels.Selector) (ret []*apisv1beta1.ReferenceGrant, err error)
 	// Get retrieves the ReferenceGrant from the indexer for a given namespace and name.
 	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1beta1.ReferenceGrant, error)
+	Get(name string) (*apisv1beta1.ReferenceGrant, error)
 	ReferenceGrantNamespaceListerExpansion
 }
 
 // referenceGrantNamespaceLister implements the ReferenceGrantNamespaceLister
 // interface.
 type referenceGrantNamespaceLister struct {
-	listers.ResourceIndexer[*v1beta1.ReferenceGrant]
+	listers.ResourceIndexer[*apisv1beta1.ReferenceGrant]
 }
diff --git a/pkg/client/listers/apisx/v1alpha1/backendtrafficpolicy.go b/pkg/client/listers/apisx/v1alpha1/backendtrafficpolicy.go
deleted file mode 100644
index 5f6d3b4e..00000000
--- a/pkg/client/listers/apisx/v1alpha1/backendtrafficpolicy.go
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by lister-gen. DO NOT EDIT.
-
-package v1alpha1
-
-import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
-)
-
-// BackendTrafficPolicyLister helps list BackendTrafficPolicies.
-// All objects returned here must be treated as read-only.
-type BackendTrafficPolicyLister interface {
-	// List lists all BackendTrafficPolicies in the indexer.
-	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha1.BackendTrafficPolicy, err error)
-	// BackendTrafficPolicies returns an object that can list and get BackendTrafficPolicies.
-	BackendTrafficPolicies(namespace string) BackendTrafficPolicyNamespaceLister
-	BackendTrafficPolicyListerExpansion
-}
-
-// backendTrafficPolicyLister implements the BackendTrafficPolicyLister interface.
-type backendTrafficPolicyLister struct {
-	listers.ResourceIndexer[*v1alpha1.BackendTrafficPolicy]
-}
-
-// NewBackendTrafficPolicyLister returns a new BackendTrafficPolicyLister.
-func NewBackendTrafficPolicyLister(indexer cache.Indexer) BackendTrafficPolicyLister {
-	return &backendTrafficPolicyLister{listers.New[*v1alpha1.BackendTrafficPolicy](indexer, v1alpha1.Resource("backendtrafficpolicy"))}
-}
-
-// BackendTrafficPolicies returns an object that can list and get BackendTrafficPolicies.
-func (s *backendTrafficPolicyLister) BackendTrafficPolicies(namespace string) BackendTrafficPolicyNamespaceLister {
-	return backendTrafficPolicyNamespaceLister{listers.NewNamespaced[*v1alpha1.BackendTrafficPolicy](s.ResourceIndexer, namespace)}
-}
-
-// BackendTrafficPolicyNamespaceLister helps list and get BackendTrafficPolicies.
-// All objects returned here must be treated as read-only.
-type BackendTrafficPolicyNamespaceLister interface {
-	// List lists all BackendTrafficPolicies in the indexer for a given namespace.
-	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha1.BackendTrafficPolicy, err error)
-	// Get retrieves the BackendTrafficPolicy from the indexer for a given namespace and name.
-	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1alpha1.BackendTrafficPolicy, error)
-	BackendTrafficPolicyNamespaceListerExpansion
-}
-
-// backendTrafficPolicyNamespaceLister implements the BackendTrafficPolicyNamespaceLister
-// interface.
-type backendTrafficPolicyNamespaceLister struct {
-	listers.ResourceIndexer[*v1alpha1.BackendTrafficPolicy]
-}
diff --git a/pkg/client/listers/apisx/v1alpha1/expansion_generated.go b/pkg/client/listers/apisx/v1alpha1/expansion_generated.go
index cfeb378c..c136f658 100644
--- a/pkg/client/listers/apisx/v1alpha1/expansion_generated.go
+++ b/pkg/client/listers/apisx/v1alpha1/expansion_generated.go
@@ -18,18 +18,18 @@ limitations under the License.
 
 package v1alpha1
 
-// BackendTrafficPolicyListerExpansion allows custom methods to be added to
-// BackendTrafficPolicyLister.
-type BackendTrafficPolicyListerExpansion interface{}
+// XBackendTrafficPolicyListerExpansion allows custom methods to be added to
+// XBackendTrafficPolicyLister.
+type XBackendTrafficPolicyListerExpansion interface{}
 
-// BackendTrafficPolicyNamespaceListerExpansion allows custom methods to be added to
-// BackendTrafficPolicyNamespaceLister.
-type BackendTrafficPolicyNamespaceListerExpansion interface{}
+// XBackendTrafficPolicyNamespaceListerExpansion allows custom methods to be added to
+// XBackendTrafficPolicyNamespaceLister.
+type XBackendTrafficPolicyNamespaceListerExpansion interface{}
 
-// ListenerSetListerExpansion allows custom methods to be added to
-// ListenerSetLister.
-type ListenerSetListerExpansion interface{}
+// XListenerSetListerExpansion allows custom methods to be added to
+// XListenerSetLister.
+type XListenerSetListerExpansion interface{}
 
-// ListenerSetNamespaceListerExpansion allows custom methods to be added to
-// ListenerSetNamespaceLister.
-type ListenerSetNamespaceListerExpansion interface{}
+// XListenerSetNamespaceListerExpansion allows custom methods to be added to
+// XListenerSetNamespaceLister.
+type XListenerSetNamespaceListerExpansion interface{}
diff --git a/pkg/client/listers/apisx/v1alpha1/listenerset.go b/pkg/client/listers/apisx/v1alpha1/listenerset.go
deleted file mode 100644
index ab0fdc1d..00000000
--- a/pkg/client/listers/apisx/v1alpha1/listenerset.go
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by lister-gen. DO NOT EDIT.
-
-package v1alpha1
-
-import (
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/listers"
-	"k8s.io/client-go/tools/cache"
-	v1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
-)
-
-// ListenerSetLister helps list ListenerSets.
-// All objects returned here must be treated as read-only.
-type ListenerSetLister interface {
-	// List lists all ListenerSets in the indexer.
-	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha1.ListenerSet, err error)
-	// ListenerSets returns an object that can list and get ListenerSets.
-	ListenerSets(namespace string) ListenerSetNamespaceLister
-	ListenerSetListerExpansion
-}
-
-// listenerSetLister implements the ListenerSetLister interface.
-type listenerSetLister struct {
-	listers.ResourceIndexer[*v1alpha1.ListenerSet]
-}
-
-// NewListenerSetLister returns a new ListenerSetLister.
-func NewListenerSetLister(indexer cache.Indexer) ListenerSetLister {
-	return &listenerSetLister{listers.New[*v1alpha1.ListenerSet](indexer, v1alpha1.Resource("listenerset"))}
-}
-
-// ListenerSets returns an object that can list and get ListenerSets.
-func (s *listenerSetLister) ListenerSets(namespace string) ListenerSetNamespaceLister {
-	return listenerSetNamespaceLister{listers.NewNamespaced[*v1alpha1.ListenerSet](s.ResourceIndexer, namespace)}
-}
-
-// ListenerSetNamespaceLister helps list and get ListenerSets.
-// All objects returned here must be treated as read-only.
-type ListenerSetNamespaceLister interface {
-	// List lists all ListenerSets in the indexer for a given namespace.
-	// Objects returned here must be treated as read-only.
-	List(selector labels.Selector) (ret []*v1alpha1.ListenerSet, err error)
-	// Get retrieves the ListenerSet from the indexer for a given namespace and name.
-	// Objects returned here must be treated as read-only.
-	Get(name string) (*v1alpha1.ListenerSet, error)
-	ListenerSetNamespaceListerExpansion
-}
-
-// listenerSetNamespaceLister implements the ListenerSetNamespaceLister
-// interface.
-type listenerSetNamespaceLister struct {
-	listers.ResourceIndexer[*v1alpha1.ListenerSet]
-}
diff --git a/pkg/client/listers/apisx/v1alpha1/xbackendtrafficpolicy.go b/pkg/client/listers/apisx/v1alpha1/xbackendtrafficpolicy.go
new file mode 100644
index 00000000..a4cb26ab
--- /dev/null
+++ b/pkg/client/listers/apisx/v1alpha1/xbackendtrafficpolicy.go
@@ -0,0 +1,70 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Code generated by lister-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisxv1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
+)
+
+// XBackendTrafficPolicyLister helps list XBackendTrafficPolicies.
+// All objects returned here must be treated as read-only.
+type XBackendTrafficPolicyLister interface {
+	// List lists all XBackendTrafficPolicies in the indexer.
+	// Objects returned here must be treated as read-only.
+	List(selector labels.Selector) (ret []*apisxv1alpha1.XBackendTrafficPolicy, err error)
+	// XBackendTrafficPolicies returns an object that can list and get XBackendTrafficPolicies.
+	XBackendTrafficPolicies(namespace string) XBackendTrafficPolicyNamespaceLister
+	XBackendTrafficPolicyListerExpansion
+}
+
+// xBackendTrafficPolicyLister implements the XBackendTrafficPolicyLister interface.
+type xBackendTrafficPolicyLister struct {
+	listers.ResourceIndexer[*apisxv1alpha1.XBackendTrafficPolicy]
+}
+
+// NewXBackendTrafficPolicyLister returns a new XBackendTrafficPolicyLister.
+func NewXBackendTrafficPolicyLister(indexer cache.Indexer) XBackendTrafficPolicyLister {
+	return &xBackendTrafficPolicyLister{listers.New[*apisxv1alpha1.XBackendTrafficPolicy](indexer, apisxv1alpha1.Resource("xbackendtrafficpolicy"))}
+}
+
+// XBackendTrafficPolicies returns an object that can list and get XBackendTrafficPolicies.
+func (s *xBackendTrafficPolicyLister) XBackendTrafficPolicies(namespace string) XBackendTrafficPolicyNamespaceLister {
+	return xBackendTrafficPolicyNamespaceLister{listers.NewNamespaced[*apisxv1alpha1.XBackendTrafficPolicy](s.ResourceIndexer, namespace)}
+}
+
+// XBackendTrafficPolicyNamespaceLister helps list and get XBackendTrafficPolicies.
+// All objects returned here must be treated as read-only.
+type XBackendTrafficPolicyNamespaceLister interface {
+	// List lists all XBackendTrafficPolicies in the indexer for a given namespace.
+	// Objects returned here must be treated as read-only.
+	List(selector labels.Selector) (ret []*apisxv1alpha1.XBackendTrafficPolicy, err error)
+	// Get retrieves the XBackendTrafficPolicy from the indexer for a given namespace and name.
+	// Objects returned here must be treated as read-only.
+	Get(name string) (*apisxv1alpha1.XBackendTrafficPolicy, error)
+	XBackendTrafficPolicyNamespaceListerExpansion
+}
+
+// xBackendTrafficPolicyNamespaceLister implements the XBackendTrafficPolicyNamespaceLister
+// interface.
+type xBackendTrafficPolicyNamespaceLister struct {
+	listers.ResourceIndexer[*apisxv1alpha1.XBackendTrafficPolicy]
+}
diff --git a/pkg/client/listers/apisx/v1alpha1/xlistenerset.go b/pkg/client/listers/apisx/v1alpha1/xlistenerset.go
new file mode 100644
index 00000000..4ff5d093
--- /dev/null
+++ b/pkg/client/listers/apisx/v1alpha1/xlistenerset.go
@@ -0,0 +1,70 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Code generated by lister-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+	labels "k8s.io/apimachinery/pkg/labels"
+	listers "k8s.io/client-go/listers"
+	cache "k8s.io/client-go/tools/cache"
+	apisxv1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
+)
+
+// XListenerSetLister helps list XListenerSets.
+// All objects returned here must be treated as read-only.
+type XListenerSetLister interface {
+	// List lists all XListenerSets in the indexer.
+	// Objects returned here must be treated as read-only.
+	List(selector labels.Selector) (ret []*apisxv1alpha1.XListenerSet, err error)
+	// XListenerSets returns an object that can list and get XListenerSets.
+	XListenerSets(namespace string) XListenerSetNamespaceLister
+	XListenerSetListerExpansion
+}
+
+// xListenerSetLister implements the XListenerSetLister interface.
+type xListenerSetLister struct {
+	listers.ResourceIndexer[*apisxv1alpha1.XListenerSet]
+}
+
+// NewXListenerSetLister returns a new XListenerSetLister.
+func NewXListenerSetLister(indexer cache.Indexer) XListenerSetLister {
+	return &xListenerSetLister{listers.New[*apisxv1alpha1.XListenerSet](indexer, apisxv1alpha1.Resource("xlistenerset"))}
+}
+
+// XListenerSets returns an object that can list and get XListenerSets.
+func (s *xListenerSetLister) XListenerSets(namespace string) XListenerSetNamespaceLister {
+	return xListenerSetNamespaceLister{listers.NewNamespaced[*apisxv1alpha1.XListenerSet](s.ResourceIndexer, namespace)}
+}
+
+// XListenerSetNamespaceLister helps list and get XListenerSets.
+// All objects returned here must be treated as read-only.
+type XListenerSetNamespaceLister interface {
+	// List lists all XListenerSets in the indexer for a given namespace.
+	// Objects returned here must be treated as read-only.
+	List(selector labels.Selector) (ret []*apisxv1alpha1.XListenerSet, err error)
+	// Get retrieves the XListenerSet from the indexer for a given namespace and name.
+	// Objects returned here must be treated as read-only.
+	Get(name string) (*apisxv1alpha1.XListenerSet, error)
+	XListenerSetNamespaceListerExpansion
+}
+
+// xListenerSetNamespaceLister implements the XListenerSetNamespaceLister
+// interface.
+type xListenerSetNamespaceLister struct {
+	listers.ResourceIndexer[*apisxv1alpha1.XListenerSet]
+}
diff --git a/pkg/consts/consts.go b/pkg/consts/consts.go
index a40af3af..3ef39805 100644
--- a/pkg/consts/consts.go
+++ b/pkg/consts/consts.go
@@ -27,7 +27,7 @@ const (
 
 	// BundleVersion is the value used for the "gateway.networking.k8s.io/bundle-version" annotation.
 	// These value must be updated during the release process.
-	BundleVersion = "v1.2.1"
+	BundleVersion = "v1.3.0"
 
 	// ApprovalLink is the value used for the "api-approved.kubernetes.io" annotation.
 	// These value must be updated during the release process.
diff --git a/pkg/features/gateway.go b/pkg/features/gateway.go
index 7fc1a20d..e6cf715f 100644
--- a/pkg/features/gateway.go
+++ b/pkg/features/gateway.go
@@ -60,6 +60,10 @@ const (
 	// SupportGatewayInfrastructureAnnotations option indicates support for
 	// spec.infrastructure.annotations and spec.infrastructure.labels
 	SupportGatewayInfrastructurePropagation FeatureName = "GatewayInfrastructurePropagation"
+
+	//  SupportGatewayAddressEmpty option indicates support for an empty
+	//  spec.addresses.value field
+	SupportGatewayAddressEmpty FeatureName = "GatewayAddressEmpty"
 )
 
 var (
@@ -81,7 +85,12 @@ var (
 	// GatewayInfrastructurePropagationFeature contains metadata for the GatewayInfrastructurePropagation feature.
 	GatewayInfrastructurePropagationFeature = Feature{
 		Name:    SupportGatewayInfrastructurePropagation,
-		Channel: FeatureChannelExperimental,
+		Channel: FeatureChannelStandard,
+	}
+	// GatewayAddressEmptyFeature contains metadata for the SupportGatewayAddressEmpty feature.
+	GatewayEmptyAddressFeature = Feature{
+		Name:    SupportGatewayAddressEmpty,
+		Channel: FeatureChannelStandard,
 	}
 )
 
@@ -92,4 +101,5 @@ var GatewayExtendedFeatures = sets.New(
 	GatewayStaticAddressesFeature,
 	GatewayHTTPListenerIsolationFeature,
 	GatewayInfrastructurePropagationFeature,
+	GatewayEmptyAddressFeature,
 )
diff --git a/pkg/features/grpcroute.go b/pkg/features/grpcroute.go
index ffa3f383..3ee21b41 100644
--- a/pkg/features/grpcroute.go
+++ b/pkg/features/grpcroute.go
@@ -19,7 +19,7 @@ package features
 import "k8s.io/apimachinery/pkg/util/sets"
 
 // -----------------------------------------------------------------------------
-// Features - GRPCRoute Conformance
+// Features - GRPCRoute Conformance (Core)
 // -----------------------------------------------------------------------------
 
 const (
@@ -38,3 +38,25 @@ var GRPCRouteFeature = Feature{
 var GRPCRouteCoreFeatures = sets.New(
 	GRPCRouteFeature,
 )
+
+// -----------------------------------------------------------------------------
+// Features - GRPCRoute Conformance (Extended)
+// -----------------------------------------------------------------------------
+
+const (
+	// This option indicates support for the name field in the GRPCRouteRule (extended conformance)
+	SupportGRPCRouteNamedRouteRule FeatureName = "GRPCRouteNamedRouteRule"
+)
+
+// GRPCRouteNamedRouteRule contains metadata for the SupportGRPCRouteNamedRouteRule feature.
+var GRPCRouteNamedRouteRule = Feature{
+	Name:    SupportGRPCRouteNamedRouteRule,
+	Channel: FeatureChannelStandard,
+}
+
+// GRPCRouteExtendedFeatures includes all extended features for GRPCRoute
+// conformance and can be used to opt-in to run all GRPCRoute extended features tests.
+// This does not include any Core Features.
+var GRPCRouteExtendedFeatures = sets.New(
+	GRPCRouteNamedRouteRule,
+)
diff --git a/pkg/features/httproute.go b/pkg/features/httproute.go
index 82640984..6c484da9 100644
--- a/pkg/features/httproute.go
+++ b/pkg/features/httproute.go
@@ -97,6 +97,9 @@ const (
 
 	// This option indicates support for HTTPRoute with a backendref with an appProtocol 'kubernetes.io/ws' (extended conformance)
 	SupportHTTPRouteBackendProtocolWebSocket FeatureName = "HTTPRouteBackendProtocolWebSocket"
+
+	// This option indicates support for the name field in the HTTPRouteRule (extended conformance)
+	SupportHTTPRouteNamedRouteRule FeatureName = "HTTPRouteNamedRouteRule"
 )
 
 var (
@@ -163,7 +166,7 @@ var (
 	// HTTPRouteRequestPercentageMirrorFeature contains metadata for the HTTPRouteRequestMultipleMirrors feature.
 	HTTPRouteRequestPercentageMirrorFeature = Feature{
 		Name:    SupportHTTPRouteRequestPercentageMirror,
-		Channel: FeatureChannelExperimental,
+		Channel: FeatureChannelStandard,
 	}
 	// HTTPRouteRequestTimeoutFeature contains metadata for the HTTPRouteRequestTimeout feature.
 	HTTPRouteRequestTimeoutFeature = Feature{
@@ -190,6 +193,11 @@ var (
 		Name:    SupportHTTPRouteBackendProtocolWebSocket,
 		Channel: FeatureChannelStandard,
 	}
+	// HTTPRouteNamedRouteRule contains metadata for the SupportHTTPRouteNamedRouteRule feature.
+	HTTPRouteNamedRouteRule = Feature{
+		Name:    SupportHTTPRouteNamedRouteRule,
+		Channel: FeatureChannelStandard,
+	}
 )
 
 // HTTPRouteExtendedFeatures includes all extended features for HTTPRoute
@@ -214,4 +222,5 @@ var HTTPRouteExtendedFeatures = sets.New(
 	HTTPRouteParentRefPortFeature,
 	HTTPRouteBackendProtocolH2CFeature,
 	HTTPRouteBackendProtocolWebSocketFeature,
+	HTTPRouteNamedRouteRule,
 )
diff --git a/pkg/features/mesh.go b/pkg/features/mesh.go
index b52a7dff..910e3c96 100644
--- a/pkg/features/mesh.go
+++ b/pkg/features/mesh.go
@@ -48,6 +48,20 @@ const (
 	SupportMeshClusterIPMatching FeatureName = "MeshClusterIPMatching"
 	// This option indicates support for "consumer" routes, where a namespace creates a route for a service in another namespace.
 	SupportMeshConsumerRoute FeatureName = "MeshConsumerRoute"
+	// This option indicates mesh support for HTTPRoute path rewrite (extended conformance)
+	SupportMeshHTTPRouteRewritePath FeatureName = "MeshHTTPRouteRewritePath"
+	// This option indicates mesh support for HTTPRoute scheme redirect (extended conformance)
+	SupportMeshHTTPRouteSchemeRedirect FeatureName = "MeshHTTPRouteSchemeRedirect"
+	// This option indicates mesh support for HTTPRoute port redirect (extended conformance)
+	SupportMeshHTTPRouteRedirectPort FeatureName = "MeshHTTPRouteRedirectPort"
+	// This option indicates mesh support for HTTPRoute path redirect (extended conformance)
+	SupportMeshHTTPRouteRedirectPath FeatureName = "MeshHTTPRouteRedirectPath"
+	// This option indicates support for HTTPRoute backend request header modification
+	SupportMeshHTTPRouteBackendRequestHeaderModification FeatureName = "MeshHTTPRouteBackendRequestHeaderModification"
+	// This option indicates mesh support for HTTPRoute query param matching (extended conformance).
+	SupportMeshHTTPRouteQueryParamMatching FeatureName = "MeshHTTPRouteQueryParamMatching"
+	// This option indicates support for the name field in the HTTPRouteRule (extended conformance)
+	SupportMeshHTTPRouteNamedRouteRule FeatureName = "MeshHTTPRouteNamedRouteRule"
 )
 
 var (
@@ -61,6 +75,48 @@ var (
 		Name:    SupportMeshConsumerRoute,
 		Channel: FeatureChannelStandard,
 	}
+
+	// MeshHTTPRouteRewritePath contains metadata for the MeshHTTPRouteRewritePath feature.
+	MeshHTTPRouteRewritePath = Feature{
+		Name:    SupportMeshHTTPRouteRewritePath,
+		Channel: FeatureChannelStandard,
+	}
+
+	// MeshHTTPRouteSchemeRedirect contains metadata for the MeshHTTPRouteSchemeRedirect feature.
+	MeshHTTPRouteSchemeRedirect = Feature{
+		Name:    SupportMeshHTTPRouteSchemeRedirect,
+		Channel: FeatureChannelStandard,
+	}
+
+	// MeshHTTPRouteRedirectPort contains metadata for the MeshHTTPRouteRedirectPort feature.
+	MeshHTTPRouteRedirectPort = Feature{
+		Name:    SupportMeshHTTPRouteRedirectPort,
+		Channel: FeatureChannelStandard,
+	}
+
+	// MeshHTTPRouteRedirectPath contains metadata for the MeshHTTPRouteRedirectPath feature.
+	MeshHTTPRouteRedirectPath = Feature{
+		Name:    SupportMeshHTTPRouteRedirectPath,
+		Channel: FeatureChannelStandard,
+	}
+
+	// MeshHTTPRouteRedirectPath contains metadata for the MeshHTTPRouteRedirectPath feature.
+	MeshHTTPRouteBackendRequestHeaderModification = Feature{
+		Name:    SupportMeshHTTPRouteBackendRequestHeaderModification,
+		Channel: FeatureChannelStandard,
+	}
+
+	// MeshHTTPRouteRedirectPath contains metadata for the MeshHTTPRouteRedirectPath feature.
+	MeshHTTPRouteQueryParamMatching = Feature{
+		Name:    SupportMeshHTTPRouteQueryParamMatching,
+		Channel: FeatureChannelStandard,
+	}
+
+	// MeshHTTPRouteNamedRouteRule contains metadata for the MeshHTTPRouteNamedRouteRule feature.
+	MeshHTTPRouteNamedRouteRule = Feature{
+		Name:    SupportMeshHTTPRouteNamedRouteRule,
+		Channel: FeatureChannelStandard,
+	}
 )
 
 // MeshExtendedFeatures includes all the supported features for the service mesh at
@@ -68,4 +124,11 @@ var (
 var MeshExtendedFeatures = sets.New(
 	MeshClusterIPMatchingFeature,
 	MeshConsumerRouteFeature,
+	MeshHTTPRouteRewritePath,
+	MeshHTTPRouteSchemeRedirect,
+	MeshHTTPRouteRedirectPort,
+	MeshHTTPRouteRedirectPath,
+	MeshHTTPRouteBackendRequestHeaderModification,
+	MeshHTTPRouteQueryParamMatching,
+	MeshHTTPRouteNamedRouteRule,
 )
diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go
index 819dcf4b..99214c9f 100644
--- a/pkg/generated/openapi/zz_generated.openapi.go
+++ b/pkg/generated/openapi/zz_generated.openapi.go
@@ -101,7 +101,6 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
 		"sigs.k8s.io/gateway-api/apis/v1.GRPCRouteSpec":                                   schema_sigsk8sio_gateway_api_apis_v1_GRPCRouteSpec(ref),
 		"sigs.k8s.io/gateway-api/apis/v1.GRPCRouteStatus":                                 schema_sigsk8sio_gateway_api_apis_v1_GRPCRouteStatus(ref),
 		"sigs.k8s.io/gateway-api/apis/v1.Gateway":                                         schema_sigsk8sio_gateway_api_apis_v1_Gateway(ref),
-		"sigs.k8s.io/gateway-api/apis/v1.GatewayAddress":                                  schema_sigsk8sio_gateway_api_apis_v1_GatewayAddress(ref),
 		"sigs.k8s.io/gateway-api/apis/v1.GatewayBackendTLS":                               schema_sigsk8sio_gateway_api_apis_v1_GatewayBackendTLS(ref),
 		"sigs.k8s.io/gateway-api/apis/v1.GatewayClass":                                    schema_sigsk8sio_gateway_api_apis_v1_GatewayClass(ref),
 		"sigs.k8s.io/gateway-api/apis/v1.GatewayClassList":                                schema_sigsk8sio_gateway_api_apis_v1_GatewayClassList(ref),
@@ -110,6 +109,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
 		"sigs.k8s.io/gateway-api/apis/v1.GatewayInfrastructure":                           schema_sigsk8sio_gateway_api_apis_v1_GatewayInfrastructure(ref),
 		"sigs.k8s.io/gateway-api/apis/v1.GatewayList":                                     schema_sigsk8sio_gateway_api_apis_v1_GatewayList(ref),
 		"sigs.k8s.io/gateway-api/apis/v1.GatewaySpec":                                     schema_sigsk8sio_gateway_api_apis_v1_GatewaySpec(ref),
+		"sigs.k8s.io/gateway-api/apis/v1.GatewaySpecAddress":                              schema_sigsk8sio_gateway_api_apis_v1_GatewaySpecAddress(ref),
 		"sigs.k8s.io/gateway-api/apis/v1.GatewayStatus":                                   schema_sigsk8sio_gateway_api_apis_v1_GatewayStatus(ref),
 		"sigs.k8s.io/gateway-api/apis/v1.GatewayStatusAddress":                            schema_sigsk8sio_gateway_api_apis_v1_GatewayStatusAddress(ref),
 		"sigs.k8s.io/gateway-api/apis/v1.GatewayTLSConfig":                                schema_sigsk8sio_gateway_api_apis_v1_GatewayTLSConfig(ref),
@@ -149,9 +149,6 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
 		"sigs.k8s.io/gateway-api/apis/v1.SessionPersistence":                              schema_sigsk8sio_gateway_api_apis_v1_SessionPersistence(ref),
 		"sigs.k8s.io/gateway-api/apis/v1.SupportedFeature":                                schema_sigsk8sio_gateway_api_apis_v1_SupportedFeature(ref),
 		"sigs.k8s.io/gateway-api/apis/v1.supportedFeatureInternal":                        schema_sigsk8sio_gateway_api_apis_v1_supportedFeatureInternal(ref),
-		"sigs.k8s.io/gateway-api/apis/v1alpha2.BackendLBPolicy":                           schema_sigsk8sio_gateway_api_apis_v1alpha2_BackendLBPolicy(ref),
-		"sigs.k8s.io/gateway-api/apis/v1alpha2.BackendLBPolicyList":                       schema_sigsk8sio_gateway_api_apis_v1alpha2_BackendLBPolicyList(ref),
-		"sigs.k8s.io/gateway-api/apis/v1alpha2.BackendLBPolicySpec":                       schema_sigsk8sio_gateway_api_apis_v1alpha2_BackendLBPolicySpec(ref),
 		"sigs.k8s.io/gateway-api/apis/v1alpha2.GRPCRoute":                                 schema_sigsk8sio_gateway_api_apis_v1alpha2_GRPCRoute(ref),
 		"sigs.k8s.io/gateway-api/apis/v1alpha2.GRPCRouteList":                             schema_sigsk8sio_gateway_api_apis_v1alpha2_GRPCRouteList(ref),
 		"sigs.k8s.io/gateway-api/apis/v1alpha2.LocalPolicyTargetReference":                schema_sigsk8sio_gateway_api_apis_v1alpha2_LocalPolicyTargetReference(ref),
@@ -192,18 +189,19 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
 		"sigs.k8s.io/gateway-api/apis/v1beta1.ReferenceGrantList":                         schema_sigsk8sio_gateway_api_apis_v1beta1_ReferenceGrantList(ref),
 		"sigs.k8s.io/gateway-api/apis/v1beta1.ReferenceGrantSpec":                         schema_sigsk8sio_gateway_api_apis_v1beta1_ReferenceGrantSpec(ref),
 		"sigs.k8s.io/gateway-api/apis/v1beta1.ReferenceGrantTo":                           schema_sigsk8sio_gateway_api_apis_v1beta1_ReferenceGrantTo(ref),
-		"sigs.k8s.io/gateway-api/apisx/v1alpha1.BackendTrafficPolicy":                     schema_sigsk8sio_gateway_api_apisx_v1alpha1_BackendTrafficPolicy(ref),
-		"sigs.k8s.io/gateway-api/apisx/v1alpha1.BackendTrafficPolicyList":                 schema_sigsk8sio_gateway_api_apisx_v1alpha1_BackendTrafficPolicyList(ref),
 		"sigs.k8s.io/gateway-api/apisx/v1alpha1.BackendTrafficPolicySpec":                 schema_sigsk8sio_gateway_api_apisx_v1alpha1_BackendTrafficPolicySpec(ref),
+		"sigs.k8s.io/gateway-api/apisx/v1alpha1.BudgetDetails":                            schema_sigsk8sio_gateway_api_apisx_v1alpha1_BudgetDetails(ref),
 		"sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerEntry":                            schema_sigsk8sio_gateway_api_apisx_v1alpha1_ListenerEntry(ref),
 		"sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerEntryStatus":                      schema_sigsk8sio_gateway_api_apisx_v1alpha1_ListenerEntryStatus(ref),
-		"sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerSet":                              schema_sigsk8sio_gateway_api_apisx_v1alpha1_ListenerSet(ref),
-		"sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerSetList":                          schema_sigsk8sio_gateway_api_apisx_v1alpha1_ListenerSetList(ref),
 		"sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerSetSpec":                          schema_sigsk8sio_gateway_api_apisx_v1alpha1_ListenerSetSpec(ref),
 		"sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerSetStatus":                        schema_sigsk8sio_gateway_api_apisx_v1alpha1_ListenerSetStatus(ref),
 		"sigs.k8s.io/gateway-api/apisx/v1alpha1.ParentGatewayReference":                   schema_sigsk8sio_gateway_api_apisx_v1alpha1_ParentGatewayReference(ref),
 		"sigs.k8s.io/gateway-api/apisx/v1alpha1.RequestRate":                              schema_sigsk8sio_gateway_api_apisx_v1alpha1_RequestRate(ref),
 		"sigs.k8s.io/gateway-api/apisx/v1alpha1.RetryConstraint":                          schema_sigsk8sio_gateway_api_apisx_v1alpha1_RetryConstraint(ref),
+		"sigs.k8s.io/gateway-api/apisx/v1alpha1.XBackendTrafficPolicy":                    schema_sigsk8sio_gateway_api_apisx_v1alpha1_XBackendTrafficPolicy(ref),
+		"sigs.k8s.io/gateway-api/apisx/v1alpha1.XBackendTrafficPolicyList":                schema_sigsk8sio_gateway_api_apisx_v1alpha1_XBackendTrafficPolicyList(ref),
+		"sigs.k8s.io/gateway-api/apisx/v1alpha1.XListenerSet":                             schema_sigsk8sio_gateway_api_apisx_v1alpha1_XListenerSet(ref),
+		"sigs.k8s.io/gateway-api/apisx/v1alpha1.XListenerSetList":                         schema_sigsk8sio_gateway_api_apisx_v1alpha1_XListenerSetList(ref),
 	}
 }
 
@@ -841,6 +839,13 @@ func schema_pkg_apis_meta_v1_DeleteOptions(ref common.ReferenceCallback) common.
 							},
 						},
 					},
+					"ignoreStoreReadErrorWithClusterBreakingPotential": {
+						SchemaProps: spec.SchemaProps{
+							Description: "if set to true, it will trigger an unsafe deletion of the resource in case the normal deletion flow fails with a corrupt object error. A resource is considered corrupt if it can not be retrieved from the underlying storage successfully because of a) its data can not be transformed e.g. decryption failure, or b) it fails to decode into an object. NOTE: unsafe deletion ignores finalizer constraints, skips precondition checks, and removes the object from the storage. WARNING: This may potentially break the cluster if the workload associated with the resource being unsafe-deleted relies on normal deletion flow. Use only if you REALLY know what you are doing. The default value is false, and the user must opt in to enable it",
+							Type:        []string{"boolean"},
+							Format:      "",
+						},
+					},
 				},
 			},
 		},
@@ -2728,16 +2733,46 @@ func schema_k8sio_apimachinery_pkg_version_Info(ref common.ReferenceCallback) co
 				Properties: map[string]spec.Schema{
 					"major": {
 						SchemaProps: spec.SchemaProps{
-							Default: "",
-							Type:    []string{"string"},
-							Format:  "",
+							Description: "Major is the major version of the binary version",
+							Default:     "",
+							Type:        []string{"string"},
+							Format:      "",
 						},
 					},
 					"minor": {
 						SchemaProps: spec.SchemaProps{
-							Default: "",
-							Type:    []string{"string"},
-							Format:  "",
+							Description: "Minor is the minor version of the binary version",
+							Default:     "",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"emulationMajor": {
+						SchemaProps: spec.SchemaProps{
+							Description: "EmulationMajor is the major version of the emulation version",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"emulationMinor": {
+						SchemaProps: spec.SchemaProps{
+							Description: "EmulationMinor is the minor version of the emulation version",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"minCompatibilityMajor": {
+						SchemaProps: spec.SchemaProps{
+							Description: "MinCompatibilityMajor is the major version of the minimum compatibility version",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"minCompatibilityMinor": {
+						SchemaProps: spec.SchemaProps{
+							Description: "MinCompatibilityMinor is the minor version of the minimum compatibility version",
+							Type:        []string{"string"},
+							Format:      "",
 						},
 					},
 					"gitVersion": {
@@ -3404,7 +3439,7 @@ func schema_sigsk8sio_gateway_api_apis_v1_GRPCRouteRule(ref common.ReferenceCall
 				Properties: map[string]spec.Schema{
 					"name": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Name is the name of the route rule. This name MUST be unique within a Route if it is set.\n\nSupport: Extended <gateway:experimental>",
+							Description: "Name is the name of the route rule. This name MUST be unique within a Route if it is set.\n\nSupport: Extended",
 							Type:        []string{"string"},
 							Format:      "",
 						},
@@ -3603,35 +3638,6 @@ func schema_sigsk8sio_gateway_api_apis_v1_Gateway(ref common.ReferenceCallback)
 	}
 }
 
-func schema_sigsk8sio_gateway_api_apis_v1_GatewayAddress(ref common.ReferenceCallback) common.OpenAPIDefinition {
-	return common.OpenAPIDefinition{
-		Schema: spec.Schema{
-			SchemaProps: spec.SchemaProps{
-				Description: "GatewayAddress describes an address that can be bound to a Gateway.",
-				Type:        []string{"object"},
-				Properties: map[string]spec.Schema{
-					"type": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Type of the address.",
-							Type:        []string{"string"},
-							Format:      "",
-						},
-					},
-					"value": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Value of the address. The validity of the values will depend on the type and support by the controller.\n\nExamples: `1.2.3.4`, `128::1`, `my-ip-address`.",
-							Default:     "",
-							Type:        []string{"string"},
-							Format:      "",
-						},
-					},
-				},
-				Required: []string{"value"},
-			},
-		},
-	}
-}
-
 func schema_sigsk8sio_gateway_api_apis_v1_GatewayBackendTLS(ref common.ReferenceCallback) common.OpenAPIDefinition {
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
@@ -3994,7 +4000,7 @@ func schema_sigsk8sio_gateway_api_apis_v1_GatewaySpec(ref common.ReferenceCallba
 								Schema: &spec.Schema{
 									SchemaProps: spec.SchemaProps{
 										Default: map[string]interface{}{},
-										Ref:     ref("sigs.k8s.io/gateway-api/apis/v1.GatewayAddress"),
+										Ref:     ref("sigs.k8s.io/gateway-api/apis/v1.GatewaySpecAddress"),
 									},
 								},
 							},
@@ -4023,7 +4029,34 @@ func schema_sigsk8sio_gateway_api_apis_v1_GatewaySpec(ref common.ReferenceCallba
 			},
 		},
 		Dependencies: []string{
-			"sigs.k8s.io/gateway-api/apis/v1.AllowedListeners", "sigs.k8s.io/gateway-api/apis/v1.GatewayAddress", "sigs.k8s.io/gateway-api/apis/v1.GatewayBackendTLS", "sigs.k8s.io/gateway-api/apis/v1.GatewayInfrastructure", "sigs.k8s.io/gateway-api/apis/v1.Listener"},
+			"sigs.k8s.io/gateway-api/apis/v1.AllowedListeners", "sigs.k8s.io/gateway-api/apis/v1.GatewayBackendTLS", "sigs.k8s.io/gateway-api/apis/v1.GatewayInfrastructure", "sigs.k8s.io/gateway-api/apis/v1.GatewaySpecAddress", "sigs.k8s.io/gateway-api/apis/v1.Listener"},
+	}
+}
+
+func schema_sigsk8sio_gateway_api_apis_v1_GatewaySpecAddress(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "GatewaySpecAddress describes an address that can be bound to a Gateway.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"type": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Type of the address.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"value": {
+						SchemaProps: spec.SchemaProps{
+							Description: "When a value is unspecified, an implementation SHOULD automatically assign an address matching the requested type if possible.\n\nIf an implementation does not support an empty value, they MUST set the \"Programmed\" condition in status to False with a reason of \"AddressNotAssigned\".\n\nExamples: `1.2.3.4`, `128::1`, `my-ip-address`.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+				},
+			},
+		},
 	}
 }
 
@@ -4756,7 +4789,7 @@ func schema_sigsk8sio_gateway_api_apis_v1_HTTPRouteFilter(ref common.ReferenceCa
 				Properties: map[string]spec.Schema{
 					"type": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Type identifies the type of filter to apply. As with other API fields, types are classified into three conformance levels:\n\n- Core: Filter types and their corresponding configuration defined by\n  \"Support: Core\" in this package, e.g. \"RequestHeaderModifier\". All\n  implementations must support core filters.\n\n- Extended: Filter types and their corresponding configuration defined by\n  \"Support: Extended\" in this package, e.g. \"RequestMirror\". Implementers\n  are encouraged to support extended filters.\n\n- Implementation-specific: Filters that are defined and supported by\n  specific vendors.\n  In the future, filters showing convergence in behavior across multiple\n  implementations will be considered for inclusion in extended or core\n  conformance levels. Filter-specific configuration for such filters\n  is specified using the ExtensionRef field. `Type` should be set to\n  \"ExtensionRef\" for custom filters.\n\nImplementers are encouraged to define custom implementation types to extend the core API with implementation-specific behavior.\n\nIf a reference to a custom filter type cannot be resolved, the filter MUST NOT be skipped. Instead, requests that would have been processed by that filter MUST receive a HTTP error response.\n\nNote that values may be added to this enum, implementations must ensure that unknown values will not cause a crash.\n\nUnknown values here must result in the implementation setting the Accepted Condition for the Route to `status: False`, with a Reason of `UnsupportedValue`.",
+							Description: "Type identifies the type of filter to apply. As with other API fields, types are classified into three conformance levels:\n\n- Core: Filter types and their corresponding configuration defined by\n  \"Support: Core\" in this package, e.g. \"RequestHeaderModifier\". All\n  implementations must support core filters.\n\n- Extended: Filter types and their corresponding configuration defined by\n  \"Support: Extended\" in this package, e.g. \"RequestMirror\". Implementers\n  are encouraged to support extended filters.\n\n- Implementation-specific: Filters that are defined and supported by\n  specific vendors.\n  In the future, filters showing convergence in behavior across multiple\n  implementations will be considered for inclusion in extended or core\n  conformance levels. Filter-specific configuration for such filters\n  is specified using the ExtensionRef field. `Type` should be set to\n  \"ExtensionRef\" for custom filters.\n\nImplementers are encouraged to define custom implementation types to extend the core API with implementation-specific behavior.\n\nIf a reference to a custom filter type cannot be resolved, the filter MUST NOT be skipped. Instead, requests that would have been processed by that filter MUST receive a HTTP error response.\n\nNote that values may be added to this enum, implementations must ensure that unknown values will not cause a crash.\n\nUnknown values here must result in the implementation setting the Accepted Condition for the Route to `status: False`, with a Reason of `UnsupportedValue`.\n\n<gateway:experimental:validation:Enum=RequestHeaderModifier;ResponseHeaderModifier;RequestMirror;RequestRedirect;URLRewrite;ExtensionRef;CORS>",
 							Default:     "",
 							Type:        []string{"string"},
 							Format:      "",
@@ -4985,7 +5018,7 @@ func schema_sigsk8sio_gateway_api_apis_v1_HTTPRouteRule(ref common.ReferenceCall
 				Properties: map[string]spec.Schema{
 					"name": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Name is the name of the route rule. This name MUST be unique within a Route if it is set.\n\nSupport: Extended <gateway:experimental>",
+							Description: "Name is the name of the route rule. This name MUST be unique within a Route if it is set.\n\nSupport: Extended",
 							Type:        []string{"string"},
 							Format:      "",
 						},
@@ -5850,151 +5883,6 @@ func schema_sigsk8sio_gateway_api_apis_v1_supportedFeatureInternal(ref common.Re
 	}
 }
 
-func schema_sigsk8sio_gateway_api_apis_v1alpha2_BackendLBPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition {
-	return common.OpenAPIDefinition{
-		Schema: spec.Schema{
-			SchemaProps: spec.SchemaProps{
-				Description: "BackendLBPolicy provides a way to define load balancing rules for a backend.",
-				Type:        []string{"object"},
-				Properties: map[string]spec.Schema{
-					"kind": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
-							Type:        []string{"string"},
-							Format:      "",
-						},
-					},
-					"apiVersion": {
-						SchemaProps: spec.SchemaProps{
-							Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
-							Type:        []string{"string"},
-							Format:      "",
-						},
-					},
-					"metadata": {
-						SchemaProps: spec.SchemaProps{
-							Default: map[string]interface{}{},
-							Ref:     ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"),
-						},
-					},
-					"spec": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Spec defines the desired state of BackendLBPolicy.",
-							Default:     map[string]interface{}{},
-							Ref:         ref("sigs.k8s.io/gateway-api/apis/v1alpha2.BackendLBPolicySpec"),
-						},
-					},
-					"status": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Status defines the current state of BackendLBPolicy.",
-							Default:     map[string]interface{}{},
-							Ref:         ref("sigs.k8s.io/gateway-api/apis/v1alpha2.PolicyStatus"),
-						},
-					},
-				},
-				Required: []string{"spec"},
-			},
-		},
-		Dependencies: []string{
-			"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "sigs.k8s.io/gateway-api/apis/v1alpha2.BackendLBPolicySpec", "sigs.k8s.io/gateway-api/apis/v1alpha2.PolicyStatus"},
-	}
-}
-
-func schema_sigsk8sio_gateway_api_apis_v1alpha2_BackendLBPolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition {
-	return common.OpenAPIDefinition{
-		Schema: spec.Schema{
-			SchemaProps: spec.SchemaProps{
-				Description: "BackendLBPolicyList contains a list of BackendLBPolicies",
-				Type:        []string{"object"},
-				Properties: map[string]spec.Schema{
-					"kind": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
-							Type:        []string{"string"},
-							Format:      "",
-						},
-					},
-					"apiVersion": {
-						SchemaProps: spec.SchemaProps{
-							Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
-							Type:        []string{"string"},
-							Format:      "",
-						},
-					},
-					"metadata": {
-						SchemaProps: spec.SchemaProps{
-							Default: map[string]interface{}{},
-							Ref:     ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"),
-						},
-					},
-					"items": {
-						SchemaProps: spec.SchemaProps{
-							Type: []string{"array"},
-							Items: &spec.SchemaOrArray{
-								Schema: &spec.Schema{
-									SchemaProps: spec.SchemaProps{
-										Default: map[string]interface{}{},
-										Ref:     ref("sigs.k8s.io/gateway-api/apis/v1alpha2.BackendLBPolicy"),
-									},
-								},
-							},
-						},
-					},
-				},
-				Required: []string{"items"},
-			},
-		},
-		Dependencies: []string{
-			"k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "sigs.k8s.io/gateway-api/apis/v1alpha2.BackendLBPolicy"},
-	}
-}
-
-func schema_sigsk8sio_gateway_api_apis_v1alpha2_BackendLBPolicySpec(ref common.ReferenceCallback) common.OpenAPIDefinition {
-	return common.OpenAPIDefinition{
-		Schema: spec.Schema{
-			SchemaProps: spec.SchemaProps{
-				Description: "BackendLBPolicySpec defines the desired state of BackendLBPolicy. Note: there is no Override or Default policy configuration.",
-				Type:        []string{"object"},
-				Properties: map[string]spec.Schema{
-					"targetRefs": {
-						VendorExtensible: spec.VendorExtensible{
-							Extensions: spec.Extensions{
-								"x-kubernetes-list-map-keys": []interface{}{
-									"group",
-									"kind",
-									"name",
-								},
-								"x-kubernetes-list-type": "map",
-							},
-						},
-						SchemaProps: spec.SchemaProps{
-							Description: "TargetRef identifies an API object to apply policy to. Currently, Backends (i.e. Service, ServiceImport, or any implementation-specific backendRef) are the only valid API target references.",
-							Type:        []string{"array"},
-							Items: &spec.SchemaOrArray{
-								Schema: &spec.Schema{
-									SchemaProps: spec.SchemaProps{
-										Default: map[string]interface{}{},
-										Ref:     ref("sigs.k8s.io/gateway-api/apis/v1alpha2.LocalPolicyTargetReference"),
-									},
-								},
-							},
-						},
-					},
-					"sessionPersistence": {
-						SchemaProps: spec.SchemaProps{
-							Description: "SessionPersistence defines and configures session persistence for the backend.\n\nSupport: Extended",
-							Ref:         ref("sigs.k8s.io/gateway-api/apis/v1.SessionPersistence"),
-						},
-					},
-				},
-				Required: []string{"targetRefs"},
-			},
-		},
-		Dependencies: []string{
-			"sigs.k8s.io/gateway-api/apis/v1.SessionPersistence", "sigs.k8s.io/gateway-api/apis/v1alpha2.LocalPolicyTargetReference"},
-	}
-}
-
 func schema_sigsk8sio_gateway_api_apis_v1alpha2_GRPCRoute(ref common.ReferenceCallback) common.OpenAPIDefinition {
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
@@ -7787,154 +7675,82 @@ func schema_sigsk8sio_gateway_api_apis_v1beta1_ReferenceGrantTo(ref common.Refer
 	}
 }
 
-func schema_sigsk8sio_gateway_api_apisx_v1alpha1_BackendTrafficPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition {
+func schema_sigsk8sio_gateway_api_apisx_v1alpha1_BackendTrafficPolicySpec(ref common.ReferenceCallback) common.OpenAPIDefinition {
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
 			SchemaProps: spec.SchemaProps{
-				Description: "BackendTrafficPolicy defines the configuration for how traffic to a target backend should be handled.",
+				Description: "BackendTrafficPolicySpec define the desired state of BackendTrafficPolicy Note: there is no Override or Default policy configuration.",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
-					"kind": {
+					"targetRefs": {
+						VendorExtensible: spec.VendorExtensible{
+							Extensions: spec.Extensions{
+								"x-kubernetes-list-map-keys": []interface{}{
+									"group",
+									"kind",
+									"name",
+								},
+								"x-kubernetes-list-type": "map",
+							},
+						},
 						SchemaProps: spec.SchemaProps{
-							Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
-							Type:        []string{"string"},
-							Format:      "",
+							Description: "TargetRefs identifies API object(s) to apply this policy to. Currently, Backends (A grouping of like endpoints such as Service, ServiceImport, or any implementation-specific backendRef) are the only valid API target references.\n\nCurrently, a TargetRef can not be scoped to a specific port on a Service.",
+							Type:        []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: map[string]interface{}{},
+										Ref:     ref("sigs.k8s.io/gateway-api/apis/v1alpha2.LocalPolicyTargetReference"),
+									},
+								},
+							},
 						},
 					},
-					"apiVersion": {
+					"retryConstraint": {
 						SchemaProps: spec.SchemaProps{
-							Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
-							Type:        []string{"string"},
-							Format:      "",
+							Description: "RetryConstraint defines the configuration for when to allow or prevent further retries to a target backend, by dynamically calculating a 'retry budget'. This budget is calculated based on the percentage of incoming traffic composed of retries over a given time interval. Once the budget is exceeded, additional retries will be rejected.\n\nFor example, if the retry budget interval is 10 seconds, there have been 1000 active requests in the past 10 seconds, and the allowed percentage of requests that can be retried is 20% (the default), then 200 of those requests may be composed of retries. Active requests will only be considered for the duration of the interval when calculating the retry budget. Retrying the same original request multiple times within the retry budget interval will lead to each retry being counted towards calculating the budget.\n\nConfiguring a RetryConstraint in BackendTrafficPolicy is compatible with HTTPRoute Retry settings for each HTTPRouteRule that targets the same backend. While the HTTPRouteRule Retry stanza can specify whether a request will be retried, and the number of retry attempts each client may perform, RetryConstraint helps prevent cascading failures such as retry storms during periods of consistent failures.\n\nAfter the retry budget has been exceeded, additional retries to the backend MUST return a 503 response to the client.\n\nAdditional configurations for defining a constraint on retries MAY be defined in the future.\n\nSupport: Extended\n\n<gateway:experimental>",
+							Ref:         ref("sigs.k8s.io/gateway-api/apisx/v1alpha1.RetryConstraint"),
 						},
 					},
-					"metadata": {
-						SchemaProps: spec.SchemaProps{
-							Default: map[string]interface{}{},
-							Ref:     ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"),
-						},
-					},
-					"spec": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Spec defines the desired state of BackendTrafficPolicy.",
-							Default:     map[string]interface{}{},
-							Ref:         ref("sigs.k8s.io/gateway-api/apisx/v1alpha1.BackendTrafficPolicySpec"),
-						},
-					},
-					"status": {
+					"sessionPersistence": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Status defines the current state of BackendTrafficPolicy.",
-							Default:     map[string]interface{}{},
-							Ref:         ref("sigs.k8s.io/gateway-api/apis/v1alpha2.PolicyStatus"),
+							Description: "SessionPersistence defines and configures session persistence for the backend.\n\nSupport: Extended",
+							Ref:         ref("sigs.k8s.io/gateway-api/apis/v1.SessionPersistence"),
 						},
 					},
 				},
-				Required: []string{"spec"},
+				Required: []string{"targetRefs"},
 			},
 		},
 		Dependencies: []string{
-			"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "sigs.k8s.io/gateway-api/apis/v1alpha2.PolicyStatus", "sigs.k8s.io/gateway-api/apisx/v1alpha1.BackendTrafficPolicySpec"},
+			"sigs.k8s.io/gateway-api/apis/v1.SessionPersistence", "sigs.k8s.io/gateway-api/apis/v1alpha2.LocalPolicyTargetReference", "sigs.k8s.io/gateway-api/apisx/v1alpha1.RetryConstraint"},
 	}
 }
 
-func schema_sigsk8sio_gateway_api_apisx_v1alpha1_BackendTrafficPolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition {
+func schema_sigsk8sio_gateway_api_apisx_v1alpha1_BudgetDetails(ref common.ReferenceCallback) common.OpenAPIDefinition {
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
 			SchemaProps: spec.SchemaProps{
-				Description: "BackendTrafficPolicyList contains a list of BackendTrafficPolicies",
+				Description: "BudgetDetails specifies the details of the budget configuration, like the percentage of requests in the budget, and the interval between checks.",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
-					"kind": {
+					"percent": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
-							Type:        []string{"string"},
-							Format:      "",
+							Description: "Percent defines the maximum percentage of active requests that may be made up of retries.\n\nSupport: Extended",
+							Type:        []string{"integer"},
+							Format:      "int32",
 						},
 					},
-					"apiVersion": {
+					"interval": {
 						SchemaProps: spec.SchemaProps{
-							Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
+							Description: "Interval defines the duration in which requests will be considered for calculating the budget for retries.\n\nSupport: Extended",
 							Type:        []string{"string"},
 							Format:      "",
 						},
 					},
-					"metadata": {
-						SchemaProps: spec.SchemaProps{
-							Default: map[string]interface{}{},
-							Ref:     ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"),
-						},
-					},
-					"items": {
-						SchemaProps: spec.SchemaProps{
-							Type: []string{"array"},
-							Items: &spec.SchemaOrArray{
-								Schema: &spec.Schema{
-									SchemaProps: spec.SchemaProps{
-										Default: map[string]interface{}{},
-										Ref:     ref("sigs.k8s.io/gateway-api/apisx/v1alpha1.BackendTrafficPolicy"),
-									},
-								},
-							},
-						},
-					},
 				},
-				Required: []string{"items"},
 			},
 		},
-		Dependencies: []string{
-			"k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "sigs.k8s.io/gateway-api/apisx/v1alpha1.BackendTrafficPolicy"},
-	}
-}
-
-func schema_sigsk8sio_gateway_api_apisx_v1alpha1_BackendTrafficPolicySpec(ref common.ReferenceCallback) common.OpenAPIDefinition {
-	return common.OpenAPIDefinition{
-		Schema: spec.Schema{
-			SchemaProps: spec.SchemaProps{
-				Description: "BackendTrafficPolicySpec define the desired state of BackendTrafficPolicy Note: there is no Override or Default policy configuration.",
-				Type:        []string{"object"},
-				Properties: map[string]spec.Schema{
-					"targetRefs": {
-						VendorExtensible: spec.VendorExtensible{
-							Extensions: spec.Extensions{
-								"x-kubernetes-list-map-keys": []interface{}{
-									"group",
-									"kind",
-									"name",
-								},
-								"x-kubernetes-list-type": "map",
-							},
-						},
-						SchemaProps: spec.SchemaProps{
-							Description: "TargetRefs identifies API object(s) to apply this policy to. Currently, Backends (A grouping of like endpoints such as Service, ServiceImport, or any implementation-specific backendRef) are the only valid API target references.\n\nCurrently, a TargetRef can not be scoped to a specific port on a Service.",
-							Type:        []string{"array"},
-							Items: &spec.SchemaOrArray{
-								Schema: &spec.Schema{
-									SchemaProps: spec.SchemaProps{
-										Default: map[string]interface{}{},
-										Ref:     ref("sigs.k8s.io/gateway-api/apis/v1alpha2.LocalPolicyTargetReference"),
-									},
-								},
-							},
-						},
-					},
-					"retryConstraint": {
-						SchemaProps: spec.SchemaProps{
-							Description: "RetryConstraint defines the configuration for when to allow or prevent further retries to a target backend, by dynamically calculating a 'retry budget'. This budget is calculated based on the percentage of incoming traffic composed of retries over a given time interval. Once the budget is exceeded, additional retries will be rejected.\n\nFor example, if the retry budget interval is 10 seconds, there have been 1000 active requests in the past 10 seconds, and the allowed percentage of requests that can be retried is 20% (the default), then 200 of those requests may be composed of retries. Active requests will only be considered for the duration of the interval when calculating the retry budget. Retrying the same original request multiple times within the retry budget interval will lead to each retry being counted towards calculating the budget.\n\nConfiguring a RetryConstraint in BackendTrafficPolicy is compatible with HTTPRoute Retry settings for each HTTPRouteRule that targets the same backend. While the HTTPRouteRule Retry stanza can specify whether a request will be retried, and the number of retry attempts each client may perform, RetryConstraint helps prevent cascading failures such as retry storms during periods of consistent failures.\n\nAfter the retry budget has been exceeded, additional retries to the backend MUST return a 503 response to the client.\n\nAdditional configurations for defining a constraint on retries MAY be defined in the future.\n\nSupport: Extended\n\n<gateway:experimental>",
-							Ref:         ref("sigs.k8s.io/gateway-api/apisx/v1alpha1.RetryConstraint"),
-						},
-					},
-					"sessionPersistence": {
-						SchemaProps: spec.SchemaProps{
-							Description: "SessionPersistence defines and configures session persistence for the backend.\n\nSupport: Extended",
-							Ref:         ref("sigs.k8s.io/gateway-api/apis/v1.SessionPersistence"),
-						},
-					},
-				},
-				Required: []string{"targetRefs"},
-			},
-		},
-		Dependencies: []string{
-			"sigs.k8s.io/gateway-api/apis/v1.SessionPersistence", "sigs.k8s.io/gateway-api/apis/v1alpha2.LocalPolicyTargetReference", "sigs.k8s.io/gateway-api/apisx/v1alpha1.RetryConstraint"},
 	}
 }
 
@@ -7962,6 +7778,7 @@ func schema_sigsk8sio_gateway_api_apisx_v1alpha1_ListenerEntry(ref common.Refere
 					"port": {
 						SchemaProps: spec.SchemaProps{
 							Description: "Port is the network port. Multiple listeners may use the same port, subject to the Listener compatibility rules.",
+							Default:     0,
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
@@ -7987,7 +7804,7 @@ func schema_sigsk8sio_gateway_api_apisx_v1alpha1_ListenerEntry(ref common.Refere
 						},
 					},
 				},
-				Required: []string{"name", "protocol"},
+				Required: []string{"name", "port", "protocol"},
 			},
 		},
 		Dependencies: []string{
@@ -8071,104 +7888,6 @@ func schema_sigsk8sio_gateway_api_apisx_v1alpha1_ListenerEntryStatus(ref common.
 	}
 }
 
-func schema_sigsk8sio_gateway_api_apisx_v1alpha1_ListenerSet(ref common.ReferenceCallback) common.OpenAPIDefinition {
-	return common.OpenAPIDefinition{
-		Schema: spec.Schema{
-			SchemaProps: spec.SchemaProps{
-				Description: "ListenerSet defines a set of additional listeners to attach to an existing Gateway.",
-				Type:        []string{"object"},
-				Properties: map[string]spec.Schema{
-					"kind": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
-							Type:        []string{"string"},
-							Format:      "",
-						},
-					},
-					"apiVersion": {
-						SchemaProps: spec.SchemaProps{
-							Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
-							Type:        []string{"string"},
-							Format:      "",
-						},
-					},
-					"metadata": {
-						SchemaProps: spec.SchemaProps{
-							Default: map[string]interface{}{},
-							Ref:     ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"),
-						},
-					},
-					"spec": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Spec defines the desired state of ListenerSet.",
-							Default:     map[string]interface{}{},
-							Ref:         ref("sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerSetSpec"),
-						},
-					},
-					"status": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Status defines the current state of ListenerSet.",
-							Default:     map[string]interface{}{},
-							Ref:         ref("sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerSetStatus"),
-						},
-					},
-				},
-				Required: []string{"spec"},
-			},
-		},
-		Dependencies: []string{
-			"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerSetSpec", "sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerSetStatus"},
-	}
-}
-
-func schema_sigsk8sio_gateway_api_apisx_v1alpha1_ListenerSetList(ref common.ReferenceCallback) common.OpenAPIDefinition {
-	return common.OpenAPIDefinition{
-		Schema: spec.Schema{
-			SchemaProps: spec.SchemaProps{
-				Type: []string{"object"},
-				Properties: map[string]spec.Schema{
-					"kind": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
-							Type:        []string{"string"},
-							Format:      "",
-						},
-					},
-					"apiVersion": {
-						SchemaProps: spec.SchemaProps{
-							Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
-							Type:        []string{"string"},
-							Format:      "",
-						},
-					},
-					"metadata": {
-						SchemaProps: spec.SchemaProps{
-							Default: map[string]interface{}{},
-							Ref:     ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"),
-						},
-					},
-					"items": {
-						SchemaProps: spec.SchemaProps{
-							Type: []string{"array"},
-							Items: &spec.SchemaOrArray{
-								Schema: &spec.Schema{
-									SchemaProps: spec.SchemaProps{
-										Default: map[string]interface{}{},
-										Ref:     ref("sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerSet"),
-									},
-								},
-							},
-						},
-					},
-				},
-				Required: []string{"items"},
-			},
-		},
-		Dependencies: []string{
-			"k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerSet"},
-	}
-}
-
 func schema_sigsk8sio_gateway_api_apisx_v1alpha1_ListenerSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition {
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
@@ -8193,7 +7912,7 @@ func schema_sigsk8sio_gateway_api_apisx_v1alpha1_ListenerSetSpec(ref common.Refe
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "Listeners associated with this ListenerSet. Listeners define logical endpoints that are bound on this referenced parent Gateway's addresses.\n\nListeners in a `Gateway` and their attached `ListenerSets` are concatenated as a list when programming the underlying infrastructure. Each listener name does not need to be unique across the Gateway and ListenerSets. See ListenerEntry.Name for more details.\n\nImplementations MUST treat the parent Gateway as having the merged list of all listeners from itself and attached ListenerSets using the following precedence:\n\n1. \"parent\" Gateway 2. ListenerSet ordered by creation time (oldest first) 3. ListenerSet ordered alphabetically by “{namespace}/{name}”.\n\nAn implementation MAY reject listeners by setting the ListenerEntryStatus `Accepted`` condition to False with the Reason `TooManyListeners`\n\nIf a listener has a conflict, this will be reported in the Status.ListenerEntryStatus setting the `Conflicted` condition to True.\n\nImplementations SHOULD be cautious about what information from the parent or siblings are reported to avoid accidentally leaking sensitive information that the child would not otherwise have access to. This can include contents of secrets etc.",
+							Description: "Listeners associated with this ListenerSet. Listeners define logical endpoints that are bound on this referenced parent Gateway's addresses.\n\nListeners in a `Gateway` and their attached `ListenerSets` are concatenated as a list when programming the underlying infrastructure. Each listener name does not need to be unique across the Gateway and ListenerSets. See ListenerEntry.Name for more details.\n\nImplementations MUST treat the parent Gateway as having the merged list of all listeners from itself and attached ListenerSets using the following precedence:\n\n1. \"parent\" Gateway 2. ListenerSet ordered by creation time (oldest first) 3. ListenerSet ordered alphabetically by \"{namespace}/{name}\".\n\nAn implementation MAY reject listeners by setting the ListenerEntryStatus `Accepted` condition to False with the Reason `TooManyListeners`\n\nIf a listener has a conflict, this will be reported in the Status.ListenerEntryStatus setting the `Conflicted` condition to True.\n\nImplementations SHOULD be cautious about what information from the parent or siblings are reported to avoid accidentally leaking sensitive information that the child would not otherwise have access to. This can include contents of secrets etc.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -8349,30 +8068,219 @@ func schema_sigsk8sio_gateway_api_apisx_v1alpha1_RetryConstraint(ref common.Refe
 				Description: "RetryConstraint defines the configuration for when to retry a request.",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
-					"budgetPercent": {
+					"budget": {
 						SchemaProps: spec.SchemaProps{
-							Description: "BudgetPercent defines the maximum percentage of active requests that may be made up of retries.\n\nSupport: Extended",
-							Type:        []string{"integer"},
-							Format:      "int32",
+							Description: "Budget holds the details of the retry budget configuration.",
+							Ref:         ref("sigs.k8s.io/gateway-api/apisx/v1alpha1.BudgetDetails"),
 						},
 					},
-					"budgetInterval": {
+					"minRetryRate": {
 						SchemaProps: spec.SchemaProps{
-							Description: "BudgetInterval defines the duration in which requests will be considered for calculating the budget for retries.\n\nSupport: Extended",
+							Description: "MinRetryRate defines the minimum rate of retries that will be allowable over a specified duration of time.\n\nThe effective overall minimum rate of retries targeting the backend service may be much higher, as there can be any number of clients which are applying this setting locally.\n\nThis ensures that requests can still be retried during periods of low traffic, where the budget for retries may be calculated as a very low value.\n\nSupport: Extended",
+							Ref:         ref("sigs.k8s.io/gateway-api/apisx/v1alpha1.RequestRate"),
+						},
+					},
+				},
+			},
+		},
+		Dependencies: []string{
+			"sigs.k8s.io/gateway-api/apisx/v1alpha1.BudgetDetails", "sigs.k8s.io/gateway-api/apisx/v1alpha1.RequestRate"},
+	}
+}
+
+func schema_sigsk8sio_gateway_api_apisx_v1alpha1_XBackendTrafficPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "XBackendTrafficPolicy defines the configuration for how traffic to a target backend should be handled.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"kind": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
 							Type:        []string{"string"},
 							Format:      "",
 						},
 					},
-					"minRetryRate": {
+					"apiVersion": {
 						SchemaProps: spec.SchemaProps{
-							Description: "MinRetryRate defines the minimum rate of retries that will be allowable over a specified duration of time.\n\nThe effective overall minimum rate of retries targeting the backend service may be much higher, as there can be any number of clients which are applying this setting locally.\n\nThis ensures that requests can still be retried during periods of low traffic, where the budget for retries may be calculated as a very low value.\n\nSupport: Extended",
-							Ref:         ref("sigs.k8s.io/gateway-api/apisx/v1alpha1.RequestRate"),
+							Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"metadata": {
+						SchemaProps: spec.SchemaProps{
+							Default: map[string]interface{}{},
+							Ref:     ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"),
+						},
+					},
+					"spec": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Spec defines the desired state of BackendTrafficPolicy.",
+							Default:     map[string]interface{}{},
+							Ref:         ref("sigs.k8s.io/gateway-api/apisx/v1alpha1.BackendTrafficPolicySpec"),
+						},
+					},
+					"status": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Status defines the current state of BackendTrafficPolicy.",
+							Default:     map[string]interface{}{},
+							Ref:         ref("sigs.k8s.io/gateway-api/apis/v1alpha2.PolicyStatus"),
+						},
+					},
+				},
+				Required: []string{"spec"},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "sigs.k8s.io/gateway-api/apis/v1alpha2.PolicyStatus", "sigs.k8s.io/gateway-api/apisx/v1alpha1.BackendTrafficPolicySpec"},
+	}
+}
+
+func schema_sigsk8sio_gateway_api_apisx_v1alpha1_XBackendTrafficPolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "XBackendTrafficPolicyList contains a list of BackendTrafficPolicies",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"kind": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"apiVersion": {
+						SchemaProps: spec.SchemaProps{
+							Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"metadata": {
+						SchemaProps: spec.SchemaProps{
+							Default: map[string]interface{}{},
+							Ref:     ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"),
+						},
+					},
+					"items": {
+						SchemaProps: spec.SchemaProps{
+							Type: []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: map[string]interface{}{},
+										Ref:     ref("sigs.k8s.io/gateway-api/apisx/v1alpha1.XBackendTrafficPolicy"),
+									},
+								},
+							},
 						},
 					},
 				},
+				Required: []string{"items"},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "sigs.k8s.io/gateway-api/apisx/v1alpha1.XBackendTrafficPolicy"},
+	}
+}
+
+func schema_sigsk8sio_gateway_api_apisx_v1alpha1_XListenerSet(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "XListenerSet defines a set of additional listeners to attach to an existing Gateway. This resource provides a mechanism to merge multiple listeners into a single Gateway.\n\nThe parent Gateway must explicitly allow ListenerSet attachment through its AllowedListeners configuration. By default, Gateways do not allow ListenerSet attachment.\n\nRoutes can attach to a ListenerSet by specifying it as a parentRef, and can optionally target specific listeners using the sectionName field.\n\nPolicy Attachment: - Policies that attach to a ListenerSet apply to all listeners defined in that resource - Policies do not impact listeners in the parent Gateway - Different ListenerSets attached to the same Gateway can have different policies - If an implementation cannot apply a policy to specific listeners, it should reject the policy\n\nReferenceGrant Semantics: - ReferenceGrants applied to a Gateway are not inherited by child ListenerSets - ReferenceGrants applied to a ListenerSet do not grant permission to the parent Gateway's listeners - A ListenerSet can reference secrets/backends in its own namespace without a ReferenceGrant\n\nGateway Integration: - The parent Gateway's status will include an \"AttachedListenerSets\" condition - This condition will be:\n  - True: when AllowedListeners is set and at least one child ListenerSet is attached\n  - False: when AllowedListeners is set but no valid listeners are attached, or when AllowedListeners is not set or false\n  - Unknown: when no AllowedListeners config is present",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"kind": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"apiVersion": {
+						SchemaProps: spec.SchemaProps{
+							Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"metadata": {
+						SchemaProps: spec.SchemaProps{
+							Default: map[string]interface{}{},
+							Ref:     ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"),
+						},
+					},
+					"spec": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Spec defines the desired state of ListenerSet.",
+							Default:     map[string]interface{}{},
+							Ref:         ref("sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerSetSpec"),
+						},
+					},
+					"status": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Status defines the current state of ListenerSet.",
+							Default:     map[string]interface{}{},
+							Ref:         ref("sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerSetStatus"),
+						},
+					},
+				},
+				Required: []string{"spec"},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerSetSpec", "sigs.k8s.io/gateway-api/apisx/v1alpha1.ListenerSetStatus"},
+	}
+}
+
+func schema_sigsk8sio_gateway_api_apisx_v1alpha1_XListenerSetList(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Type: []string{"object"},
+				Properties: map[string]spec.Schema{
+					"kind": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"apiVersion": {
+						SchemaProps: spec.SchemaProps{
+							Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"metadata": {
+						SchemaProps: spec.SchemaProps{
+							Default: map[string]interface{}{},
+							Ref:     ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"),
+						},
+					},
+					"items": {
+						SchemaProps: spec.SchemaProps{
+							Type: []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: map[string]interface{}{},
+										Ref:     ref("sigs.k8s.io/gateway-api/apisx/v1alpha1.XListenerSet"),
+									},
+								},
+							},
+						},
+					},
+				},
+				Required: []string{"items"},
 			},
 		},
 		Dependencies: []string{
-			"sigs.k8s.io/gateway-api/apisx/v1alpha1.RequestRate"},
+			"k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "sigs.k8s.io/gateway-api/apisx/v1alpha1.XListenerSet"},
 	}
 }
diff --git a/site-src/api-types/backendtlspolicy.md b/site-src/api-types/backendtlspolicy.md
index c0645d44..ac57bd04 100644
--- a/site-src/api-types/backendtlspolicy.md
+++ b/site-src/api-types/backendtlspolicy.md
@@ -139,10 +139,10 @@ Status defines the observed state of the BackendTLSPolicy and is not user-config
 way you do for other Gateway API objects to verify correct operation.  Note that the status in BackendTLSPolicy
 uses `PolicyAncestorStatus` to allow you to know which parentReference set that particular status.
 
-[backendtlspolicy]: /references/spec/#gateway.networking.k8s.io/v1alpha3.BackendTLSPolicy
-[validation]: /references/spec/#gateway.networking.k8s.io/v1alpha3.BackendTLSPolicy.Validation
-[caCertificateRefs]: /references/spec/#gateway.networking.k8s.io/v1alpha3.BackendTLSPolicyValidation.CACertificateRefs
-[wellKnownCACertificates]: /references/spec/#gateway.networking.k8s.io/v1alpha3.BackendTLSPolicyValidation.WellKnownCACertificates
-[hostname]: /references/spec/#gateway.networking.k8s.io/v1.PreciseHostname
+[backendtlspolicy]: ../reference/spec.md#gateway.networking.k8s.io/v1alpha3.BackendTLSPolicy
+[validation]: ../reference/spec.md#gateway.networking.k8s.io/v1alpha3.BackendTLSPolicy.Validation
+[caCertificateRefs]: ../reference/spec.md#gateway.networking.k8s.io/v1alpha3.BackendTLSPolicyValidation.CACertificateRefs
+[wellKnownCACertificates]: ../reference/spec.md#gateway.networking.k8s.io/v1alpha3.BackendTLSPolicyValidation.WellKnownCACertificates
+[hostname]: ../reference/spec.md#gateway.networking.k8s.io/v1.PreciseHostname
 [rfc-3986]: https://tools.ietf.org/html/rfc3986
-[targetRefs]: /references/spec/#gateway.networking.k8s.io/v1alpha2.PolicyTargetReference
+[targetRefs]: ../reference/spec.md#gateway.networking.k8s.io/v1alpha2.PolicyTargetReference
diff --git a/site-src/api-types/backendtrafficpolicy.md b/site-src/api-types/backendtrafficpolicy.md
new file mode 100644
index 00000000..61dd6452
--- /dev/null
+++ b/site-src/api-types/backendtrafficpolicy.md
@@ -0,0 +1,93 @@
+# BackendTrafficPolicy
+
+??? example "Experimental Channel since v1.3.0"
+
+    The `BackendTrafficPolicy` resource is a part of the Experimental Channel
+    since `v1.3.0`. For more information on release channels, refer to our
+    [versioning guide](../concepts/versioning.md).
+
+[BackendTrafficPolicy][backendtrafficpolicy] is a Gateway API type to configure
+the behavior of clients when targeting a valid backend resource.
+
+## Background
+
+`BackendTrafficPolicy` is used to configure the behavior of clients when making
+requests targeting a backend, a grouping of like endpoints. Currently, this
+policy includes the ability to configure a `RetryConstraint`, which can
+dynamically limit the number of active retries targeting the specified backend,
+by defining a "retry budget". Additional features may be added in the future.
+
+### Retry Constraint
+
+While client-side retries are important for allowing requests to be
+successfully retried in
+periods of intermittent failure, excessive retries can quickly overwhelm a
+system, leading to cascading failures such as retry storms. Specifying a
+`RetryConstraint` within `BackendTrafficPolicy` allows application
+developers to dynamically calculate a limit on active client-side retries as a percentage of
+the overall active request volume. While the retry stanza within the
+[HTTPRouteRule][httproute] resource allows specifying whether a request
+*should* be retried, as well as the maximum number of 
+retries that may be performed for a failed request, budgeted
+retries instead act as a
+fail-safe in order to ensure that the targeted backend will not be overwhelmed
+by the *overall* volume of retries from the client.
+
+The retry budget is calculated based on the percentage of incoming traffic
+composed of retries over a given time interval. Retrying the same original
+request multiple times within the retry budget interval will lead to each retry
+being counted towards calculating the budget. Once the budget is exceeded,
+additional retries to the backend will be rejected and MUST return a 503
+response to the client. The parameters of the retry budget calculation can be
+configured within `RetryConstraint`.
+
+BackendTrafficPolicy is a Direct
+[PolicyAttachment](../reference/policy-attachment.md). All Gateway API Routes
+that target the referenced Backend should respect a configured
+BackendTrafficPolicy. Additional configurations for defining a constraint on
+retries MAY be defined in the future.
+
+
+## Spec
+
+The specification of a [BackendTrafficPolicy][backendtrafficpolicy] consists of:
+
+- [TargetRefs][localpolicytargetreference] - Defines the targeted API object(s) of the policy.
+  Backends (A grouping of like endpoints such as Service,
+  ServiceImport, or any implementation-specific backendRef) are the only valid
+  API target references.
+- [RetryConstraint][retryConstraint] - Defines the configuration for how a retry budget should be calculated, by specifying BudgetDetails and MinRetryRate.
+- [SessionPersistence][sessionPersistence] - Defines the session persistence for the backend.
+
+The following chart outlines the object definitions and relationship:
+```mermaid
+flowchart LR
+    backendTrafficPolicy[["<b>backendTrafficPolicy</b> <hr><align=left>BackendTrafficPolicySpec: spec<br>PolicyStatus: status</align>"]]
+    spec[["<b>spec</b><hr>LocalPolicyTargetReference: targetRefs <br> RetryConstraint: retryConstraint" <br> SessionPersistence: sessionPersistence]]
+    status[["<b>status</b><hr>[ ]PolicyAncestorStatus: ancestors"]]
+    budget[["<b>budget</b><hr>int: budgetPercent<br>Duration: budgetInterval"]]
+    retryConstraint[["<b>retryConstraint</b><hr>BudgetDetails: budget<br>MinRetryRate: RequestRate"]]
+    ancestorStatus[["<b>ancestors</b><hr>AncestorRef: parentReference<br>GatewayController: controllerName<br>[]Condition: conditions"]]
+    targetRefs[[<b>targetRefs</b><hr>]]
+    backendRef["one of:<hr>" Service OR ServiceImport OR an implementation-specific backendRef]
+    backendTrafficPolicy -->spec
+    backendTrafficPolicy -->status
+    spec -->targetRefs & retryConstraint
+    retryConstraint -->budget
+    status -->ancestorStatus
+    targetRefs -->backendRef
+```
+
+### Targeting backends
+
+`BackendTrafficPolicy` targets a group of backend Pods via one or more
+TargetRefs such as Service, ServiceImport, or implementation-specific
+backendRef. TargetRefs is a required object reference, specifying a Backend via
+its Name, Kind, and Group. Currently, TargetRefs can not be scoped to
+specific ports on a service. 
+
+[backendtrafficpolicy]: /references/specx.md#xbackendtrafficpolicy
+[localpolicytargetreference]: /references/spec/#gateway.networking.k8s.io/v1alpha2.LocalPolicyTargetReference
+[retryConstraint]: /references/specx.md#retryconstraint
+[sessionPersistence]: /references/spec/#gateway.networking.k8s.io/v1.SessionPersistence
+[httproute]: /references/spec/#https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1beta1.HTTPRoute
diff --git a/site-src/api-types/grpcroute.md b/site-src/api-types/grpcroute.md
index 69dcfb40..2b6188ad 100644
--- a/site-src/api-types/grpcroute.md
+++ b/site-src/api-types/grpcroute.md
@@ -225,7 +225,7 @@ on `weight` and other fields.
     For more information on release channels, refer to our
     [versioning guide](../concepts/versioning.md).
 
-GRPCRoute Rules include an optional `name` field. The applications for the name of a route rule are implementation-specific. It can be used to reference individual route rules by name from other resources, such as in the `sectionName` field of metaresources ([GEP-2648](../geps/gep-2648/index.md#apply-policies-to-sections-of-a-resource)), in the status stanzas of resources related to the route object, to identify internal configuration objects generated by the implementation from GRPCRoute Rule, etc.
+GRPCRoute Rules include an optional `name` field. The applications for the name of a route rule are implementation-specific. It can be used to reference individual route rules by name from other resources, such as in the `sectionName` field of metaresources ([GEP-2648](../geps/gep-2648/index.md#section-names)), in the status stanzas of resources related to the route object, to identify internal configuration objects generated by the implementation from GRPCRoute Rule, etc.
 
 If specified, the value of the name field must comply with the [`SectionName`](https://github.com/kubernetes-sigs/gateway-api/blob/v1.0.0/apis/v1/shared_types.go#L607-L624) type.
 
diff --git a/site-src/api-types/httproute.md b/site-src/api-types/httproute.md
index e0a4ea33..0551a37c 100644
--- a/site-src/api-types/httproute.md
+++ b/site-src/api-types/httproute.md
@@ -211,9 +211,16 @@ unspecified, the rule performs no forwarding. If unspecified and no filters
 are specified that would result in a response being sent, a 404 error code
 is returned.
 
-The following example forwards HTTP requests for prefix `/bar` to service
-"my-service1" on port `8080` and HTTP requests for prefix `/some/thing` with
-header `magic: foo` to service "my-service2" on port `8080`:
+The following example forwards HTTP requests for path prefix `/bar` to service
+"my-service1" on port `8080`, and HTTP requests fulfilling _all_ four of the 
+following criteria
+
+- header `magic: foo` 
+- query param `great: example`
+- path prefix `/some/thing`
+- method `GET`
+
+to service "my-service2" on port `8080`:
 ```yaml
 {% include 'standard/basic-http.yaml' %}
 ```
@@ -264,7 +271,7 @@ Reference the [timeouts][timeouts] API documentation for additional details.
     For more information on release channels, refer to our
     [versioning guide](../concepts/versioning.md).
 
-HTTPRoute Rules include an optional `name` field. The applications for the name of a route rule are implementation-specific. It can be used to reference individual route rules by name from other resources, such as in the `sectionName` field of metaresources ([GEP-2648](../geps/gep-2648/index.md#apply-policies-to-sections-of-a-resource)), in the status stanzas of resources related to the route object, to identify internal configuration objects generated by the implementation from HTTPRoute Rule, etc.
+HTTPRoute Rules include an optional `name` field. The applications for the name of a route rule are implementation-specific. It can be used to reference individual route rules by name from other resources, such as in the `sectionName` field of metaresources ([GEP-2648](../geps/gep-2648/index.md#section-names)), in the status stanzas of resources related to the route object, to identify internal configuration objects generated by the implementation from HTTPRoute Rule, etc.
 
 If specified, the value of the name field must comply with the [`SectionName`](https://github.com/kubernetes-sigs/gateway-api/blob/v1.0.0/apis/v1/shared_types.go#L607-L624) type.
 
@@ -315,7 +322,7 @@ metadata:
 ...
 status:
   parents:
-  - parentRefs:
+  - parentRef:
       name: gw-example
       namespace: gw-example-ns
     conditions:
diff --git a/site-src/blog/2021/introducing-v1alpha2.md b/site-src/blog/2021/introducing-v1alpha2.md
index fe231f9f..55f5231e 100644
--- a/site-src/blog/2021/introducing-v1alpha2.md
+++ b/site-src/blog/2021/introducing-v1alpha2.md
@@ -146,4 +146,4 @@ We still have lots more to work on. Some of our next items to discuss include:
 * L4 Route matching
 
 If these kinds of topics interest you, we'd love to have your input. Refer to
-our [community page](/contributing/community) to see how you can get involved.
+our [community page](../../contributing/index.md) to see how you can get involved.
diff --git a/site-src/blog/2022/graduating-to-beta.md b/site-src/blog/2022/graduating-to-beta.md
index 70064b7f..7b0e0115 100644
--- a/site-src/blog/2022/graduating-to-beta.md
+++ b/site-src/blog/2022/graduating-to-beta.md
@@ -70,12 +70,12 @@ page][community] which includes links to the Slack channel and community meeting
 
 [crd]:https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/
 [concepts]:../../concepts/api-overview.md
-[guides]:/guides/getting-started/
+[guides]:../../guides/index.md
 [impl]:../../implementations.md
-[install-crds]:/guides/getting-started/#install-the-crds
+[install-crds]:../../guides/index.md#installing-gateway-api
 [issue]:https://github.com/kubernetes-sigs/gateway-api/issues/new/choose
 [disc]:https://github.com/kubernetes-sigs/gateway-api/discussions
-[community]:/contributing/community/
+[community]:../../contributing/index.md
 
 ## Release highlights
 
@@ -128,7 +128,7 @@ For this release we've added the following experimental features:
 - [Routes can attach to Gateways by specifying port numbers](../../geps/gep-957/index.md)
 - [URL rewrites and path redirects](../../geps/gep-726/index.md)
 
-[ch]:../../concepts/versioning.md#release-channels-eg-experimental-standard
+[ch]:../../concepts/versioning.md#release-channels
 
 ### Other improvements
 
@@ -146,12 +146,12 @@ possible integration.
 We are pleased to announce that the service mesh community, including
 representatives from Cilium Service Mesh, Consul, Istio, Kuma, Linkerd, NGINX
 Service Mesh and Open Service Mesh, is coming together to form the [GAMMA
-Initiative](/concepts/gamma/), a dedicated
+Initiative](../../mesh/index.md), a dedicated
 workstream within the Gateway API subproject focused on Gateway API for Mesh
 Management and Administration.
 
 This group will deliver [enhancement
-proposals](/v1beta1/contributing/gep/) consisting
+proposals](../../contributing/enhancement-requests.md) consisting
 of resources, additions, and modifications to the Gateway API specification for
 mesh and mesh-adjacent use-cases.
 
@@ -169,11 +169,11 @@ As we continue to mature the API for production use cases, here are some of the
 - [Route delegation][pr1085]
 - Layer 4 API maturity: Graduating [TCPRoute][tcpr], [UDPRoute][udpr] and
   [TLSRoute][tlsr] to beta
-- [GAMMA Initiative](/concepts/gamma/) - Gateway API for Service Mesh
+- [GAMMA Initiative](../../mesh/index.md) - Gateway API for Service Mesh
 
 If there's something on this list you want to get involved in, or there's
 something not on this list that you want to advocate for to get on the roadmap
-please join us in the #sig-network-gateway-api channel on Kubernetes Slack or our weekly [community calls](/contributing/community/#meetings).
+please join us in the #sig-network-gateway-api channel on Kubernetes Slack or our weekly [community calls](../../contributing/index.md#meetings).
 
 [gep1016]:https://github.com/kubernetes-sigs/gateway-api/blob/master/geps/gep-1016.md
 [grpc]:https://grpc.io/
@@ -181,4 +181,4 @@ please join us in the #sig-network-gateway-api channel on Kubernetes Slack or ou
 [tcpr]:https://github.com/kubernetes-sigs/gateway-api/blob/main/apis/v1alpha2/tcproute_types.go
 [udpr]:https://github.com/kubernetes-sigs/gateway-api/blob/main/apis/v1alpha2/udproute_types.go
 [tlsr]:https://github.com/kubernetes-sigs/gateway-api/blob/main/apis/v1alpha2/tlsroute_types.go
-[community]:/contributing/community/
+[community]:../../contributing/index.md
diff --git a/site-src/blog/2023/0829-mesh-support.md b/site-src/blog/2023/0829-mesh-support.md
index 6b79dc63..7bc15c44 100644
--- a/site-src/blog/2023/0829-mesh-support.md
+++ b/site-src/blog/2023/0829-mesh-support.md
@@ -185,21 +185,21 @@ Although these are [Experimental][status] patterns, note that they are
 available in the [`standard` release channel][ch], since the GAMMA initiative
 has not needed to introduce new resources or fields to date.
 
-[gamma]:/concepts/gamma/
-[status]:../../geps/overview.md#status
-[ch]:../../concepts/versioning.md#release-channels-eg-experimental-standard
+[gamma]:../../mesh/index.md
+[status]:../../geps/overview.md#gep-states
+[ch]:../../concepts/versioning.md#release-channels
 [cel]:https://kubernetes.io/docs/reference/using-api/cel/
 [crd]:https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/
 [concepts]:../../concepts/api-overview.md
 [geps]:../../contributing/enhancement-requests.md
-[guides]:/guides/getting-started/
+[guides]:../../guides/index.md
 [impl]:../../implementations.md
-[install-crds]:/guides/getting-started/#install-the-crds
+[install-crds]:../../guides/index.md#installing-gateway-api
 [issue]:https://github.com/kubernetes-sigs/gateway-api/issues/new/choose
 [disc]:https://github.com/kubernetes-sigs/gateway-api/discussions
-[community]:/contributing/community/
-[mesh-routing]:/concepts/gamma/#how-the-gateway-api-works-for-service-mesh
-[GEP-1426]:/geps/gep-1426/
+[community]:../../contributing/index.md
+[mesh-routing]:../../mesh/index.md
+[GEP-1426]:../../geps/gep-1294/index.md
 [GEP-1324]:../../geps/gep-1324/index.md
 [GEP-1686]:../../geps/gep-1686/index.md
 [GEP-1709]:../../geps/gep-1709/index.md
diff --git a/site-src/blog/index.md b/site-src/blog/index.md
index 98f4bcb1..85027e3d 100644
--- a/site-src/blog/index.md
+++ b/site-src/blog/index.md
@@ -17,7 +17,7 @@ your feedback!
 
 [:octicons-arrow-right-24: Continue reading][Gateway API: Introducing Service Mesh Support!]
 
-[status]:../geps/overview.md#status
+[status]:../geps/overview.md#gep-states
 [Gateway API: Introducing Service Mesh Support!]:2023/0829-mesh-support.md
 
 ## [Gateway API Graduates to Beta]
diff --git a/site-src/concepts/api-overview.md b/site-src/concepts/api-overview.md
index d04f893b..20db51b0 100644
--- a/site-src/concepts/api-overview.md
+++ b/site-src/concepts/api-overview.md
@@ -219,7 +219,7 @@ The following is required for a Route to be attached to a Gateway:
 
     The `Port` field described below is currently only included in the
     "Experimental" channel of Gateway API. For more information on release
-    channels, refer to the [related documentation](versioning.md#adding-experimental-fields).
+    channels, refer to the [related documentation](versioning.md#release-channels).
 
 A Route can reference a Gateway by specifying the namespace (optional if the
 Route and the Gateway are in the same namespace) and name of the Gateway in
@@ -326,8 +326,8 @@ to any traffic directed to the Service. How and which Routes attach to a given
 Service is controlled by the Routes themselves (working with Kubernetes RBAC),
 as covered in the [GAMMA routing documentation].
 
-[GAMMA]:/concepts/gamma
-[GAMMA routing documentation]:/concepts/gamma#gateway-api-for-mesh
+[GAMMA]:../mesh/index.md
+[GAMMA routing documentation]:../mesh/index.md#connecting-routes-and-services
 [service mesh]:glossary.md#service-mesh
 
 ## Extension points
diff --git a/site-src/concepts/use-cases.md b/site-src/concepts/use-cases.md
index dfe68d2a..3199e0a6 100644
--- a/site-src/concepts/use-cases.md
+++ b/site-src/concepts/use-cases.md
@@ -14,9 +14,9 @@ organizations, they all have distinct concerns that we need to consider
 separately.)
 
 [roles and personas]:roles-and-personas.md
-[Ana]:roles-and-personas.md#ana
-[Chihiro]:roles-and-personas.md#chihiro
-[Ian]:roles-and-personas.md#ian
+[Ana]:roles-and-personas.md#key-roles-and-personas
+[Chihiro]:roles-and-personas.md#key-roles-and-personas
+[Ian]:roles-and-personas.md#key-roles-and-personas
 
 ## The Use Cases
 
@@ -148,7 +148,7 @@ advantage of the service mesh, with custom routing logic, without any
 bottlenecks in requests to Chihiro or Ian.
 
 [east/west]:glossary.md#eastwest-traffic
-[GAMMA]:/concepts/gamma/
+[GAMMA]:../mesh/index.md
 [service mesh]:glossary.md#service-mesh
 
 ## Gateway and mesh use case
diff --git a/site-src/contributing/contributor-ladder.md b/site-src/contributing/contributor-ladder.md
index 760fb7f7..b7df292c 100644
--- a/site-src/contributing/contributor-ladder.md
+++ b/site-src/contributing/contributor-ladder.md
@@ -25,7 +25,8 @@ The following repositories are covered by this doc:
 
 * [kubernetes-sigs/gateway-api](https://github.com/kubernetes-sigs/gateway-api)
 * [kubernetes-sigs/ingress2gateway](https://github.com/kubernetes-sigs/ingress2gateway)
-* kubernetes-sigs/blixt (once migration is complete)
+* [kubernetes-sigs/gwctl](https://github.com/kubernetes-sigs/gwctl)
+* [kubernetes-sigs/blixt](https://github.com/kubernetes-sigs/blixt)
 
 Within each of these projects, there are opportunities to become an approver or
 reviewer for either the entire project, or a subset of that project. For
diff --git a/site-src/contributing/index.md b/site-src/contributing/index.md
index 613b15de..05798beb 100644
--- a/site-src/contributing/index.md
+++ b/site-src/contributing/index.md
@@ -102,13 +102,35 @@ service mesh use cases can be found in a separate
 
 | Date           | Title |    |
 |----------------|-------|----|
-| November, 2019 | [Kubecon 2019 San Diego: Evolving the Kubernetes Ingress APIs to GA and Beyond][2019-kubecon-na-slides] | [slides][2019-kubecon-na-slides], [video][2019-kubecon-na-video]|
+| Mar, 2024      | Kubecon 2024 Paris: Configuring Your Service Mesh with Gateway API | [video][2024-kubecon-video-1]|
+| Mar, 2024      | Kubecon 2024 Paris: Gateway API: Beyond GA | [video][2024-kubecon-video-2]|
+| Mar, 2024      | Kubecon 2024 Paris: Tutorial: Configuring Your Service Mesh with Gateway API  | [video][2024-kubecon-video-3]|
+| Oct, 2023      | Kubecon 2023 Chicago: Gateway API: The Most Collaborative API in Kubernetes History Is GA | [video][2023-kubecon-video-3]|
+| May, 2023      | Kubecon 2023 Amsterdam: Emissary-Ingress: Self-Service APIs and the Kubernetes Gateway API | [video][2023-kubecon-video-1]|
+| May, 2023      | Kubecon 2023 Amsterdam: Exiting Ingress 201: A Primer on Extension Mechanisms in Gateway API | [video][2023-kubecon-video-2]|
+| Oct, 2022      | Kubecon 2022 Detroit: One API To Rule Them All? What the Gateway API Means For Service Meshes | [video][2022-kubecon-video-4]|
+| Oct, 2022      | Kubecon 2022 Detroit: Exiting Ingress With the Gateway API | [video][2022-kubecon-video-3]|
+| Oct, 2022      | Kubecon 2022 Detroit: Flagger, Linkerd, And Gateway API: Oh My! | [video][2022-kubecon-video-2]|
+| May, 2022      | Kubecon 2022 Valencia: Gateway API: Beta to GA | [video][2022-kubecon-video-1]|
+| May, 2021      | Kubecon 2021 Virtual: Google Cloud - Multi-cluster, Blue-green Traffic Splitting with the Gateway API | [video][2021-kubecon-video-2]|
+| May, 2021      | Kubecon 2021 Virtual: Gateway API: A New Set of Kubernetes APIs for Advanced Traffic Routing | [video][2021-kubecon-video-1]|
+| November, 2019 | Kubecon 2019 San Diego: Evolving the Kubernetes Ingress APIs to GA and Beyond | [video][2019-kubecon-na-video]|
 | November, 2019 | Kubecon 2019 San Diego: SIG-NETWORK Service/Ingress Evolution Discussion | [slides][2019-kubecon-na-community-slides] |
 | May, 2019      | [Kubecon 2019 Barcelona: Ingress V2 and Multicluster Services][2019-kubecon-eu] | [slides][2019-kubecon-eu-slides], [video][2019-kubecon-eu-video]|
 | March, 2018    | SIG-NETWORK: Ingress user survey | [data][survey-data], [slides][survey-slides] |
 
-[2019-kubecon-na]: https://kccncna19.sched.com/event/UaYG/evolving-the-kubernetes-ingress-apis-to-ga-and-beyond-christopher-m-luciano-ibm-bowei-du-google
-[2019-kubecon-na-slides]: https://static.sched.com/hosted_files/kccncna19/a5/Kubecon%20San%20Diego%202019%20-%20Evolving%20the%20Kubernetes%20Ingress%20APIs%20to%20GA%20and%20Beyond%20%5BPUBLIC%5D.pdf
+[2024-kubecon-video-1]: https://www.youtube.com/watch?v=UMGRp0fGk3o
+[2024-kubecon-video-2]: https://www.youtube.com/watch?v=LITg6TvctjM
+[2024-kubecon-video-3]: https://www.youtube.com/watch?v=UMGRp0fGk3o
+[2023-kubecon-video-3]: https://www.youtube.com/watch?v=V3Vu_FWb4l4
+[2023-kubecon-video-1]: https://www.youtube.com/watch?v=piDYmZObh_M
+[2023-kubecon-video-2]: https://www.youtube.com/watch?v=7P55G8GsYRs:
+[2022-kubecon-video-4]: https://www.youtube.com/watch?v=vYGP5XdP2TA
+[2022-kubecon-video-3]: https://www.youtube.com/watch?v=sTQv4QOC-TI
+[2022-kubecon-video-2]: https://www.youtube.com/watch?v=9Ag45POgnKw
+[2022-kubecon-video-1]: https://www.youtube.com/watch?v=YPiuicxC8UU
+[2021-kubecon-video-2]: https://www.youtube.com/watch?v=vs8YrjdRJJU
+[2021-kubecon-video-1]: https://www.youtube.com/watch?v=lCRuzWFJBO0
 [2019-kubecon-na-video]: https://www.youtube.com/watch?v=cduG0FrjdJA
 [2019-kubecon-eu]: https://kccnceu19.sched.com/event/MPb6/ingress-v2-and-multicluster-services-rohit-ramkumar-bowei-du-google
 [2019-kubecon-eu-slides]: https://static.sched.com/hosted_files/kccnceu19/97/%5Bwith%20speaker%20notes%5D%20Kubecon%20EU%202019_%20Ingress%20V2%20%26%20Multi-Cluster%20Services.pdf
diff --git a/site-src/contributing/release-cycle.md b/site-src/contributing/release-cycle.md
index 43a811df..f25686d1 100644
--- a/site-src/contributing/release-cycle.md
+++ b/site-src/contributing/release-cycle.md
@@ -79,6 +79,21 @@ candidates. These release candidates will enable implementations to test against
 our release, work out any bugs, and gather early feedback on the viability of
 the release.
 
+## What happens when GEPs are unable to meet a timeline?
+
+There will be situations where the above phases and timelines can't be met by
+a GEP for one reason or another. In special circumstances (particularly, when it
+is is anticipated that only a little bit more time is needed to meet the goal) a
+time extension _might_ be granted if requested by the GEP authors, at the
+discretion of the maintainers.
+
+In the normal case however, when a GEP misses the timeline for a phase it will
+be pulled out of the release to maximize bandwidth and reduce disruptions to the
+overall release timeline. In such a case the Gateway API maintainers will stop
+progression and set the status of the GEP to a halted status (such as `Deferred`
+or `Declined`) with a note on the GEP explaining why it reached this status and
+what it would take to get it re-approved for work in a later iteration.
+
 ## Contributions Welcome in Each Phase
 
 The following table illustrates when different kinds of contributions will be
diff --git a/site-src/faq.md b/site-src/faq.md
index 0e580689..e02f9032 100644
--- a/site-src/faq.md
+++ b/site-src/faq.md
@@ -1,7 +1,8 @@
 # Frequently Asked Questions (FAQ)
 
 #### How can I get involved with Gateway API?
-The [community](/contributing/community) page keeps track of how to get involved
+
+The [community](contributing/index.md) page keeps track of how to get involved
 with the project.
 
 #### Will Gateway API replace the Ingress API?
diff --git a/site-src/guides/crd-management.md b/site-src/guides/crd-management.md
index d2cfd588..7a9c05cc 100644
--- a/site-src/guides/crd-management.md
+++ b/site-src/guides/crd-management.md
@@ -33,7 +33,7 @@ explores one possible approach implementations could use to accomplish this.
 ## Upgrading to a new version
 
 Gateway API releases CRDs in two [release
-channels](../concepts/versioning.md#release-channels-eg-experimental-standard).
+channels](../concepts/versioning.md#release-channels).
 Sticking with standard channel CRDs will ensure CRD upgrades are both simpler
 and safer.
 
diff --git a/site-src/guides/http-header-modifier.md b/site-src/guides/http-header-modifier.md
index a55e2b86..1118124e 100644
--- a/site-src/guides/http-header-modifier.md
+++ b/site-src/guides/http-header-modifier.md
@@ -1,7 +1,5 @@
 # HTTP Header Modifiers
 
-[HTTPRoute resources](../api-types/httproute.md) can modify the headers of HTTP requests and the HTTP responses from clients.
-There are two types of [filters](../api-types/httproute.md#filters-optional) available to meet these requirements: `RequestHeaderModifier` and `ResponseHeaderModifier`.
 [HTTPRoute resources](../api-types/httproute.md) can modify the headers of HTTP requests and the HTTP responses from clients.
 There are two types of [filters](../api-types/httproute.md#filters-optional) available to meet these requirements: `RequestHeaderModifier` and `ResponseHeaderModifier`.
 
diff --git a/site-src/guides/index.md b/site-src/guides/index.md
index ac1a14a7..21fbe942 100644
--- a/site-src/guides/index.md
+++ b/site-src/guides/index.md
@@ -45,7 +45,7 @@ beta, including GatewayClass, Gateway, HTTPRoute, and ReferenceGrant. To install
 this channel, run the following kubectl command:
 
 ```bash
-kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml
+kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/standard-install.yaml
 ```
 
 ### Install Experimental Channel
@@ -63,7 +63,7 @@ documentation](../concepts/versioning.md).
 To install the experimental channel, run the following kubectl command:
 
 ```bash
-kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/experimental-install.yaml
+kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/experimental-install.yaml
 ```
 
 ### v1.2 Upgrade Notes
diff --git a/site-src/guides/migrating-from-ingress.md b/site-src/guides/migrating-from-ingress.md
index bef5a6c4..77fef68d 100644
--- a/site-src/guides/migrating-from-ingress.md
+++ b/site-src/guides/migrating-from-ingress.md
@@ -251,7 +251,7 @@ In contrast, Gateway API specifies how to merge rules and resolve conflicts:
 * A Gateway implementation must merge the routing rules from all HTTPRoutes
   attached to a listener.
 * Conflicts must be handled as
-  prescribed in [API Design Guide: Conflicts](/guides/api-design/#conflicts). For example, more specific
+  prescribed in [API Design Guide: Conflicts](../guides/api-design.md#conflicts). For example, more specific
   matches in a routing rule win over the less specific ones.
 
 #### Default Backend
diff --git a/site-src/guides/multiple-ns.md b/site-src/guides/multiple-ns.md
index dce09dc6..6805f2c5 100644
--- a/site-src/guides/multiple-ns.md
+++ b/site-src/guides/multiple-ns.md
@@ -158,7 +158,7 @@ After these three Routes are deployed, they will all be attached to the
 list of routing rules. [Routing precedence](../reference/spec.md#gateway.networking.k8s.io/v1.HTTPRouteRule)
 between these routing rules is determined by most specific match and
 conflicts are handled according to [conflict
-resolution](/concepts/guidelines#conflicts). This provides predictable and
+resolution](api-design.md#conflicts). This provides predictable and
 deterministic merging of routing rules between independent users.
 
 Thanks to cross-Namespace routing, the Foobar Corporation can distribute
diff --git a/site-src/implementations.md b/site-src/implementations.md
index d5c46391..1b112040 100644
--- a/site-src/implementations.md
+++ b/site-src/implementations.md
@@ -5,12 +5,81 @@ and provides status and resource references for them.
 
 Implementors and integrators of Gateway API are encouraged to update this
 document with status information about their implementations, the versions they
-cover, and documentation to help users get started.
+cover, and documentation to help users get started. This status information should
+be no longer than a few paragraphs. 
 
+## Conformance levels
+
+There are three levels of Gateway API conformance:
+
+### Conformant implementations
+
+These implementations have submitted at least one conformance report that has passes for:
+
+  * All core conformance tests for at least one combination of Route type and
+    Profile
+  * All claimed Extended features
+  
+for one of the two (2) most recent Gateway API releases.
+
+So, it's conformant to support Mesh + HTTPRoute, or Gateway + HTTPRoute, or
+Gateway + TLSRoute, or Gateway + Mesh + HTTPRoute, plus any extended features
+the implementation claims. But implementaions _must_ support at least one
+Profile and one Route type in that profile, and must pass all Core conformance
+tests for that Profile and Route type in addition to all claimed Extended
+features.
+
+### Partially Conformant implementations
+
+These implementations are aiming for full conformance but are not currently
+achieving it. They have submitted at least one conformance report passing some
+of the tests to be Conformant (as above) for one of the three (3) most recent
+Gateway API releases. Note that the requirements to be considered "partially
+conformant" may be tightened in a future release of Gateway API.
+
+### Stale implementations
+
+These implementations may not be being actively developed and will be removed
+from this page on the next page review unless they submit a conformance report
+moving them to one of the other categories.
+
+Page reviews are performed at least one month after every Gateway API release,
+with the first being performed after the release of Gateway API v1.3, in late
+June 2025. Following the Gateway API v1.5 review process, due in mid-2026,
+stale implementations will no longer be listed.
+
+## Implementation profiles
+
+Implementations also generally fall into two categories, which are called
+_profiles_:
+
+* **Gateway** controllers reconcile the Gateway resource and are intended to
+handle north-south traffic, mainly concerned with coming from outside the
+cluster to inside.
+* **Mesh** controllers reconcile Service resources with HTTPRoutes attached
+and are intended to handle east-west traffic, within the same cluster or
+set of clusters.
+
+Each profile has a set of conformance tests associated with it, that lay out
+the expected behavior for implementations to be conformant (as above).
+
+Implementations may also fit both profiles.
+
+## Integrations
+
+Also listed on this page are **integrations**, which are other software
+projects that are able to make use of Gateway API resources to perform
+other functions (like managing DNS or creating certificates).
+
+!!! note
+    This page contains links to third party projects that provide functionality
+    required for Gateway API to work. The Gateway API project authors aren't
+    responsible for these projects, which are listed alphabetically within their
+    class.
 
 !!! info "Compare extended supported features across implementations"
 
-    [View a table to quickly compare supported features of projects](implementations/v1.1.md). These outline Gateway controller implementations that have passed core conformance tests, and focus on extended conformance features that they have implemented.
+    [View a table to quickly compare supported features of projects](implementations/v1.2.md). These outline Gateway controller implementations that have passed core conformance tests, and focus on extended conformance features that they have implemented.
 
 ## Gateway Controller Implementation Status <a name="gateways"></a>
 
@@ -32,8 +101,10 @@ cover, and documentation to help users get started.
 - [HAProxy Kubernetes Ingress Controller][32] (GA)
 - [HashiCorp Consul][8]
 - [Istio][9] (GA)
+- [kgateway][37] (GA)
 - [Kong Ingress Controller][10] (GA)
 - [Kong Gateway Operator][35] (GA)
+* [Kubvernor][39](work in progress)
 - [Kuma][11] (GA)
 - [LiteSpeed Ingress Controller][19]
 - [LoxiLB][36] (beta)
@@ -46,9 +117,10 @@ cover, and documentation to help users get started.
 
 ## Service Mesh Implementation Status <a name="meshes"></a>
 
+- [Google Cloud Service Mesh][38] (GA)
 - [Istio][9] (GA)
 - [Kuma][11] (GA)
-- [Linkerd][28] (experimental)
+- [Linkerd][28] (GA)
 
 ## Integrations <a name="integrations"></a>
 
@@ -93,9 +165,12 @@ cover, and documentation to help users get started.
 [34]:#airlock-microgateway
 [35]:#kong-gateway-operator
 [36]:#loxilb
+[37]:#kgateway
+[38]:#google-cloud-service-mesh
+[39]:#kubvernor
 
 
-[gamma]:/concepts/gamma/
+[gamma]:mesh/index.md
 
 
 
@@ -113,21 +188,17 @@ In this section you will find specific links to blog posts, documentation and ot
 [epicsource]:https://github.com/epic-gateway
 
 ### Airlock Microgateway
-[![Conformance](https://img.shields.io/badge/Gateway%20API%20Conformance%20v1.1.0-Airlock%20Microgateway-green)](https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/reports/v1.1.0/airlock-microgateway)
+[![Conformance](https://img.shields.io/badge/Gateway%20API%20Conformance%20v1.3.0-Airlock%20Microgateway-green)](https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/reports/v1.3.0/airlock-microgateway)
 
-[Airlock Microgateway][airlock-microgateway] is a Kubernetes native WAAP (Web Application and API Protection) solution to protect microservices.
+[Airlock Microgateway][airlock-microgateway] is a Kubernetes native WAAP (Web Application and API Protection, formerly known as WAF) solution optimized for Kubernetes environments and certified for RedHat OpenShift.
 Modern application security is embedded in the development workflow and follows DevSecOps paradigms.
 Airlock Microgateway protects your applications and microservices with the tried-and-tested Airlock security features against attacks, while also providing a high degree of scalability.
 
-With [Airlock Microgateway 4.4][airlock-microgateway-v4.4], Airlock Microgateway introduces a sidecarless data plane mode
-based on Gateway API to avoid the operational complexity of sidecars.
-
 #### Features
-- Kubernetes native integration with sidecar injection and Gateway API support
+- Comprehensive WAAP (formerly known as WAF) with security features like Deny Rules to protect against known attacks (OWASP Top 10), header filtering, JSON parsing, OpenAPI specification enforcement, and GraphQL schema validation
+- Identity aware proxy which makes it possible to enforce authentication using JWT authentication or OIDC
 - Reverse proxy functionality with request routing rules, TLS termination and remote IP extraction
-- Using native Envoy HTTP filters like Lua scripting, RBAC, ext_authz, JWT authentication
-- Content security filters for protecting against known attacks (OWASP Top 10)
-- API security features like JSON parsing, OpenAPI specification enforcement or GraphQL schema validation
+- Easy-to-use Grafana dashboards which provide valuable insights in allowed and blocked traffic and other metrics
 
 #### Documentation and links
 - [Product documentation][airlock-microgateway-documentation]
@@ -135,9 +206,8 @@ based on Gateway API to avoid the operational complexity of sidecars.
 - Check our [Airlock community forum][airlock-microgateway-community-support] and [support process][airlock-microgateway-premium-support] for support.
 
 [airlock-microgateway]:https://www.airlock.com/en/secure-access-hub/components/microgateway
-[airlock-microgateway-v4.4]:https://docs.airlock.com/microgateway/4.4/#data/1725073468781.html
 [airlock-microgateway-documentation]:https://docs.airlock.com/microgateway/latest
-[airlock-microgateway-guide]:https://docs.airlock.com/microgateway/4.4/#data/1726159368351.html
+[airlock-microgateway-guide]:https://docs.airlock.com/microgateway/latest/?topic=MGW-00000142
 [airlock-microgateway-community-support]:https://forum.airlock.com/
 [airlock-microgateway-premium-support]:https://techzone.ergon.ch/support-process
 
@@ -207,13 +277,13 @@ effort, check out the #development channel or join our [weekly developer meeting
 
 ### Contour
 
-[![Conformance](https://img.shields.io/badge/Gateway%20API%20Conformance%20v1.1.0-Contour-green)](https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/reports/v1.1.0/projectcontour-contour)
+[![Conformance](https://img.shields.io/badge/Gateway%20API%20Conformance%20v1.2.1-Contour-green)](https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/reports/v1.2.1/projectcontour-contour)
 
 [Contour][contour] is a CNCF open source Envoy-based ingress controller for Kubernetes.
 
-Contour [v1.30.0][contour-release] implements Gateway API v1.1.0.
+Contour [v1.31.0][contour-release] implements Gateway API v1.2.1.
 All [Standard channel][contour-standard] v1 API group resources (GatewayClass, Gateway, HTTPRoute, ReferenceGrant), plus most v1alpha2 API group resources (TLSRoute, TCPRoute, GRPCRoute, ReferenceGrant, and BackendTLSPolicy) are supported.
-Contour's implementation passes all core and most extended Gateway API conformance tests included in the v1.1.0 release.
+Contour's implementation passes most core extended Gateway API conformance tests included in the v1.2.1 release.
 
 See the [Contour Gateway API Guide][contour-guide] for information on how to deploy and use Contour's Gateway API implementation.
 
@@ -221,7 +291,7 @@ For help and support with Contour's implementation, [create an issue][contour-is
 
 [contour]:https://projectcontour.io
 [contour-release]:https://github.com/projectcontour/contour/releases/tag/v1.30.0
-[contour-standard]:concepts/versioning.md#release-channels-eg-experimental-standard
+[contour-standard]:concepts/versioning.md#release-channels
 [contour-guide]:https://projectcontour.io/docs/1.30/guides/gateway-api/
 [contour-issue-new]:https://github.com/projectcontour/contour/issues/new/choose
 [contour-slack]:https://kubernetes.slack.com/archives/C8XRH2R4J
@@ -288,6 +358,23 @@ profile except `HTTPRouteServiceTypes`.
 [gloogateway]:https://docs.solo.io/gateway/latest/
 [solo]:https://www.solo.io
 
+### Google Cloud Service Mesh
+
+
+[Google Kubernetes Engine (GKE)][gke] is a managed Kubernetes platform offered
+by Google Cloud.
+
+GKE's implementation of Gateway For Mesh (GAMMA) is through the [Cloud Service Mesh][cloud-service-mesh].
+
+
+Google Cloud Service Mesh supports [Envoy-based sidecar mesh][envoy-sidecar-mesh] and [Proxyless-GRPC][proxyless-grpc-mesh] (using GRPCRoute).
+
+
+[gke]:https://cloud.google.com/kubernetes-engine
+[cloud-service-mesh]:https://cloud.google.com/products/service-mesh
+[envoy-sidecar-mesh]:https://cloud.google.com/service-mesh/docs/gateway/set-up-envoy-mesh
+[proxyless-grpc-mesh]:https://cloud.google.com/service-mesh/docs/gateway/proxyless-grpc-mesh
+
 ### Google Kubernetes Engine
 
 [![Conformance](https://img.shields.io/badge/Gateway_API_Partial_Conformance_v1.1.0-Google_Kubernetes_Engine-orange)](https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/reports/v1.1.0/gke-gateway)
@@ -359,6 +446,18 @@ Check out the [Gateway API task][istio-2] for more information about the Gateway
 [istio-1]:https://istio.io/latest/docs/tasks/traffic-management/ingress/
 [istio-2]:https://istio.io/latest/docs/tasks/traffic-management/ingress/gateway-api/
 
+### kgateway
+[![Conformance](https://img.shields.io/badge/Gateway%20API%20Conformance%20v1.2.1-kgateway-green)](https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/reports/v1.2.1/kgateway)
+
+The [kgateway] project is a feature-rich, Kubernetes-native ingress controller and next-generation API gateway.
+It is focused on maintaining a great HTTP experience, extending features for advanced routing in scenarios such as AI and MCP gateways, and interoperating with a service mesh such as Istio in both ambient and sidecar modes.
+This focus means that you can easily configure a set of Envoy instances that are reasonably distributed in a performant way across many north-south and east-west use cases.
+
+Kgateway is generally available with its 2.0 release.
+
+[kgateway]:https://kgateway.dev/docs
+
+
 ### Kong Kubernetes Ingress Controller
 
 [![Conformance](https://img.shields.io/badge/Gateway%20API%20Conformance%20v1.2.1-Kong%20Ingress%20Controller-green)](https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/reports/v1.2.1/kong-kubernetes-ingress-controller)
@@ -390,6 +489,12 @@ For help and support with Kong Gateway operator please feel free to [create an i
 [kgo-issue-new]:https://github.com/Kong/gateway-operator/issues/new
 [kgo-disc-new]:https://github.com/Kong/gateway-operator/discussions/new
 
+
+### Kubvernor
+[Kubvernor][kubvernor] is an open-source, highly experimental implementation of API controller in Rust programming language. Currently, Kubernor supports Envoy Proxy. The project aims to be as generic as possible so Kubvernor can be used to manage/deploy different gateways (Envoy, Nginx, HAProxy, etc.).
+
+[kubvernor]:https://github.com/kubvernor/kubvernor
+
 ### Kuma
 
 [![Conformance](https://img.shields.io/badge/Gateway%20API%20Conformance%20v1.0.0-Kuma-green)](https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/reports/v1.0.0/kumahq-kuma)
@@ -446,7 +551,7 @@ Follow the [quickstart guide][loxigw-guide] to get LoxiLB running with Gateway A
 
 For a list of supported Gateway API resources and features, see the [Gateway API Compatibility][nginx-compat] doc.
 
-If you have any suggestions or experience issues with NGINX Gateway Fabric, please [create an issue][nginx-issue-new] or a [discussion][nginx-disc-new] on GitHub. You can also ask for help in the [#nginx-gateway-fabric channel on NGINX slack][nginx-slack].
+If you have any suggestions or experience issues with NGINX Gateway Fabric, please [create an issue][nginx-issue-new] or a [discussion][nginx-disc-new] on GitHub. You can also ask for help in the [NGINX Community Forum][nginx-forum].
 
 [nginx-gateway-fabric]:https://github.com/nginx/nginx-gateway-fabric
 [nginx]:https://nginx.org/
@@ -454,12 +559,18 @@ If you have any suggestions or experience issues with NGINX Gateway Fabric, plea
 [nginx-compat]:https://docs.nginx.com/nginx-gateway-fabric/overview/gateway-api-compatibility/
 [nginx-issue-new]:https://github.com/nginx/nginx-gateway-fabric/issues/new
 [nginx-disc-new]:https://github.com/nginx/nginx-gateway-fabric/discussions/new
-[nginx-slack]:https://nginxcommunity.slack.com/channels/nginx-gateway-fabric
+[nginx-forum]:https://community.nginx.org/
 
 
 ### ngrok Kubernetes Operator
 
-[ngrok Kubernetes Operator][ngrok-k8s-operator] provides an implementation of the Gateway API that uses [ngrok's ingress-as-a-service][ngrok]. This project uses the Gateway API to support routing traffic from ngrok's global network to applications running on Kubernetes clusters. This easily adds the benefits of ngrok, like security, network policy, and a global presence with the simplicity of cloud service. The operator contains both a Gateway API implementation as well as a controller using Kubernetes Ingress. The Gateway API implementation is currently under development and supports only the Gateway, GatewayClass and HTTPRoute. As the TLSRoute and TCPRoute move from experimental to stable, they will also be implemented.
+[ngrok Kubernetes Operator][ngrok-k8s-operator] After adding preliminary support last year, the [ngrok Kubernetes Operator][ngrok-k8s-operator] supports the entire core Gateway API. This includes:
+
+- Routes (HTTPRoute, TCPRoute, TLSRoute) + RouteMatches (Header, Path, +more)
+- Filters: Header, Redirect, Rewrite + more
+- Backends: Backend Filters + Weighted balancing
+- ReferenceGrant: RBAC for multi-tenant clusters handling
+- Traffic Policy as an extensionRef or annotation when the Gateway API isn’t flexible enough
 
 You can read our [docs][ngrok-k8s-gwapi-docs] for more information. If you have any feature requests or bug reports, please [create an issue][ngrok-issue-new]. You can also reach out for help on [Slack][ngrok-slack]
 
@@ -566,3 +677,59 @@ For help and support with Kuadrant's implementation please feel free to [create
 [kuadrant]:https://kuadrant.io/
 [kuadrant-issue-new]:https://github.com/Kuadrant/kuadrant-operator/issues/new
 [kuadrant-slack]:https://kubernetes.slack.com/archives/C05J0D0V525
+
+
+## Adding new entries
+
+Implementations are free to make a PR to add their entry to this page; however,
+in order to meet the requirements for being Partially Conformant or Conformant,
+the implementation must have had a conformance report submission PR merged.
+
+Part of the review process for new additions to this page is that a maintainer
+will check the conformance level and verify the state.
+
+## Page Review Policy
+
+This page is intended to showcase actively developed and conformant implementations
+of Gateway API, and so is subject to regular reviews.
+
+These reviews are performed at least one month after every Gateway API release
+(starting with the Gateway API v1.3 release).
+
+As part of the review, a maintainer will check:
+
+* which implementations are **Conformant** - as defined above in this document.
+* which implementations are **Partially Conformant**, as defined above in this
+  document.
+
+If the maintainer performing the review finds that there are implementations
+that no longer satisfy the criteria for Partially Conformant or Conformant, or
+finds implementations that are in the "Stale" state, then that maintainer will:
+
+* Inform the other maintainers and get their agreement on the list of stale and
+to-be-removed implementations
+* Post on the #sig-network-gateway-api channel informing the maintainers of
+implementations that are no longer at least partially conformant should contact
+the Gateway API maintainers to discuss the implementation's status. This period
+is called the "**right-of-reply**" period, is at least two weeks long, and functions
+as a lazy consensus period.
+* Any implementations that do not respond within the right-of-reply period will be
+downgraded in status, either by being moved to "Stale", or being removed
+from this page if they are already "Stale".
+
+Page review timeline, starting with the v1.3 Page Review:
+
+* Gateway API v1.3 release Page Review: a maintainer will move anyone who hasn't
+  submitted a conformance report using the rules above to "Stale". They will also
+  contact anyone who moves to Stale to inform them about this rule change.
+* Gateway API v1.4 release Page Review (at least one month after the actual
+  release): A maintainer will perform the Page Review process again, removing
+  any implementations that are are still Stale (after a right-of-reply period).
+* Gateway API v1.5 release Page Review (at least one month after the actual
+  release): We will remove the Stale category, and implementation maintainers
+  will need to be at least partially conformant on each review, or during the 
+  right-of-reply period, or be removed from the implementations page.
+
+This means that, after the Gateway API v1.5 release, implementations cannot be
+added to this page unless they have submitted at least a Partially Conformant
+conformance report.
diff --git a/site-src/implementations/v1.0.md b/site-src/implementations/v1.0.md
index 901a48a1..e2689641 100644
--- a/site-src/implementations/v1.0.md
+++ b/site-src/implementations/v1.0.md
@@ -1,6 +1,6 @@
 
 The following tables are populated from the conformance reports [uploaded by project implementations](https://github.com/kubernetes-sigs/gateway-api/tree/main/conformance/reports). They are separated into the extended features that each project supports listed in their reports.
-Implementations only appear in this page if they pass Core conformance for the resource type, and the features listed should be Extended features.
+Implementations only appear in this page if they pass Core conformance for the resource type, and the features listed should be Extended features. Implementations that submit conformance reports with skipped tests won't appear in the tables.
 
 
 
@@ -16,33 +16,33 @@ Implementations only appear in this page if they pass Core conformance for the r
 
 ### HTTPRoute
 
-| Organization    | Project                            | Version       | HTTPRouteMethodMatching   | HTTPRouteQueryParamMatching   | HTTPRouteResponseHeaderModification   | HTTPRouteBackendTimeout   | HTTPRoutePortRedirect   | HTTPRoutePathRedirect   | HTTPRouteHostRewrite   | HTTPRouteSchemeRedirect   | HTTPRoutePathRewrite   | HTTPRouteParentRefPort   | HTTPRouteRequestMirror   | HTTPRouteRequestMultipleMirrors   | HTTPRouteRequestTimeout   |
-|:----------------|:-----------------------------------|:--------------|:--------------------------|:------------------------------|:--------------------------------------|:--------------------------|:------------------------|:------------------------|:-----------------------|:--------------------------|:-----------------------|:-------------------------|:-------------------------|:----------------------------------|:--------------------------|
-| Kong            | kubernetes-ingress-controller      | v3.0.2        | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:        | :x:                     | :x:                     | :x:                    | :x:                       | :x:                    | :x:                      | :x:                      | :x:                               | :x:                       |
-| Kong            | kubernetes-ingress-controller      | v3.1.1        | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:        | :x:                     | :x:                     | :x:                    | :x:                       | :x:                    | :x:                      | :x:                      | :x:                               | :x:                       |
-| Microsoft Azure | Application Gateway for Containers | v1.0.0        | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :x:                       | :white_check_mark:      | :white_check_mark:      | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :x:                      | :x:                               | :x:                       |
-| cilium          | cilium                             | v1.15.0-pre.3 | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :white_check_mark:      | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :white_check_mark:       | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        |
-| envoyproxy      | envoy-gateway                      | v0.6.0        | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :white_check_mark:      | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        |
-| istio           | istio                              | 1.2           | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :white_check_mark:      | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        |
-| kumahq          | kuma                               | 2.6.0         | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :x:                       | :white_check_mark:      | :white_check_mark:      | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :white_check_mark:       | :x:                               | :x:                       |
-| nginx           | nginx-gateway-fabric               | v1.1.0        | :white_check_mark:        | :white_check_mark:            | :x:                                   | :x:                       | :white_check_mark:      | :x:                     | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :x:                      | :x:                               | :x:                       |
-| nginx           | nginx-gateway-fabric               | v1.2.0        | :white_check_mark:        | :white_check_mark:            | :x:                                   | :x:                       | :white_check_mark:      | :x:                     | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :x:                      | :x:                               | :x:                       |
-| projectcontour  | contour                            | v1.28.1       | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :white_check_mark:      | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        |
-| projectcontour  | contour                            | v1.28.2       | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :white_check_mark:      | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        |
-| projectcontour  | contour                            | v1.28.3       | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :white_check_mark:      | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        |
-| projectcontour  | contour                            | v1.28.4       | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :white_check_mark:      | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        |
-| projectcontour  | contour                            | v1.28.5       | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :white_check_mark:      | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        |
-| projectcontour  | contour                            | v1.28.6       | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :white_check_mark:      | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        |
-| projectcontour  | contour                            | v1.29.0       | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :white_check_mark:      | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        |
-| projectcontour  | contour                            | v1.29.1       | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :white_check_mark:      | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        |
-| projectcontour  | contour                            | v1.29.2       | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :white_check_mark:      | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        |
-| solo.io         | gloo-gateway                       | v1.17.4       | :white_check_mark:        | :white_check_mark:            | :white_check_mark:                    | :x:                       | :white_check_mark:      | :white_check_mark:      | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :x:                      | :white_check_mark:       | :x:                               | :x:                       |
+| Organization    | Project                            | Version       | HTTPRoute Method Matching   | HTTPRoute Query Param Matching   | HTTPRoute Response Header Modification   | HTTPRoute Backend Timeout   | HTTPRoute Port Redirect   | HTTPRoute Path Redirect   | HTTPRoute Host Rewrite   | HTTPRoute Scheme Redirect   | HTTPRoute Path Rewrite   | HTTPRoute Parent Ref Port   | HTTPRoute Request Mirror   | HTTPRoute Request Multiple Mirrors   | HTTPRoute Request Timeout   |
+|:----------------|:-----------------------------------|:--------------|:----------------------------|:---------------------------------|:-----------------------------------------|:----------------------------|:--------------------------|:--------------------------|:-------------------------|:----------------------------|:-------------------------|:----------------------------|:---------------------------|:-------------------------------------|:----------------------------|
+| Kong            | kubernetes-ingress-controller      | v3.0.2        | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :white_check_mark:          | :x:                       | :x:                       | :x:                      | :x:                         | :x:                      | :x:                         | :x:                        | :x:                                  | :x:                         |
+| Kong            | kubernetes-ingress-controller      | v3.1.1        | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :white_check_mark:          | :x:                       | :x:                       | :x:                      | :x:                         | :x:                      | :x:                         | :x:                        | :x:                                  | :x:                         |
+| Microsoft Azure | Application Gateway for Containers | v1.0.0        | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :x:                         | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :x:                        | :x:                                  | :x:                         |
+| cilium          | cilium                             | v1.15.0-pre.3 | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :white_check_mark:          | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          |
+| envoyproxy      | envoy-gateway                      | v0.6.0        | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          |
+| istio           | istio                              | 1.2           | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          |
+| kumahq          | kuma                               | 2.6.0         | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :x:                         | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :white_check_mark:         | :x:                                  | :x:                         |
+| nginx           | nginx-gateway-fabric               | v1.1.0        | :white_check_mark:          | :white_check_mark:               | :x:                                      | :x:                         | :white_check_mark:        | :x:                       | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :x:                        | :x:                                  | :x:                         |
+| nginx           | nginx-gateway-fabric               | v1.2.0        | :white_check_mark:          | :white_check_mark:               | :x:                                      | :x:                         | :white_check_mark:        | :x:                       | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :x:                        | :x:                                  | :x:                         |
+| projectcontour  | contour                            | v1.28.1       | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          |
+| projectcontour  | contour                            | v1.28.2       | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          |
+| projectcontour  | contour                            | v1.28.3       | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          |
+| projectcontour  | contour                            | v1.28.4       | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          |
+| projectcontour  | contour                            | v1.28.5       | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          |
+| projectcontour  | contour                            | v1.28.6       | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          |
+| projectcontour  | contour                            | v1.29.0       | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          |
+| projectcontour  | contour                            | v1.29.1       | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          |
+| projectcontour  | contour                            | v1.29.2       | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          |
+| solo.io         | gloo-gateway                       | v1.17.4       | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                       | :x:                         | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       | :white_check_mark:          | :white_check_mark:       | :x:                         | :white_check_mark:         | :x:                                  | :x:                         |
 
 ## Mesh Profile
 
 ### HTTPRoute
 
-| Organization   | Project   | Version   | HTTPRouteRequestTimeout   | HTTPRoutePathRedirect   | HTTPRouteRequestMirror   | HTTPRoutePathRewrite   | HTTPRouteMethodMatching   | HTTPRouteRequestMultipleMirrors   | HTTPRouteBackendTimeout   | HTTPRouteResponseHeaderModification   | HTTPRoutePortRedirect   | HTTPRouteSchemeRedirect   | HTTPRouteHostRewrite   | HTTPRouteQueryParamMatching   |
-|:---------------|:----------|:----------|:--------------------------|:------------------------|:-------------------------|:-----------------------|:--------------------------|:----------------------------------|:--------------------------|:--------------------------------------|:------------------------|:--------------------------|:-----------------------|:------------------------------|
-| istio          | istio     | 1.2       | :white_check_mark:        | :white_check_mark:      | :white_check_mark:       | :white_check_mark:     | :white_check_mark:        | :white_check_mark:                | :white_check_mark:        | :white_check_mark:                    | :white_check_mark:      | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            |
-| kumahq         | kuma      | 2.6.0     | :x:                       | :white_check_mark:      | :white_check_mark:       | :white_check_mark:     | :white_check_mark:        | :x:                               | :x:                       | :white_check_mark:                    | :white_check_mark:      | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            |
\ No newline at end of file
+| Organization   | Project   | Version   | HTTPRoute Request Timeout   | HTTPRoute Path Redirect   | HTTPRoute Request Mirror   | HTTPRoute Path Rewrite   | HTTPRoute Method Matching   | HTTPRoute Request Multiple Mirrors   | HTTPRoute Backend Timeout   | HTTPRoute Response Header Modification   | HTTPRoute Port Redirect   | HTTPRoute Scheme Redirect   | HTTPRoute Host Rewrite   | HTTPRoute Query Param Matching   |
+|:---------------|:----------|:----------|:----------------------------|:--------------------------|:---------------------------|:-------------------------|:----------------------------|:-------------------------------------|:----------------------------|:-----------------------------------------|:--------------------------|:----------------------------|:-------------------------|:---------------------------------|
+| istio          | istio     | 1.2       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:         | :white_check_mark:       | :white_check_mark:          | :white_check_mark:                   | :white_check_mark:          | :white_check_mark:                       | :white_check_mark:        | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               |
+| kumahq         | kuma      | 2.6.0     | :x:                         | :white_check_mark:        | :white_check_mark:         | :white_check_mark:       | :white_check_mark:          | :x:                                  | :x:                         | :white_check_mark:                       | :white_check_mark:        | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               |
\ No newline at end of file
diff --git a/site-src/implementations/v1.1.md b/site-src/implementations/v1.1.md
index 577c5642..21063b28 100644
--- a/site-src/implementations/v1.1.md
+++ b/site-src/implementations/v1.1.md
@@ -1,6 +1,6 @@
 
 The following tables are populated from the conformance reports [uploaded by project implementations](https://github.com/kubernetes-sigs/gateway-api/tree/main/conformance/reports). They are separated into the extended features that each project supports listed in their reports.
-Implementations only appear in this page if they pass Core conformance for the resource type, and the features listed should be Extended features.
+Implementations only appear in this page if they pass Core conformance for the resource type, and the features listed should be Extended features. Implementations that submit conformance reports with skipped tests won't appear in the tables.
 
 
 
@@ -16,50 +16,55 @@ Implementations only appear in this page if they pass Core conformance for the r
 
 ### HTTPRoute
 
-| Organization   | Project                       | Version            | Mode                             | GatewayPort8080    | HTTPRouteHostRewrite   | HTTPRoutePathRedirect   | HTTPRouteRequestMirror   | HTTPRouteResponseHeaderModification   | HTTPRouteSchemeRedirect   | HTTPRouteMethodMatching   | HTTPRoutePathRewrite   | HTTPRouteQueryParamMatching   | HTTPRouteParentRefPort   | GatewayHTTPListenerIsolation   | GatewayStaticAddresses   | HTTPRouteBackendProtocolH2C   | HTTPRouteBackendProtocolWebSocket   | HTTPRouteBackendRequestHeaderModification   | HTTPRouteBackendTimeout   | HTTPRoutePortRedirect   | HTTPRouteRequestMultipleMirrors   | HTTPRouteRequestTimeout   |
-|:---------------|:------------------------------|:-------------------|:---------------------------------|:-------------------|:-----------------------|:------------------------|:-------------------------|:--------------------------------------|:--------------------------|:--------------------------|:-----------------------|:------------------------------|:-------------------------|:-------------------------------|:-------------------------|:------------------------------|:------------------------------------|:--------------------------------------------|:--------------------------|:------------------------|:----------------------------------|:--------------------------|
-| GKE            | gke-gateway                   | 1.30.3-gke.1211000 | gke-l7-global-external-managed   | :white_check_mark: | :white_check_mark:     | :white_check_mark:      | :white_check_mark:       | :white_check_mark:                    | :white_check_mark:        | :x:                       | :x:                    | :x:                           | :x:                      | :x:                            | :x:                      | :x:                           | :x:                                 | :x:                                         | :x:                       | :x:                     | :x:                               | :x:                       |
-| GKE            | gke-gateway                   | 1.30.3-gke.1211000 | gke-l7-rilb                      | :white_check_mark: | :white_check_mark:     | :white_check_mark:      | :white_check_mark:       | :white_check_mark:                    | :white_check_mark:        | :x:                       | :x:                    | :x:                           | :x:                      | :x:                            | :x:                      | :x:                           | :x:                                 | :x:                                         | :x:                       | :x:                     | :x:                               | :x:                       |
-| GKE            | gke-gateway                   | 1.30.3-gke.1211000 | gke-l7-regional-external-managed | :white_check_mark: | :white_check_mark:     | :white_check_mark:      | :white_check_mark:       | :white_check_mark:                    | :white_check_mark:        | :x:                       | :x:                    | :x:                           | :x:                      | :x:                            | :x:                      | :x:                           | :x:                                 | :x:                                         | :x:                       | :x:                     | :x:                               | :x:                       |
-| Kong           | kubernetes-ingress-controller | v3.2.0             | expressions                      | :x:                | :white_check_mark:     | :x:                     | :x:                      | :white_check_mark:                    | :x:                       | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :x:                      | :x:                            | :x:                      | :x:                           | :x:                                 | :x:                                         | :x:                       | :x:                     | :x:                               | :x:                       |
-| Kong           | kubernetes-ingress-controller | v3.3.1             | expressions                      | :x:                | :white_check_mark:     | :x:                     | :x:                      | :white_check_mark:                    | :x:                       | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :x:                      | :x:                            | :x:                      | :x:                           | :x:                                 | :x:                                         | :x:                       | :x:                     | :x:                               | :x:                       |
-| airlock        | microgateway                  | v4.4.0             | default                          | :white_check_mark: | :x:                    | :x:                     | :x:                      | :x:                                   | :x:                       | :white_check_mark:        | :x:                    | :white_check_mark:            | :white_check_mark:       | :x:                            | :x:                      | :x:                           | :x:                                 | :x:                                         | :x:                       | :x:                     | :x:                               | :x:                       |
-| cilium         | cilium                        | v1.16.0            | default                          | :white_check_mark: | :white_check_mark:     | :white_check_mark:      | :white_check_mark:       | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :white_check_mark:       | :white_check_mark:             | :white_check_mark:       | :white_check_mark:            | :white_check_mark:                  | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:      | :white_check_mark:                | :white_check_mark:        |
-| envoyproxy     | envoy-gateway                 | v1.1.0             | default                          | :white_check_mark: | :white_check_mark:     | :white_check_mark:      | :white_check_mark:       | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :white_check_mark:       | :white_check_mark:             | :white_check_mark:       | :x:                           | :x:                                 | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:      | :white_check_mark:                | :white_check_mark:        |
-| istio          | istio                         | 1.22               | default                          | :white_check_mark: | :white_check_mark:     | :white_check_mark:      | :white_check_mark:       | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :white_check_mark:       | :white_check_mark:             | :white_check_mark:       | :x:                           | :x:                                 | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:      | :white_check_mark:                | :white_check_mark:        |
-| nginx          | nginx-gateway-fabric          | v1.3.0             | default                          | :white_check_mark: | :white_check_mark:     | :x:                     | :x:                      | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :x:                      | :x:                            | :x:                      | :x:                           | :x:                                 | :x:                                         | :x:                       | :white_check_mark:      | :x:                               | :x:                       |
-| nginx          | nginx-gateway-fabric          | v1.4.0             | default                          | :white_check_mark: | :white_check_mark:     | :x:                     | :x:                      | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :x:                      | :x:                            | :x:                      | :x:                           | :x:                                 | :x:                                         | :x:                       | :white_check_mark:      | :x:                               | :x:                       |
-| projectcontour | contour                       | v1.30.0            | default                          | :white_check_mark: | :white_check_mark:     | :white_check_mark:      | :white_check_mark:       | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :white_check_mark:       | :white_check_mark:             | :white_check_mark:       | :x:                           | :x:                                 | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:      | :white_check_mark:                | :white_check_mark:        |
-| traefik        | traefik                       | v3.1.0             | default                          | :white_check_mark: | :white_check_mark:     | :white_check_mark:      | :x:                      | :x:                                   | :white_check_mark:        | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :x:                      | :x:                            | :x:                      | :x:                           | :x:                                 | :x:                                         | :x:                       | :white_check_mark:      | :x:                               | :x:                       |
+| Organization    | Project                            | Version            | Mode                             | Gateway Port 8080   | HTTPRoute Host Rewrite   | HTTPRoute Path Redirect   | HTTPRoute Request Mirror   | HTTPRoute Response Header Modification   | HTTPRoute Scheme Redirect   | HTTPRoute Method Matching   | HTTPRoute Path Rewrite   | HTTPRoute Query Param Matching   | HTTPRoute Port Redirect   | HTTPRoute Parent Ref Port   | Gateway HTTP Listener Isolation   | Gateway Static Addresses   | HTTPRoute Backend Protocol H2C   | HTTPRoute Backend Protocol Web Socket   | HTTPRoute Backend Request Header Modification   | HTTPRoute Backend Timeout   | HTTPRoute Request Multiple Mirrors   | HTTPRoute Request Timeout   |
+|:----------------|:-----------------------------------|:-------------------|:---------------------------------|:--------------------|:-------------------------|:--------------------------|:---------------------------|:-----------------------------------------|:----------------------------|:----------------------------|:-------------------------|:---------------------------------|:--------------------------|:----------------------------|:----------------------------------|:---------------------------|:---------------------------------|:----------------------------------------|:------------------------------------------------|:----------------------------|:-------------------------------------|:----------------------------|
+| GKE             | gke-gateway                        | 1.30.3-gke.1211000 | gke-l7-global-external-managed   | :white_check_mark:  | :white_check_mark:       | :white_check_mark:        | :white_check_mark:         | :white_check_mark:                       | :white_check_mark:          | :x:                         | :x:                      | :x:                              | :x:                       | :x:                         | :x:                               | :x:                        | :x:                              | :x:                                     | :x:                                             | :x:                         | :x:                                  | :x:                         |
+| GKE             | gke-gateway                        | 1.30.3-gke.1211000 | gke-l7-regional-external-managed | :white_check_mark:  | :white_check_mark:       | :white_check_mark:        | :white_check_mark:         | :white_check_mark:                       | :white_check_mark:          | :x:                         | :x:                      | :x:                              | :x:                       | :x:                         | :x:                               | :x:                        | :x:                              | :x:                                     | :x:                                             | :x:                         | :x:                                  | :x:                         |
+| GKE             | gke-gateway                        | 1.30.3-gke.1211000 | gke-l7-rilb                      | :white_check_mark:  | :white_check_mark:       | :white_check_mark:        | :white_check_mark:         | :white_check_mark:                       | :white_check_mark:          | :x:                         | :x:                      | :x:                              | :x:                       | :x:                         | :x:                               | :x:                        | :x:                              | :x:                                     | :x:                                             | :x:                         | :x:                                  | :x:                         |
+| Kong            | kubernetes-ingress-controller      | v3.2.0             | expressions                      | :x:                 | :white_check_mark:       | :x:                       | :x:                        | :white_check_mark:                       | :x:                         | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               | :x:                       | :x:                         | :x:                               | :x:                        | :x:                              | :x:                                     | :x:                                             | :x:                         | :x:                                  | :x:                         |
+| Kong            | kubernetes-ingress-controller      | v3.3.1             | expressions                      | :x:                 | :white_check_mark:       | :x:                       | :x:                        | :white_check_mark:                       | :x:                         | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               | :x:                       | :x:                         | :x:                               | :x:                        | :x:                              | :x:                                     | :x:                                             | :x:                         | :x:                                  | :x:                         |
+| Microsoft Azure | Application Gateway for Containers | 1.3.7              | default                          | :x:                 | :white_check_mark:       | :white_check_mark:        | :x:                        | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               | :white_check_mark:        | :x:                         | :x:                               | :x:                        | :x:                              | :x:                                     | :x:                                             | :x:                         | :x:                                  | :x:                         |
+| airlock         | microgateway                       | 4.5.0              | default                          | :white_check_mark:  | :white_check_mark:       | :white_check_mark:        | :x:                        | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               | :white_check_mark:        | :white_check_mark:          | :x:                               | :x:                        | :x:                              | :x:                                     | :x:                                             | :x:                         | :x:                                  | :x:                         |
+| airlock         | microgateway                       | 4.6.0              | default                          | :white_check_mark:  | :white_check_mark:       | :white_check_mark:        | :x:                        | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               | :white_check_mark:        | :white_check_mark:          | :x:                               | :x:                        | :x:                              | :x:                                     | :x:                                             | :x:                         | :x:                                  | :x:                         |
+| airlock         | microgateway                       | v4.4.0             | default                          | :white_check_mark:  | :white_check_mark:       | :white_check_mark:        | :x:                        | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               | :white_check_mark:        | :white_check_mark:          | :x:                               | :x:                        | :x:                              | :x:                                     | :x:                                             | :x:                         | :x:                                  | :x:                         |
+| cilium          | cilium                             | v1.16.0            | default                          | :white_check_mark:  | :white_check_mark:       | :white_check_mark:        | :white_check_mark:         | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               | :white_check_mark:        | :white_check_mark:          | :white_check_mark:                | :white_check_mark:         | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:                              | :white_check_mark:          | :white_check_mark:                   | :white_check_mark:          |
+| envoyproxy      | envoy-gateway                      | v1.1.0             | default                          | :white_check_mark:  | :white_check_mark:       | :white_check_mark:        | :white_check_mark:         | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               | :white_check_mark:        | :white_check_mark:          | :white_check_mark:                | :white_check_mark:         | :x:                              | :x:                                     | :white_check_mark:                              | :white_check_mark:          | :white_check_mark:                   | :white_check_mark:          |
+| istio           | istio                              | 1.22               | default                          | :white_check_mark:  | :white_check_mark:       | :white_check_mark:        | :white_check_mark:         | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               | :white_check_mark:        | :white_check_mark:          | :white_check_mark:                | :white_check_mark:         | :x:                              | :x:                                     | :white_check_mark:                              | :white_check_mark:          | :white_check_mark:                   | :white_check_mark:          |
+| nginx           | nginx-gateway-fabric               | v1.3.0             | default                          | :white_check_mark:  | :white_check_mark:       | :x:                       | :x:                        | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               | :white_check_mark:        | :x:                         | :x:                               | :x:                        | :x:                              | :x:                                     | :x:                                             | :x:                         | :x:                                  | :x:                         |
+| nginx           | nginx-gateway-fabric               | v1.4.0             | default                          | :white_check_mark:  | :white_check_mark:       | :x:                       | :x:                        | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               | :white_check_mark:        | :x:                         | :x:                               | :x:                        | :x:                              | :x:                                     | :x:                                             | :x:                         | :x:                                  | :x:                         |
+| projectcontour  | contour                            | v1.30.0            | default                          | :white_check_mark:  | :white_check_mark:       | :white_check_mark:        | :white_check_mark:         | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               | :white_check_mark:        | :white_check_mark:          | :white_check_mark:                | :white_check_mark:         | :x:                              | :x:                                     | :white_check_mark:                              | :white_check_mark:          | :white_check_mark:                   | :white_check_mark:          |
+| solo.io         | gloo-gateway                       | v1.18.0-beta30     | default                          | :x:                 | :white_check_mark:       | :white_check_mark:        | :white_check_mark:         | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               | :white_check_mark:        | :x:                         | :x:                               | :x:                        | :x:                              | :x:                                     | :x:                                             | :x:                         | :x:                                  | :x:                         |
+| traefik         | traefik                            | v3.1.0             | default                          | :white_check_mark:  | :white_check_mark:       | :white_check_mark:        | :x:                        | :x:                                      | :white_check_mark:          | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               | :white_check_mark:        | :x:                         | :x:                               | :x:                        | :x:                              | :x:                                     | :x:                                             | :x:                         | :x:                                  | :x:                         |
 
 ### GRPCRoute
 
-| Organization   | Project                       | Version   | Mode        | GatewayHTTPListenerIsolation   | GatewayPort8080    | GatewayStaticAddresses   |
-|:---------------|:------------------------------|:----------|:------------|:-------------------------------|:-------------------|:-------------------------|
-| Kong           | kubernetes-ingress-controller | v3.2.0    | expressions | :x:                            | :x:                | :x:                      |
-| Kong           | kubernetes-ingress-controller | v3.3.1    | expressions | :x:                            | :x:                | :x:                      |
-| cilium         | cilium                        | v1.16.0   | default     | :white_check_mark:             | :white_check_mark: | :white_check_mark:       |
-| envoyproxy     | envoy-gateway                 | v1.1.0    | default     | :white_check_mark:             | :white_check_mark: | :white_check_mark:       |
-| istio          | istio                         | 1.22      | default     | :white_check_mark:             | :white_check_mark: | :white_check_mark:       |
-| nginx          | nginx-gateway-fabric          | v1.3.0    | default     | :x:                            | :x:                | :x:                      |
-| nginx          | nginx-gateway-fabric          | v1.4.0    | default     | :x:                            | :x:                | :x:                      |
-| projectcontour | contour                       | v1.30.0   | default     | :white_check_mark:             | :white_check_mark: | :white_check_mark:       |
+| Organization    | Project                            | Version   | Mode        | Gateway HTTP Listener Isolation   | Gateway Port 8080   | Gateway Static Addresses   |
+|:----------------|:-----------------------------------|:----------|:------------|:----------------------------------|:--------------------|:---------------------------|
+| Kong            | kubernetes-ingress-controller      | v3.2.0    | expressions | :x:                               | :x:                 | :x:                        |
+| Kong            | kubernetes-ingress-controller      | v3.3.1    | expressions | :x:                               | :x:                 | :x:                        |
+| Microsoft Azure | Application Gateway for Containers | 1.3.7     | default     | :x:                               | :x:                 | :x:                        |
+| cilium          | cilium                             | v1.16.0   | default     | :white_check_mark:                | :white_check_mark:  | :white_check_mark:         |
+| envoyproxy      | envoy-gateway                      | v1.1.0    | default     | :white_check_mark:                | :white_check_mark:  | :white_check_mark:         |
+| istio           | istio                              | 1.22      | default     | :white_check_mark:                | :white_check_mark:  | :white_check_mark:         |
+| nginx           | nginx-gateway-fabric               | v1.3.0    | default     | :x:                               | :x:                 | :x:                        |
+| nginx           | nginx-gateway-fabric               | v1.4.0    | default     | :x:                               | :x:                 | :x:                        |
+| projectcontour  | contour                            | v1.30.0   | default     | :white_check_mark:                | :white_check_mark:  | :white_check_mark:         |
 
 ### TLSRoute
 
-| Organization   | Project              | Version   | Mode    | GatewayHTTPListenerIsolation   | GatewayPort8080    | GatewayStaticAddresses   |
-|:---------------|:---------------------|:----------|:--------|:-------------------------------|:-------------------|:-------------------------|
-| cilium         | cilium               | v1.16.0   | default | :white_check_mark:             | :white_check_mark: | :white_check_mark:       |
-| envoyproxy     | envoy-gateway        | v1.1.0    | default | :white_check_mark:             | :white_check_mark: | :white_check_mark:       |
-| istio          | istio                | 1.22      | default | :white_check_mark:             | :white_check_mark: | :white_check_mark:       |
-| nginx          | nginx-gateway-fabric | v1.4.0    | default | :x:                            | :x:                | :x:                      |
-| projectcontour | contour              | v1.30.0   | default | :white_check_mark:             | :white_check_mark: | :white_check_mark:       |
+| Organization   | Project              | Version   | Mode    | Gateway HTTP Listener Isolation   | Gateway Port 8080   | Gateway Static Addresses   |
+|:---------------|:---------------------|:----------|:--------|:----------------------------------|:--------------------|:---------------------------|
+| cilium         | cilium               | v1.16.0   | default | :white_check_mark:                | :white_check_mark:  | :white_check_mark:         |
+| envoyproxy     | envoy-gateway        | v1.1.0    | default | :white_check_mark:                | :white_check_mark:  | :white_check_mark:         |
+| istio          | istio                | 1.22      | default | :white_check_mark:                | :white_check_mark:  | :white_check_mark:         |
+| nginx          | nginx-gateway-fabric | v1.4.0    | default | :x:                               | :x:                 | :x:                        |
+| projectcontour | contour              | v1.30.0   | default | :white_check_mark:                | :white_check_mark:  | :white_check_mark:         |
 
 ## Mesh Profile
 
 ### HTTPRoute
 
-| Organization   | Project   | Version   | Mode    | HTTPRouteBackendProtocolH2C   | HTTPRouteBackendProtocolWebSocket   | HTTPRouteBackendRequestHeaderModification   | HTTPRouteBackendTimeout   | HTTPRouteHostRewrite   | HTTPRouteMethodMatching   | HTTPRoutePathRedirect   | HTTPRoutePathRewrite   | HTTPRoutePortRedirect   | HTTPRouteQueryParamMatching   | HTTPRouteRequestMirror   | HTTPRouteRequestMultipleMirrors   | HTTPRouteRequestTimeout   | HTTPRouteResponseHeaderModification   | HTTPRouteSchemeRedirect   | MeshClusterIPMatching   | MeshConsumerRoute   | HTTPRouteParentRefPort   |
-|:---------------|:----------|:----------|:--------|:------------------------------|:------------------------------------|:--------------------------------------------|:--------------------------|:-----------------------|:--------------------------|:------------------------|:-----------------------|:------------------------|:------------------------------|:-------------------------|:----------------------------------|:--------------------------|:--------------------------------------|:--------------------------|:------------------------|:--------------------|:-------------------------|
-| cilium         | cilium    | v1.16.0   | default | :white_check_mark:            | :white_check_mark:                  | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:     | :white_check_mark:        | :white_check_mark:      | :white_check_mark:     | :white_check_mark:      | :white_check_mark:            | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :white_check_mark:  | :x:                      |
-| istio          | istio     | 1.22      | default | :x:                           | :x:                                 | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:     | :white_check_mark:        | :white_check_mark:      | :white_check_mark:     | :white_check_mark:      | :white_check_mark:            | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        | :white_check_mark:                    | :white_check_mark:        | :x:                     | :white_check_mark:  | :white_check_mark:       |
\ No newline at end of file
+| Organization   | Project   | Version   | Mode    | HTTPRoute Backend Protocol H2C   | HTTPRoute Backend Protocol Web Socket   | HTTPRoute Backend Request Header Modification   | HTTPRoute Backend Timeout   | HTTPRoute Host Rewrite   | HTTPRoute Method Matching   | HTTPRoute Path Redirect   | HTTPRoute Path Rewrite   | HTTPRoute Port Redirect   | HTTPRoute Query Param Matching   | HTTPRoute Request Mirror   | HTTPRoute Request Multiple Mirrors   | HTTPRoute Request Timeout   | HTTPRoute Response Header Modification   | HTTPRoute Scheme Redirect   | Mesh Cluster IP Matching   | Mesh Consumer Route   | HTTPRoute Parent Ref Port   |
+|:---------------|:----------|:----------|:--------|:---------------------------------|:----------------------------------------|:------------------------------------------------|:----------------------------|:-------------------------|:----------------------------|:--------------------------|:-------------------------|:--------------------------|:---------------------------------|:---------------------------|:-------------------------------------|:----------------------------|:-----------------------------------------|:----------------------------|:---------------------------|:----------------------|:----------------------------|
+| cilium         | cilium    | v1.16.0   | default | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:                              | :white_check_mark:          | :white_check_mark:       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:       | :white_check_mark:        | :white_check_mark:               | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:         | :white_check_mark:    | :x:                         |
+| istio          | istio     | 1.22      | default | :x:                              | :x:                                     | :white_check_mark:                              | :white_check_mark:          | :white_check_mark:       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:       | :white_check_mark:        | :white_check_mark:               | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          | :white_check_mark:                       | :white_check_mark:          | :x:                        | :white_check_mark:    | :white_check_mark:          |
\ No newline at end of file
diff --git a/site-src/implementations/v1.2.md b/site-src/implementations/v1.2.md
index 5f7b35a3..c26434b4 100644
--- a/site-src/implementations/v1.2.md
+++ b/site-src/implementations/v1.2.md
@@ -1,6 +1,6 @@
 
 The following tables are populated from the conformance reports [uploaded by project implementations](https://github.com/kubernetes-sigs/gateway-api/tree/main/conformance/reports). They are separated into the extended features that each project supports listed in their reports.
-Implementations only appear in this page if they pass Core conformance for the resource type, and the features listed should be Extended features.
+Implementations only appear in this page if they pass Core conformance for the resource type, and the features listed should be Extended features. Implementations that submit conformance reports with skipped tests won't appear in the tables.
 
 
 
@@ -16,43 +16,49 @@ Implementations only appear in this page if they pass Core conformance for the r
 
 ### HTTPRoute
 
-| Organization   | Project                       | Version               | Mode        | GatewayPort8080    | HTTPRouteHostRewrite   | HTTPRouteMethodMatching   | HTTPRoutePathRewrite   | HTTPRouteQueryParamMatching   | HTTPRouteResponseHeaderModification   | GatewayHTTPListenerIsolation   | GatewayInfrastructurePropagation   | GatewayStaticAddresses   | HTTPRouteBackendProtocolH2C   | HTTPRouteBackendProtocolWebSocket   | HTTPRouteBackendRequestHeaderModification   | HTTPRouteBackendTimeout   | HTTPRouteDestinationPortMatching   | HTTPRoutePathRedirect   | HTTPRoutePortRedirect   | HTTPRouteRequestMirror   | HTTPRouteRequestMultipleMirrors   | HTTPRouteRequestTimeout   | HTTPRouteSchemeRedirect   | HTTPRouteParentRefPort   |
-|:---------------|:------------------------------|:----------------------|:------------|:-------------------|:-----------------------|:--------------------------|:-----------------------|:------------------------------|:--------------------------------------|:-------------------------------|:-----------------------------------|:-------------------------|:------------------------------|:------------------------------------|:--------------------------------------------|:--------------------------|:-----------------------------------|:------------------------|:------------------------|:-------------------------|:----------------------------------|:--------------------------|:--------------------------|:-------------------------|
-| Kong           | gateway-operator              | v1.4.0                | expressions | :white_check_mark: | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :white_check_mark:                    | :x:                            | :x:                                | :x:                      | :x:                           | :x:                                 | :x:                                         | :x:                       | :x:                                | :x:                     | :x:                     | :x:                      | :x:                               | :x:                       | :x:                       | :x:                      |
-| Kong           | kubernetes-ingress-controller | v3.2.0-244-gea4944bb0 | expressions | :white_check_mark: | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :white_check_mark:                    | :x:                            | :x:                                | :x:                      | :x:                           | :x:                                 | :x:                                         | :x:                       | :x:                                | :x:                     | :x:                     | :x:                      | :x:                               | :x:                       | :x:                       | :x:                      |
-| cilium         | cilium                        | v1.17.0-pre.1         | default     | :white_check_mark: | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:             | :white_check_mark:                 | :white_check_mark:       | :white_check_mark:            | :white_check_mark:                  | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:                 | :white_check_mark:      | :white_check_mark:      | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        | :white_check_mark:        | :x:                      |
-| envoyproxy     | envoy-gateway                 | v1.2.0-rc.1           | default     | :white_check_mark: | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:             | :white_check_mark:                 | :white_check_mark:       | :white_check_mark:            | :white_check_mark:                  | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:                 | :white_check_mark:      | :white_check_mark:      | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       |
-| istio          | istio                         | 1.24                  | default     | :white_check_mark: | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :white_check_mark:                    | :white_check_mark:             | :white_check_mark:                 | :white_check_mark:       | :white_check_mark:            | :white_check_mark:                  | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:                 | :white_check_mark:      | :white_check_mark:      | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        | :white_check_mark:        | :white_check_mark:       |
-| nginx          | nginx-gateway-fabric          | v1.5.0                | default     | :white_check_mark: | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :white_check_mark:                    | :x:                            | :x:                                | :x:                      | :x:                           | :x:                                 | :x:                                         | :x:                       | :x:                                | :x:                     | :white_check_mark:      | :x:                      | :x:                               | :x:                       | :white_check_mark:        | :x:                      |
-| solo.io        | gloo-gateway                  | v1.18.0               | default     | :x:                | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :white_check_mark:                    | :x:                            | :x:                                | :x:                      | :x:                           | :x:                                 | :x:                                         | :x:                       | :x:                                | :white_check_mark:      | :white_check_mark:      | :white_check_mark:       | :x:                               | :x:                       | :white_check_mark:        | :x:                      |
-| traefik        | traefik                       | v3.2                  | default     | :white_check_mark: | :white_check_mark:     | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            | :white_check_mark:                    | :x:                            | :x:                                | :x:                      | :white_check_mark:            | :white_check_mark:                  | :x:                                         | :x:                       | :white_check_mark:                 | :white_check_mark:      | :white_check_mark:      | :x:                      | :x:                               | :x:                       | :white_check_mark:        | :x:                      |
+| Organization   | Project                       | Version   | Mode                   | HTTPRoute Host Rewrite   | HTTPRoute Path Rewrite   | HTTPRoute Response Header Modification   | HTTPRoute Method Matching   | HTTPRoute Query Param Matching   | Gateway Infrastructure Propagation   | Gateway Port 8080   | HTTPRoute Backend Protocol H2C   | HTTPRoute Backend Protocol Web Socket   | HTTPRoute Backend Timeout   | HTTPRoute Destination Port Matching   | HTTPRoute Parent Ref Port   | HTTPRoute Port Redirect   | HTTPRoute Request Timeout   | HTTPRoute Scheme Redirect   | HTTPRoute Path Redirect   | Gateway HTTP Listener Isolation   | Gateway Static Addresses   | HTTPRoute Backend Request Header Modification   | HTTPRoute Request Mirror   | HTTPRoute Request Multiple Mirrors   |
+|:---------------|:------------------------------|:----------|:-----------------------|:-------------------------|:-------------------------|:-----------------------------------------|:----------------------------|:---------------------------------|:-------------------------------------|:--------------------|:---------------------------------|:----------------------------------------|:----------------------------|:--------------------------------------|:----------------------------|:--------------------------|:----------------------------|:----------------------------|:--------------------------|:----------------------------------|:---------------------------|:------------------------------------------------|:---------------------------|:-------------------------------------|
+| Kong           | kubernetes-ingress-controller | v3.4.0    | traditional_compatible | :white_check_mark:       | :white_check_mark:       | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:               | :x:                                  | :x:                 | :x:                              | :x:                                     | :x:                         | :x:                                   | :x:                         | :x:                       | :x:                         | :x:                         | :x:                       | :x:                               | :x:                        | :x:                                             | :x:                        | :x:                                  |
+| Kong           | kubernetes-ingress-controller | v3.4.0    | expressions            | :white_check_mark:       | :white_check_mark:       | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:               | :x:                                  | :x:                 | :x:                              | :x:                                     | :x:                         | :x:                                   | :x:                         | :x:                       | :x:                         | :x:                         | :x:                       | :x:                               | :x:                        | :x:                                             | :x:                        | :x:                                  |
+| airlock        | microgateway                  | 4.5.0     | default                | :white_check_mark:       | :white_check_mark:       | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:          | :white_check_mark:                    | :white_check_mark:          | :white_check_mark:        | :white_check_mark:          | :white_check_mark:          | :white_check_mark:        | :x:                               | :x:                        | :x:                                             | :x:                        | :x:                                  |
+| airlock        | microgateway                  | 4.6.0     | default                | :white_check_mark:       | :white_check_mark:       | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:          | :white_check_mark:                    | :white_check_mark:          | :white_check_mark:        | :white_check_mark:          | :white_check_mark:          | :white_check_mark:        | :x:                               | :x:                        | :x:                                             | :x:                        | :x:                                  |
+| cilium         | cilium                        | v1.17     | default                | :white_check_mark:       | :white_check_mark:       | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:          | :white_check_mark:                    | :x:                         | :white_check_mark:        | :white_check_mark:          | :white_check_mark:          | :white_check_mark:        | :white_check_mark:                | :white_check_mark:         | :white_check_mark:                              | :white_check_mark:         | :white_check_mark:                   |
+| envoyproxy     | envoy-gateway                 | latest    | default                | :white_check_mark:       | :white_check_mark:       | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:               | :x:                                  | :white_check_mark:  | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:          | :white_check_mark:                    | :white_check_mark:          | :white_check_mark:        | :white_check_mark:          | :white_check_mark:          | :white_check_mark:        | :white_check_mark:                | :x:                        | :white_check_mark:                              | :white_check_mark:         | :white_check_mark:                   |
+| istio          | istio                         | 1.24      | default                | :white_check_mark:       | :white_check_mark:       | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:          | :white_check_mark:                    | :white_check_mark:          | :white_check_mark:        | :white_check_mark:          | :white_check_mark:          | :white_check_mark:        | :white_check_mark:                | :white_check_mark:         | :white_check_mark:                              | :white_check_mark:         | :white_check_mark:                   |
+| kgateway-dev   | kgateway                      | v2.0.0    | default                | :white_check_mark:       | :white_check_mark:       | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:               | :x:                                  | :x:                 | :white_check_mark:               | :x:                                     | :x:                         | :x:                                   | :x:                         | :white_check_mark:        | :x:                         | :white_check_mark:          | :white_check_mark:        | :x:                               | :x:                        | :x:                                             | :white_check_mark:         | :x:                                  |
+| nginx          | nginx-gateway-fabric          | v1.6.0    | default                | :white_check_mark:       | :white_check_mark:       | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:               | :x:                                  | :white_check_mark:  | :x:                              | :x:                                     | :x:                         | :x:                                   | :x:                         | :white_check_mark:        | :x:                         | :white_check_mark:          | :white_check_mark:        | :x:                               | :x:                        | :x:                                             | :x:                        | :x:                                  |
+| projectcontour | contour                       | v1.31.0   | default                | :white_check_mark:       | :white_check_mark:       | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:               | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:          | :white_check_mark:                    | :white_check_mark:          | :white_check_mark:        | :white_check_mark:          | :white_check_mark:          | :white_check_mark:        | :white_check_mark:                | :white_check_mark:         | :white_check_mark:                              | :white_check_mark:         | :white_check_mark:                   |
+| traefik        | traefik                       | v3.2.2    | default                | :white_check_mark:       | :white_check_mark:       | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:               | :x:                                  | :white_check_mark:  | :white_check_mark:               | :white_check_mark:                      | :x:                         | :white_check_mark:                    | :x:                         | :white_check_mark:        | :x:                         | :white_check_mark:          | :white_check_mark:        | :x:                               | :x:                        | :x:                                             | :x:                        | :x:                                  |
 
 ### GRPCRoute
 
-| Organization   | Project                       | Version               | Mode        | GatewayHTTPListenerIsolation   | GatewayInfrastructurePropagation   | GatewayPort8080    | GatewayStaticAddresses   |
-|:---------------|:------------------------------|:----------------------|:------------|:-------------------------------|:-----------------------------------|:-------------------|:-------------------------|
-| Kong           | kubernetes-ingress-controller | v3.2.0-244-gea4944bb0 | expressions | :x:                            | :x:                                | :x:                | :x:                      |
-| cilium         | cilium                        | v1.17.0-pre.1         | default     | :white_check_mark:             | :white_check_mark:                 | :white_check_mark: | :white_check_mark:       |
-| envoyproxy     | envoy-gateway                 | v1.2.0-rc.1           | default     | :white_check_mark:             | :white_check_mark:                 | :white_check_mark: | :white_check_mark:       |
-| istio          | istio                         | 1.24                  | default     | :white_check_mark:             | :white_check_mark:                 | :white_check_mark: | :white_check_mark:       |
-| nginx          | nginx-gateway-fabric          | v1.5.0                | default     | :x:                            | :x:                                | :x:                | :x:                      |
-| traefik        | traefik                       | v3.2                  | default     | :x:                            | :x:                                | :x:                | :x:                      |
+| Organization   | Project                       | Version   | Mode                   | Gateway HTTP Listener Isolation   | Gateway Infrastructure Propagation   | Gateway Port 8080   | Gateway Static Addresses   |
+|:---------------|:------------------------------|:----------|:-----------------------|:----------------------------------|:-------------------------------------|:--------------------|:---------------------------|
+| Kong           | kubernetes-ingress-controller | v3.4.0    | traditional_compatible | :x:                               | :x:                                  | :x:                 | :x:                        |
+| Kong           | kubernetes-ingress-controller | v3.4.0    | expressions            | :x:                               | :x:                                  | :x:                 | :x:                        |
+| cilium         | cilium                        | v1.17     | default                | :white_check_mark:                | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:         |
+| envoyproxy     | envoy-gateway                 | latest    | default                | :x:                               | :x:                                  | :x:                 | :x:                        |
+| istio          | istio                         | 1.24      | default                | :white_check_mark:                | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:         |
+| nginx          | nginx-gateway-fabric          | v1.6.0    | default                | :x:                               | :x:                                  | :x:                 | :x:                        |
+| projectcontour | contour                       | v1.31.0   | default                | :white_check_mark:                | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:         |
+| traefik        | traefik                       | v3.2.2    | default                | :x:                               | :x:                                  | :x:                 | :x:                        |
 
 ### TLSRoute
 
-| Organization   | Project              | Version       | Mode    | GatewayHTTPListenerIsolation   | GatewayInfrastructurePropagation   | GatewayPort8080    | GatewayStaticAddresses   |
-|:---------------|:---------------------|:--------------|:--------|:-------------------------------|:-----------------------------------|:-------------------|:-------------------------|
-| cilium         | cilium               | v1.17.0-pre.1 | default | :white_check_mark:             | :white_check_mark:                 | :white_check_mark: | :white_check_mark:       |
-| envoyproxy     | envoy-gateway        | v1.2.0-rc.1   | default | :white_check_mark:             | :white_check_mark:                 | :white_check_mark: | :white_check_mark:       |
-| istio          | istio                | 1.24          | default | :white_check_mark:             | :white_check_mark:                 | :white_check_mark: | :white_check_mark:       |
-| nginx          | nginx-gateway-fabric | v1.5.0        | default | :x:                            | :x:                                | :x:                | :x:                      |
-| traefik        | traefik              | v3.2          | default | :x:                            | :x:                                | :x:                | :x:                      |
+| Organization   | Project              | Version   | Mode    | Gateway HTTP Listener Isolation   | Gateway Infrastructure Propagation   | Gateway Port 8080   | Gateway Static Addresses   |
+|:---------------|:---------------------|:----------|:--------|:----------------------------------|:-------------------------------------|:--------------------|:---------------------------|
+| cilium         | cilium               | v1.17     | default | :white_check_mark:                | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:         |
+| envoyproxy     | envoy-gateway        | latest    | default | :x:                               | :x:                                  | :x:                 | :x:                        |
+| istio          | istio                | 1.24      | default | :white_check_mark:                | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:         |
+| nginx          | nginx-gateway-fabric | v1.6.0    | default | :x:                               | :x:                                  | :x:                 | :x:                        |
+| projectcontour | contour              | v1.31.0   | default | :white_check_mark:                | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:         |
+| traefik        | traefik              | v3.2.2    | default | :x:                               | :x:                                  | :x:                 | :x:                        |
 
 ## Mesh Profile
 
 ### HTTPRoute
 
-| Organization   | Project   | Version       | Mode    | HTTPRouteBackendProtocolH2C   | HTTPRouteBackendProtocolWebSocket   | HTTPRouteBackendRequestHeaderModification   | HTTPRouteBackendTimeout   | HTTPRouteDestinationPortMatching   | HTTPRouteHostRewrite   | HTTPRouteMethodMatching   | HTTPRoutePathRedirect   | HTTPRoutePathRewrite   | HTTPRoutePortRedirect   | HTTPRouteQueryParamMatching   | HTTPRouteRequestMirror   | HTTPRouteRequestMultipleMirrors   | HTTPRouteRequestTimeout   | HTTPRouteResponseHeaderModification   | HTTPRouteSchemeRedirect   | MeshClusterIPMatching   | HTTPRouteParentRefPort   | MeshConsumerRoute   |
-|:---------------|:----------|:--------------|:--------|:------------------------------|:------------------------------------|:--------------------------------------------|:--------------------------|:-----------------------------------|:-----------------------|:--------------------------|:------------------------|:-----------------------|:------------------------|:------------------------------|:-------------------------|:----------------------------------|:--------------------------|:--------------------------------------|:--------------------------|:------------------------|:-------------------------|:--------------------|
-| cilium         | cilium    | v1.17.0-pre.1 | default | :white_check_mark:            | :white_check_mark:                  | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:                 | :white_check_mark:     | :white_check_mark:        | :white_check_mark:      | :white_check_mark:     | :white_check_mark:      | :white_check_mark:            | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :x:                      | :x:                 |
-| istio          | istio     | 1.24          | default | :white_check_mark:            | :white_check_mark:                  | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:                 | :white_check_mark:     | :white_check_mark:        | :white_check_mark:      | :white_check_mark:     | :white_check_mark:      | :white_check_mark:            | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        | :white_check_mark:                    | :white_check_mark:        | :x:                     | :white_check_mark:       | :white_check_mark:  |
\ No newline at end of file
+| Organization   | Project   | Version   | Mode    | HTTPRoute Backend Protocol H2C   | HTTPRoute Backend Protocol Web Socket   | HTTPRoute Backend Request Header Modification   | HTTPRoute Backend Timeout   | HTTPRoute Destination Port Matching   | HTTPRoute Host Rewrite   | HTTPRoute Method Matching   | HTTPRoute Path Redirect   | HTTPRoute Path Rewrite   | HTTPRoute Port Redirect   | HTTPRoute Query Param Matching   | HTTPRoute Request Mirror   | HTTPRoute Request Multiple Mirrors   | HTTPRoute Request Timeout   | HTTPRoute Response Header Modification   | HTTPRoute Scheme Redirect   | Mesh Cluster IP Matching   | HTTPRoute Parent Ref Port   | Mesh Consumer Route   |
+|:---------------|:----------|:----------|:--------|:---------------------------------|:----------------------------------------|:------------------------------------------------|:----------------------------|:--------------------------------------|:-------------------------|:----------------------------|:--------------------------|:-------------------------|:--------------------------|:---------------------------------|:---------------------------|:-------------------------------------|:----------------------------|:-----------------------------------------|:----------------------------|:---------------------------|:----------------------------|:----------------------|
+| cilium         | cilium    | v1.17     | default | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:                              | :white_check_mark:          | :white_check_mark:                    | :white_check_mark:       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:       | :white_check_mark:        | :white_check_mark:               | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:         | :x:                         | :x:                   |
+| istio          | istio     | 1.24      | default | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:                              | :white_check_mark:          | :white_check_mark:                    | :white_check_mark:       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:       | :white_check_mark:        | :white_check_mark:               | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          | :white_check_mark:                       | :white_check_mark:          | :x:                        | :white_check_mark:          | :white_check_mark:    |
\ No newline at end of file
diff --git a/site-src/implementations/v1.3.md b/site-src/implementations/v1.3.md
new file mode 100644
index 00000000..552e98cd
--- /dev/null
+++ b/site-src/implementations/v1.3.md
@@ -0,0 +1,49 @@
+
+The following tables are populated from the conformance reports [uploaded by project implementations](https://github.com/kubernetes-sigs/gateway-api/tree/main/conformance/reports). They are separated into the extended features that each project supports listed in their reports.
+Implementations only appear in this page if they pass Core conformance for the resource type, and the features listed should be Extended features. Implementations that submit conformance reports with skipped tests won't appear in the tables.
+
+
+
+???+ warning
+
+
+    This page is under active development and is not in its final form,
+    especially for the project name and the names of the features.
+    However, as it is based on submitted conformance reports, the information is correct.
+
+
+## Gateway Profile
+
+### HTTPRoute
+
+| Organization   | Project       | Version   | Mode    | Gateway Infrastructure Propagation   | Gateway Port 8080   | HTTPRoute Backend Protocol H2C   | HTTPRoute Backend Protocol Web Socket   | HTTPRoute Backend Timeout   | HTTPRoute Destination Port Matching   | HTTPRoute Host Rewrite   | HTTPRoute Method Matching   | HTTPRoute Parent Ref Port   | HTTPRoute Path Redirect   | HTTPRoute Path Rewrite   | HTTPRoute Port Redirect   | HTTPRoute Query Param Matching   | HTTPRoute Request Timeout   | HTTPRoute Response Header Modification   | HTTPRoute Scheme Redirect   | Gateway Address Empty   | Gateway HTTP Listener Isolation   | Gateway Static Addresses   | HTTPRoute Backend Request Header Modification   | HTTPRoute Request Mirror   | HTTPRoute Request Multiple Mirrors   | HTTPRoute Request Percentage Mirror   |
+|:---------------|:--------------|:----------|:--------|:-------------------------------------|:--------------------|:---------------------------------|:----------------------------------------|:----------------------------|:--------------------------------------|:-------------------------|:----------------------------|:----------------------------|:--------------------------|:-------------------------|:--------------------------|:---------------------------------|:----------------------------|:-----------------------------------------|:----------------------------|:------------------------|:----------------------------------|:---------------------------|:------------------------------------------------|:---------------------------|:-------------------------------------|:--------------------------------------|
+| airlock        | microgateway  | 4.6.0     | default | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:          | :white_check_mark:                    | :white_check_mark:       | :white_check_mark:          | :white_check_mark:          | :white_check_mark:        | :white_check_mark:       | :white_check_mark:        | :white_check_mark:               | :white_check_mark:          | :white_check_mark:                       | :white_check_mark:          | :x:                     | :x:                               | :x:                        | :x:                                             | :x:                        | :x:                                  | :x:                                   |
+| cilium         | cilium        | main      | default | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:          | :white_check_mark:                    | :white_check_mark:       | :white_check_mark:          | :x:                         | :white_check_mark:        | :white_check_mark:       | :white_check_mark:        | :white_check_mark:               | :white_check_mark:          | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:      | :white_check_mark:                | :white_check_mark:         | :white_check_mark:                              | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:                    |
+| envoyproxy     | envoy-gateway | latest    | default | :x:                                  | :white_check_mark:  | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:          | :white_check_mark:                    | :white_check_mark:       | :white_check_mark:          | :white_check_mark:          | :white_check_mark:        | :white_check_mark:       | :white_check_mark:        | :white_check_mark:               | :white_check_mark:          | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:      | :white_check_mark:                | :x:                        | :white_check_mark:                              | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:                    |
+| istio          | istio         | 1.26.1    | default | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:          | :white_check_mark:                    | :white_check_mark:       | :white_check_mark:          | :white_check_mark:          | :white_check_mark:        | :white_check_mark:       | :white_check_mark:        | :white_check_mark:               | :white_check_mark:          | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:      | :white_check_mark:                | :white_check_mark:         | :white_check_mark:                              | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:                    |
+
+### GRPCRoute
+
+| Organization   | Project       | Version   | Mode    | Gateway Address Empty   | Gateway HTTP Listener Isolation   | Gateway Infrastructure Propagation   | Gateway Port 8080   | Gateway Static Addresses   |
+|:---------------|:--------------|:----------|:--------|:------------------------|:----------------------------------|:-------------------------------------|:--------------------|:---------------------------|
+| cilium         | cilium        | main      | default | :white_check_mark:      | :white_check_mark:                | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:         |
+| envoyproxy     | envoy-gateway | latest    | default | :x:                     | :x:                               | :x:                                  | :x:                 | :x:                        |
+| istio          | istio         | 1.26.1    | default | :white_check_mark:      | :white_check_mark:                | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:         |
+
+### TLSRoute
+
+| Organization   | Project       | Version   | Mode    | Gateway Address Empty   | Gateway HTTP Listener Isolation   | Gateway Infrastructure Propagation   | Gateway Port 8080   | Gateway Static Addresses   |
+|:---------------|:--------------|:----------|:--------|:------------------------|:----------------------------------|:-------------------------------------|:--------------------|:---------------------------|
+| cilium         | cilium        | main      | default | :white_check_mark:      | :white_check_mark:                | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:         |
+| envoyproxy     | envoy-gateway | latest    | default | :x:                     | :x:                               | :x:                                  | :x:                 | :x:                        |
+| istio          | istio         | 1.26.1    | default | :white_check_mark:      | :white_check_mark:                | :white_check_mark:                   | :white_check_mark:  | :white_check_mark:         |
+
+## Mesh Profile
+
+### HTTPRoute
+
+| Organization   | Project   | Version   | Mode    | HTTPRoute Backend Protocol H2C   | HTTPRoute Backend Protocol Web Socket   | HTTPRoute Backend Request Header Modification   | HTTPRoute Backend Timeout   | HTTPRoute Destination Port Matching   | HTTPRoute Host Rewrite   | HTTPRoute Method Matching   | HTTPRoute Path Redirect   | HTTPRoute Path Rewrite   | HTTPRoute Port Redirect   | HTTPRoute Query Param Matching   | HTTPRoute Request Mirror   | HTTPRoute Request Multiple Mirrors   | HTTPRoute Request Percentage Mirror   | HTTPRoute Request Timeout   | HTTPRoute Response Header Modification   | HTTPRoute Scheme Redirect   | Mesh Cluster IP Matching   | HTTPRoute Parent Ref Port   | Mesh Consumer Route   |
+|:---------------|:----------|:----------|:--------|:---------------------------------|:----------------------------------------|:------------------------------------------------|:----------------------------|:--------------------------------------|:-------------------------|:----------------------------|:--------------------------|:-------------------------|:--------------------------|:---------------------------------|:---------------------------|:-------------------------------------|:--------------------------------------|:----------------------------|:-----------------------------------------|:----------------------------|:---------------------------|:----------------------------|:----------------------|
+| cilium         | cilium    | main      | default | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:                              | :white_check_mark:          | :white_check_mark:                    | :white_check_mark:       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:       | :white_check_mark:        | :white_check_mark:               | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:                    | :white_check_mark:          | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:         | :x:                         | :x:                   |
+| istio          | istio     | 1.26.1    | default | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:                              | :white_check_mark:          | :white_check_mark:                    | :white_check_mark:       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:       | :white_check_mark:        | :white_check_mark:               | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:                    | :white_check_mark:          | :white_check_mark:                       | :white_check_mark:          | :x:                        | :white_check_mark:          | :white_check_mark:    |
\ No newline at end of file
diff --git a/site-src/index.md b/site-src/index.md
index 417c3f23..088315b2 100644
--- a/site-src/index.md
+++ b/site-src/index.md
@@ -69,15 +69,15 @@ individual route resources (such as [HTTPRoute](api-types/httproute.md)) are
 mesh to manage traffic from any traffic directed to that Service while
 preserving the role-oriented nature of Gateway API.
 
-To date, [GAMMA](mesh/gamma.md) has been able to support mesh functionality with
+To date, [GAMMA](mesh/index.md) has been able to support mesh functionality with
 fairly minimal changes to Gateway API. One particular area that has
 rapidly become critical for GAMMA, though, is the definition of the different
 [facets of the Service resource][service-facets].
 
-[gamma]:/concepts/gamma/
+[gamma]:mesh/index.md
 [service-mesh]:concepts/glossary.md#service-mesh
-[service-facets]:/concepts/service-facets
-[mesh-attachment]:/concepts/gamma#gateway-api-for-mesh
+[service-facets]:mesh/service-facets.md
+[mesh-attachment]:mesh/index.md
 
 ## Getting started
 
@@ -89,7 +89,7 @@ you the necessary background:
 - [User guides](guides/index.md)
 - [Implementations](implementations.md)
 - [API reference spec](reference/spec.md)
-- [Community links](/contributing/community) and [developer guide](contributing/devguide.md)
+- [Community links](contributing/index.md) and [developer guide](contributing/devguide.md)
 
 ## Gateway API concepts
 The following design goals drive the concepts of Gateway API. These
@@ -189,7 +189,7 @@ It allows organizations to move key functions, such as authentication and
 authorization or limiting the number of requests between applications, to a
 centrally managed location. An API gateway functions as a common interface to (often external) API consumers.
 
-Gateway API is an interface, defined as a set of Kubernetes resources, that 
+Gateway API is an interface, defined as a set of Kubernetes resources, that
 models service networking in Kubernetes. One of the main resources is a `Gateway`,
 which declares the Gateway type (or class) to instantiate and its configuration.
 As a Gateway provider, you can implement Gateway API to model Kubernetes service
@@ -205,7 +205,7 @@ project being built to improve and standardize service networking in Kubernetes.
 Check out the [implementations reference](implementations.md) to see the latest
 projects & products that support Gateway. If you are interested in contributing
 to or building an implementation using Gateway API then don’t hesitate to [get
-involved!](/contributing/community)
+involved!](contributing/index.md)
 
 [sig-network]: https://github.com/kubernetes/community/tree/master/sig-network
 
diff --git a/site-src/mesh/gamma.md b/site-src/mesh/gamma.md
index 6071711c..fd4b62a8 100644
--- a/site-src/mesh/gamma.md
+++ b/site-src/mesh/gamma.md
@@ -44,5 +44,5 @@ The simplest way to get started is to attend one of the regular Gateway API
 [role-oriented]:../concepts/roles-and-personas.md
 [geps]:../geps/overview.md
 [contributor-ladder]:../contributing/contributor-ladder.md
-[meetings]:/contributing/community/#meetings
+[meetings]:../contributing/index.md/#meetings
 [GAMMA leads]:https://github.com/kubernetes-sigs/gateway-api/blob/main/OWNERS_ALIASES#L23
diff --git a/site-src/mesh/index.md b/site-src/mesh/index.md
index 98891909..0d56793f 100644
--- a/site-src/mesh/index.md
+++ b/site-src/mesh/index.md
@@ -36,7 +36,7 @@ Service.
 [TCPRoute]: ../concepts/api-overview.md#tcproute-and-udproute
 [Service]: https://kubernetes.io/docs/concepts/services-networking/service/
 [service-mesh]:../concepts/glossary.md#service-mesh
-[service-facets]:/concepts/service-facets
+[service-facets]:service-facets.md
 
 ## Connecting routes and services <a name="gateway-api-for-mesh">
 
diff --git a/site-src/mesh/service-facets.md b/site-src/mesh/service-facets.md
index 9b5f880b..96633fca 100644
--- a/site-src/mesh/service-facets.md
+++ b/site-src/mesh/service-facets.md
@@ -46,5 +46,5 @@ formalize guidance for this use case.
 [Service]: https://kubernetes.io/docs/concepts/services-networking/service/
 [north/south]:../concepts/glossary.md#northsouth-traffic
 [east/west traffic]:../concepts/glossary.md#eastwest-traffic
-[gamma]:/concepts/gamma/
+[gamma]:gamma.md
 [Ana]:../concepts/roles-and-personas.md#ana
diff --git a/site-src/reference/spec.md b/site-src/reference/spec.md
deleted file mode 100644
index df95f97e..00000000
--- a/site-src/reference/spec.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# API Specification
-
-This page contains the API field specification for Gateway API.
-
-REPLACE_WITH_GENERATED_CONTENT
diff --git a/site-src/reference/specx.md b/site-src/reference/specx.md
new file mode 100644
index 00000000..d234d975
--- /dev/null
+++ b/site-src/reference/specx.md
@@ -0,0 +1,263 @@
+# API Reference
+
+## Packages
+- [gateway.networking.x-k8s.io/v1alpha1](#gatewaynetworkingx-k8siov1alpha1)
+
+
+## gateway.networking.x-k8s.io/v1alpha1
+
+Package v1alpha1 contains API Schema definitions for the gateway.networking.k8s-x.io
+API group.
+
+
+### Resource Types
+- [XBackendTrafficPolicy](#xbackendtrafficpolicy)
+- [XListenerSet](#xlistenerset)
+
+
+
+
+
+#### BackendTrafficPolicySpec
+
+
+
+BackendTrafficPolicySpec define the desired state of BackendTrafficPolicy
+Note: there is no Override or Default policy configuration.
+
+
+
+_Appears in:_
+- [XBackendTrafficPolicy](#xbackendtrafficpolicy)
+
+| Field | Description | Default | Validation |
+| --- | --- | --- | --- |
+| `targetRefs` _[LocalPolicyTargetReference](#localpolicytargetreference) array_ | TargetRefs identifies API object(s) to apply this policy to.<br />Currently, Backends (A grouping of like endpoints such as Service,<br />ServiceImport, or any implementation-specific backendRef) are the only<br />valid API target references.<br />Currently, a TargetRef can not be scoped to a specific port on a<br />Service. |  | MaxItems: 16 <br />MinItems: 1 <br /> |
+| `retryConstraint` _[RetryConstraint](#retryconstraint)_ | RetryConstraint defines the configuration for when to allow or prevent<br />further retries to a target backend, by dynamically calculating a 'retry<br />budget'. This budget is calculated based on the percentage of incoming<br />traffic composed of retries over a given time interval. Once the budget<br />is exceeded, additional retries will be rejected.<br />For example, if the retry budget interval is 10 seconds, there have been<br />1000 active requests in the past 10 seconds, and the allowed percentage<br />of requests that can be retried is 20% (the default), then 200 of those<br />requests may be composed of retries. Active requests will only be<br />considered for the duration of the interval when calculating the retry<br />budget. Retrying the same original request multiple times within the<br />retry budget interval will lead to each retry being counted towards<br />calculating the budget.<br />Configuring a RetryConstraint in BackendTrafficPolicy is compatible with<br />HTTPRoute Retry settings for each HTTPRouteRule that targets the same<br />backend. While the HTTPRouteRule Retry stanza can specify whether a<br />request will be retried, and the number of retry attempts each client<br />may perform, RetryConstraint helps prevent cascading failures such as<br />retry storms during periods of consistent failures.<br />After the retry budget has been exceeded, additional retries to the<br />backend MUST return a 503 response to the client.<br />Additional configurations for defining a constraint on retries MAY be<br />defined in the future.<br />Support: Extended<br /><gateway:experimental> |  |  |
+| `sessionPersistence` _[SessionPersistence](#sessionpersistence)_ | SessionPersistence defines and configures session persistence<br />for the backend.<br />Support: Extended |  |  |
+
+
+#### BudgetDetails
+
+
+
+BudgetDetails specifies the details of the budget configuration, like
+the percentage of requests in the budget, and the interval between
+checks.
+
+
+
+_Appears in:_
+- [RetryConstraint](#retryconstraint)
+
+| Field | Description | Default | Validation |
+| --- | --- | --- | --- |
+| `percent` _integer_ | BudgetPercent defines the maximum percentage of active requests that may<br />be made up of retries.<br />Support: Extended | 20 | Maximum: 100 <br />Minimum: 0 <br /> |
+| `interval` _[Duration](#duration)_ | BudgetInterval defines the duration in which requests will be considered<br />for calculating the budget for retries.<br />Support: Extended | 10s |  |
+
+
+
+
+
+
+
+
+
+
+
+
+#### ListenerEntry
+
+
+
+
+
+
+
+_Appears in:_
+- [ListenerSetSpec](#listenersetspec)
+
+| Field | Description | Default | Validation |
+| --- | --- | --- | --- |
+| `name` _[SectionName](#sectionname)_ | Name is the name of the Listener. This name MUST be unique within a<br />ListenerSet.<br />Name is not required to be unique across a Gateway and ListenerSets.<br />Routes can attach to a Listener by having a ListenerSet as a parentRef<br />and setting the SectionName |  |  |
+| `hostname` _[Hostname](#hostname)_ | Hostname specifies the virtual hostname to match for protocol types that<br />define this concept. When unspecified, all hostnames are matched. This<br />field is ignored for protocols that don't require hostname based<br />matching.<br />Implementations MUST apply Hostname matching appropriately for each of<br />the following protocols:<br />* TLS: The Listener Hostname MUST match the SNI.<br />* HTTP: The Listener Hostname MUST match the Host header of the request.<br />* HTTPS: The Listener Hostname SHOULD match at both the TLS and HTTP<br />  protocol layers as described above. If an implementation does not<br />  ensure that both the SNI and Host header match the Listener hostname,<br />  it MUST clearly document that.<br />For HTTPRoute and TLSRoute resources, there is an interaction with the<br />`spec.hostnames` array. When both listener and route specify hostnames,<br />there MUST be an intersection between the values for a Route to be<br />accepted. For more information, refer to the Route specific Hostnames<br />documentation.<br />Hostnames that are prefixed with a wildcard label (`*.`) are interpreted<br />as a suffix match. That means that a match for `*.example.com` would match<br />both `test.example.com`, and `foo.test.example.com`, but not `example.com`. |  |  |
+| `port` _[PortNumber](#portnumber)_ | Port is the network port. Multiple listeners may use the<br />same port, subject to the Listener compatibility rules. |  |  |
+| `protocol` _[ProtocolType](#protocoltype)_ | Protocol specifies the network protocol this listener expects to receive. |  |  |
+| `tls` _[GatewayTLSConfig](#gatewaytlsconfig)_ | TLS is the TLS configuration for the Listener. This field is required if<br />the Protocol field is "HTTPS" or "TLS". It is invalid to set this field<br />if the Protocol field is "HTTP", "TCP", or "UDP".<br />The association of SNIs to Certificate defined in GatewayTLSConfig is<br />defined based on the Hostname field for this listener.<br />The GatewayClass MUST use the longest matching SNI out of all<br />available certificates for any TLS handshake. |  |  |
+| `allowedRoutes` _[AllowedRoutes](#allowedroutes)_ | AllowedRoutes defines the types of routes that MAY be attached to a<br />Listener and the trusted namespaces where those Route resources MAY be<br />present.<br />Although a client request may match multiple route rules, only one rule<br />may ultimately receive the request. Matching precedence MUST be<br />determined in order of the following criteria:<br />* The most specific match as defined by the Route type.<br />* The oldest Route based on creation timestamp. For example, a Route with<br />  a creation timestamp of "2020-09-08 01:02:03" is given precedence over<br />  a Route with a creation timestamp of "2020-09-08 01:02:04".<br />* If everything else is equivalent, the Route appearing first in<br />  alphabetical order (namespace/name) should be given precedence. For<br />  example, foo/bar is given precedence over foo/baz.<br />All valid rules within a Route attached to this Listener should be<br />implemented. Invalid Route rules can be ignored (sometimes that will mean<br />the full Route). If a Route rule transitions from valid to invalid,<br />support for that Route rule should be dropped to ensure consistency. For<br />example, even if a filter specified by a Route rule is invalid, the rest<br />of the rules within that Route should still be supported. | \{ namespaces:map[from:Same] \} |  |
+
+
+
+
+
+
+#### ListenerEntryStatus
+
+
+
+ListenerStatus is the status associated with a Listener.
+
+
+
+_Appears in:_
+- [ListenerSetStatus](#listenersetstatus)
+
+| Field | Description | Default | Validation |
+| --- | --- | --- | --- |
+| `name` _[SectionName](#sectionname)_ | Name is the name of the Listener that this status corresponds to. |  |  |
+| `port` _[PortNumber](#portnumber)_ | Port is the network port the listener is configured to listen on. |  |  |
+| `supportedKinds` _[RouteGroupKind](#routegroupkind) array_ | SupportedKinds is the list indicating the Kinds supported by this<br />listener. This MUST represent the kinds an implementation supports for<br />that Listener configuration.<br />If kinds are specified in Spec that are not supported, they MUST NOT<br />appear in this list and an implementation MUST set the "ResolvedRefs"<br />condition to "False" with the "InvalidRouteKinds" reason. If both valid<br />and invalid Route kinds are specified, the implementation MUST<br />reference the valid Route kinds that have been specified. |  | MaxItems: 8 <br /> |
+| `attachedRoutes` _integer_ | AttachedRoutes represents the total number of Routes that have been<br />successfully attached to this Listener.<br />Successful attachment of a Route to a Listener is based solely on the<br />combination of the AllowedRoutes field on the corresponding Listener<br />and the Route's ParentRefs field. A Route is successfully attached to<br />a Listener when it is selected by the Listener's AllowedRoutes field<br />AND the Route has a valid ParentRef selecting the whole Gateway<br />resource or a specific Listener as a parent resource (more detail on<br />attachment semantics can be found in the documentation on the various<br />Route kinds ParentRefs fields). Listener or Route status does not impact<br />successful attachment, i.e. the AttachedRoutes field count MUST be set<br />for Listeners with condition Accepted: false and MUST count successfully<br />attached Routes that may themselves have Accepted: false conditions.<br />Uses for this field include troubleshooting Route attachment and<br />measuring blast radius/impact of changes to a Listener. |  |  |
+| `conditions` _[Condition](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#condition-v1-meta) array_ | Conditions describe the current condition of this listener. |  | MaxItems: 8 <br /> |
+
+
+
+
+
+
+#### ListenerSetSpec
+
+
+
+ListenerSetSpec defines the desired state of a ListenerSet.
+
+
+
+_Appears in:_
+- [XListenerSet](#xlistenerset)
+
+| Field | Description | Default | Validation |
+| --- | --- | --- | --- |
+| `parentRef` _[ParentGatewayReference](#parentgatewayreference)_ | ParentRef references the Gateway that the listeners are attached to. |  |  |
+| `listeners` _[ListenerEntry](#listenerentry) array_ | Listeners associated with this ListenerSet. Listeners define<br />logical endpoints that are bound on this referenced parent Gateway's addresses.<br />Listeners in a `Gateway` and their attached `ListenerSets` are concatenated<br />as a list when programming the underlying infrastructure. Each listener<br />name does not need to be unique across the Gateway and ListenerSets.<br />See ListenerEntry.Name for more details.<br />Implementations MUST treat the parent Gateway as having the merged<br />list of all listeners from itself and attached ListenerSets using<br />the following precedence:<br />1. "parent" Gateway<br />2. ListenerSet ordered by creation time (oldest first)<br />3. ListenerSet ordered alphabetically by “\{namespace\}/\{name\}”.<br />An implementation MAY reject listeners by setting the ListenerEntryStatus<br />`Accepted`` condition to False with the Reason `TooManyListeners`<br />If a listener has a conflict, this will be reported in the<br />Status.ListenerEntryStatus setting the `Conflicted` condition to True.<br />Implementations SHOULD be cautious about what information from the<br />parent or siblings are reported to avoid accidentally leaking<br />sensitive information that the child would not otherwise have access<br />to. This can include contents of secrets etc. |  | MaxItems: 64 <br />MinItems: 1 <br /> |
+
+
+#### ListenerSetStatus
+
+
+
+
+
+
+
+_Appears in:_
+- [XListenerSet](#xlistenerset)
+
+| Field | Description | Default | Validation |
+| --- | --- | --- | --- |
+| `conditions` _[Condition](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#condition-v1-meta) array_ | Conditions describe the current conditions of the ListenerSet.<br />Implementations MUST express ListenerSet conditions using the<br />`ListenerSetConditionType` and `ListenerSetConditionReason`<br />constants so that operators and tools can converge on a common<br />vocabulary to describe ListenerSet state.<br />Known condition types are:<br />* "Accepted"<br />* "Programmed" | [map[lastTransitionTime:1970-01-01T00:00:00Z message:Waiting for controller reason:Pending status:Unknown type:Accepted] map[lastTransitionTime:1970-01-01T00:00:00Z message:Waiting for controller reason:Pending status:Unknown type:Programmed]] | MaxItems: 8 <br /> |
+| `listeners` _[ListenerEntryStatus](#listenerentrystatus) array_ | Listeners provide status for each unique listener port defined in the Spec. |  | MaxItems: 64 <br /> |
+
+
+
+
+
+
+
+
+#### ParentGatewayReference
+
+
+
+ParentGatewayReference identifies an API object including its namespace,
+defaulting to Gateway.
+
+
+
+_Appears in:_
+- [ListenerSetSpec](#listenersetspec)
+
+| Field | Description | Default | Validation |
+| --- | --- | --- | --- |
+| `group` _[Group](#group)_ | Group is the group of the referent. | gateway.networking.k8s.io |  |
+| `kind` _[Kind](#kind)_ | Kind is kind of the referent. For example "Gateway". | Gateway |  |
+| `name` _[ObjectName](#objectname)_ | Name is the name of the referent. |  |  |
+| `namespace` _[Namespace](#namespace)_ | Namespace is the namespace of the referent.  If not present,<br />the namespace of the referent is assumed to be the same as<br />the namespace of the referring object. |  |  |
+
+
+
+
+
+
+
+
+#### RequestRate
+
+
+
+RequestRate expresses a rate of requests over a given period of time.
+
+
+
+_Appears in:_
+- [RetryConstraint](#retryconstraint)
+
+| Field | Description | Default | Validation |
+| --- | --- | --- | --- |
+| `count` _integer_ | Count specifies the number of requests per time interval.<br />Support: Extended |  | Maximum: 1e+06 <br />Minimum: 1 <br /> |
+| `interval` _[Duration](#duration)_ | Interval specifies the divisor of the rate of requests, the amount of<br />time during which the given count of requests occur.<br />Support: Extended |  |  |
+
+
+#### RetryConstraint
+
+
+
+RetryConstraint defines the configuration for when to retry a request.
+
+
+
+_Appears in:_
+- [BackendTrafficPolicySpec](#backendtrafficpolicyspec)
+
+| Field | Description | Default | Validation |
+| --- | --- | --- | --- |
+| `budget` _[BudgetDetails](#budgetdetails)_ | Budget holds the details of the retry budget configuration. | \{ interval:10s percent:20 \} |  |
+| `minRetryRate` _[RequestRate](#requestrate)_ | MinRetryRate defines the minimum rate of retries that will be allowable<br />over a specified duration of time.<br />The effective overall minimum rate of retries targeting the backend<br />service may be much higher, as there can be any number of clients which<br />are applying this setting locally.<br />This ensures that requests can still be retried during periods of low<br />traffic, where the budget for retries may be calculated as a very low<br />value.<br />Support: Extended | \{ count:10 interval:1s \} |  |
+
+
+
+
+
+
+
+
+#### XBackendTrafficPolicy
+
+
+
+XBackendTrafficPolicy defines the configuration for how traffic to a
+target backend should be handled.
+
+
+
+
+
+| Field | Description | Default | Validation |
+| --- | --- | --- | --- |
+| `apiVersion` _string_ | `gateway.networking.x-k8s.io/v1alpha1` | | |
+| `kind` _string_ | `XBackendTrafficPolicy` | | |
+| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. |  |  |
+| `spec` _[BackendTrafficPolicySpec](#backendtrafficpolicyspec)_ | Spec defines the desired state of BackendTrafficPolicy. |  |  |
+| `status` _[PolicyStatus](#policystatus)_ | Status defines the current state of BackendTrafficPolicy. |  |  |
+
+
+#### XListenerSet
+
+
+
+XListenerSet defines a set of additional listeners
+to attach to an existing Gateway.
+
+
+
+
+
+| Field | Description | Default | Validation |
+| --- | --- | --- | --- |
+| `apiVersion` _string_ | `gateway.networking.x-k8s.io/v1alpha1` | | |
+| `kind` _string_ | `XListenerSet` | | |
+| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. |  |  |
+| `spec` _[ListenerSetSpec](#listenersetspec)_ | Spec defines the desired state of ListenerSet. |  |  |
+| `status` _[ListenerSetStatus](#listenersetstatus)_ | Status defines the current state of ListenerSet. | \{ conditions:[map[lastTransitionTime:1970-01-01T00:00:00Z message:Waiting for controller reason:Pending status:Unknown type:Accepted] map[lastTransitionTime:1970-01-01T00:00:00Z message:Waiting for controller reason:Pending status:Unknown type:Programmed]] \} |  |
+
+
diff --git a/tools/tools.go b/tools/tools.go
index e296ffa0..adfae1df 100644
--- a/tools/tools.go
+++ b/tools/tools.go
@@ -23,7 +23,7 @@ limitations under the License.
 package tools
 
 import (
-	_ "github.com/ahmetb/gen-crd-api-reference-docs"
+	_ "github.com/elastic/crd-ref-docs"
 	_ "google.golang.org/grpc/cmd/protoc-gen-go-grpc"
 	_ "google.golang.org/protobuf/cmd/protoc-gen-go"
 	_ "k8s.io/code-generator/cmd/client-gen"



Test patch:
diff --git a/applyconfiguration/apis/v1/grpcroutestatus.go b/applyconfiguration/apis/v1/grpcroutestatus.go
index 3ed9c248..dc52b839 100644
--- a/applyconfiguration/apis/v1/grpcroutestatus.go
+++ b/applyconfiguration/apis/v1/grpcroutestatus.go
@@ -38,7 +38,7 @@ func (b *GRPCRouteStatusApplyConfiguration) WithParents(values ...*RouteParentSt
 		if values[i] == nil {
 			panic("nil value passed to WithParents")
 		}
-		b.Parents = append(b.Parents, *values[i])
+		b.RouteStatusApplyConfiguration.Parents = append(b.RouteStatusApplyConfiguration.Parents, *values[i])
 	}
 	return b
 }
diff --git a/applyconfiguration/apis/v1/httproutestatus.go b/applyconfiguration/apis/v1/httproutestatus.go
index d7fce10d..6f8128dc 100644
--- a/applyconfiguration/apis/v1/httproutestatus.go
+++ b/applyconfiguration/apis/v1/httproutestatus.go
@@ -38,7 +38,7 @@ func (b *HTTPRouteStatusApplyConfiguration) WithParents(values ...*RouteParentSt
 		if values[i] == nil {
 			panic("nil value passed to WithParents")
 		}
-		b.Parents = append(b.Parents, *values[i])
+		b.RouteStatusApplyConfiguration.Parents = append(b.RouteStatusApplyConfiguration.Parents, *values[i])
 	}
 	return b
 }
diff --git a/applyconfiguration/apis/v1alpha2/tcproutestatus.go b/applyconfiguration/apis/v1alpha2/tcproutestatus.go
index 9094efd4..02e49129 100644
--- a/applyconfiguration/apis/v1alpha2/tcproutestatus.go
+++ b/applyconfiguration/apis/v1alpha2/tcproutestatus.go
@@ -42,7 +42,7 @@ func (b *TCPRouteStatusApplyConfiguration) WithParents(values ...*v1.RouteParent
 		if values[i] == nil {
 			panic("nil value passed to WithParents")
 		}
-		b.Parents = append(b.Parents, *values[i])
+		b.RouteStatusApplyConfiguration.Parents = append(b.RouteStatusApplyConfiguration.Parents, *values[i])
 	}
 	return b
 }
diff --git a/applyconfiguration/apis/v1alpha2/tlsroutestatus.go b/applyconfiguration/apis/v1alpha2/tlsroutestatus.go
index 43a48f42..08d0c109 100644
--- a/applyconfiguration/apis/v1alpha2/tlsroutestatus.go
+++ b/applyconfiguration/apis/v1alpha2/tlsroutestatus.go
@@ -42,7 +42,7 @@ func (b *TLSRouteStatusApplyConfiguration) WithParents(values ...*v1.RouteParent
 		if values[i] == nil {
 			panic("nil value passed to WithParents")
 		}
-		b.Parents = append(b.Parents, *values[i])
+		b.RouteStatusApplyConfiguration.Parents = append(b.RouteStatusApplyConfiguration.Parents, *values[i])
 	}
 	return b
 }
diff --git a/applyconfiguration/apis/v1alpha2/udproutestatus.go b/applyconfiguration/apis/v1alpha2/udproutestatus.go
index ae17a28b..bdbb4e44 100644
--- a/applyconfiguration/apis/v1alpha2/udproutestatus.go
+++ b/applyconfiguration/apis/v1alpha2/udproutestatus.go
@@ -42,7 +42,7 @@ func (b *UDPRouteStatusApplyConfiguration) WithParents(values ...*v1.RouteParent
 		if values[i] == nil {
 			panic("nil value passed to WithParents")
 		}
-		b.Parents = append(b.Parents, *values[i])
+		b.RouteStatusApplyConfiguration.Parents = append(b.RouteStatusApplyConfiguration.Parents, *values[i])
 	}
 	return b
 }
diff --git a/conformance/tests/gateway-static-addresses.go b/conformance/tests/gateway-static-addresses.go
index 150975df..fcee1b3f 100644
--- a/conformance/tests/gateway-static-addresses.go
+++ b/conformance/tests/gateway-static-addresses.go
@@ -160,7 +160,7 @@ func extractStatusAddresses(addresses []v1.GatewayStatusAddress) []string {
 // Private Helper Functions
 // -----------------------------------------------------------------------------
 
-func filterAddr(addrs []v1.GatewayAddress, filter v1.GatewayAddress) (newAddrs []v1.GatewayAddress) {
+func filterAddr(addrs []v1.GatewaySpecAddress, filter v1.GatewaySpecAddress) (newAddrs []v1.GatewaySpecAddress) {
 	for _, addr := range addrs {
 		if addr.Value != filter.Value {
 			newAddrs = append(newAddrs, addr)
diff --git a/conformance/tests/grpcroute-named-rule.go b/conformance/tests/grpcroute-named-rule.go
new file mode 100644
index 00000000..223e22b5
--- /dev/null
+++ b/conformance/tests/grpcroute-named-rule.go
@@ -0,0 +1,72 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package tests
+
+import (
+	"testing"
+
+	"k8s.io/apimachinery/pkg/types"
+
+	v1 "sigs.k8s.io/gateway-api/apis/v1"
+	pb "sigs.k8s.io/gateway-api/conformance/echo-basic/grpcechoserver"
+	"sigs.k8s.io/gateway-api/conformance/utils/grpc"
+	"sigs.k8s.io/gateway-api/conformance/utils/kubernetes"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	ConformanceTests = append(ConformanceTests, GRPCRouteNamedRule)
+}
+
+var GRPCRouteNamedRule = suite.ConformanceTest{
+	ShortName:   "GRPCRouteNamedRule",
+	Description: "An GRPCRoute with a named GRPCRouteRule",
+	Manifests:   []string{"tests/grpcroute-named-rule.yaml"},
+	Features: []features.FeatureName{
+		features.SupportGateway,
+		features.SupportGRPCRoute,
+		features.SupportGRPCRouteNamedRouteRule,
+	},
+	Provisional: true,
+	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-infra"
+		routeNN := types.NamespacedName{Name: "grpc-named-rules", Namespace: ns}
+		gwNN := types.NamespacedName{Name: "same-namespace", Namespace: ns}
+		gwAddr := kubernetes.GatewayAndRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN), &v1.GRPCRoute{}, routeNN)
+
+		testCases := []grpc.ExpectedResponse{
+			{
+				EchoRequest: &pb.EchoRequest{},
+				Backend:     "grpc-infra-backend-v1",
+				Namespace:   ns,
+			}, {
+				EchoTwoRequest: &pb.EchoRequest{},
+				Backend:        "grpc-infra-backend-v2",
+				Namespace:      ns,
+			},
+		}
+
+		for i := range testCases {
+			tc := testCases[i]
+			t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
+				t.Parallel()
+				grpc.MakeRequestAndExpectEventuallyConsistentResponse(t, suite.GRPCClient, suite.TimeoutConfig, gwAddr, tc)
+			})
+		}
+	},
+}
diff --git a/conformance/tests/grpcroute-named-rule.yaml b/conformance/tests/grpcroute-named-rule.yaml
new file mode 100644
index 00000000..fac94dbe
--- /dev/null
+++ b/conformance/tests/grpcroute-named-rule.yaml
@@ -0,0 +1,24 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: GRPCRoute
+metadata:
+  name: grpc-named-rules
+  namespace: gateway-conformance-infra
+spec:
+  parentRefs:
+  - name: same-namespace
+  rules:
+  - name: named-rule
+    matches:
+    - method:
+        service: gateway_api_conformance.echo_basic.grpcecho.GrpcEcho
+        method: Echo
+    backendRefs:
+    - name: grpc-infra-backend-v1
+      port: 8080
+  - matches:
+    - method:
+        service: gateway_api_conformance.echo_basic.grpcecho.GrpcEcho
+        method: EchoTwo
+    backendRefs:
+    - name: grpc-infra-backend-v2
+      port: 8080
diff --git a/conformance/tests/httproute-named-rule.go b/conformance/tests/httproute-named-rule.go
new file mode 100644
index 00000000..77cdccc5
--- /dev/null
+++ b/conformance/tests/httproute-named-rule.go
@@ -0,0 +1,71 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package tests
+
+import (
+	"testing"
+
+	"k8s.io/apimachinery/pkg/types"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/kubernetes"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	ConformanceTests = append(ConformanceTests, HTTPRouteNamedRule)
+}
+
+var HTTPRouteNamedRule = suite.ConformanceTest{
+	ShortName:   "HTTPRouteNamedRule",
+	Description: "An HTTPRoute with a named HTTPRouteRule",
+	Manifests:   []string{"tests/httproute-named-rule.yaml"},
+	Features: []features.FeatureName{
+		features.SupportGateway,
+		features.SupportHTTPRoute,
+		features.SupportHTTPRouteNamedRouteRule,
+	},
+	Provisional: true,
+	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-infra"
+		routeNN := types.NamespacedName{Name: "http-named-rules", Namespace: ns}
+		gwNN := types.NamespacedName{Name: "same-namespace", Namespace: ns}
+		gwAddr := kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN), routeNN)
+		kubernetes.HTTPRouteMustHaveResolvedRefsConditionsTrue(t, suite.Client, suite.TimeoutConfig, routeNN, gwNN)
+
+		testCases := []http.ExpectedResponse{
+			{
+				Request:   http.Request{Path: "/named"},
+				Response:  http.Response{StatusCode: 200},
+				Namespace: ns,
+			}, {
+				Request:   http.Request{Path: "/unnamed"},
+				Response:  http.Response{StatusCode: 200},
+				Namespace: ns,
+			},
+		}
+
+		for i := range testCases {
+			tc := testCases[i]
+			t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
+				t.Parallel()
+				http.MakeRequestAndExpectEventuallyConsistentResponse(t, suite.RoundTripper, suite.TimeoutConfig, gwAddr, tc)
+			})
+		}
+	},
+}
diff --git a/conformance/tests/httproute-named-rule.yaml b/conformance/tests/httproute-named-rule.yaml
new file mode 100644
index 00000000..eb95c2cf
--- /dev/null
+++ b/conformance/tests/httproute-named-rule.yaml
@@ -0,0 +1,24 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: http-named-rules
+  namespace: gateway-conformance-infra
+spec:
+  parentRefs:
+  - name: same-namespace
+  rules:
+  - name: named-rule
+    matches:
+    - path:
+        type: PathPrefix
+        value: /named
+    backendRefs:
+    - name: infra-backend-v1
+      port: 8080
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /unnamed
+    backendRefs:
+    - name: infra-backend-v2
+      port: 8080
diff --git a/conformance/tests/httproute-request-percentage-mirror.go b/conformance/tests/httproute-request-percentage-mirror.go
index 905753fe..843fac80 100644
--- a/conformance/tests/httproute-request-percentage-mirror.go
+++ b/conformance/tests/httproute-request-percentage-mirror.go
@@ -39,7 +39,7 @@ import (
 
 const (
 	concurrentRequests    = 10
-	tolerancePercentage   = 5.0
+	tolerancePercentage   = 15.0
 	totalRequests         = 500.0
 	numDistributionChecks = 5
 )
@@ -211,7 +211,7 @@ func testMirroredRequestsDistribution(t *testing.T, suite *suite.ConformanceTest
 			mu.Unlock()
 
 			return true
-		}, 60*time.Second, time.Millisecond*100, fmt.Sprintf(`Couldn't verify the logs for "%s/%s"`, mirrorPod.Namespace, mirrorPod.Name))
+		}, 60*time.Second, time.Millisecond*100, `Couldn't verify the logs for "%s/%s"`, mirrorPod.Namespace, mirrorPod.Name)
 	}
 
 	var errs []error
diff --git a/conformance/tests/main.go b/conformance/tests/main.go
index 7cbcebc2..4dc3775b 100644
--- a/conformance/tests/main.go
+++ b/conformance/tests/main.go
@@ -16,6 +16,10 @@ limitations under the License.
 
 package tests
 
-import "sigs.k8s.io/gateway-api/conformance/utils/suite"
+import (
+	"slices"
 
-var ConformanceTests []suite.ConformanceTest
+	meshtests "sigs.k8s.io/gateway-api/conformance/tests/mesh"
+)
+
+var ConformanceTests = slices.Clone(meshtests.MeshConformanceTests)
diff --git a/conformance/tests/mesh/httproute-matching.go b/conformance/tests/mesh/httproute-matching.go
new file mode 100644
index 00000000..e0673c3a
--- /dev/null
+++ b/conformance/tests/mesh/httproute-matching.go
@@ -0,0 +1,93 @@
+/*
+Copyright 2022 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import (
+	"testing"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/echo"
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	MeshConformanceTests = append(MeshConformanceTests, MeshHTTPRouteMatching)
+}
+
+var MeshHTTPRouteMatching = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteMatching",
+	Description: "A single HTTPRoute with path and header matching for different backends",
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+	},
+	Manifests: []string{"tests/mesh/httproute-matching.yaml"},
+	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-mesh"
+		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
+
+		testCases := []http.ExpectedResponse{{
+			Request:   http.Request{Path: "/"},
+			Backend:   "echo-v1",
+			Namespace: ns,
+		}, {
+			Request:   http.Request{Path: "/example"},
+			Backend:   "echo-v1",
+			Namespace: ns,
+		}, {
+			Request:   http.Request{Path: "/", Headers: map[string]string{"Version": "one"}},
+			Backend:   "echo-v1",
+			Namespace: ns,
+		}, {
+			Request:   http.Request{Path: "/v2"},
+			Backend:   "echo-v2",
+			Namespace: ns,
+		}, {
+			Request:   http.Request{Path: "/v2/example"},
+			Backend:   "echo-v2",
+			Namespace: ns,
+		}, {
+			Request:   http.Request{Path: "/", Headers: map[string]string{"Version": "two"}},
+			Backend:   "echo-v2",
+			Namespace: ns,
+		}, {
+			Request:   http.Request{Path: "/v2/"},
+			Backend:   "echo-v2",
+			Namespace: ns,
+		}, {
+			// Not a path segment prefix so should not match /v2.
+			Request:   http.Request{Path: "/v2example"},
+			Backend:   "echo-v1",
+			Namespace: ns,
+		}, {
+			Request:   http.Request{Path: "/foo/v2/example"},
+			Backend:   "echo-v1",
+			Namespace: ns,
+		}}
+
+		for i := range testCases {
+			// Declare tc here to avoid loop variable
+			// reuse issues across parallel tests.
+			tc := testCases[i]
+			t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
+				t.Parallel()
+				client.MakeRequestAndExpectEventuallyConsistentResponse(t, tc, s.TimeoutConfig)
+			})
+		}
+	},
+}
diff --git a/conformance/tests/mesh/httproute-matching.yaml b/conformance/tests/mesh/httproute-matching.yaml
new file mode 100644
index 00000000..fceec95b
--- /dev/null
+++ b/conformance/tests/mesh/httproute-matching.yaml
@@ -0,0 +1,32 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: mesh-matching
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /
+    - headers:
+      - name: version
+        value: one
+    backendRefs:
+    - name: echo-v1
+      port: 8080
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /v2
+    - headers:
+      - name: version
+        value: two
+    backendRefs:
+    - name: echo-v2
+      port: 8080
diff --git a/conformance/tests/mesh/httproute-named-rule.go b/conformance/tests/mesh/httproute-named-rule.go
new file mode 100644
index 00000000..9c7faf12
--- /dev/null
+++ b/conformance/tests/mesh/httproute-named-rule.go
@@ -0,0 +1,68 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import (
+	"testing"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/echo"
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	MeshConformanceTests = append(MeshConformanceTests, MeshHTTPRouteNamedRule)
+}
+
+var MeshHTTPRouteNamedRule = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteNamedRule",
+	Description: "An HTTPRoute with a named HTTPRouteRule",
+	Manifests:   []string{"tests/mesh/httproute-named-rule.yaml"},
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+		features.SupportMeshHTTPRouteNamedRouteRule,
+	},
+	Provisional: true,
+	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-mesh"
+		client := echo.ConnectToApp(t, suite, echo.MeshAppEchoV1)
+
+		testCases := []http.ExpectedResponse{
+			{
+				Request:         http.Request{Path: "/named"},
+				ExpectedRequest: &http.ExpectedRequest{Request: http.Request{Path: "/named"}},
+				Backend:         "echo-v1",
+				Namespace:       ns,
+			}, {
+				Request:         http.Request{Path: "/unnamed"},
+				ExpectedRequest: &http.ExpectedRequest{Request: http.Request{Path: "/named"}},
+				Backend:         "echo-v2",
+				Namespace:       ns,
+			},
+		}
+
+		for i := range testCases {
+			tc := testCases[i]
+			t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
+				t.Parallel()
+				client.MakeRequestAndExpectEventuallyConsistentResponse(t, tc, suite.TimeoutConfig)
+			})
+		}
+	},
+}
diff --git a/conformance/tests/mesh/httproute-named-rule.yaml b/conformance/tests/mesh/httproute-named-rule.yaml
new file mode 100644
index 00000000..90759685
--- /dev/null
+++ b/conformance/tests/mesh/httproute-named-rule.yaml
@@ -0,0 +1,27 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: mesh-http-named-rules
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - name: named-rule
+    matches:
+    - path:
+        type: PathPrefix
+        value: /named
+    backendRefs:
+    - name: echo-v1
+      port: 8080
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /unnamed
+    backendRefs:
+    - name: echo-v2
+      port: 8080
diff --git a/conformance/tests/mesh/httproute-query-param-matching.go b/conformance/tests/mesh/httproute-query-param-matching.go
new file mode 100644
index 00000000..53316d9b
--- /dev/null
+++ b/conformance/tests/mesh/httproute-query-param-matching.go
@@ -0,0 +1,135 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import (
+	"testing"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/echo"
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	MeshConformanceTests = append(MeshConformanceTests, MeshHTTPRouteQueryParamMatching)
+}
+
+var MeshHTTPRouteQueryParamMatching = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteQueryParamMatching",
+	Description: "A single HTTPRoute with query param matching for different backends",
+	Manifests:   []string{"tests/mesh/httproute-query-param-matching.yaml"},
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+		features.SupportMeshHTTPRouteQueryParamMatching,
+	},
+	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-mesh"
+		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
+
+		testCases := []http.ExpectedResponse{{
+			Request:   http.Request{Path: "/?animal=whale"},
+			Backend:   "echo-v1",
+			Namespace: ns,
+		}, {
+			Request:   http.Request{Path: "/?animal=dolphin"},
+			Backend:   "echo-v2",
+			Namespace: ns,
+		}, {
+			Request:   http.Request{Path: "/?animal=whale&otherparam=irrelevant"},
+			Backend:   "echo-v1",
+			Namespace: ns,
+		}, {
+			Request:   http.Request{Path: "/?animal=dolphin&color=yellow"},
+			Backend:   "echo-v2",
+			Namespace: ns,
+		}, {
+			Request:  http.Request{Path: "/?color=blue"},
+			Response: http.Response{StatusCode: 404},
+		}, {
+			Request:  http.Request{Path: "/?animal=dog"},
+			Response: http.Response{StatusCode: 404},
+		}, {
+			Request:  http.Request{Path: "/?animal=whaledolphin"},
+			Response: http.Response{StatusCode: 404},
+		}, {
+			Request:  http.Request{Path: "/"},
+			Response: http.Response{StatusCode: 404},
+		}}
+
+		// Combinations of query param matching with other core matches.
+		testCases = append(testCases, []http.ExpectedResponse{
+			{
+				Request:   http.Request{Path: "/path1?animal=whale"},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			},
+			{
+				Request:   http.Request{Headers: map[string]string{"version": "one"}, Path: "/?animal=whale"},
+				Backend:   "echo-v2",
+				Namespace: ns,
+			},
+		}...)
+
+		// Ensure that combinations of matches which are OR'd together match
+		// even if only one of them is used in the request.
+		testCases = append(testCases, []http.ExpectedResponse{
+			{
+				Request:   http.Request{Path: "/path3?animal=shark"},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			},
+			{
+				Request:   http.Request{Headers: map[string]string{"version": "three"}, Path: "/path4?animal=kraken"},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			},
+		}...)
+
+		// Ensure that combinations of match types which are ANDed together do not match
+		// when only a subset of match types is used in the request.
+		testCases = append(testCases, []http.ExpectedResponse{
+			{
+				Request:  http.Request{Path: "/?animal=shark"},
+				Response: http.Response{StatusCode: 404},
+			},
+			{
+				Request:  http.Request{Path: "/path4?animal=kraken"},
+				Response: http.Response{StatusCode: 404},
+			},
+		}...)
+
+		// For requests that satisfy multiple matches, ensure precedence order
+		// defined by the Gateway API spec is maintained.
+		testCases = append(testCases, []http.ExpectedResponse{
+			{
+				Request:   http.Request{Path: "/path5?animal=hydra"},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			},
+		}...)
+
+		for i := range testCases {
+			tc := testCases[i]
+			t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
+				t.Parallel()
+				client.MakeRequestAndExpectEventuallyConsistentResponse(t, tc, s.TimeoutConfig)
+			})
+		}
+	},
+}
diff --git a/conformance/tests/mesh/httproute-query-param-matching.yaml b/conformance/tests/mesh/httproute-query-param-matching.yaml
new file mode 100644
index 00000000..0dd5ee4a
--- /dev/null
+++ b/conformance/tests/mesh/httproute-query-param-matching.yaml
@@ -0,0 +1,85 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: mesh-query-param-matching
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - matches:
+    - queryParams:
+      - name: animal
+        value: whale
+    backendRefs:
+    - name: echo-v1
+      port: 8080
+  - matches:
+    - queryParams:
+      - name: animal
+        value: dolphin
+    backendRefs:
+    - name: echo-v2
+      port: 8080
+
+  # Combinations with core match types.
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /path1
+      queryParams:
+      - name: animal
+        value: whale
+    backendRefs:
+    - name: echo-v1
+      port: 8080
+  - matches:
+    - headers:
+      - name: version
+        value: one
+      queryParams:
+      - name: animal
+        value: whale
+    backendRefs:
+    - name: echo-v2
+      port: 8080
+
+  # Match of the form (cond1 AND cond2) OR (cond3 AND cond4 AND cond5)
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /path3
+      queryParams:
+      - name: animal
+        value: shark
+    - path:
+        type: PathPrefix
+        value: /path4
+      headers:
+      - name: version
+        value: three
+      queryParams:
+      - name: animal
+        value: kraken
+    backendRefs:
+    - name: echo-v1
+      port: 8080
+
+  # Matches for checking precedence.
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /path5
+    backendRefs:
+    - name: echo-v1
+      port: 8080
+  - matches:
+    - queryParams:
+      - name: animal
+        value: hydra
+    backendRefs:
+    - name: echo-v2
+      port: 8080
diff --git a/conformance/tests/mesh/httproute-redirect-host-and-status.go b/conformance/tests/mesh/httproute-redirect-host-and-status.go
new file mode 100644
index 00000000..055b70a2
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-host-and-status.go
@@ -0,0 +1,84 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import (
+	"testing"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/echo"
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/roundtripper"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	MeshConformanceTests = append(MeshConformanceTests, MeshHTTPRouteRedirectHostAndStatus)
+}
+
+var MeshHTTPRouteRedirectHostAndStatus = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteRedirectHostAndStatus",
+	Description: "An HTTPRoute with hostname and statusCode redirect filters",
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+	},
+	Manifests: []string{"tests/mesh/httproute-redirect-host-and-status.yaml"},
+	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-mesh"
+		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
+
+		testCases := []http.ExpectedResponse{
+			{
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/hostname-redirect",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Host: "example.org",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/host-and-status",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 301,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Host: "example.org",
+				},
+				Namespace: ns,
+			},
+		}
+		for i := range testCases {
+			// Declare tc here to avoid loop variable
+			// reuse issues across parallel tests.
+			tc := testCases[i]
+			t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
+				t.Parallel()
+				client.MakeRequestAndExpectEventuallyConsistentResponse(t, tc, s.TimeoutConfig)
+			})
+		}
+	},
+}
diff --git a/conformance/tests/mesh/httproute-redirect-host-and-status.yaml b/conformance/tests/mesh/httproute-redirect-host-and-status.yaml
new file mode 100644
index 00000000..8bb27798
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-host-and-status.yaml
@@ -0,0 +1,30 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: mesh-redirect-host-and-status
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /hostname-redirect
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        hostname: example.org
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /host-and-status
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        statusCode: 301
+        hostname: example.org
+
diff --git a/conformance/tests/mesh/httproute-redirect-path.go b/conformance/tests/mesh/httproute-redirect-path.go
new file mode 100644
index 00000000..bc4731e7
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-path.go
@@ -0,0 +1,139 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import (
+	"testing"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/echo"
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/roundtripper"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	MeshConformanceTests = append(MeshConformanceTests, MeshHTTPRouteRedirectPath)
+}
+
+var MeshHTTPRouteRedirectPath = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteRedirectPath",
+	Description: "An HTTPRoute with scheme redirect filter",
+	Manifests:   []string{"tests/mesh/httproute-redirect-path.yaml"},
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+		features.SupportMeshHTTPRouteRedirectPath,
+	},
+	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-mesh"
+		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
+
+		testCases := []http.ExpectedResponse{
+			{
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/original-prefix/lemon",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Path: "/replacement-prefix/lemon",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/full/path/original",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Path: "/full-path-replacement",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/path-and-host",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Host: "example.org",
+					Path: "/replacement-prefix",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/path-and-status",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 301,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Path: "/replacement-prefix",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/full-path-and-host",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Host: "example.org",
+					Path: "/replacement-full",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/full-path-and-status",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 301,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Path: "/replacement-full",
+				},
+				Namespace: ns,
+			},
+		}
+		for i := range testCases {
+			// Declare tc here to avoid loop variable
+			// reuse issues across parallel tests.
+			tc := testCases[i]
+			t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
+				t.Parallel()
+				client.MakeRequestAndExpectEventuallyConsistentResponse(t, tc, s.TimeoutConfig)
+			})
+		}
+	},
+}
diff --git a/conformance/tests/mesh/httproute-redirect-path.yaml b/conformance/tests/mesh/httproute-redirect-path.yaml
new file mode 100644
index 00000000..05975f32
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-path.yaml
@@ -0,0 +1,76 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: mesh-redirect-path
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /original-prefix
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        path:
+          type: ReplacePrefixMatch
+          replacePrefixMatch: /replacement-prefix
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /full
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        path:
+          type: ReplaceFullPath
+          replaceFullPath: /full-path-replacement
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /path-and-host
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        hostname: example.org
+        path:
+          type: ReplacePrefixMatch
+          replacePrefixMatch: /replacement-prefix
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /path-and-status
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        path:
+          type: ReplacePrefixMatch
+          replacePrefixMatch: /replacement-prefix
+        statusCode: 301
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /full-path-and-host
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        hostname: example.org
+        path:
+          type: ReplaceFullPath
+          replaceFullPath: /replacement-full
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /full-path-and-status
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        path:
+          type: ReplaceFullPath
+          replaceFullPath: /replacement-full
+        statusCode: 301
diff --git a/conformance/tests/mesh/httproute-redirect-port.go b/conformance/tests/mesh/httproute-redirect-port.go
new file mode 100644
index 00000000..cae14c23
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-port.go
@@ -0,0 +1,113 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import (
+	"testing"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/echo"
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/roundtripper"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	MeshConformanceTests = append(MeshConformanceTests, MeshHTTPRouteRedirectPort)
+}
+
+var MeshHTTPRouteRedirectPort = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteRedirectPort",
+	Description: "An HTTPRoute with a port redirect filter",
+	Manifests:   []string{"tests/mesh/httproute-redirect-port.yaml"},
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+		features.SupportMeshHTTPRouteRedirectPort,
+	},
+	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-mesh"
+		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
+
+		testCases := []http.ExpectedResponse{
+			{
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/port",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Port: "8083",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/port-and-host",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Host: "example.org",
+					Port: "8083",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/port-and-status",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 301,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Port: "8083",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/port-and-host-and-status",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Port: "8083",
+					Host: "example.org",
+				},
+				Namespace: ns,
+			},
+		}
+		for i := range testCases {
+			// Declare tc here to avoid loop variable
+			// reuse issues across parallel tests.
+			tc := testCases[i]
+			t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
+				t.Parallel()
+				client.MakeRequestAndExpectEventuallyConsistentResponse(t, tc, s.TimeoutConfig)
+			})
+		}
+	},
+}
diff --git a/conformance/tests/mesh/httproute-redirect-port.yaml b/conformance/tests/mesh/httproute-redirect-port.yaml
new file mode 100644
index 00000000..522d6732
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-port.yaml
@@ -0,0 +1,48 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: mesh-redirect-port
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /port
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        port: 8083
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /port-and-host
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        hostname: example.org
+        port: 8083
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /port-and-status
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        port: 8083
+        statusCode: 301
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /port-and-host-and-status
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        port: 8083
+        hostname: example.org
+        statusCode: 302
diff --git a/conformance/tests/mesh/httproute-redirect-scheme.go b/conformance/tests/mesh/httproute-redirect-scheme.go
new file mode 100644
index 00000000..e2417309
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-scheme.go
@@ -0,0 +1,116 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import (
+	"testing"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/echo"
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/roundtripper"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	MeshConformanceTests = append(MeshConformanceTests, MeshHTTPRouteSchemeRedirect)
+}
+
+var MeshHTTPRouteSchemeRedirect = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteSchemeRedirect",
+	Description: "An HTTPRoute with a scheme redirect filter",
+	Manifests:   []string{"tests/mesh/httproute-redirect-scheme.yaml"},
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+		features.SupportMeshHTTPRouteSchemeRedirect,
+	},
+	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-mesh"
+		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
+
+		testCases := []http.ExpectedResponse{
+			{
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/scheme",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Scheme: "https",
+				},
+				Namespace: ns,
+			},
+			{
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/scheme-and-host",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Host:   "example.org",
+					Scheme: "https",
+				},
+				Namespace: ns,
+			},
+			{
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/scheme-and-status",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 301,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Scheme: "https",
+				},
+				Namespace: ns,
+			},
+			{
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/scheme-and-host-and-status",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Scheme: "https",
+					Host:   "example.org",
+				},
+				Namespace: ns,
+			},
+		}
+		for i := range testCases {
+			// Declare tc here to avoid loop variable
+			// reuse issues across parallel tests.
+			tc := testCases[i]
+			t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
+				t.Parallel()
+				client.MakeRequestAndExpectEventuallyConsistentResponse(t, tc, s.TimeoutConfig)
+			})
+		}
+	},
+}
diff --git a/conformance/tests/mesh/httproute-redirect-scheme.yaml b/conformance/tests/mesh/httproute-redirect-scheme.yaml
new file mode 100644
index 00000000..b5f4628c
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-scheme.yaml
@@ -0,0 +1,49 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: mesh-redirect-scheme
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /scheme
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        scheme: "https"
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /scheme-and-host
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        hostname: example.org
+        scheme: "https"
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /scheme-and-status
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        scheme: "https"
+        statusCode: 301
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /scheme-and-host-and-status
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        scheme: "https"
+        statusCode: 302
+        hostname: example.org
+
diff --git a/conformance/tests/mesh/httproute-request-header-modifier-backend.yaml b/conformance/tests/mesh/httproute-request-header-modifier-backend.yaml
new file mode 100644
index 00000000..4ce7dfbb
--- /dev/null
+++ b/conformance/tests/mesh/httproute-request-header-modifier-backend.yaml
@@ -0,0 +1,93 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: mesh-request-header-modifier
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /set
+    backendRefs:
+    - name: echo-v1
+      port: 8080
+      filters:
+      - type: RequestHeaderModifier
+        requestHeaderModifier:
+          set:
+          - name: X-Header-Set
+            value: set-overwrites-values
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /add
+    backendRefs:
+    - name: echo-v1
+      port: 8080
+      filters:
+      - type: RequestHeaderModifier
+        requestHeaderModifier:
+          add:
+          - name: X-Header-Add
+            value: add-appends-values
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /remove
+    backendRefs:
+    - name: echo-v1
+      port: 8080
+      filters:
+      - type: RequestHeaderModifier
+        requestHeaderModifier:
+          remove:
+          - X-Header-Remove
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /multiple
+    backendRefs:
+    - name: echo-v1
+      port: 8080
+      filters:
+      - type: RequestHeaderModifier
+        requestHeaderModifier:
+          set:
+          - name: X-Header-Set-1
+            value: header-set-1
+          - name: X-Header-Set-2
+            value: header-set-2
+          add:
+          - name: X-Header-Add-1
+            value: header-add-1
+          - name: X-Header-Add-2
+            value: header-add-2
+          - name: X-Header-Add-3
+            value: header-add-3
+          remove:
+          - X-Header-Remove-1
+          - X-Header-Remove-2
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /case-insensitivity
+    backendRefs:
+    - name: echo-v1
+      port: 8080
+      filters:
+      - type: RequestHeaderModifier
+        requestHeaderModifier:
+          set:
+          - name: X-Header-Set
+            value: header-set
+          add:
+          - name: X-Header-Add
+            value: header-add
+          remove:
+          - X-Header-Remove
diff --git a/conformance/tests/mesh/httproute-request-header-modifier.go b/conformance/tests/mesh/httproute-request-header-modifier.go
new file mode 100644
index 00000000..8c7abb83
--- /dev/null
+++ b/conformance/tests/mesh/httproute-request-header-modifier.go
@@ -0,0 +1,213 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import (
+	"testing"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/echo"
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	MeshConformanceTests = append(MeshConformanceTests,
+		MeshHTTPRouteRequestHeaderModifier,
+		MeshHTTPRouteBackendRequestHeaderModifier,
+	)
+}
+
+var MeshHTTPRouteBackendRequestHeaderModifier = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteBackendRequestHeaderModifier",
+	Description: "An HTTPRoute backend has request header modifier filters applied correctly",
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+		features.SupportMeshHTTPRouteBackendRequestHeaderModification,
+	},
+	Manifests: []string{"tests/mesh/httproute-request-header-modifier-backend.yaml"},
+	Test:      MeshHTTPRouteRequestHeaderModifier.Test,
+}
+
+var MeshHTTPRouteRequestHeaderModifier = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteRequestHeaderModifier",
+	Description: "An HTTPRoute has request header modifier filters applied correctly",
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+	},
+	Manifests: []string{"tests/mesh/httproute-request-header-modifier.yaml"},
+	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-mesh"
+		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
+
+		testCases := []http.ExpectedResponse{
+			{
+				Request: http.Request{
+					Path: "/set",
+					Headers: map[string]string{
+						"Some-Other-Header": "val",
+					},
+				},
+				ExpectedRequest: &http.ExpectedRequest{
+					Request: http.Request{
+						Path: "/set",
+						Headers: map[string]string{
+							"Some-Other-Header": "val",
+							"X-Header-Set":      "set-overwrites-values",
+						},
+					},
+				},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Path: "/set",
+					Headers: map[string]string{
+						"Some-Other-Header": "val",
+						"X-Header-Set":      "some-other-value",
+					},
+				},
+				ExpectedRequest: &http.ExpectedRequest{
+					Request: http.Request{
+						Path: "/set",
+						Headers: map[string]string{
+							"Some-Other-Header": "val",
+							"X-Header-Set":      "set-overwrites-values",
+						},
+					},
+				},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Path: "/add",
+					Headers: map[string]string{
+						"Some-Other-Header": "val",
+					},
+				},
+				ExpectedRequest: &http.ExpectedRequest{
+					Request: http.Request{
+						Path: "/add",
+						Headers: map[string]string{
+							"Some-Other-Header": "val",
+							"X-Header-Add":      "add-appends-values",
+						},
+					},
+				},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Path: "/add",
+					Headers: map[string]string{
+						"Some-Other-Header": "val",
+						"X-Header-Add":      "some-other-value",
+					},
+				},
+				ExpectedRequest: &http.ExpectedRequest{
+					Request: http.Request{
+						Path: "/add",
+						Headers: map[string]string{
+							"Some-Other-Header": "val",
+							"X-Header-Add":      "some-other-value,add-appends-values",
+						},
+					},
+				},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Path: "/remove",
+					Headers: map[string]string{
+						"X-Header-Remove": "val",
+					},
+				},
+				ExpectedRequest: &http.ExpectedRequest{
+					Request: http.Request{
+						Path: "/remove",
+					},
+					AbsentHeaders: []string{"X-Header-Remove"},
+				},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Path: "/multiple",
+					Headers: map[string]string{
+						"X-Header-Set-2":    "set-val-2",
+						"X-Header-Add-2":    "add-val-2",
+						"X-Header-Remove-2": "remove-val-2",
+						"Another-Header":    "another-header-val",
+					},
+				},
+				ExpectedRequest: &http.ExpectedRequest{
+					Request: http.Request{
+						Path: "/multiple",
+						Headers: map[string]string{
+							"X-Header-Set-1": "header-set-1",
+							"X-Header-Set-2": "header-set-2",
+							"X-Header-Add-1": "header-add-1",
+							"X-Header-Add-2": "add-val-2,header-add-2",
+							"X-Header-Add-3": "header-add-3",
+							"Another-Header": "another-header-val",
+						},
+					},
+					AbsentHeaders: []string{"X-Header-Remove-1", "X-Header-Remove-2"},
+				},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Path: "/case-insensitivity",
+					// The filter uses canonicalized header names,
+					// the request uses lowercase names.
+					Headers: map[string]string{
+						"x-header-set":    "original-val-set",
+						"x-header-add":    "original-val-add",
+						"x-header-remove": "original-val-remove",
+						"Another-Header":  "another-header-val",
+					},
+				},
+				ExpectedRequest: &http.ExpectedRequest{
+					Request: http.Request{
+						Path: "/case-insensitivity",
+						Headers: map[string]string{
+							"X-Header-Set":   "header-set",
+							"X-Header-Add":   "original-val-add,header-add",
+							"Another-Header": "another-header-val",
+						},
+					},
+					AbsentHeaders: []string{"x-header-remove", "X-Header-Remove"},
+				},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			},
+		}
+
+		for i := range testCases {
+			// Declare tc here to avoid loop variable
+			// reuse issues across parallel tests.
+			tc := testCases[i]
+			t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
+				t.Parallel()
+				client.MakeRequestAndExpectEventuallyConsistentResponse(t, tc, s.TimeoutConfig)
+			})
+		}
+	},
+}
diff --git a/conformance/tests/mesh/httproute-request-header-modifier.yaml b/conformance/tests/mesh/httproute-request-header-modifier.yaml
new file mode 100644
index 00000000..377ab224
--- /dev/null
+++ b/conformance/tests/mesh/httproute-request-header-modifier.yaml
@@ -0,0 +1,93 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: mesh-request-header-modifier
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /set
+    filters:
+    - type: RequestHeaderModifier
+      requestHeaderModifier:
+        set:
+        - name: X-Header-Set
+          value: set-overwrites-values
+    backendRefs:
+    - name: echo-v1
+      port: 8080
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /add
+    filters:
+    - type: RequestHeaderModifier
+      requestHeaderModifier:
+        add:
+        - name: X-Header-Add
+          value: add-appends-values
+    backendRefs:
+    - name: echo-v1
+      port: 8080
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /remove
+    filters:
+    - type: RequestHeaderModifier
+      requestHeaderModifier:
+        remove:
+        - X-Header-Remove
+    backendRefs:
+    - name: echo-v1
+      port: 8080
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /multiple
+    filters:
+    - type: RequestHeaderModifier
+      requestHeaderModifier:
+        set:
+        - name: X-Header-Set-1
+          value: header-set-1
+        - name: X-Header-Set-2
+          value: header-set-2
+        add:
+        - name: X-Header-Add-1
+          value: header-add-1
+        - name: X-Header-Add-2
+          value: header-add-2
+        - name: X-Header-Add-3
+          value: header-add-3
+        remove:
+        - X-Header-Remove-1
+        - X-Header-Remove-2
+    backendRefs:
+    - name: echo-v1
+      port: 8080
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /case-insensitivity
+    filters:
+    - type: RequestHeaderModifier
+      requestHeaderModifier:
+        set:
+        - name: X-Header-Set
+          value: header-set
+        add:
+        - name: X-Header-Add
+          value: header-add
+        remove:
+        - X-Header-Remove
+    backendRefs:
+    - name: echo-v1
+      port: 8080
diff --git a/conformance/tests/mesh/httproute-rewrite-path.go b/conformance/tests/mesh/httproute-rewrite-path.go
new file mode 100644
index 00000000..22f8ae66
--- /dev/null
+++ b/conformance/tests/mesh/httproute-rewrite-path.go
@@ -0,0 +1,155 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import (
+	"testing"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/echo"
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	MeshConformanceTests = append(MeshConformanceTests, MeshHTTPRouteRewritePath)
+}
+
+var MeshHTTPRouteRewritePath = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteRewritePath",
+	Description: "An HTTPRoute with path rewrite filter",
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+		features.SupportMeshHTTPRouteRewritePath,
+	},
+	Manifests: []string{"tests/mesh/httproute-rewrite-path.yaml"},
+	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-mesh"
+		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
+		cases := []http.ExpectedResponse{
+			{
+				Request: http.Request{
+					Path: "/prefix/one/two",
+					Host: "echo",
+				},
+				ExpectedRequest: &http.ExpectedRequest{
+					Request: http.Request{
+						Path: "/one/two",
+					},
+				},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			},
+			{
+				Request: http.Request{
+					Path: "/strip-prefix/three",
+					Host: "echo",
+				},
+				ExpectedRequest: &http.ExpectedRequest{
+					Request: http.Request{
+						Path: "/three",
+					},
+				},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			},
+			{
+				Request: http.Request{
+					Path: "/strip-prefix",
+					Host: "echo",
+				},
+				ExpectedRequest: &http.ExpectedRequest{
+					Request: http.Request{
+						Path: "/",
+					},
+				},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			},
+			{
+				Request: http.Request{
+					Path: "/full/one/two",
+					Host: "echo",
+				},
+				ExpectedRequest: &http.ExpectedRequest{
+					Request: http.Request{
+						Path: "/one",
+					},
+				},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			},
+			{
+				Request: http.Request{
+					Host: "echo",
+					Path: "/full/rewrite-path-and-modify-headers/test",
+					Headers: map[string]string{
+						"X-Header-Remove":     "remove-val",
+						"X-Header-Add-Append": "append-val-1",
+						"X-Header-Set":        "set-val",
+					},
+				},
+				ExpectedRequest: &http.ExpectedRequest{
+					Request: http.Request{
+						Path: "/test",
+						Headers: map[string]string{
+							"X-Header-Add":        "header-val-1",
+							"X-Header-Add-Append": "append-val-1,header-val-2",
+							"X-Header-Set":        "set-overwrites-values",
+						},
+					},
+					AbsentHeaders: []string{"X-Header-Remove"},
+				},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			},
+			{
+				Request: http.Request{
+					Host: "echo",
+					Path: "/prefix/rewrite-path-and-modify-headers/one",
+					Headers: map[string]string{
+						"X-Header-Remove":     "remove-val",
+						"X-Header-Add-Append": "append-val-1",
+						"X-Header-Set":        "set-val",
+					},
+				},
+				ExpectedRequest: &http.ExpectedRequest{
+					Request: http.Request{
+						Path: "/prefix/one",
+						Headers: map[string]string{
+							"X-Header-Add":        "header-val-1",
+							"X-Header-Add-Append": "append-val-1,header-val-2",
+							"X-Header-Set":        "set-overwrites-values",
+						},
+					},
+					AbsentHeaders: []string{"X-Header-Remove"},
+				},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			},
+		}
+		for i := range cases {
+			// Declare tc here to avoid loop variable
+			// reuse issues across parallel tests.
+			tc := cases[i]
+			t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
+				client.MakeRequestAndExpectEventuallyConsistentResponse(t, tc, s.TimeoutConfig)
+			})
+		}
+	},
+}
diff --git a/conformance/tests/mesh/httproute-rewrite-path.yaml b/conformance/tests/mesh/httproute-rewrite-path.yaml
new file mode 100644
index 00000000..8186746f
--- /dev/null
+++ b/conformance/tests/mesh/httproute-rewrite-path.yaml
@@ -0,0 +1,101 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: mesh-rewrite-path
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /prefix/one
+    filters:
+    - type: URLRewrite
+      urlRewrite:
+        path:
+          type: ReplacePrefixMatch
+          replacePrefixMatch: /one
+    backendRefs:
+    - name: echo-v1
+      port: 80
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /strip-prefix
+    filters:
+    - type: URLRewrite
+      urlRewrite:
+        path:
+          type: ReplacePrefixMatch
+          replacePrefixMatch: /
+    backendRefs:
+    - name: echo-v1
+      port: 80
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /full/one
+    filters:
+    - type: URLRewrite
+      urlRewrite:
+        path:
+          type: ReplaceFullPath
+          replaceFullPath: /one
+    backendRefs:
+    - name: echo-v1
+      port: 80
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /full/rewrite-path-and-modify-headers
+    filters:
+    - type: URLRewrite
+      urlRewrite:
+        path:
+          type: ReplaceFullPath
+          replaceFullPath: /test
+    - type: RequestHeaderModifier
+      requestHeaderModifier:
+        set:
+        - name: X-Header-Set
+          value: set-overwrites-values
+        add:
+        - name: X-Header-Add
+          value: header-val-1
+        - name: X-Header-Add-Append
+          value: header-val-2
+        remove:
+        - X-Header-Remove
+    backendRefs:
+    - name: echo-v1
+      port: 80
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /prefix/rewrite-path-and-modify-headers
+    filters:
+    - type: URLRewrite
+      urlRewrite:
+        path:
+          type: ReplacePrefixMatch
+          replacePrefixMatch: /prefix
+    - type: RequestHeaderModifier
+      requestHeaderModifier:
+        set:
+        - name: X-Header-Set
+          value: set-overwrites-values
+        add:
+        - name: X-Header-Add
+          value: header-val-1
+        - name: X-Header-Add-Append
+          value: header-val-2
+        remove:
+        - X-Header-Remove
+    backendRefs:
+    - name: echo-v1
+      port: 80
diff --git a/conformance/tests/mesh/httproute-simple-same-namespace.go b/conformance/tests/mesh/httproute-simple-same-namespace.go
new file mode 100644
index 00000000..77813f29
--- /dev/null
+++ b/conformance/tests/mesh/httproute-simple-same-namespace.go
@@ -0,0 +1,52 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import (
+	"testing"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/echo"
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	MeshConformanceTests = append(MeshConformanceTests, MeshHTTPRouteSimpleSameNamespace)
+}
+
+var MeshHTTPRouteSimpleSameNamespace = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteSimpleSameNamespace",
+	Description: "A single HTTPRoute in the gateway-conformance-mesh namespace attaches to a Service in the same namespace",
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+	},
+	Manifests: []string{"tests/mesh/httproute-simple-same-namespace.yaml"},
+	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-mesh"
+		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
+		t.Run("Simple HTTP request should reach infra-backend", func(t *testing.T) {
+			client.MakeRequestAndExpectEventuallyConsistentResponse(t, http.ExpectedResponse{
+				Request:   http.Request{Path: "/", Host: "echo"},
+				Response:  http.Response{StatusCode: 200},
+				Backend:   "echo-v1",
+				Namespace: ns,
+			}, s.TimeoutConfig)
+		})
+	},
+}
diff --git a/conformance/tests/mesh/httproute-simple-same-namespace.yaml b/conformance/tests/mesh/httproute-simple-same-namespace.yaml
new file mode 100644
index 00000000..974d819d
--- /dev/null
+++ b/conformance/tests/mesh/httproute-simple-same-namespace.yaml
@@ -0,0 +1,15 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: gateway-conformance-mesh-test
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - backendRefs:
+    - name: echo-v1
+      port: 8080
diff --git a/conformance/tests/mesh/httproute-weight.go b/conformance/tests/mesh/httproute-weight.go
new file mode 100644
index 00000000..cc296d92
--- /dev/null
+++ b/conformance/tests/mesh/httproute-weight.go
@@ -0,0 +1,201 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import (
+	"cmp"
+	"crypto/rand"
+	"errors"
+	"fmt"
+	"math"
+	"math/big"
+	"slices"
+	"strings"
+	"sync"
+	"testing"
+	"time"
+
+	"golang.org/x/sync/errgroup"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/echo"
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	MeshConformanceTests = append(MeshConformanceTests, MeshHTTPRouteWeight)
+}
+
+var MeshHTTPRouteWeight = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteWeight",
+	Description: "An HTTPRoute with weighted backends",
+	Manifests:   []string{"tests/mesh/httproute-weight.yaml"},
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+	},
+	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
+		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
+
+		t.Run("Requests should have a distribution that matches the weight", func(t *testing.T) {
+			host := "echo"
+			expected := http.ExpectedResponse{
+				Request:   http.Request{Path: "/", Host: host},
+				Response:  http.Response{StatusCode: 200},
+				Namespace: "gateway-conformance-mesh",
+			}
+
+			// Assert request succeeds before doing our distribution check
+			client.MakeRequestAndExpectEventuallyConsistentResponse(t, expected, s.TimeoutConfig)
+			for i := 0; i < 10; i++ {
+				if err := testDistribution(t, client, expected); err != nil {
+					t.Logf("Traffic distribution test failed (%d/10): %s", i+1, err)
+				} else {
+					return
+				}
+			}
+			t.Fatal("Weighted distribution tests failed")
+		})
+	},
+}
+
+func testDistribution(t *testing.T, client echo.MeshPod, expected http.ExpectedResponse) error {
+	const (
+		concurrentRequests  = 10
+		tolerancePercentage = 0.05
+		totalRequests       = 500.0
+	)
+	var (
+		g               errgroup.Group
+		seenMutex       sync.Mutex
+		seen            = make(map[string]float64, 2 /* number of backends */)
+		expectedWeights = map[string]float64{
+			"echo-v1": 0.7,
+			"echo-v2": 0.3,
+		}
+	)
+	g.SetLimit(concurrentRequests)
+	for i := 0.0; i < totalRequests; i++ {
+		g.Go(func() error {
+			uniqueExpected := expected
+			if err := addEntropy(&uniqueExpected); err != nil {
+				return fmt.Errorf("error adding entropy: %w", err)
+			}
+			_, cRes, err := client.CaptureRequestResponseAndCompare(t, uniqueExpected)
+			if err != nil {
+				return fmt.Errorf("failed: %w", err)
+			}
+
+			seenMutex.Lock()
+			defer seenMutex.Unlock()
+
+			for expectedBackend := range expectedWeights {
+				if strings.HasPrefix(cRes.Hostname, expectedBackend) {
+					seen[expectedBackend]++
+					return nil
+				}
+			}
+
+			return fmt.Errorf("request was handled by an unexpected pod %q", cRes.Hostname)
+		})
+	}
+
+	if err := g.Wait(); err != nil {
+		return fmt.Errorf("error while sending requests: %w", err)
+	}
+
+	var errs []error
+	if len(seen) != 2 {
+		errs = append(errs, fmt.Errorf("expected only two backends to receive traffic"))
+	}
+
+	for wantBackend, wantPercent := range expectedWeights {
+		gotCount, ok := seen[wantBackend]
+
+		if !ok && wantPercent != 0.0 {
+			errs = append(errs, fmt.Errorf("expect traffic to hit backend %q - but none was received", wantBackend))
+			continue
+		}
+
+		gotPercent := gotCount / totalRequests
+
+		if math.Abs(gotPercent-wantPercent) > tolerancePercentage {
+			errs = append(errs, fmt.Errorf("backend %q weighted traffic of %v not within tolerance %v (+/-%f)",
+				wantBackend,
+				gotPercent,
+				wantPercent,
+				tolerancePercentage,
+			))
+		}
+	}
+	slices.SortFunc(errs, func(a, b error) int {
+		return cmp.Compare(a.Error(), b.Error())
+	})
+	return errors.Join(errs...)
+}
+
+// addEntropy adds jitter to the request by adding either a delay up to 1 second, or a random header value, or both.
+func addEntropy(exp *http.ExpectedResponse) error {
+	randomNumber := func(limit int64) (*int64, error) {
+		number, err := rand.Int(rand.Reader, big.NewInt(limit))
+		if err != nil {
+			return nil, err
+		}
+		n := number.Int64()
+		return &n, nil
+	}
+
+	// adds a delay
+	delay := func(limit int64) error {
+		randomSleepDuration, err := randomNumber(limit)
+		if err != nil {
+			return err
+		}
+		time.Sleep(time.Duration(*randomSleepDuration) * time.Millisecond)
+		return nil
+	}
+	// adds random header value
+	randomHeader := func(limit int64) error {
+		randomHeaderValue, err := randomNumber(limit)
+		if err != nil {
+			return err
+		}
+		exp.Request.Headers = make(map[string]string)
+		exp.Request.Headers["X-Jitter"] = fmt.Sprintf("%d", *randomHeaderValue)
+		return nil
+	}
+
+	random, err := randomNumber(3)
+	if err != nil {
+		return err
+	}
+
+	switch *random {
+	case 0:
+		return delay(1000)
+	case 1:
+		return randomHeader(10000)
+	case 2:
+		if err := delay(1000); err != nil {
+			return err
+		}
+		return randomHeader(10000)
+	default:
+		return fmt.Errorf("invalid random value: %d", *random)
+	}
+}
diff --git a/conformance/tests/mesh/httproute-weight.yaml b/conformance/tests/mesh/httproute-weight.yaml
new file mode 100644
index 00000000..870c8a41
--- /dev/null
+++ b/conformance/tests/mesh/httproute-weight.yaml
@@ -0,0 +1,19 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: mesh-weighted-backends
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - backendRefs:
+    - name: echo-v1
+      port: 8080
+      weight: 70
+    - name: echo-v2
+      port: 8080
+      weight: 30
diff --git a/conformance/tests/mesh/main.go b/conformance/tests/mesh/main.go
new file mode 100644
index 00000000..9e9c87bd
--- /dev/null
+++ b/conformance/tests/mesh/main.go
@@ -0,0 +1,21 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import "sigs.k8s.io/gateway-api/conformance/utils/suite"
+
+var MeshConformanceTests []suite.ConformanceTest
diff --git a/conformance/tests/mesh-basic.go b/conformance/tests/mesh/mesh-basic.go
similarity index 95%
rename from conformance/tests/mesh-basic.go
rename to conformance/tests/mesh/mesh-basic.go
index ad878f3a..377adce3 100644
--- a/conformance/tests/mesh-basic.go
+++ b/conformance/tests/mesh/mesh-basic.go
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-package tests
+package meshtests
 
 import (
 	"testing"
@@ -26,7 +26,7 @@ import (
 )
 
 func init() {
-	ConformanceTests = append(ConformanceTests, MeshBasic)
+	MeshConformanceTests = append(MeshConformanceTests, MeshBasic)
 }
 
 var MeshBasic = suite.ConformanceTest{
diff --git a/conformance/tests/mesh-consumer-route.go b/conformance/tests/mesh/mesh-consumer-route.go
similarity index 94%
rename from conformance/tests/mesh-consumer-route.go
rename to conformance/tests/mesh/mesh-consumer-route.go
index 0bc4cfe5..e072ec1d 100644
--- a/conformance/tests/mesh-consumer-route.go
+++ b/conformance/tests/mesh/mesh-consumer-route.go
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-package tests
+package meshtests
 
 import (
 	"testing"
@@ -26,7 +26,7 @@ import (
 )
 
 func init() {
-	ConformanceTests = append(ConformanceTests, MeshConsumerRoute)
+	MeshConformanceTests = append(MeshConformanceTests, MeshConsumerRoute)
 }
 
 var MeshConsumerRoute = suite.ConformanceTest{
@@ -38,7 +38,7 @@ var MeshConsumerRoute = suite.ConformanceTest{
 		features.SupportHTTPRoute,
 		features.SupportHTTPRouteResponseHeaderModification,
 	},
-	Manifests: []string{"tests/mesh-consumer-route.yaml"},
+	Manifests: []string{"tests/mesh/mesh-consumer-route.yaml"},
 	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
 		consumerClient := echo.ConnectToAppInNamespace(t, s, echo.MeshAppEchoV1, "gateway-conformance-mesh-consumer")
 		consumerCases := []http.ExpectedResponse{
diff --git a/conformance/tests/mesh-consumer-route.yaml b/conformance/tests/mesh/mesh-consumer-route.yaml
similarity index 100%
rename from conformance/tests/mesh-consumer-route.yaml
rename to conformance/tests/mesh/mesh-consumer-route.yaml
diff --git a/conformance/tests/mesh-frontend-hostname.go b/conformance/tests/mesh/mesh-frontend-hostname.go
similarity index 94%
rename from conformance/tests/mesh-frontend-hostname.go
rename to conformance/tests/mesh/mesh-frontend-hostname.go
index 5d5e825e..097d3556 100644
--- a/conformance/tests/mesh-frontend-hostname.go
+++ b/conformance/tests/mesh/mesh-frontend-hostname.go
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-package tests
+package meshtests
 
 import (
 	"testing"
@@ -26,7 +26,7 @@ import (
 )
 
 func init() {
-	ConformanceTests = append(ConformanceTests, MeshFrontendHostname)
+	MeshConformanceTests = append(MeshConformanceTests, MeshFrontendHostname)
 }
 
 var MeshFrontendHostname = suite.ConformanceTest{
@@ -38,7 +38,7 @@ var MeshFrontendHostname = suite.ConformanceTest{
 		features.SupportHTTPRoute,
 		features.SupportHTTPRouteResponseHeaderModification,
 	},
-	Manifests: []string{"tests/mesh-frontend.yaml"},
+	Manifests: []string{"tests/mesh/mesh-frontend.yaml"},
 	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
 		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
 		cases := []http.ExpectedResponse{
diff --git a/conformance/tests/mesh-frontend.go b/conformance/tests/mesh/mesh-frontend.go
similarity index 94%
rename from conformance/tests/mesh-frontend.go
rename to conformance/tests/mesh/mesh-frontend.go
index 87b3c343..eb6c7152 100644
--- a/conformance/tests/mesh-frontend.go
+++ b/conformance/tests/mesh/mesh-frontend.go
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-package tests
+package meshtests
 
 import (
 	"testing"
@@ -26,7 +26,7 @@ import (
 )
 
 func init() {
-	ConformanceTests = append(ConformanceTests, MeshFrontend)
+	MeshConformanceTests = append(MeshConformanceTests, MeshFrontend)
 }
 
 var MeshFrontend = suite.ConformanceTest{
@@ -37,7 +37,7 @@ var MeshFrontend = suite.ConformanceTest{
 		features.SupportHTTPRoute,
 		features.SupportHTTPRouteResponseHeaderModification,
 	},
-	Manifests: []string{"tests/mesh-frontend.yaml"},
+	Manifests: []string{"tests/mesh/mesh-frontend.yaml"},
 	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
 		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
 		v2 := echo.ConnectToApp(t, s, echo.MeshAppEchoV2)
diff --git a/conformance/tests/mesh-frontend.yaml b/conformance/tests/mesh/mesh-frontend.yaml
similarity index 100%
rename from conformance/tests/mesh-frontend.yaml
rename to conformance/tests/mesh/mesh-frontend.yaml
diff --git a/conformance/tests/mesh-ports.go b/conformance/tests/mesh/mesh-ports.go
similarity index 95%
rename from conformance/tests/mesh-ports.go
rename to conformance/tests/mesh/mesh-ports.go
index 67ebc21c..2dfde328 100644
--- a/conformance/tests/mesh-ports.go
+++ b/conformance/tests/mesh/mesh-ports.go
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-package tests
+package meshtests
 
 import (
 	"testing"
@@ -26,7 +26,7 @@ import (
 )
 
 func init() {
-	ConformanceTests = append(ConformanceTests, MeshPorts)
+	MeshConformanceTests = append(MeshConformanceTests, MeshPorts)
 }
 
 var MeshPorts = suite.ConformanceTest{
@@ -38,7 +38,7 @@ var MeshPorts = suite.ConformanceTest{
 		features.SupportHTTPRouteParentRefPort,
 		features.SupportHTTPRouteResponseHeaderModification,
 	},
-	Manifests: []string{"tests/mesh-ports.yaml"},
+	Manifests: []string{"tests/mesh/mesh-ports.yaml"},
 	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
 		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
 		cases := []http.ExpectedResponse{
diff --git a/conformance/tests/mesh-ports.yaml b/conformance/tests/mesh/mesh-ports.yaml
similarity index 100%
rename from conformance/tests/mesh-ports.yaml
rename to conformance/tests/mesh/mesh-ports.yaml
diff --git a/conformance/tests/mesh-split.go b/conformance/tests/mesh/mesh-split.go
similarity index 93%
rename from conformance/tests/mesh-split.go
rename to conformance/tests/mesh/mesh-split.go
index 0864bbe3..dcb80ef9 100644
--- a/conformance/tests/mesh-split.go
+++ b/conformance/tests/mesh/mesh-split.go
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-package tests
+package meshtests
 
 import (
 	"testing"
@@ -26,7 +26,7 @@ import (
 )
 
 func init() {
-	ConformanceTests = append(ConformanceTests, MeshTrafficSplit)
+	MeshConformanceTests = append(MeshConformanceTests, MeshTrafficSplit)
 }
 
 var MeshTrafficSplit = suite.ConformanceTest{
@@ -36,7 +36,7 @@ var MeshTrafficSplit = suite.ConformanceTest{
 		features.SupportMesh,
 		features.SupportHTTPRoute,
 	},
-	Manifests: []string{"tests/mesh-split.yaml"},
+	Manifests: []string{"tests/mesh/mesh-split.yaml"},
 	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
 		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
 		cases := []http.ExpectedResponse{
diff --git a/conformance/tests/mesh-split.yaml b/conformance/tests/mesh/mesh-split.yaml
similarity index 100%
rename from conformance/tests/mesh-split.yaml
rename to conformance/tests/mesh/mesh-split.yaml
diff --git a/conformance/utils/suite/suite_test.go b/conformance/utils/suite/suite_test.go
index 951571f7..69b7d3d9 100644
--- a/conformance/utils/suite/suite_test.go
+++ b/conformance/utils/suite/suite_test.go
@@ -22,9 +22,13 @@ import (
 
 	"github.com/stretchr/testify/assert"
 	apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
+
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/runtime"
 	"k8s.io/apimachinery/pkg/util/sets"
+	"sigs.k8s.io/controller-runtime/pkg/client/fake"
 
+	gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
 	confv1 "sigs.k8s.io/gateway-api/conformance/apis/v1"
 	"sigs.k8s.io/gateway-api/pkg/consts"
 	"sigs.k8s.io/gateway-api/pkg/features"
@@ -217,7 +221,7 @@ var (
 func TestSuiteReport(t *testing.T) {
 	testCases := []struct {
 		name                      string
-		features                  sets.Set[features.FeatureName]
+		features                  FeaturesSet
 		extendedSupportedFeatures map[ConformanceProfileName]sets.Set[features.FeatureName]
 		profiles                  sets.Set[ConformanceProfileName]
 		skipProvisionalTests      bool
@@ -276,6 +280,7 @@ func TestSuiteReport(t *testing.T) {
 					coreProvisionalTest.ShortName,
 					extendedProvisionalTest.ShortName,
 				},
+				InferredSupportedFeatures: true,
 			},
 		},
 		{
@@ -385,6 +390,7 @@ func TestSuiteReport(t *testing.T) {
 						},
 					},
 				},
+				InferredSupportedFeatures: true,
 			},
 		},
 	}
@@ -407,3 +413,214 @@ func TestSuiteReport(t *testing.T) {
 		})
 	}
 }
+
+var statusFeatureNames = []string{
+	"Gateway",
+	"GatewayPort8080",
+	"HTTPRoute",
+	"HTTPRouteHostRewrite",
+	"HTTPRouteMethodMatching",
+	"HTTPRoutePathRewrite",
+	"TTPRouteQueryParamMatching",
+	"HTTPRouteResponseHeaderModification",
+	"ReferenceGrant",
+}
+
+func TestInferSupportedFeatures(t *testing.T) {
+	testCases := []struct {
+		name               string
+		allowAllFeatures   bool
+		supportedFeatures  FeaturesSet
+		exemptFeatures     FeaturesSet
+		ConformanceProfile sets.Set[ConformanceProfileName]
+		expectedFeatures   FeaturesSet
+		expectedIsInferred bool
+	}{
+		{
+			name:               "properly infer supported features",
+			expectedFeatures:   namesToFeatureSet(statusFeatureNames),
+			expectedIsInferred: true,
+		},
+		{
+			name:              "no features",
+			supportedFeatures: sets.New[features.FeatureName]("Gateway"),
+			expectedFeatures:  sets.New[features.FeatureName]("Gateway"),
+		},
+		{
+			name:              "remove exempt features",
+			supportedFeatures: sets.New[features.FeatureName]("Gateway", "HTTPRoute"),
+			exemptFeatures:    sets.New[features.FeatureName]("HTTPRoute"),
+			expectedFeatures:  sets.New[features.FeatureName]("Gateway"),
+		},
+		{
+			name:             "allow all features",
+			allowAllFeatures: true,
+			expectedFeatures: features.SetsToNamesSet(features.AllFeatures),
+		},
+		{
+			name:               "supports conformance profile - core",
+			ConformanceProfile: sets.New(GatewayHTTPConformanceProfileName),
+			expectedFeatures:   namesToFeatureSet([]string{"Gateway", "HTTPRoute", "ReferenceGrant"}),
+		},
+	}
+
+	gwcName := "ochopintre"
+	gwc := &gatewayv1.GatewayClass{
+		ObjectMeta: metav1.ObjectMeta{
+			Name: gwcName,
+		},
+		Spec: gatewayv1.GatewayClassSpec{
+			ControllerName: "example.com/gateway-controller",
+		},
+		Status: gatewayv1.GatewayClassStatus{
+			Conditions: []metav1.Condition{
+				{
+					Type:    string(gatewayv1.GatewayConditionAccepted),
+					Status:  metav1.ConditionTrue,
+					Reason:  "Accepted",
+					Message: "GatewayClass is accepted and ready for use",
+				},
+			},
+			SupportedFeatures: featureNamesToSet(statusFeatureNames),
+		},
+	}
+	scheme := runtime.NewScheme()
+	scheme.AddKnownTypes(gatewayv1.SchemeGroupVersion, &gatewayv1.GatewayClass{})
+	fakeClient := fake.NewClientBuilder().
+		WithScheme(scheme).
+		WithObjects(gwc).
+		WithLists(&apiextensionsv1.CustomResourceDefinitionList{}).
+		Build()
+
+	gatewayv1.Install(fakeClient.Scheme())
+	apiextensionsv1.AddToScheme(fakeClient.Scheme())
+
+	for _, tc := range testCases {
+		options := ConformanceOptions{
+			AllowCRDsMismatch:          true,
+			GatewayClassName:           gwcName,
+			EnableAllSupportedFeatures: tc.allowAllFeatures,
+			SupportedFeatures:          tc.supportedFeatures,
+			ExemptFeatures:             tc.exemptFeatures,
+			ConformanceProfiles:        tc.ConformanceProfile,
+			Client:                     fakeClient,
+		}
+
+		t.Run(tc.name, func(t *testing.T) {
+			cSuite, err := NewConformanceTestSuite(options)
+			if err != nil {
+				t.Fatalf("error initializing conformance suite: %v", err)
+			}
+
+			if cSuite.IsInferredSupportedFeatures() != tc.expectedIsInferred {
+				t.Errorf("InferredSupportedFeatures mismatch: got %v, want %v", cSuite.IsInferredSupportedFeatures(), tc.expectedIsInferred)
+			}
+
+			if equal := cSuite.SupportedFeatures.Equal(tc.expectedFeatures); !equal {
+				t.Errorf("SupportedFeatures mismatch: got %v, want %v", cSuite.SupportedFeatures.UnsortedList(), tc.expectedFeatures.UnsortedList())
+			}
+		})
+	}
+}
+
+func featureNamesToSet(set []string) []gatewayv1.SupportedFeature {
+	var features []gatewayv1.SupportedFeature
+	for _, feature := range set {
+		features = append(features, gatewayv1.SupportedFeature{Name: gatewayv1.FeatureName(feature)})
+	}
+	return features
+}
+
+func namesToFeatureSet(names []string) FeaturesSet {
+	featureSet := FeaturesSet{}
+	for _, name := range names {
+		featureSet.Insert(features.FeatureName(name))
+	}
+	return featureSet
+}
+
+func TestParseImplementation(t *testing.T) {
+	testCases := []struct {
+		name        string
+		org         string
+		project     string
+		url         string
+		version     string
+		contact     string
+		expected    *confv1.Implementation
+		expectedErr error
+	}{
+		{
+			name:        "missing organization",
+			project:     "test-project",
+			url:         "https://example.com",
+			version:     "v1.0.0",
+			contact:     "test@example.com",
+			expectedErr: errors.New("organization must be set"),
+		},
+		{
+			name:        "missing project",
+			org:         "test-org",
+			url:         "https://example.com",
+			version:     "v1.0.0",
+			contact:     "test@example.com",
+			expectedErr: errors.New("project must be set"),
+		},
+		{
+			name:        "missing url",
+			org:         "test-org",
+			project:     "test-project",
+			version:     "v1.0.0",
+			contact:     "test@example.com",
+			expectedErr: errors.New("url must be set"),
+		},
+		{
+			name:        "missing version",
+			org:         "test-org",
+			project:     "test-project",
+			url:         "https://example.com",
+			contact:     "test@example.com",
+			expectedErr: errors.New("version must be set"),
+		},
+		{
+			name:        "missing contact",
+			org:         "test-org",
+			project:     "test-project",
+			url:         "https://example.com",
+			version:     "v1.0.0",
+			expectedErr: errors.New("contact must be set"),
+		},
+		{
+			name:        "malformed url",
+			org:         "test-org",
+			project:     "test-project",
+			url:         "invalid-url",
+			version:     "v1.0.0",
+			contact:     "test@example.com",
+			expectedErr: errors.New("url is malformed"),
+		},
+		{
+			name:    "valid input",
+			org:     "test-org",
+			project: "test-project",
+			url:     "https://example.com",
+			version: "v1.0.0",
+			contact: "test@example.com,test2@example.com",
+			expected: &confv1.Implementation{
+				Organization: "test-org",
+				Project:      "test-project",
+				URL:          "https://example.com",
+				Version:      "v1.0.0",
+				Contact:      []string{"test@example.com", "test2@example.com"},
+			},
+		},
+	}
+
+	for _, tc := range testCases {
+		t.Run(tc.name, func(t *testing.T) {
+			result, err := ParseImplementation(tc.org, tc.project, tc.url, tc.version, tc.contact)
+			assert.Equal(t, tc.expected, result)
+			assert.Equal(t, tc.expectedErr, err)
+		})
+	}
+}
diff --git a/pkg/test/cel/backendlbpolicy_test.go b/pkg/test/cel/backendlbpolicy_test.go
deleted file mode 100644
index f0392fd2..00000000
--- a/pkg/test/cel/backendlbpolicy_test.go
+++ /dev/null
@@ -1,131 +0,0 @@
-//go:build experimental
-// +build experimental
-
-/*
-Copyright 2024 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package main
-
-import (
-	"context"
-	"fmt"
-	"testing"
-	"time"
-
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-	gatewayv1a2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-)
-
-func TestBackendLBPolicyConfig(t *testing.T) {
-	tests := []struct {
-		name               string
-		wantErrors         []string
-		sessionPersistence gatewayv1a2.SessionPersistence
-	}{
-		{
-			name: "valid BackendLBPolicyConfig no cookie lifetimeType",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
-				SessionName:     ptrTo("foo"),
-				AbsoluteTimeout: toDuration("1h"),
-				Type:            ptrTo(gatewayv1.CookieBasedSessionPersistence),
-			},
-			wantErrors: []string{},
-		},
-		{
-			name: "valid BackendLBPolicyConfig session cookie",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
-				SessionName: ptrTo("foo"),
-				Type:        ptrTo(gatewayv1.CookieBasedSessionPersistence),
-				CookieConfig: &gatewayv1.CookieConfig{
-					LifetimeType: ptrTo(gatewayv1.SessionCookieLifetimeType),
-				},
-			},
-			wantErrors: []string{},
-		},
-		{
-			name: "invalid BackendLBPolicyConfig permanent cookie",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
-				SessionName: ptrTo("foo"),
-				Type:        ptrTo(gatewayv1.CookieBasedSessionPersistence),
-				CookieConfig: &gatewayv1.CookieConfig{
-					LifetimeType: ptrTo(gatewayv1.PermanentCookieLifetimeType),
-				},
-			},
-			wantErrors: []string{"AbsoluteTimeout must be specified when cookie lifetimeType is Permanent"},
-		},
-		{
-			name: "valid BackendLBPolicyConfig permanent cookie",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
-				SessionName:     ptrTo("foo"),
-				AbsoluteTimeout: toDuration("1h"),
-				Type:            ptrTo(gatewayv1.CookieBasedSessionPersistence),
-				CookieConfig: &gatewayv1.CookieConfig{
-					LifetimeType: ptrTo(gatewayv1.PermanentCookieLifetimeType),
-				},
-			},
-			wantErrors: []string{},
-		},
-		{
-			name: "valid BackendLBPolicyConfig header-based session persistence",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
-				SessionName: ptrTo("foo"),
-				Type:        ptrTo(gatewayv1.HeaderBasedSessionPersistence),
-			},
-			wantErrors: []string{},
-		},
-	}
-	for _, tc := range tests {
-		t.Run(tc.name, func(t *testing.T) {
-			lbPolicy := &gatewayv1a2.BackendLBPolicy{
-				ObjectMeta: metav1.ObjectMeta{
-					Name:      fmt.Sprintf("foo-%v", time.Now().UnixNano()),
-					Namespace: metav1.NamespaceDefault,
-				},
-				Spec: gatewayv1a2.BackendLBPolicySpec{
-					TargetRefs: []gatewayv1a2.LocalPolicyTargetReference{{
-						Group: "group",
-						Kind:  "kind",
-						Name:  "name",
-					}},
-					SessionPersistence: &tc.sessionPersistence,
-				},
-			}
-			validateBackendLBPolicy(t, lbPolicy, tc.wantErrors)
-		})
-	}
-}
-
-func validateBackendLBPolicy(t *testing.T, lbPolicy *gatewayv1a2.BackendLBPolicy, wantErrors []string) {
-	t.Helper()
-
-	ctx := context.Background()
-	err := k8sClient.Create(ctx, lbPolicy)
-
-	if (len(wantErrors) != 0) != (err != nil) {
-		t.Fatalf("Unexpected response while creating BackendLBPolicy %q; got err=\n%v\n;want error=%v", fmt.Sprintf("%v/%v", lbPolicy.Namespace, lbPolicy.Name), err, wantErrors)
-	}
-
-	var missingErrorStrings []string
-	for _, wantError := range wantErrors {
-		if !celErrorStringMatches(err.Error(), wantError) {
-			missingErrorStrings = append(missingErrorStrings, wantError)
-		}
-	}
-	if len(missingErrorStrings) != 0 {
-		t.Errorf("Unexpected response while creating BackendLBPolicy %q; got err=\n%v\n;missing strings within error=%q", fmt.Sprintf("%v/%v", lbPolicy.Namespace, lbPolicy.Name), err, missingErrorStrings)
-	}
-}
diff --git a/pkg/test/cel/backendtrafficpolicy_test.go b/pkg/test/cel/backendtrafficpolicy_test.go
index ca7aee69..0ea42097 100644
--- a/pkg/test/cel/backendtrafficpolicy_test.go
+++ b/pkg/test/cel/backendtrafficpolicy_test.go
@@ -27,26 +27,28 @@ import (
 
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-	gatewayv1a2 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
+	xgatewayv1alpha1 "sigs.k8s.io/gateway-api/apisx/v1alpha1"
 )
 
 func TestBackendTrafficPolicyConfig(t *testing.T) {
 	tests := []struct {
 		name               string
 		wantErrors         []string
-		sessionPersistence gatewayv1a2.SessionPersistence
-		retryConstraint    gatewayv1a2.RetryConstraint
+		sessionPersistence xgatewayv1alpha1.SessionPersistence
+		retryConstraint    xgatewayv1alpha1.RetryConstraint
 	}{
 		{
 			name: "valid BackendTrafficPolicyConfig no retryConstraint budgetPercent",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
+			sessionPersistence: xgatewayv1alpha1.SessionPersistence{
 				SessionName:     ptrTo("foo"),
 				AbsoluteTimeout: toDuration("1h"),
 				Type:            ptrTo(gatewayv1.CookieBasedSessionPersistence),
 			},
-			retryConstraint: gatewayv1a2.RetryConstraint{
-				BudgetInterval: toDuration("10s"),
-				MinRetryRate: ptrTo(gatewayv1a2.RequestRate{
+			retryConstraint: xgatewayv1alpha1.RetryConstraint{
+				Budget: ptrTo(xgatewayv1alpha1.BudgetDetails{
+					Interval: toDuration("10s"),
+				}),
+				MinRetryRate: ptrTo(xgatewayv1alpha1.RequestRate{
 					Count:    ptrTo(10),
 					Interval: toDuration("1s"),
 				}),
@@ -55,14 +57,16 @@ func TestBackendTrafficPolicyConfig(t *testing.T) {
 		},
 		{
 			name: "valid BackendTrafficPolicyConfig no retryConstraint budgetInterval",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
+			sessionPersistence: xgatewayv1alpha1.SessionPersistence{
 				SessionName:     ptrTo("foo"),
 				AbsoluteTimeout: toDuration("1h"),
 				Type:            ptrTo(gatewayv1.CookieBasedSessionPersistence),
 			},
-			retryConstraint: gatewayv1a2.RetryConstraint{
-				BudgetPercent: ptrTo(20),
-				MinRetryRate: ptrTo(gatewayv1a2.RequestRate{
+			retryConstraint: xgatewayv1alpha1.RetryConstraint{
+				Budget: ptrTo(xgatewayv1alpha1.BudgetDetails{
+					Percent: ptrTo(20),
+				}),
+				MinRetryRate: ptrTo(xgatewayv1alpha1.RequestRate{
 					Count:    ptrTo(10),
 					Interval: toDuration("1s"),
 				}),
@@ -71,62 +75,70 @@ func TestBackendTrafficPolicyConfig(t *testing.T) {
 		},
 		{
 			name: "valid BackendTrafficPolicyConfig no retryConstraint minRetryRate",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
+			sessionPersistence: xgatewayv1alpha1.SessionPersistence{
 				SessionName:     ptrTo("foo"),
 				AbsoluteTimeout: toDuration("1h"),
 				Type:            ptrTo(gatewayv1.CookieBasedSessionPersistence),
 			},
-			retryConstraint: gatewayv1a2.RetryConstraint{
-				BudgetPercent:  ptrTo(20),
-				BudgetInterval: toDuration("10s"),
+			retryConstraint: xgatewayv1alpha1.RetryConstraint{
+				Budget: ptrTo(xgatewayv1alpha1.BudgetDetails{
+					Percent:  ptrTo(20),
+					Interval: toDuration("10s"),
+				}),
 			},
 			wantErrors: []string{},
 		},
 		{
 			name: "invalid BackendTrafficPolicyConfig budgetInterval too long",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
+			sessionPersistence: xgatewayv1alpha1.SessionPersistence{
 				SessionName:     ptrTo("foo"),
 				AbsoluteTimeout: toDuration("1h"),
 				Type:            ptrTo(gatewayv1.CookieBasedSessionPersistence),
 			},
-			retryConstraint: gatewayv1a2.RetryConstraint{
-				BudgetPercent:  ptrTo(20),
-				BudgetInterval: toDuration("2h"),
-				MinRetryRate: ptrTo(gatewayv1a2.RequestRate{
+			retryConstraint: xgatewayv1alpha1.RetryConstraint{
+				Budget: ptrTo(xgatewayv1alpha1.BudgetDetails{
+					Percent:  ptrTo(20),
+					Interval: toDuration("2h"),
+				}),
+				MinRetryRate: ptrTo(xgatewayv1alpha1.RequestRate{
 					Count:    ptrTo(10),
 					Interval: toDuration("10s"),
 				}),
 			},
-			wantErrors: []string{"budgetInterval can not be greater than one hour or less than one second"},
+			wantErrors: []string{"interval can not be greater than one hour or less than one second"},
 		},
 		{
 			name: "invalid BackendTrafficPolicyConfig budgetInterval too short",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
+			sessionPersistence: xgatewayv1alpha1.SessionPersistence{
 				SessionName:     ptrTo("foo"),
 				AbsoluteTimeout: toDuration("1h"),
 				Type:            ptrTo(gatewayv1.CookieBasedSessionPersistence),
 			},
-			retryConstraint: gatewayv1a2.RetryConstraint{
-				BudgetPercent:  ptrTo(20),
-				BudgetInterval: toDuration("1ms"),
-				MinRetryRate: ptrTo(gatewayv1a2.RequestRate{
+			retryConstraint: xgatewayv1alpha1.RetryConstraint{
+				Budget: ptrTo(xgatewayv1alpha1.BudgetDetails{
+					Percent:  ptrTo(20),
+					Interval: toDuration("1ms"),
+				}),
+				MinRetryRate: ptrTo(xgatewayv1alpha1.RequestRate{
 					Count:    ptrTo(10),
 					Interval: toDuration("10s"),
 				}),
 			},
-			wantErrors: []string{"budgetInterval can not be greater than one hour or less than one second"},
+			wantErrors: []string{"interval can not be greater than one hour or less than one second"},
 		},
 		{
 			name: "invalid BackendTrafficPolicyConfig minRetryRate interval",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
+			sessionPersistence: xgatewayv1alpha1.SessionPersistence{
 				SessionName:     ptrTo("foo"),
 				AbsoluteTimeout: toDuration("1h"),
 				Type:            ptrTo(gatewayv1.CookieBasedSessionPersistence),
 			},
-			retryConstraint: gatewayv1a2.RetryConstraint{
-				BudgetPercent:  ptrTo(20),
-				BudgetInterval: toDuration("10s"),
-				MinRetryRate: ptrTo(gatewayv1a2.RequestRate{
+			retryConstraint: xgatewayv1alpha1.RetryConstraint{
+				Budget: ptrTo(xgatewayv1alpha1.BudgetDetails{
+					Percent:  ptrTo(20),
+					Interval: toDuration("10s"),
+				}),
+				MinRetryRate: ptrTo(xgatewayv1alpha1.RequestRate{
 					Count:    ptrTo(10),
 					Interval: toDuration("2h"),
 				}),
@@ -135,15 +147,17 @@ func TestBackendTrafficPolicyConfig(t *testing.T) {
 		},
 		{
 			name: "valid BackendTrafficPolicyConfig no cookie lifetimeType",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
+			sessionPersistence: xgatewayv1alpha1.SessionPersistence{
 				SessionName:     ptrTo("foo"),
 				AbsoluteTimeout: toDuration("1h"),
 				Type:            ptrTo(gatewayv1.CookieBasedSessionPersistence),
 			},
-			retryConstraint: gatewayv1a2.RetryConstraint{
-				BudgetPercent:  ptrTo(20),
-				BudgetInterval: toDuration("10s"),
-				MinRetryRate: ptrTo(gatewayv1a2.RequestRate{
+			retryConstraint: xgatewayv1alpha1.RetryConstraint{
+				Budget: ptrTo(xgatewayv1alpha1.BudgetDetails{
+					Percent:  ptrTo(20),
+					Interval: toDuration("10s"),
+				}),
+				MinRetryRate: ptrTo(xgatewayv1alpha1.RequestRate{
 					Count:    ptrTo(10),
 					Interval: toDuration("1s"),
 				}),
@@ -152,17 +166,19 @@ func TestBackendTrafficPolicyConfig(t *testing.T) {
 		},
 		{
 			name: "valid BackendTrafficPolicyConfig session cookie",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
+			sessionPersistence: xgatewayv1alpha1.SessionPersistence{
 				SessionName: ptrTo("foo"),
 				Type:        ptrTo(gatewayv1.CookieBasedSessionPersistence),
 				CookieConfig: &gatewayv1.CookieConfig{
 					LifetimeType: ptrTo(gatewayv1.SessionCookieLifetimeType),
 				},
 			},
-			retryConstraint: gatewayv1a2.RetryConstraint{
-				BudgetPercent:  ptrTo(20),
-				BudgetInterval: toDuration("10s"),
-				MinRetryRate: ptrTo(gatewayv1a2.RequestRate{
+			retryConstraint: xgatewayv1alpha1.RetryConstraint{
+				Budget: ptrTo(xgatewayv1alpha1.BudgetDetails{
+					Percent:  ptrTo(20),
+					Interval: toDuration("10s"),
+				}),
+				MinRetryRate: ptrTo(xgatewayv1alpha1.RequestRate{
 					Count:    ptrTo(10),
 					Interval: toDuration("1s"),
 				}),
@@ -171,17 +187,19 @@ func TestBackendTrafficPolicyConfig(t *testing.T) {
 		},
 		{
 			name: "invalid BackendTrafficPolicyConfig permanent cookie",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
+			sessionPersistence: xgatewayv1alpha1.SessionPersistence{
 				SessionName: ptrTo("foo"),
 				Type:        ptrTo(gatewayv1.CookieBasedSessionPersistence),
 				CookieConfig: &gatewayv1.CookieConfig{
 					LifetimeType: ptrTo(gatewayv1.PermanentCookieLifetimeType),
 				},
 			},
-			retryConstraint: gatewayv1a2.RetryConstraint{
-				BudgetPercent:  ptrTo(20),
-				BudgetInterval: toDuration("10s"),
-				MinRetryRate: ptrTo(gatewayv1a2.RequestRate{
+			retryConstraint: xgatewayv1alpha1.RetryConstraint{
+				Budget: ptrTo(xgatewayv1alpha1.BudgetDetails{
+					Percent:  ptrTo(20),
+					Interval: toDuration("10s"),
+				}),
+				MinRetryRate: ptrTo(xgatewayv1alpha1.RequestRate{
 					Count:    ptrTo(10),
 					Interval: toDuration("1s"),
 				}),
@@ -190,7 +208,7 @@ func TestBackendTrafficPolicyConfig(t *testing.T) {
 		},
 		{
 			name: "valid BackendTrafficPolicyConfig permanent cookie",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
+			sessionPersistence: xgatewayv1alpha1.SessionPersistence{
 				SessionName:     ptrTo("foo"),
 				AbsoluteTimeout: toDuration("1h"),
 				Type:            ptrTo(gatewayv1.CookieBasedSessionPersistence),
@@ -198,10 +216,12 @@ func TestBackendTrafficPolicyConfig(t *testing.T) {
 					LifetimeType: ptrTo(gatewayv1.PermanentCookieLifetimeType),
 				},
 			},
-			retryConstraint: gatewayv1a2.RetryConstraint{
-				BudgetPercent:  ptrTo(20),
-				BudgetInterval: toDuration("10s"),
-				MinRetryRate: ptrTo(gatewayv1a2.RequestRate{
+			retryConstraint: xgatewayv1alpha1.RetryConstraint{
+				Budget: ptrTo(xgatewayv1alpha1.BudgetDetails{
+					Percent:  ptrTo(20),
+					Interval: toDuration("10s"),
+				}),
+				MinRetryRate: ptrTo(xgatewayv1alpha1.RequestRate{
 					Count:    ptrTo(10),
 					Interval: toDuration("1s"),
 				}),
@@ -210,14 +230,16 @@ func TestBackendTrafficPolicyConfig(t *testing.T) {
 		},
 		{
 			name: "valid BackendTrafficPolicyConfig header-based session persistence",
-			sessionPersistence: gatewayv1a2.SessionPersistence{
+			sessionPersistence: xgatewayv1alpha1.SessionPersistence{
 				SessionName: ptrTo("foo"),
 				Type:        ptrTo(gatewayv1.HeaderBasedSessionPersistence),
 			},
-			retryConstraint: gatewayv1a2.RetryConstraint{
-				BudgetPercent:  ptrTo(20),
-				BudgetInterval: toDuration("10s"),
-				MinRetryRate: ptrTo(gatewayv1a2.RequestRate{
+			retryConstraint: xgatewayv1alpha1.RetryConstraint{
+				Budget: ptrTo(xgatewayv1alpha1.BudgetDetails{
+					Percent:  ptrTo(20),
+					Interval: toDuration("10s"),
+				}),
+				MinRetryRate: ptrTo(xgatewayv1alpha1.RequestRate{
 					Count:    ptrTo(10),
 					Interval: toDuration("1s"),
 				}),
@@ -227,13 +249,13 @@ func TestBackendTrafficPolicyConfig(t *testing.T) {
 	}
 	for _, tc := range tests {
 		t.Run(tc.name, func(t *testing.T) {
-			trafficPolicy := &gatewayv1a2.BackendTrafficPolicy{
+			trafficPolicy := &xgatewayv1alpha1.XBackendTrafficPolicy{
 				ObjectMeta: metav1.ObjectMeta{
 					Name:      fmt.Sprintf("foo-%v", time.Now().UnixNano()),
 					Namespace: metav1.NamespaceDefault,
 				},
-				Spec: gatewayv1a2.BackendTrafficPolicySpec{
-					TargetRefs: []gatewayv1a2.LocalPolicyTargetReference{{
+				Spec: xgatewayv1alpha1.BackendTrafficPolicySpec{
+					TargetRefs: []xgatewayv1alpha1.LocalPolicyTargetReference{{
 						Group: "group",
 						Kind:  "kind",
 						Name:  "name",
@@ -247,14 +269,14 @@ func TestBackendTrafficPolicyConfig(t *testing.T) {
 	}
 }
 
-func validateBackendTrafficPolicy(t *testing.T, trafficPolicy *gatewayv1a2.BackendTrafficPolicy, wantErrors []string) {
+func validateBackendTrafficPolicy(t *testing.T, trafficPolicy *xgatewayv1alpha1.XBackendTrafficPolicy, wantErrors []string) {
 	t.Helper()
 
 	ctx := context.Background()
 	err := k8sClient.Create(ctx, trafficPolicy)
 
 	if (len(wantErrors) != 0) != (err != nil) {
-		t.Fatalf("Unexpected response while creating BackendTrafficPolicy %q; got err=\n%v\n;want error=%v", fmt.Sprintf("%v/%v", trafficPolicy.Namespace, trafficPolicy.Name), err, wantErrors)
+		t.Fatalf("Unexpected response while creating XBackendTrafficPolicy %q; got err=\n%v\n;want error=%v", fmt.Sprintf("%v/%v", trafficPolicy.Namespace, trafficPolicy.Name), err, wantErrors)
 	}
 
 	var missingErrorStrings []string
@@ -264,6 +286,6 @@ func validateBackendTrafficPolicy(t *testing.T, trafficPolicy *gatewayv1a2.Backe
 		}
 	}
 	if len(missingErrorStrings) != 0 {
-		t.Errorf("Unexpected response while creating BackendTrafficPolicy %q; got err=\n%v\n;missing strings within error=%q", fmt.Sprintf("%v/%v", trafficPolicy.Namespace, trafficPolicy.Name), err, missingErrorStrings)
+		t.Errorf("Unexpected response while creating XBackendTrafficPolicy %q; got err=\n%v\n;missing strings within error=%q", fmt.Sprintf("%v/%v", trafficPolicy.Namespace, trafficPolicy.Name), err, missingErrorStrings)
 	}
 }
diff --git a/pkg/test/cel/gateway_test.go b/pkg/test/cel/gateway_test.go
index 4c24020e..7f8d8676 100644
--- a/pkg/test/cel/gateway_test.go
+++ b/pkg/test/cel/gateway_test.go
@@ -485,7 +485,7 @@ func TestValidateGateway(t *testing.T) {
 		{
 			desc: "ip address and hostname in addresses are valid",
 			mutate: func(gw *gatewayv1.Gateway) {
-				gw.Spec.Addresses = []gatewayv1.GatewayAddress{
+				gw.Spec.Addresses = []gatewayv1.GatewaySpecAddress{
 					{
 						Type:  ptrTo(gatewayv1.IPAddressType),
 						Value: "1.2.3.4",
@@ -504,7 +504,7 @@ func TestValidateGateway(t *testing.T) {
 		{
 			desc: "ip address and hostname in addresses are invalid",
 			mutate: func(gw *gatewayv1.Gateway) {
-				gw.Spec.Addresses = []gatewayv1.GatewayAddress{
+				gw.Spec.Addresses = []gatewayv1.GatewaySpecAddress{
 					{
 						Type:  ptrTo(gatewayv1.IPAddressType),
 						Value: "1.2.3.4:8080",
@@ -563,7 +563,7 @@ func TestValidateGateway(t *testing.T) {
 		{
 			desc: "duplicate ip address or hostname",
 			mutate: func(gw *gatewayv1.Gateway) {
-				gw.Spec.Addresses = []gatewayv1.GatewayAddress{
+				gw.Spec.Addresses = []gatewayv1.GatewaySpecAddress{
 					{
 						Type:  ptrTo(gatewayv1.IPAddressType),
 						Value: "1.2.3.4",
diff --git a/pkg/test/cel/grpcroute_test.go b/pkg/test/cel/grpcroute_test.go
index 366e91c1..2940ce32 100644
--- a/pkg/test/cel/grpcroute_test.go
+++ b/pkg/test/cel/grpcroute_test.go
@@ -282,7 +282,68 @@ func TestGRPCRouteRule(t *testing.T) {
 				},
 			},
 		},
+		{
+			name:       "too many matches and rules",
+			wantErrors: []string{"total number of matches across all rules in a route must be less than 128"},
+			rules: func() []gatewayv1.GRPCRouteRule {
+				match := gatewayv1.GRPCRouteMatch{
+					Headers: []gatewayv1.GRPCHeaderMatch{
+						{
+							Type:  ptrTo(gatewayv1.GRPCHeaderMatchExact),
+							Name:  "version",
+							Value: "v1",
+						},
+					},
+					Method: &gatewayv1.GRPCMethodMatch{
+						Type:    ptrTo(gatewayv1.GRPCMethodMatchExact),
+						Service: ptrTo("foo"),
+						Method:  ptrTo("bar"),
+					},
+				}
+
+				var rules []gatewayv1.GRPCRouteRule
+				for i := 0; i < 7; i++ { // Create 7 rules
+					rule := gatewayv1.GRPCRouteRule{}
+					for j := 0; j < 20; j++ { // Each rule has 20 matches
+						rule.Matches = append(rule.Matches, match)
+					}
+					rules = append(rules, rule)
+				}
+				return rules
+			}(),
+		},
+		{
+			name:       "many matches and few rules",
+			wantErrors: nil,
+			rules: func() []gatewayv1.GRPCRouteRule {
+				match := gatewayv1.GRPCRouteMatch{
+					Headers: []gatewayv1.GRPCHeaderMatch{
+						{
+							Type:  ptrTo(gatewayv1.GRPCHeaderMatchExact),
+							Name:  "version",
+							Value: "v1",
+						},
+					},
+					Method: &gatewayv1.GRPCMethodMatch{
+						Type:    ptrTo(gatewayv1.GRPCMethodMatchExact),
+						Service: ptrTo("foo"),
+						Method:  ptrTo("bar"),
+					},
+				}
+
+				var rules []gatewayv1.GRPCRouteRule
+				for i := 0; i < 2; i++ { // Create 2 rules
+					rule := gatewayv1.GRPCRouteRule{}
+					for j := 0; j < 48; j++ { // Each rule has 48 matches
+						rule.Matches = append(rule.Matches, match)
+					}
+					rules = append(rules, rule)
+				}
+				return rules
+			}(),
+		},
 	}
+
 	for _, tc := range tests {
 		t.Run(tc.name, func(t *testing.T) {
 			route := &gatewayv1.GRPCRoute{