Repository: gophercloud/gophercloud

Issue:
Add support for ``dns/v2/quotas``
Before starting a PR, please read our [contributor tutorial](https://github.com/gophercloud/gophercloud/tree/master/docs/contributor-tutorial).


Discussion:

Solution patch:
diff --git a/.golangci.yaml b/.golangci.yaml
index 828a099a4..2de1155c0 100644
--- a/.golangci.yaml
+++ b/.golangci.yaml
@@ -1,19 +1,34 @@
----
+version: "2"
 linters:
-  disable-all: true
+  default: none
   enable:
     - errcheck
-    - gofmt
-    - goimports
     - govet
     - staticcheck
     - unparam
     - unused
-
-issues:
-  exclude:
-    - SA1006  # printf-style function with dynamic format string and no further arguments should use print-style function instead (staticcheck)
-  exclude-rules:
-    - linters:
-        - staticcheck
-      text: 'SA1019: (x509.EncryptPEMBlock|strings.Title)'
+  exclusions:
+    generated: lax
+    presets:
+      - comments
+      - common-false-positives
+      - legacy
+      - std-error-handling
+    rules:
+      - linters:
+          - staticcheck
+        text: "SA1019: (x509.EncryptPEMBlock|strings.Title)"
+    paths:
+      - third_party$
+      - builtin$
+      - examples$
+formatters:
+  enable:
+    - gofmt
+    - goimports
+  exclusions:
+    generated: lax
+    paths:
+      - third_party$
+      - builtin$
+      - examples$
diff --git a/Makefile b/Makefile
index c63adb8d0..2d9cc5939 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 undefine GOFLAGS
 
-GOLANGCI_LINT_VERSION?=v1.62.2
+GOLANGCI_LINT_VERSION?=v2.1.6
 GOTESTSUM_VERSION?=v1.12.2
 GO_TEST?=go run gotest.tools/gotestsum@$(GOTESTSUM_VERSION) --format testname --
 TIMEOUT := "60m"
diff --git a/docs/FAQ.md b/docs/FAQ.md
index bb37db801..bfd0bc7bc 100644
--- a/docs/FAQ.md
+++ b/docs/FAQ.md
@@ -8,7 +8,7 @@ Please see our dedicated document [here](MICROVERSIONS.md).
 
 You can implement custom logging and/or limit re-auth attempts by creating a custom HTTP client
 like the following and setting it as the provider client's HTTP Client (via the
-`gophercloud.ProviderClient.HTTPClient` field):
+`gophercloud.HTTPClient` field):
 
 ```go
 //...
@@ -41,7 +41,7 @@ func (lrt *LogRoundTripper) RoundTrip(request *http.Request) (*http.Response, er
 
 	if response.StatusCode == http.StatusUnauthorized {
 		if lrt.numReauthAttempts == 3 {
-			return response, fmt.Errorf("Tried to re-authenticate 3 times with no success.")
+			return response, fmt.Errorf("tried to re-authenticate 3 times with no success")
 		}
 		lrt.numReauthAttempts++
 	}
diff --git a/internal/acceptance/clients/clients.go b/internal/acceptance/clients/clients.go
index f981ffcea..6c3639148 100644
--- a/internal/acceptance/clients/clients.go
+++ b/internal/acceptance/clients/clients.go
@@ -108,13 +108,11 @@ func AcceptanceTestChoicesFromEnv() (*AcceptanceTestChoices, error) {
 	}
 
 	if len(missing) > 0 {
-		text := "You're missing some important setup:\n * These environment variables must be provided: %s\n"
-		return nil, fmt.Errorf(text, strings.Join(missing, ", "))
+		return nil, fmt.Errorf("you're missing some important setup:\n * These environment variables must be provided: %s", strings.Join(missing, ", "))
 	}
 
 	if notDistinct != "" {
-		text := "You're missing some important setup:\n * %s\n"
-		return nil, fmt.Errorf(text, notDistinct)
+		return nil, fmt.Errorf("you're missing some important setup:\n * %s", notDistinct)
 	}
 
 	return &AcceptanceTestChoices{
diff --git a/internal/acceptance/clients/conditions.go b/internal/acceptance/clients/conditions.go
index 6077f4bde..f5eaa578b 100644
--- a/internal/acceptance/clients/conditions.go
+++ b/internal/acceptance/clients/conditions.go
@@ -94,7 +94,7 @@ func IsCurrentAbove(t *testing.T, release string) bool {
 		if isReleaseNumeral(current) && !isReleaseNumeral(release) {
 			return true
 		}
-		if current > release && !(!isReleaseNumeral(current) && isReleaseNumeral(release)) {
+		if current > release && (isReleaseNumeral(current) || !isReleaseNumeral(release)) {
 			return true
 		}
 	}
@@ -118,7 +118,7 @@ func IsCurrentBelow(t *testing.T, release string) bool {
 		if isReleaseNumeral(release) && !isReleaseNumeral(current) {
 			return true
 		}
-		if release > current && !(!isReleaseNumeral(release) && isReleaseNumeral(current)) {
+		if release > current && (isReleaseNumeral(release) || !isReleaseNumeral(current)) {
 			return true
 		}
 	}
diff --git a/internal/acceptance/openstack/blockstorage/v2/blockstorage.go b/internal/acceptance/openstack/blockstorage/v2/blockstorage.go
index 9c22a2a4f..f920a615c 100644
--- a/internal/acceptance/openstack/blockstorage/v2/blockstorage.go
+++ b/internal/acceptance/openstack/blockstorage/v2/blockstorage.go
@@ -455,7 +455,7 @@ func SetBootable(t *testing.T, client *gophercloud.ServiceClient, volume *volume
 	}
 
 	if strings.ToLower(vol.Bootable) != "true" {
-		return fmt.Errorf("Volume bootable status is %q, expected 'true'", vol.Bootable)
+		return fmt.Errorf("volume bootable status is %q, expected 'true'", vol.Bootable)
 	}
 
 	bootableOpts = volumes.BootableOpts{
@@ -473,7 +473,7 @@ func SetBootable(t *testing.T, client *gophercloud.ServiceClient, volume *volume
 	}
 
 	if strings.ToLower(vol.Bootable) == "true" {
-		return fmt.Errorf("Volume bootable status is %q, expected 'false'", vol.Bootable)
+		return fmt.Errorf("volume bootable status is %q, expected 'false'", vol.Bootable)
 	}
 
 	return nil
diff --git a/internal/acceptance/openstack/blockstorage/v3/blockstorage.go b/internal/acceptance/openstack/blockstorage/v3/blockstorage.go
index 63de9aee9..16e0a23dd 100644
--- a/internal/acceptance/openstack/blockstorage/v3/blockstorage.go
+++ b/internal/acceptance/openstack/blockstorage/v3/blockstorage.go
@@ -673,7 +673,7 @@ func SetBootable(t *testing.T, client *gophercloud.ServiceClient, volume *volume
 	}
 
 	if strings.ToLower(vol.Bootable) != "true" {
-		return fmt.Errorf("Volume bootable status is %q, expected 'true'", vol.Bootable)
+		return fmt.Errorf("volume bootable status is %q, expected 'true'", vol.Bootable)
 	}
 
 	bootableOpts = volumes.BootableOpts{
@@ -691,7 +691,7 @@ func SetBootable(t *testing.T, client *gophercloud.ServiceClient, volume *volume
 	}
 
 	if strings.ToLower(vol.Bootable) == "true" {
-		return fmt.Errorf("Volume bootable status is %q, expected 'false'", vol.Bootable)
+		return fmt.Errorf("volume bootable status is %q, expected 'false'", vol.Bootable)
 	}
 
 	return nil
diff --git a/internal/acceptance/openstack/blockstorage/v3/volumeattachments.go b/internal/acceptance/openstack/blockstorage/v3/volumeattachments.go
index 4bd531a85..ce47111e8 100644
--- a/internal/acceptance/openstack/blockstorage/v3/volumeattachments.go
+++ b/internal/acceptance/openstack/blockstorage/v3/volumeattachments.go
@@ -72,7 +72,7 @@ func CreateVolumeAttachment(t *testing.T, client *gophercloud.ServiceClient, vol
 	}
 
 	if allAttachments[0].ID != attachment.ID {
-		return fmt.Errorf("Attachment IDs from get and list are not equal: %q != %q", allAttachments[0].ID, attachment.ID)
+		return fmt.Errorf("attachment IDs from get and list are not equal: %q != %q", allAttachments[0].ID, attachment.ID)
 	}
 
 	t.Logf("Attached volume %s to server %s within %q attachment", volume.ID, server.ID, attachment.ID)
diff --git a/internal/acceptance/openstack/compute/v2/compute.go b/internal/acceptance/openstack/compute/v2/compute.go
index 3d5da42a6..b09b8d7b6 100644
--- a/internal/acceptance/openstack/compute/v2/compute.go
+++ b/internal/acceptance/openstack/compute/v2/compute.go
@@ -888,7 +888,7 @@ func GetNetworkIDFromNetworks(t *testing.T, client *gophercloud.ServiceClient, n
 		}
 	}
 
-	return "", fmt.Errorf("Failed to obtain network ID for network %s", networkName)
+	return "", fmt.Errorf("failed to obtain network ID for network %s", networkName)
 }
 
 // ImportPublicKey will create a KeyPair with a random name and a specified
@@ -952,7 +952,7 @@ func WaitForComputeStatus(client *gophercloud.ServiceClient, server *servers.Ser
 		}
 
 		if latest.Status == "ERROR" {
-			return false, fmt.Errorf("Instance in ERROR state")
+			return false, fmt.Errorf("instance in ERROR state")
 		}
 
 		return false, nil
diff --git a/internal/acceptance/openstack/container/v1/capsules.go b/internal/acceptance/openstack/container/v1/capsules.go
index b4f48fc90..6ad33c0c6 100644
--- a/internal/acceptance/openstack/container/v1/capsules.go
+++ b/internal/acceptance/openstack/container/v1/capsules.go
@@ -36,11 +36,11 @@ func WaitForCapsuleStatus(client *gophercloud.ServiceClient, uuid, status string
 		}
 
 		if newStatus == "Failed" {
-			return false, fmt.Errorf("Capsule in FAILED state")
+			return false, fmt.Errorf("capsule in FAILED state")
 		}
 
 		if newStatus == "Error" {
-			return false, fmt.Errorf("Capsule in ERROR state")
+			return false, fmt.Errorf("capsule in ERROR state")
 		}
 
 		return false, nil
diff --git a/internal/acceptance/openstack/containerinfra/v1/containerinfra.go b/internal/acceptance/openstack/containerinfra/v1/containerinfra.go
index 84ee98e87..24f8c1959 100644
--- a/internal/acceptance/openstack/containerinfra/v1/containerinfra.go
+++ b/internal/acceptance/openstack/containerinfra/v1/containerinfra.go
@@ -203,7 +203,7 @@ func WaitForCluster(client *gophercloud.ServiceClient, clusterID string, status
 		}
 
 		if strings.Contains(cluster.Status, "FAILED") {
-			return false, fmt.Errorf("Cluster %s FAILED. Status=%s StatusReason=%s", clusterID, cluster.Status, cluster.StatusReason)
+			return false, fmt.Errorf("cluster %s FAILED. Status=%s StatusReason=%s", clusterID, cluster.Status, cluster.StatusReason)
 		}
 
 		return false, nil
diff --git a/internal/acceptance/openstack/db/v1/db.go b/internal/acceptance/openstack/db/v1/db.go
index abc92553a..fe529a013 100644
--- a/internal/acceptance/openstack/db/v1/db.go
+++ b/internal/acceptance/openstack/db/v1/db.go
@@ -138,7 +138,7 @@ func WaitForInstanceStatus(
 		}
 
 		if latest.Status == "ERROR" {
-			return false, fmt.Errorf("Instance in ERROR state")
+			return false, fmt.Errorf("instance in ERROR state")
 		}
 
 		return false, nil
diff --git a/internal/acceptance/openstack/keymanager/v1/keymanager.go b/internal/acceptance/openstack/keymanager/v1/keymanager.go
index a44b57a4b..87a965eb5 100644
--- a/internal/acceptance/openstack/keymanager/v1/keymanager.go
+++ b/internal/acceptance/openstack/keymanager/v1/keymanager.go
@@ -646,7 +646,7 @@ func DeleteSecret(t *testing.T, client *gophercloud.ServiceClient, id string) {
 func ParseID(ref string) (string, error) {
 	parts := strings.Split(ref, "/")
 	if len(parts) < 2 {
-		return "", fmt.Errorf("Could not parse %s", ref)
+		return "", fmt.Errorf("could not parse %s", ref)
 	}
 
 	return parts[len(parts)-1], nil
@@ -757,7 +757,7 @@ func WaitForOrder(client *gophercloud.ServiceClient, orderID string) error {
 		}
 
 		if order.Status == "ERROR" {
-			return false, fmt.Errorf("Order %s in ERROR state", orderID)
+			return false, fmt.Errorf("order %s in ERROR state", orderID)
 		}
 
 		return false, nil
diff --git a/internal/acceptance/openstack/loadbalancer/v2/loadbalancer.go b/internal/acceptance/openstack/loadbalancer/v2/loadbalancer.go
index 6a36a49d2..c7e94ba05 100644
--- a/internal/acceptance/openstack/loadbalancer/v2/loadbalancer.go
+++ b/internal/acceptance/openstack/loadbalancer/v2/loadbalancer.go
@@ -47,7 +47,7 @@ func CreateListener(t *testing.T, client *gophercloud.ServiceClient, lb *loadbal
 	t.Logf("Successfully created listener %s", listenerName)
 
 	if err := WaitForLoadBalancerState(client, lb.ID, "ACTIVE"); err != nil {
-		return listener, fmt.Errorf("Timed out waiting for loadbalancer to become active: %s", err)
+		return listener, fmt.Errorf("timed out waiting for loadbalancer to become active: %s", err)
 	}
 
 	th.AssertEquals(t, listener.Name, listenerName)
@@ -99,7 +99,7 @@ func CreateListenerHTTP(t *testing.T, client *gophercloud.ServiceClient, lb *loa
 	t.Logf("Successfully created listener %s", listenerName)
 
 	if err := WaitForLoadBalancerState(client, lb.ID, "ACTIVE"); err != nil {
-		return listener, fmt.Errorf("Timed out waiting for loadbalancer to become active: %s", err)
+		return listener, fmt.Errorf("timed out waiting for loadbalancer to become active: %s", err)
 	}
 
 	th.AssertEquals(t, listener.Name, listenerName)
@@ -318,7 +318,7 @@ func CreateMember(t *testing.T, client *gophercloud.ServiceClient, lb *loadbalan
 	t.Logf("Successfully created member %s", memberName)
 
 	if err := WaitForLoadBalancerState(client, lb.ID, "ACTIVE"); err != nil {
-		return member, fmt.Errorf("Timed out waiting for loadbalancer to become active: %s", err)
+		return member, fmt.Errorf("timed out waiting for loadbalancer to become active: %s", err)
 	}
 
 	th.AssertEquals(t, member.Name, memberName)
@@ -352,7 +352,7 @@ func CreateMonitor(t *testing.T, client *gophercloud.ServiceClient, lb *loadbala
 	t.Logf("Successfully created monitor: %s", monitorName)
 
 	if err := WaitForLoadBalancerState(client, lb.ID, "ACTIVE"); err != nil {
-		return monitor, fmt.Errorf("Timed out waiting for loadbalancer to become active: %s", err)
+		return monitor, fmt.Errorf("timed out waiting for loadbalancer to become active: %s", err)
 	}
 
 	th.AssertEquals(t, monitor.Name, monitorName)
@@ -391,7 +391,7 @@ func CreatePool(t *testing.T, client *gophercloud.ServiceClient, lb *loadbalance
 	t.Logf("Successfully created pool %s", poolName)
 
 	if err := WaitForLoadBalancerState(client, lb.ID, "ACTIVE"); err != nil {
-		return pool, fmt.Errorf("Timed out waiting for loadbalancer to become active: %s", err)
+		return pool, fmt.Errorf("timed out waiting for loadbalancer to become active: %s", err)
 	}
 
 	th.AssertEquals(t, pool.Name, poolName)
@@ -428,7 +428,7 @@ func CreatePoolHTTP(t *testing.T, client *gophercloud.ServiceClient, lb *loadbal
 	t.Logf("Successfully created pool %s", poolName)
 
 	if err := WaitForLoadBalancerState(client, lb.ID, "ACTIVE"); err != nil {
-		return pool, fmt.Errorf("Timed out waiting for loadbalancer to become active: %s", err)
+		return pool, fmt.Errorf("timed out waiting for loadbalancer to become active: %s", err)
 	}
 
 	th.AssertEquals(t, pool.Name, poolName)
@@ -466,7 +466,7 @@ func CreateL7Policy(t *testing.T, client *gophercloud.ServiceClient, listener *l
 	t.Logf("Successfully created l7 policy %s", policyName)
 
 	if err := WaitForLoadBalancerState(client, lb.ID, "ACTIVE"); err != nil {
-		return policy, fmt.Errorf("Timed out waiting for loadbalancer to become active: %s", err)
+		return policy, fmt.Errorf("timed out waiting for loadbalancer to become active: %s", err)
 	}
 
 	th.AssertEquals(t, policy.Name, policyName)
@@ -498,7 +498,7 @@ func CreateL7Rule(t *testing.T, client *gophercloud.ServiceClient, policyID stri
 	t.Logf("Successfully created l7 rule for policy %s", policyID)
 
 	if err := WaitForLoadBalancerState(client, lb.ID, "ACTIVE"); err != nil {
-		return rule, fmt.Errorf("Timed out waiting for loadbalancer to become active: %s", err)
+		return rule, fmt.Errorf("timed out waiting for loadbalancer to become active: %s", err)
 	}
 
 	th.AssertEquals(t, rule.RuleType, string(l7policies.TypePath))
@@ -686,7 +686,7 @@ func WaitForLoadBalancerState(client *gophercloud.ServiceClient, lbID, status st
 		}
 
 		if current.ProvisioningStatus == "ERROR" {
-			return false, fmt.Errorf("Load balancer is in ERROR state")
+			return false, fmt.Errorf("load balancer is in ERROR state")
 		}
 
 		return false, nil
diff --git a/internal/acceptance/openstack/networking/v2/extensions/bgp/speakers/speakers.go b/internal/acceptance/openstack/networking/v2/extensions/bgp/speakers/speakers.go
index d9e620144..05ff71af2 100644
--- a/internal/acceptance/openstack/networking/v2/extensions/bgp/speakers/speakers.go
+++ b/internal/acceptance/openstack/networking/v2/extensions/bgp/speakers/speakers.go
@@ -2,7 +2,6 @@ package speakers
 
 import (
 	"context"
-	"strconv"
 	"testing"
 
 	"github.com/gophercloud/gophercloud/v2"
@@ -12,13 +11,13 @@ import (
 )
 
 func CreateBGPSpeaker(t *testing.T, client *gophercloud.ServiceClient) (*speakers.BGPSpeaker, error) {
+	iTrue := true
 	opts := speakers.CreateOpts{
 		IPVersion:                     4,
-		AdvertiseFloatingIPHostRoutes: false,
-		AdvertiseTenantNetworks:       true,
+		AdvertiseFloatingIPHostRoutes: new(bool),
+		AdvertiseTenantNetworks:       &iTrue,
 		Name:                          tools.RandomString("TESTACC-BGPSPEAKER-", 8),
-		LocalAS:                       "3000",
-		Networks:                      []string{},
+		LocalAS:                       3000,
 	}
 
 	t.Logf("Attempting to create BGP Speaker: %s", opts.Name)
@@ -27,12 +26,11 @@ func CreateBGPSpeaker(t *testing.T, client *gophercloud.ServiceClient) (*speaker
 		return bgpSpeaker, err
 	}
 
-	localas, err := strconv.Atoi(opts.LocalAS)
 	th.AssertEquals(t, bgpSpeaker.Name, opts.Name)
-	th.AssertEquals(t, bgpSpeaker.LocalAS, localas)
+	th.AssertEquals(t, bgpSpeaker.LocalAS, opts.LocalAS)
 	th.AssertEquals(t, bgpSpeaker.IPVersion, opts.IPVersion)
-	th.AssertEquals(t, bgpSpeaker.AdvertiseTenantNetworks, opts.AdvertiseTenantNetworks)
-	th.AssertEquals(t, bgpSpeaker.AdvertiseFloatingIPHostRoutes, opts.AdvertiseFloatingIPHostRoutes)
+	th.AssertEquals(t, bgpSpeaker.AdvertiseTenantNetworks, *opts.AdvertiseTenantNetworks)
+	th.AssertEquals(t, bgpSpeaker.AdvertiseFloatingIPHostRoutes, *opts.AdvertiseFloatingIPHostRoutes)
 	t.Logf("Successfully created BGP Speaker")
 	tools.PrintResource(t, bgpSpeaker)
 	return bgpSpeaker, err
diff --git a/internal/acceptance/openstack/orchestration/v1/orchestration.go b/internal/acceptance/openstack/orchestration/v1/orchestration.go
index 3d45311fe..e6245ad83 100644
--- a/internal/acceptance/openstack/orchestration/v1/orchestration.go
+++ b/internal/acceptance/openstack/orchestration/v1/orchestration.go
@@ -108,7 +108,7 @@ func WaitForStackStatus(client *gophercloud.ServiceClient, stackName, stackID, s
 		}
 
 		if latest.Status == "ERROR" {
-			return false, fmt.Errorf("Stack in ERROR state")
+			return false, fmt.Errorf("stack in ERROR state")
 		}
 
 		return false, nil
diff --git a/internal/acceptance/openstack/sharedfilesystems/v2/replicas.go b/internal/acceptance/openstack/sharedfilesystems/v2/replicas.go
index 6a2d31d08..8a3b88815 100644
--- a/internal/acceptance/openstack/sharedfilesystems/v2/replicas.go
+++ b/internal/acceptance/openstack/sharedfilesystems/v2/replicas.go
@@ -95,7 +95,7 @@ func waitForReplicaStatus(t *testing.T, c *gophercloud.ServiceClient, id, status
 		}
 
 		if strings.Contains(current.Status, "error") {
-			return true, fmt.Errorf("An error occurred, wrong status: %s", current.Status)
+			return true, fmt.Errorf("an error occurred, wrong status: %s", current.Status)
 		}
 
 		return false, nil
@@ -104,7 +104,7 @@ func waitForReplicaStatus(t *testing.T, c *gophercloud.ServiceClient, id, status
 	if err != nil {
 		mErr := PrintMessages(t, c, id)
 		if mErr != nil {
-			return fmt.Errorf("Replica status is '%s' and unable to get manila messages: %s", err, mErr)
+			return fmt.Errorf("replica status is '%s' and unable to get manila messages: %s", err, mErr)
 		}
 	}
 
@@ -127,7 +127,7 @@ func waitForReplicaState(t *testing.T, c *gophercloud.ServiceClient, id, state s
 		}
 
 		if strings.Contains(current.State, "error") {
-			return true, fmt.Errorf("An error occurred, wrong state: %s", current.State)
+			return true, fmt.Errorf("an error occurred, wrong state: %s", current.State)
 		}
 
 		return false, nil
@@ -136,7 +136,7 @@ func waitForReplicaState(t *testing.T, c *gophercloud.ServiceClient, id, state s
 	if err != nil {
 		mErr := PrintMessages(t, c, id)
 		if mErr != nil {
-			return fmt.Errorf("Replica state is '%s' and unable to get manila messages: %s", err, mErr)
+			return fmt.Errorf("replica state is '%s' and unable to get manila messages: %s", err, mErr)
 		}
 	}
 
diff --git a/internal/acceptance/openstack/sharedfilesystems/v2/shares.go b/internal/acceptance/openstack/sharedfilesystems/v2/shares.go
index afb699627..eacceebf1 100644
--- a/internal/acceptance/openstack/sharedfilesystems/v2/shares.go
+++ b/internal/acceptance/openstack/sharedfilesystems/v2/shares.go
@@ -120,12 +120,12 @@ func PrintMessages(t *testing.T, c *gophercloud.ServiceClient, id string) error
 
 	allPages, err := messages.List(c, messages.ListOpts{ResourceID: id}).AllPages(context.TODO())
 	if err != nil {
-		return fmt.Errorf("Unable to retrieve messages: %v", err)
+		return fmt.Errorf("unable to retrieve messages: %v", err)
 	}
 
 	allMessages, err := messages.ExtractMessages(allPages)
 	if err != nil {
-		return fmt.Errorf("Unable to extract messages: %v", err)
+		return fmt.Errorf("unable to extract messages: %v", err)
 	}
 
 	for _, message := range allMessages {
@@ -159,7 +159,7 @@ func waitForStatus(t *testing.T, c *gophercloud.ServiceClient, id, status string
 		}
 
 		if strings.Contains(current.Status, "error") {
-			return true, fmt.Errorf("An error occurred, wrong status: %s", current.Status)
+			return true, fmt.Errorf("an error occurred, wrong status: %s", current.Status)
 		}
 
 		return false, nil
@@ -168,7 +168,7 @@ func waitForStatus(t *testing.T, c *gophercloud.ServiceClient, id, status string
 	if err != nil {
 		mErr := PrintMessages(t, c, id)
 		if mErr != nil {
-			return current, fmt.Errorf("Share status is '%s' and unable to get manila messages: %s", err, mErr)
+			return current, fmt.Errorf("share status is '%s' and unable to get manila messages: %s", err, mErr)
 		}
 	}
 
diff --git a/internal/acceptance/openstack/sharedfilesystems/v2/snapshots.go b/internal/acceptance/openstack/sharedfilesystems/v2/snapshots.go
index 4fb3128f2..9c5ccb794 100644
--- a/internal/acceptance/openstack/sharedfilesystems/v2/snapshots.go
+++ b/internal/acceptance/openstack/sharedfilesystems/v2/snapshots.go
@@ -90,7 +90,7 @@ func waitForSnapshotStatus(t *testing.T, c *gophercloud.ServiceClient, id, statu
 		}
 
 		if strings.Contains(current.Status, "error") {
-			return true, fmt.Errorf("An error occurred, wrong status: %s", current.Status)
+			return true, fmt.Errorf("an error occurred, wrong status: %s", current.Status)
 		}
 
 		return false, nil
@@ -99,7 +99,7 @@ func waitForSnapshotStatus(t *testing.T, c *gophercloud.ServiceClient, id, statu
 	if err != nil {
 		mErr := PrintMessages(t, c, id)
 		if mErr != nil {
-			return fmt.Errorf("Snapshot status is '%s' and unable to get manila messages: %s", err, mErr)
+			return fmt.Errorf("snapshot status is '%s' and unable to get manila messages: %s", err, mErr)
 		}
 	}
 
diff --git a/internal/acceptance/openstack/workflow/v2/execution.go b/internal/acceptance/openstack/workflow/v2/execution.go
index d2c2a7197..9a3eccaa9 100644
--- a/internal/acceptance/openstack/workflow/v2/execution.go
+++ b/internal/acceptance/openstack/workflow/v2/execution.go
@@ -48,7 +48,7 @@ func CreateExecution(t *testing.T, client *gophercloud.ServiceClient, workflow *
 		}
 
 		if latest.State == "ERROR" {
-			return false, fmt.Errorf("Execution in ERROR state")
+			return false, fmt.Errorf("execution in ERROR state")
 		}
 
 		return false, nil
diff --git a/openstack/baremetal/httpbasic/requests.go b/openstack/baremetal/httpbasic/requests.go
index 3b13dd463..6eb65eff1 100644
--- a/openstack/baremetal/httpbasic/requests.go
+++ b/openstack/baremetal/httpbasic/requests.go
@@ -20,7 +20,7 @@ func initClientOpts(client *gophercloud.ProviderClient, eo EndpointOpts) (*gophe
 		return nil, fmt.Errorf("IronicEndpoint is required")
 	}
 	if eo.IronicUser == "" || eo.IronicUserPassword == "" {
-		return nil, fmt.Errorf("User and Password are required")
+		return nil, fmt.Errorf("IronicUser and IronicUserPassword are required")
 	}
 
 	token := []byte(eo.IronicUser + ":" + eo.IronicUserPassword)
diff --git a/openstack/baremetal/inventory/plugindata.go b/openstack/baremetal/inventory/plugindata.go
index 3c4666eb3..4cbd8214e 100644
--- a/openstack/baremetal/inventory/plugindata.go
+++ b/openstack/baremetal/inventory/plugindata.go
@@ -54,7 +54,7 @@ func (r *LLDPTLVType) UnmarshalJSON(data []byte) error {
 	}
 
 	if len(list) != 2 {
-		return fmt.Errorf("Invalid LLDP TLV key-value pair")
+		return fmt.Errorf("invalid LLDP TLV key-value pair")
 	}
 
 	fieldtype, ok := list[0].(float64)
diff --git a/openstack/baremetal/v1/allocations/results.go b/openstack/baremetal/v1/allocations/results.go
index 932862e28..cc05ed68c 100644
--- a/openstack/baremetal/v1/allocations/results.go
+++ b/openstack/baremetal/v1/allocations/results.go
@@ -56,11 +56,11 @@ func (r allocationResult) Extract() (*Allocation, error) {
 }
 
 func (r allocationResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "")
+	return r.ExtractIntoStructPtr(v, "")
 }
 
 func ExtractAllocationsInto(r pagination.Page, v any) error {
-	return r.(AllocationPage).Result.ExtractIntoSlicePtr(v, "allocations")
+	return r.(AllocationPage).ExtractIntoSlicePtr(v, "allocations")
 }
 
 // AllocationPage abstracts the raw results of making a List() request against
diff --git a/openstack/baremetal/v1/conductors/results.go b/openstack/baremetal/v1/conductors/results.go
index 543110610..005669af9 100644
--- a/openstack/baremetal/v1/conductors/results.go
+++ b/openstack/baremetal/v1/conductors/results.go
@@ -19,11 +19,11 @@ func (r conductorResult) Extract() (*Conductor, error) {
 }
 
 func (r conductorResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "")
+	return r.ExtractIntoStructPtr(v, "")
 }
 
 func ExtractConductorInto(r pagination.Page, v any) error {
-	return r.(ConductorPage).Result.ExtractIntoSlicePtr(v, "conductors")
+	return r.(ConductorPage).ExtractIntoSlicePtr(v, "conductors")
 }
 
 // Conductor represents a conductor in the OpenStack Bare Metal API.
diff --git a/openstack/baremetal/v1/drivers/results.go b/openstack/baremetal/v1/drivers/results.go
index 4905fa902..d3ebc6555 100644
--- a/openstack/baremetal/v1/drivers/results.go
+++ b/openstack/baremetal/v1/drivers/results.go
@@ -17,11 +17,11 @@ func (r driverResult) Extract() (*Driver, error) {
 }
 
 func (r driverResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "")
+	return r.ExtractIntoStructPtr(v, "")
 }
 
 func ExtractDriversInto(r pagination.Page, v any) error {
-	return r.(DriverPage).Result.ExtractIntoSlicePtr(v, "drivers")
+	return r.(DriverPage).ExtractIntoSlicePtr(v, "drivers")
 }
 
 // Driver represents a driver in the OpenStack Bare Metal API.
diff --git a/openstack/baremetal/v1/nodes/results.go b/openstack/baremetal/v1/nodes/results.go
index b33517a38..abc669c57 100644
--- a/openstack/baremetal/v1/nodes/results.go
+++ b/openstack/baremetal/v1/nodes/results.go
@@ -47,11 +47,11 @@ func (r ValidateResult) Extract() (*NodeValidation, error) {
 }
 
 func (r nodeResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "")
+	return r.ExtractIntoStructPtr(v, "")
 }
 
 func ExtractNodesInto(r pagination.Page, v any) error {
-	return r.(NodePage).Result.ExtractIntoSlicePtr(v, "nodes")
+	return r.(NodePage).ExtractIntoSlicePtr(v, "nodes")
 }
 
 // Extract interprets a BIOSSettingsResult as an array of BIOSSetting structs, if possible.
diff --git a/openstack/baremetal/v1/portgroups/results.go b/openstack/baremetal/v1/portgroups/results.go
index 1c0c14191..fc939296a 100644
--- a/openstack/baremetal/v1/portgroups/results.go
+++ b/openstack/baremetal/v1/portgroups/results.go
@@ -70,11 +70,11 @@ func (r portgroupsResult) Extract() (*PortGroup, error) {
 }
 
 func (r portgroupsResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "")
+	return r.ExtractIntoStructPtr(v, "")
 }
 
 func ExtractPortGroupsInto(r pagination.Page, v any) error {
-	return r.(PortGroupsPage).Result.ExtractIntoSlicePtr(v, "portgroups")
+	return r.(PortGroupsPage).ExtractIntoSlicePtr(v, "portgroups")
 }
 
 // PortGroupsPage abstracts the raw results of making a List() request against
diff --git a/openstack/baremetal/v1/ports/results.go b/openstack/baremetal/v1/ports/results.go
index b1ec5cca8..1537a45be 100644
--- a/openstack/baremetal/v1/ports/results.go
+++ b/openstack/baremetal/v1/ports/results.go
@@ -18,11 +18,11 @@ func (r portResult) Extract() (*Port, error) {
 }
 
 func (r portResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "")
+	return r.ExtractIntoStructPtr(v, "")
 }
 
 func ExtractPortsInto(r pagination.Page, v any) error {
-	return r.(PortPage).Result.ExtractIntoSlicePtr(v, "ports")
+	return r.(PortPage).ExtractIntoSlicePtr(v, "ports")
 }
 
 // Port represents a port in the OpenStack Bare Metal API.
diff --git a/openstack/baremetalintrospection/httpbasic/requests.go b/openstack/baremetalintrospection/httpbasic/requests.go
index 473e92c37..023ef6704 100644
--- a/openstack/baremetalintrospection/httpbasic/requests.go
+++ b/openstack/baremetalintrospection/httpbasic/requests.go
@@ -20,7 +20,7 @@ func initClientOpts(client *gophercloud.ProviderClient, eo EndpointOpts) (*gophe
 		return nil, fmt.Errorf("IronicInspectorEndpoint is required")
 	}
 	if eo.IronicInspectorUser == "" || eo.IronicInspectorUserPassword == "" {
-		return nil, fmt.Errorf("User and Password are required")
+		return nil, fmt.Errorf("IronicInspectorUser and IronicInspectorUserPassword are required")
 	}
 
 	token := []byte(eo.IronicInspectorUser + ":" + eo.IronicInspectorUserPassword)
diff --git a/openstack/baremetalintrospection/v1/introspection/results.go b/openstack/baremetalintrospection/v1/introspection/results.go
index 00e0287bc..c7740940a 100644
--- a/openstack/baremetalintrospection/v1/introspection/results.go
+++ b/openstack/baremetalintrospection/v1/introspection/results.go
@@ -22,13 +22,13 @@ func (r introspectionResult) Extract() (*Introspection, error) {
 
 // ExtractInto will extract a response body into an Introspection struct.
 func (r introspectionResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "")
+	return r.ExtractIntoStructPtr(v, "")
 }
 
 // ExtractIntrospectionsInto will extract a collection of introspectResult pages into a
 // slice of Introspection entities.
 func ExtractIntrospectionsInto(r pagination.Page, v any) error {
-	return r.(IntrospectionPage).Result.ExtractIntoSlicePtr(v, "introspection")
+	return r.(IntrospectionPage).ExtractIntoSlicePtr(v, "introspection")
 }
 
 // ExtractIntrospections interprets the results of a single page from a
diff --git a/openstack/blockstorage/noauth/requests.go b/openstack/blockstorage/noauth/requests.go
index cf887553f..e9d1a156b 100644
--- a/openstack/blockstorage/noauth/requests.go
+++ b/openstack/blockstorage/noauth/requests.go
@@ -39,7 +39,7 @@ func initClientOpts(client *gophercloud.ProviderClient, eo EndpointOpts, clientT
 
 	token := strings.Split(client.TokenID, ":")
 	if len(token) != 2 {
-		return nil, fmt.Errorf("Malformed noauth token")
+		return nil, fmt.Errorf("malformed noauth token")
 	}
 
 	endpoint := fmt.Sprintf("%s%s", gophercloud.NormalizeURL(eo.CinderEndpoint), token[1])
diff --git a/openstack/blockstorage/v2/backups/results.go b/openstack/blockstorage/v2/backups/results.go
index 77620de91..fb204b9f6 100644
--- a/openstack/blockstorage/v2/backups/results.go
+++ b/openstack/blockstorage/v2/backups/results.go
@@ -156,11 +156,11 @@ func (r commonResult) Extract() (*Backup, error) {
 }
 
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "backup")
+	return r.ExtractIntoStructPtr(v, "backup")
 }
 
 func ExtractBackupsInto(r pagination.Page, v any) error {
-	return r.(BackupPage).Result.ExtractIntoSlicePtr(v, "backups")
+	return r.(BackupPage).ExtractIntoSlicePtr(v, "backups")
 }
 
 // RestoreResult contains the response body and error from a restore request.
@@ -189,7 +189,7 @@ func (r RestoreResult) Extract() (*Restore, error) {
 }
 
 func (r RestoreResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "restore")
+	return r.ExtractIntoStructPtr(v, "restore")
 }
 
 // ExportResult contains the response body and error from an export request.
@@ -214,7 +214,7 @@ func (r ExportResult) Extract() (*BackupRecord, error) {
 }
 
 func (r ExportResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "backup-record")
+	return r.ExtractIntoStructPtr(v, "backup-record")
 }
 
 // ImportResponse struct contains the response of the Backup Import action.
@@ -236,7 +236,7 @@ func (r ImportResult) Extract() (*ImportResponse, error) {
 }
 
 func (r ImportResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "backup")
+	return r.ExtractIntoStructPtr(v, "backup")
 }
 
 // ImportBackup contains all the information to import a Cinder Backup.
diff --git a/openstack/blockstorage/v2/transfers/results.go b/openstack/blockstorage/v2/transfers/results.go
index 42885c27e..5dce9179f 100644
--- a/openstack/blockstorage/v2/transfers/results.go
+++ b/openstack/blockstorage/v2/transfers/results.go
@@ -49,7 +49,7 @@ func (r commonResult) Extract() (*Transfer, error) {
 
 // ExtractInto converts our response data into a transfer struct
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "transfer")
+	return r.ExtractIntoStructPtr(v, "transfer")
 }
 
 // CreateResult contains the response body and error from a Create request.
@@ -76,7 +76,7 @@ func ExtractTransfers(r pagination.Page) ([]Transfer, error) {
 
 // ExtractTransfersInto similar to ExtractInto but operates on a `list` of transfers
 func ExtractTransfersInto(r pagination.Page, v any) error {
-	return r.(TransferPage).Result.ExtractIntoSlicePtr(v, "transfers")
+	return r.(TransferPage).ExtractIntoSlicePtr(v, "transfers")
 }
 
 // TransferPage is a pagination.pager that is returned from a call to the List function.
diff --git a/openstack/blockstorage/v2/volumes/results.go b/openstack/blockstorage/v2/volumes/results.go
index 061309e99..abc3d4682 100644
--- a/openstack/blockstorage/v2/volumes/results.go
+++ b/openstack/blockstorage/v2/volumes/results.go
@@ -147,11 +147,11 @@ func (r commonResult) Extract() (*Volume, error) {
 }
 
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "volume")
+	return r.ExtractIntoStructPtr(v, "volume")
 }
 
 func ExtractVolumesInto(r pagination.Page, v any) error {
-	return r.(VolumePage).Result.ExtractIntoSlicePtr(v, "volumes")
+	return r.(VolumePage).ExtractIntoSlicePtr(v, "volumes")
 }
 
 // CreateResult contains the response body and error from a Create request.
diff --git a/openstack/blockstorage/v3/attachments/results.go b/openstack/blockstorage/v3/attachments/results.go
index 8c572047a..0ef8a6607 100644
--- a/openstack/blockstorage/v3/attachments/results.go
+++ b/openstack/blockstorage/v3/attachments/results.go
@@ -89,13 +89,13 @@ func (r commonResult) Extract() (*Attachment, error) {
 
 // ExtractInto converts our response data into a attachment struct.
 func (r commonResult) ExtractInto(a any) error {
-	return r.Result.ExtractIntoStructPtr(a, "attachment")
+	return r.ExtractIntoStructPtr(a, "attachment")
 }
 
 // ExtractAttachmentsInto similar to ExtractInto but operates on a List of
 // attachments.
 func ExtractAttachmentsInto(r pagination.Page, a any) error {
-	return r.(AttachmentPage).Result.ExtractIntoSlicePtr(a, "attachments")
+	return r.(AttachmentPage).ExtractIntoSlicePtr(a, "attachments")
 }
 
 // CreateResult contains the response body and error from a Create request.
diff --git a/openstack/blockstorage/v3/backups/results.go b/openstack/blockstorage/v3/backups/results.go
index 77620de91..fb204b9f6 100644
--- a/openstack/blockstorage/v3/backups/results.go
+++ b/openstack/blockstorage/v3/backups/results.go
@@ -156,11 +156,11 @@ func (r commonResult) Extract() (*Backup, error) {
 }
 
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "backup")
+	return r.ExtractIntoStructPtr(v, "backup")
 }
 
 func ExtractBackupsInto(r pagination.Page, v any) error {
-	return r.(BackupPage).Result.ExtractIntoSlicePtr(v, "backups")
+	return r.(BackupPage).ExtractIntoSlicePtr(v, "backups")
 }
 
 // RestoreResult contains the response body and error from a restore request.
@@ -189,7 +189,7 @@ func (r RestoreResult) Extract() (*Restore, error) {
 }
 
 func (r RestoreResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "restore")
+	return r.ExtractIntoStructPtr(v, "restore")
 }
 
 // ExportResult contains the response body and error from an export request.
@@ -214,7 +214,7 @@ func (r ExportResult) Extract() (*BackupRecord, error) {
 }
 
 func (r ExportResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "backup-record")
+	return r.ExtractIntoStructPtr(v, "backup-record")
 }
 
 // ImportResponse struct contains the response of the Backup Import action.
@@ -236,7 +236,7 @@ func (r ImportResult) Extract() (*ImportResponse, error) {
 }
 
 func (r ImportResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "backup")
+	return r.ExtractIntoStructPtr(v, "backup")
 }
 
 // ImportBackup contains all the information to import a Cinder Backup.
diff --git a/openstack/blockstorage/v3/manageablevolumes/results.go b/openstack/blockstorage/v3/manageablevolumes/results.go
index 317ed21fb..bb8ec9f7e 100644
--- a/openstack/blockstorage/v3/manageablevolumes/results.go
+++ b/openstack/blockstorage/v3/manageablevolumes/results.go
@@ -18,5 +18,5 @@ func (r ManageExistingResult) Extract() (*volumes.Volume, error) {
 
 // ExtractInto converts our response data into a volume struct
 func (r ManageExistingResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "volume")
+	return r.ExtractIntoStructPtr(v, "volume")
 }
diff --git a/openstack/blockstorage/v3/qos/results.go b/openstack/blockstorage/v3/qos/results.go
index 314bf878c..53765f3af 100644
--- a/openstack/blockstorage/v3/qos/results.go
+++ b/openstack/blockstorage/v3/qos/results.go
@@ -30,7 +30,7 @@ func (r commonResult) Extract() (*QoS, error) {
 
 // ExtractInto converts our response data into a QoS struct
 func (r commonResult) ExtractInto(qos any) error {
-	return r.Result.ExtractIntoStructPtr(qos, "qos_specs")
+	return r.ExtractIntoStructPtr(qos, "qos_specs")
 }
 
 // CreateResult contains the response body and error from a Create request.
diff --git a/openstack/blockstorage/v3/transfers/results.go b/openstack/blockstorage/v3/transfers/results.go
index 42885c27e..5dce9179f 100644
--- a/openstack/blockstorage/v3/transfers/results.go
+++ b/openstack/blockstorage/v3/transfers/results.go
@@ -49,7 +49,7 @@ func (r commonResult) Extract() (*Transfer, error) {
 
 // ExtractInto converts our response data into a transfer struct
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "transfer")
+	return r.ExtractIntoStructPtr(v, "transfer")
 }
 
 // CreateResult contains the response body and error from a Create request.
@@ -76,7 +76,7 @@ func ExtractTransfers(r pagination.Page) ([]Transfer, error) {
 
 // ExtractTransfersInto similar to ExtractInto but operates on a `list` of transfers
 func ExtractTransfersInto(r pagination.Page, v any) error {
-	return r.(TransferPage).Result.ExtractIntoSlicePtr(v, "transfers")
+	return r.(TransferPage).ExtractIntoSlicePtr(v, "transfers")
 }
 
 // TransferPage is a pagination.pager that is returned from a call to the List function.
diff --git a/openstack/blockstorage/v3/volumes/results.go b/openstack/blockstorage/v3/volumes/results.go
index e99ef5e19..b32c83616 100644
--- a/openstack/blockstorage/v3/volumes/results.go
+++ b/openstack/blockstorage/v3/volumes/results.go
@@ -154,12 +154,12 @@ func (r commonResult) Extract() (*Volume, error) {
 
 // ExtractInto converts our response data into a volume struct
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "volume")
+	return r.ExtractIntoStructPtr(v, "volume")
 }
 
 // ExtractVolumesInto similar to ExtractInto but operates on a `list` of volumes
 func ExtractVolumesInto(r pagination.Page, v any) error {
-	return r.(VolumePage).Result.ExtractIntoSlicePtr(v, "volumes")
+	return r.(VolumePage).ExtractIntoSlicePtr(v, "volumes")
 }
 
 // CreateResult contains the response body and error from a Create request.
diff --git a/openstack/blockstorage/v3/volumetypes/results.go b/openstack/blockstorage/v3/volumetypes/results.go
index 9d5dce56e..11f03b4c9 100644
--- a/openstack/blockstorage/v3/volumetypes/results.go
+++ b/openstack/blockstorage/v3/volumetypes/results.go
@@ -69,12 +69,12 @@ func (r commonResult) Extract() (*VolumeType, error) {
 
 // ExtractInto converts our response data into a volume type struct
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "volume_type")
+	return r.ExtractIntoStructPtr(v, "volume_type")
 }
 
 // ExtractVolumeTypesInto similar to ExtractInto but operates on a `list` of volume types
 func ExtractVolumeTypesInto(r pagination.Page, v any) error {
-	return r.(VolumeTypePage).Result.ExtractIntoSlicePtr(v, "volume_types")
+	return r.(VolumeTypePage).ExtractIntoSlicePtr(v, "volume_types")
 }
 
 // GetResult contains the response body and error from a Get request.
@@ -228,7 +228,7 @@ func (r encryptionResult) Extract() (*EncryptionType, error) {
 
 // ExtractInto converts our response data into a volume type struct
 func (r encryptionResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "encryption")
+	return r.ExtractIntoStructPtr(v, "encryption")
 }
 
 type CreateEncryptionResult struct {
diff --git a/openstack/client.go b/openstack/client.go
index 00dfca6ae..ff2bfd57e 100644
--- a/openstack/client.go
+++ b/openstack/client.go
@@ -105,7 +105,7 @@ func Authenticate(ctx context.Context, client *gophercloud.ProviderClient, optio
 		return v3auth(ctx, client, endpoint, &options, gophercloud.EndpointOpts{})
 	default:
 		// The switch statement must be out of date from the versions list.
-		return fmt.Errorf("Unrecognized identity version: %s", chosen.ID)
+		return fmt.Errorf("unrecognized identity version: %s", chosen.ID)
 	}
 }
 
@@ -351,7 +351,7 @@ func initClientOpts(client *gophercloud.ProviderClient, eo gophercloud.EndpointO
 
 	eo.ApplyDefaults(clientType)
 	if eo.Version != 0 && eo.Version != version {
-		return sc, errors.New("Conflict between requested service major version and manually set version")
+		return sc, errors.New("conflict between requested service major version and manually set version")
 	}
 	eo.Version = version
 
@@ -458,7 +458,7 @@ func NewLoadBalancerV2(client *gophercloud.ProviderClient, eo gophercloud.Endpoi
 	sc, err := initClientOpts(client, eo, "load-balancer", 2)
 
 	// Fixes edge case having an OpenStack lb endpoint with trailing version number.
-	endpoint := strings.Replace(sc.Endpoint, "v2.0/", "", -1)
+	endpoint := strings.ReplaceAll(sc.Endpoint, "v2.0/", "")
 
 	sc.ResourceBase = endpoint + "v2.0/"
 	return sc, err
diff --git a/openstack/compute/v2/hypervisors/results.go b/openstack/compute/v2/hypervisors/results.go
index 0a35dfdf0..55ae98bf5 100644
--- a/openstack/compute/v2/hypervisors/results.go
+++ b/openstack/compute/v2/hypervisors/results.go
@@ -194,7 +194,7 @@ func (r *Hypervisor) UnmarshalJSON(b []byte) error {
 	case float64:
 		r.HypervisorVersion = int(t)
 	default:
-		return fmt.Errorf("Hypervisor version has unexpected type: %T", t)
+		return fmt.Errorf("HypervisorVersion has unexpected type: %T", t)
 	}
 
 	// free_disk_gb doesn't exist after api version 2.87
@@ -205,7 +205,7 @@ func (r *Hypervisor) UnmarshalJSON(b []byte) error {
 		case float64:
 			r.FreeDiskGB = int(t)
 		default:
-			return fmt.Errorf("Free disk GB has unexpected type: %T", t)
+			return fmt.Errorf("FreeDiskGB has unexpected type: %T", t)
 		}
 	}
 
@@ -217,7 +217,7 @@ func (r *Hypervisor) UnmarshalJSON(b []byte) error {
 		case float64:
 			r.LocalGB = int(t)
 		default:
-			return fmt.Errorf("Local GB has unexpected type: %T", t)
+			return fmt.Errorf("LocalGB has unexpected type: %T", t)
 		}
 	}
 
diff --git a/openstack/compute/v2/instanceactions/results.go b/openstack/compute/v2/instanceactions/results.go
index 2015be88c..8ebc06054 100644
--- a/openstack/compute/v2/instanceactions/results.go
+++ b/openstack/compute/v2/instanceactions/results.go
@@ -186,9 +186,9 @@ func (r InstanceActionResult) Extract() (InstanceActionDetail, error) {
 }
 
 func (r InstanceActionResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "instanceAction")
+	return r.ExtractIntoStructPtr(v, "instanceAction")
 }
 
 func ExtractInstanceActionsInto(r pagination.Page, v any) error {
-	return r.(InstanceActionPage).Result.ExtractIntoSlicePtr(v, "instanceActions")
+	return r.(InstanceActionPage).ExtractIntoSlicePtr(v, "instanceActions")
 }
diff --git a/openstack/compute/v2/servers/results.go b/openstack/compute/v2/servers/results.go
index 385001c8d..fa4ce38ff 100644
--- a/openstack/compute/v2/servers/results.go
+++ b/openstack/compute/v2/servers/results.go
@@ -25,11 +25,11 @@ func (r serverResult) Extract() (*Server, error) {
 }
 
 func (r serverResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "server")
+	return r.ExtractIntoStructPtr(v, "server")
 }
 
 func ExtractServersInto(r pagination.Page, v any) error {
-	return r.(ServerPage).Result.ExtractIntoSlicePtr(v, "servers")
+	return r.(ServerPage).ExtractIntoSlicePtr(v, "servers")
 }
 
 // CreateResult is the response from a Create operation. Call its Extract
@@ -117,11 +117,11 @@ func decryptPassword(encryptedPassword string, privateKey *rsa.PrivateKey) (stri
 
 	n, err := base64.StdEncoding.Decode(b64EncryptedPassword, []byte(encryptedPassword))
 	if err != nil {
-		return "", fmt.Errorf("Failed to base64 decode encrypted password: %s", err)
+		return "", fmt.Errorf("failed to base64 decode encrypted password: %s", err)
 	}
 	password, err := rsa.DecryptPKCS1v15(nil, privateKey, b64EncryptedPassword[0:n])
 	if err != nil {
-		return "", fmt.Errorf("Failed to decrypt password: %s", err)
+		return "", fmt.Errorf("failed to decrypt password: %s", err)
 	}
 
 	return string(password), nil
@@ -139,7 +139,7 @@ func (r CreateImageResult) ExtractImageID() (string, error) {
 	}
 	imageID := path.Base(u.Path)
 	if imageID == "." || imageID == "/" {
-		return "", fmt.Errorf("Failed to parse the ID of newly created image: %s", u)
+		return "", fmt.Errorf("failed to parse the ID of newly created image: %s", u)
 	}
 	return imageID, nil
 }
diff --git a/openstack/container/v1/capsules/results.go b/openstack/container/v1/capsules/results.go
index c417bb203..7c8a2fc17 100644
--- a/openstack/container/v1/capsules/results.go
+++ b/openstack/container/v1/capsules/results.go
@@ -258,7 +258,7 @@ func (r CapsulePage) IsEmpty() (bool, error) {
 		return len(v) == 0, nil
 	}
 
-	return false, fmt.Errorf("Unable to determine Capsule type")
+	return false, fmt.Errorf("unable to determine Capsule type")
 }
 
 // ExtractCapsulesBase accepts a Page struct, specifically a CapsulePage struct,
diff --git a/openstack/dns/v2/quotas/doc.go b/openstack/dns/v2/quotas/doc.go
new file mode 100644
index 000000000..a0c6973ea
--- /dev/null
+++ b/openstack/dns/v2/quotas/doc.go
@@ -0,0 +1,28 @@
+/*
+Package quotas provides the ability to retrieve DNS quotas through the Designate API.
+
+Example to Get a Quota Set
+
+	projectID = "23d5d3f79dfa4f73b72b8b0b0063ec55"
+	quotasInfo, err := quotas.Get(context.TODO(), dnsClient, projectID).Extract()
+	if err != nil {
+	    log.Fatal(err)
+	}
+
+	fmt.Printf("quotas: %#v\n", quotasInfo)
+
+Example to Update a Quota Set
+
+	projectID = "23d5d3f79dfa4f73b72b8b0b0063ec55"
+	zones := 10
+	quota := &quotas.UpdateOpts{
+	   Zones: &zones,
+	}
+	quotasInfo, err := quotas.Update(context.TODO(), dnsClient, projectID, quota).Extract()
+	if err != nil {
+	    log.Fatal(err)
+	}
+
+	fmt.Printf("quotas: %#v\n", quotasInfo)
+*/
+package quotas
diff --git a/openstack/dns/v2/quotas/requests.go b/openstack/dns/v2/quotas/requests.go
new file mode 100644
index 000000000..25a8ac238
--- /dev/null
+++ b/openstack/dns/v2/quotas/requests.go
@@ -0,0 +1,49 @@
+package quotas
+
+import (
+	"context"
+
+	"github.com/gophercloud/gophercloud/v2"
+)
+
+// Get returns information about the quota for a given project ID.
+func Get(ctx context.Context, client *gophercloud.ServiceClient, projectID string) (r Result) {
+	resp, err := client.Get(ctx, URL(client, projectID), &r.Body, nil)
+	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
+	return
+}
+
+// UpdateOptsBuilder allows extensions to add additional parameters to the
+// Update request.
+type UpdateOptsBuilder interface {
+	ToQuotaUpdateMap() (map[string]interface{}, error)
+}
+
+// UpdateOpts represents options used to update the DNS Quotas.
+type UpdateOpts struct {
+	APIExporterSize  *int `json:"api_export_size,omitempty"`
+	RecordsetRecords *int `json:"recordset_records,omitempty"`
+	ZoneRecords      *int `json:"zone_records,omitempty"`
+	ZoneRecordsets   *int `json:"zone_recordsets,omitempty"`
+	Zones            *int `json:"zones,omitempty"`
+}
+
+// ToQuotaUpdateMap builds a request body from UpdateOpts.
+func (opts UpdateOpts) ToQuotaUpdateMap() (map[string]interface{}, error) {
+	return gophercloud.BuildRequestBody(opts, "")
+}
+
+// Update accepts a UpdateOpts struct and updates an existing DNS Quotas using the
+// values provided.
+func Update(ctx context.Context, c *gophercloud.ServiceClient, projectID string, opts UpdateOptsBuilder) (r Result) {
+	b, err := opts.ToQuotaUpdateMap()
+	if err != nil {
+		r.Err = err
+		return
+	}
+	resp, err := c.Patch(ctx, URL(c, projectID), b, &r.Body, &gophercloud.RequestOpts{
+		OkCodes: []int{200},
+	})
+	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
+	return
+}
diff --git a/openstack/dns/v2/quotas/results.go b/openstack/dns/v2/quotas/results.go
new file mode 100644
index 000000000..cd9c5da69
--- /dev/null
+++ b/openstack/dns/v2/quotas/results.go
@@ -0,0 +1,28 @@
+package quotas
+
+import (
+	"github.com/gophercloud/gophercloud/v2"
+)
+
+// Extract interprets a GetResult, CreateResult or UpdateResult as a Quota.
+// An error is returned if the original call or the extraction failed.
+func (r Result) Extract() (*Quota, error) {
+	var s *Quota
+	err := r.ExtractInto(&s)
+	return s, err
+}
+
+// ListResult is the result of a Create request. Call its Extract method
+// to interpret the result as a Zone.
+type Result struct {
+	gophercloud.Result
+}
+
+// Quota represents a quotas on the system.
+type Quota struct {
+	APIExporterSize  int `json:"api_export_size"`
+	RecordsetRecords int `json:"recordset_records"`
+	ZoneRecords      int `json:"zone_records"`
+	ZoneRecordsets   int `json:"zone_recordsets"`
+	Zones            int `json:"zones"`
+}
diff --git a/openstack/dns/v2/quotas/urls.go b/openstack/dns/v2/quotas/urls.go
new file mode 100644
index 000000000..e60ba1829
--- /dev/null
+++ b/openstack/dns/v2/quotas/urls.go
@@ -0,0 +1,7 @@
+package quotas
+
+import "github.com/gophercloud/gophercloud/v2"
+
+func URL(c *gophercloud.ServiceClient, projectID string) string {
+	return c.ServiceURL("quotas", projectID)
+}
diff --git a/openstack/identity/v3/domains/doc.go b/openstack/identity/v3/domains/doc.go
index 618b2f6d4..34611f5c1 100644
--- a/openstack/identity/v3/domains/doc.go
+++ b/openstack/identity/v3/domains/doc.go
@@ -3,7 +3,7 @@ Package domains manages and retrieves Domains in the OpenStack Identity Service.
 
 Example to List Domains
 
-	var iTrue bool = true
+	var iTrue = true
 	listOpts := domains.ListOpts{
 		Enabled: &iTrue,
 	}
@@ -38,7 +38,7 @@ Example to Update a Domain
 
 	domainID := "0fe36e73809d46aeae6705c39077b1b3"
 
-	var iFalse bool = false
+	var iFalse = false
 	updateOpts := domains.UpdateOpts{
 		Enabled: &iFalse,
 	}
diff --git a/openstack/identity/v3/services/doc.go b/openstack/identity/v3/services/doc.go
index 3d980b434..51659f9fa 100644
--- a/openstack/identity/v3/services/doc.go
+++ b/openstack/identity/v3/services/doc.go
@@ -41,7 +41,7 @@ Example to Update a Service
 
 	serviceID :=  "3c7bbe9a6ecb453ca1789586291380ed"
 
-	var iFalse bool = false
+	var iFalse = false
 	updateOpts := services.UpdateOpts{
 		Enabled: &iFalse,
 		Extra: map[string]any{
diff --git a/openstack/identity/v3/users/results.go b/openstack/identity/v3/users/results.go
index d9e7aaab6..18d3f46e1 100644
--- a/openstack/identity/v3/users/results.go
+++ b/openstack/identity/v3/users/results.go
@@ -67,10 +67,10 @@ func (r *User) UnmarshalJSON(b []byte) error {
 	case string:
 		r.Enabled, err = strconv.ParseBool(t)
 		if err != nil {
-			return fmt.Errorf("Failed to parse Enabled %q: %v", t, err)
+			return fmt.Errorf("failed to parse Enabled %q: %v", t, err)
 		}
 	default:
-		return fmt.Errorf("Unknown type for Enabled: %T (value: %v)", t, t)
+		return fmt.Errorf("unknown type for Enabled: %T (value: %v)", t, t)
 	}
 
 	// Collect other fields and bundle them into Extra
diff --git a/openstack/image/v2/images/results.go b/openstack/image/v2/images/results.go
index 6652f0e79..f9c6e13ba 100644
--- a/openstack/image/v2/images/results.go
+++ b/openstack/image/v2/images/results.go
@@ -120,7 +120,7 @@ func (r *Image) UnmarshalJSON(b []byte) error {
 	case float64:
 		r.SizeBytes = int64(t)
 	default:
-		return fmt.Errorf("Unknown type for SizeBytes: %v (value: %v)", reflect.TypeOf(t), t)
+		return fmt.Errorf("unknown type for SizeBytes: %v (value: %v)", reflect.TypeOf(t), t)
 	}
 
 	// Bundle all other fields into Properties
diff --git a/openstack/messaging/v2/messages/results.go b/openstack/messaging/v2/messages/results.go
index a0b76a737..cf280d886 100644
--- a/openstack/messaging/v2/messages/results.go
+++ b/openstack/messaging/v2/messages/results.go
@@ -127,5 +127,5 @@ func (r MessagePage) NextPageURL() (string, error) {
 	if err != nil {
 		return "", err
 	}
-	return nextPageURL(r.URL.String(), next)
+	return nextPageURL(r.String(), next)
 }
diff --git a/openstack/messaging/v2/queues/results.go b/openstack/messaging/v2/queues/results.go
index 8190ddfa5..398bbba77 100644
--- a/openstack/messaging/v2/queues/results.go
+++ b/openstack/messaging/v2/queues/results.go
@@ -173,7 +173,7 @@ func (r QueuePage) NextPageURL() (string, error) {
 	if err != nil {
 		return "", err
 	}
-	return nextPageURL(r.URL.String(), next)
+	return nextPageURL(r.String(), next)
 }
 
 // GetCount value if it request was supplied `WithCount` param
diff --git a/openstack/networking/v2/extensions/agents/results.go b/openstack/networking/v2/extensions/agents/results.go
index 166702009..4e13e212b 100644
--- a/openstack/networking/v2/extensions/agents/results.go
+++ b/openstack/networking/v2/extensions/agents/results.go
@@ -205,7 +205,7 @@ func (r ListBGPSpeakersResult) IsEmpty() (bool, error) {
 	}
 
 	speakers, err := ExtractBGPSpeakers(r)
-	return 0 == len(speakers), err
+	return len(speakers) == 0, err
 }
 
 // ExtractBGPSpeakers inteprets the ListBGPSpeakersResult into an array of BGP speakers
diff --git a/openstack/networking/v2/extensions/bgp/peers/requests.go b/openstack/networking/v2/extensions/bgp/peers/requests.go
index 589c4f7ad..d9341f7cf 100644
--- a/openstack/networking/v2/extensions/bgp/peers/requests.go
+++ b/openstack/networking/v2/extensions/bgp/peers/requests.go
@@ -32,9 +32,10 @@ type CreateOptsBuilder interface {
 type CreateOpts struct {
 	AuthType string `json:"auth_type"`
 	RemoteAS int    `json:"remote_as"`
-	Name     string `json:"name"`
+	Name     string `json:"name,omitempty"`
 	Password string `json:"password,omitempty"`
 	PeerIP   string `json:"peer_ip"`
+	TenantID string `json:"tenant_id,omitempty"`
 }
 
 // ToPeerCreateMap builds a request body from CreateOpts.
@@ -69,8 +70,8 @@ type UpdateOptsBuilder interface {
 
 // UpdateOpts represents options used to update a BGP Peer.
 type UpdateOpts struct {
-	Name     string `json:"name,omitempty"`
-	Password string `json:"password,omitempty"`
+	Name     *string `json:"name,omitempty"`
+	Password *string `json:"password,omitempty"`
 }
 
 // ToPeerUpdateMap builds a request body from UpdateOpts.
diff --git a/openstack/networking/v2/extensions/bgp/peers/results.go b/openstack/networking/v2/extensions/bgp/peers/results.go
index afd771b1e..ac07c91c8 100644
--- a/openstack/networking/v2/extensions/bgp/peers/results.go
+++ b/openstack/networking/v2/extensions/bgp/peers/results.go
@@ -19,7 +19,7 @@ func (r commonResult) Extract() (*BGPPeer, error) {
 }
 
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, jroot)
+	return r.ExtractIntoStructPtr(v, jroot)
 }
 
 // BGP peer
@@ -72,7 +72,7 @@ func ExtractBGPPeers(r pagination.Page) ([]BGPPeer, error) {
 }
 
 func ExtractBGPPeersInto(r pagination.Page, v any) error {
-	return r.(BGPPeerPage).Result.ExtractIntoSlicePtr(v, "bgp_peers")
+	return r.(BGPPeerPage).ExtractIntoSlicePtr(v, "bgp_peers")
 }
 
 // GetResult represents the result of a get operation. Call its Extract
diff --git a/openstack/networking/v2/extensions/bgp/speakers/requests.go b/openstack/networking/v2/extensions/bgp/speakers/requests.go
index 8597602a7..91694ec72 100644
--- a/openstack/networking/v2/extensions/bgp/speakers/requests.go
+++ b/openstack/networking/v2/extensions/bgp/speakers/requests.go
@@ -24,12 +24,12 @@ func Get(ctx context.Context, c *gophercloud.ServiceClient, id string) (r GetRes
 
 // CreateOpts represents options used to create a BGP Speaker.
 type CreateOpts struct {
-	Name                          string   `json:"name"`
-	IPVersion                     int      `json:"ip_version"`
-	AdvertiseFloatingIPHostRoutes bool     `json:"advertise_floating_ip_host_routes"`
-	AdvertiseTenantNetworks       bool     `json:"advertise_tenant_networks"`
-	LocalAS                       string   `json:"local_as"`
-	Networks                      []string `json:"networks,omitempty"`
+	Name                          string `json:"name,omitempty"`
+	IPVersion                     int    `json:"ip_version,omitempty"`
+	AdvertiseFloatingIPHostRoutes *bool  `json:"advertise_floating_ip_host_routes,omitempty"`
+	AdvertiseTenantNetworks       *bool  `json:"advertise_tenant_networks,omitempty"`
+	LocalAS                       int    `json:"local_as"`
+	TenantID                      string `json:"tenant_id,omitempty"`
 }
 
 // CreateOptsBuilder declare a function that build CreateOpts into a Create request body.
@@ -63,9 +63,9 @@ func Delete(ctx context.Context, c *gophercloud.ServiceClient, speakerID string)
 
 // UpdateOpts represents options used to update a BGP Speaker.
 type UpdateOpts struct {
-	Name                          string `json:"name,omitempty"`
-	AdvertiseFloatingIPHostRoutes bool   `json:"advertise_floating_ip_host_routes"`
-	AdvertiseTenantNetworks       bool   `json:"advertise_tenant_networks"`
+	Name                          *string `json:"name,omitempty"`
+	AdvertiseFloatingIPHostRoutes *bool   `json:"advertise_floating_ip_host_routes,omitempty"`
+	AdvertiseTenantNetworks       *bool   `json:"advertise_tenant_networks,omitempty"`
 }
 
 // ToSpeakerUpdateMap build a request body from UpdateOpts
diff --git a/openstack/networking/v2/extensions/bgp/speakers/results.go b/openstack/networking/v2/extensions/bgp/speakers/results.go
index 93c967ca4..3c8b31253 100644
--- a/openstack/networking/v2/extensions/bgp/speakers/results.go
+++ b/openstack/networking/v2/extensions/bgp/speakers/results.go
@@ -19,7 +19,7 @@ func (r commonResult) Extract() (*BGPSpeaker, error) {
 }
 
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, jroot)
+	return r.ExtractIntoStructPtr(v, jroot)
 }
 
 // BGPSpeaker BGP Speaker
@@ -84,7 +84,7 @@ func ExtractBGPSpeakers(r pagination.Page) ([]BGPSpeaker, error) {
 // a list of BGPSpeaker and the later should be used to store the result that would be
 // extracted from the former.
 func ExtractBGPSpeakersInto(r pagination.Page, v any) error {
-	return r.(BGPSpeakerPage).Result.ExtractIntoSlicePtr(v, "bgp_speakers")
+	return r.(BGPSpeakerPage).ExtractIntoSlicePtr(v, "bgp_speakers")
 }
 
 // GetResult represents the result of a get operation. Call its Extract
@@ -124,7 +124,7 @@ func (r AddBGPPeerResult) Extract() (*AddBGPPeerOpts, error) {
 }
 
 func (r AddBGPPeerResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "")
+	return r.ExtractIntoStructPtr(v, "")
 }
 
 // RemoveBGPPeerResult represent the response of the PUT /v2.0/bgp-speakers/{bgp-speaker-id}/remove-bgp-peer
@@ -167,7 +167,7 @@ func ExtractAdvertisedRoutes(r pagination.Page) ([]AdvertisedRoute, error) {
 
 // ExtractAdvertisedRoutesInto extract the advertised routes from the first param into the 2nd
 func ExtractAdvertisedRoutesInto(r pagination.Page, v any) error {
-	return r.(AdvertisedRoutePage).Result.ExtractIntoSlicePtr(v, "advertised_routes")
+	return r.(AdvertisedRoutePage).ExtractIntoSlicePtr(v, "advertised_routes")
 }
 
 // AddGatewayNetworkResult represents the data that would be PUT to
diff --git a/openstack/networking/v2/extensions/bgpvpns/requests.go b/openstack/networking/v2/extensions/bgpvpns/requests.go
index 374b4daf5..9e6c02717 100644
--- a/openstack/networking/v2/extensions/bgpvpns/requests.go
+++ b/openstack/networking/v2/extensions/bgpvpns/requests.go
@@ -43,7 +43,7 @@ func List(c *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
 	url += query
 	return pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page {
 		p := BGPVPNPage{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	})
 }
@@ -169,7 +169,7 @@ func ListNetworkAssociations(c *gophercloud.ServiceClient, id string, opts ListN
 	url += query
 	return pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page {
 		p := NetworkAssociationPage{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	})
 }
@@ -258,7 +258,7 @@ func ListRouterAssociations(c *gophercloud.ServiceClient, id string, opts ListRo
 	url += query
 	return pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page {
 		p := RouterAssociationPage{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	})
 }
@@ -380,7 +380,7 @@ func ListPortAssociations(c *gophercloud.ServiceClient, id string, opts ListPort
 	url += query
 	return pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page {
 		p := PortAssociationPage{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	})
 }
diff --git a/openstack/networking/v2/extensions/bgpvpns/results.go b/openstack/networking/v2/extensions/bgpvpns/results.go
index df0587568..5aef69b98 100644
--- a/openstack/networking/v2/extensions/bgpvpns/results.go
+++ b/openstack/networking/v2/extensions/bgpvpns/results.go
@@ -23,7 +23,7 @@ func (r commonResult) Extract() (*BGPVPN, error) {
 }
 
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "bgpvpn")
+	return r.ExtractIntoStructPtr(v, "bgpvpn")
 }
 
 // BGPVPN represents an MPLS network with which Neutron routers and/or networks
@@ -115,7 +115,7 @@ func (r BGPVPNPage) LastMarker() (string, error) {
 		return invalidMarker, nil
 	}
 
-	u, err := url.Parse(r.URL.String())
+	u, err := url.Parse(r.String())
 	if err != nil {
 		return invalidMarker, err
 	}
@@ -150,7 +150,7 @@ func ExtractBGPVPNs(r pagination.Page) ([]BGPVPN, error) {
 }
 
 func ExtractBGPVPNsInto(r pagination.Page, v any) error {
-	return r.(BGPVPNPage).Result.ExtractIntoSlicePtr(v, "bgpvpns")
+	return r.(BGPVPNPage).ExtractIntoSlicePtr(v, "bgpvpns")
 }
 
 // GetResult represents the result of a get operation. Call its Extract
@@ -189,7 +189,7 @@ func (r commonNetworkAssociationResult) Extract() (*NetworkAssociation, error) {
 }
 
 func (r commonNetworkAssociationResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "network_association")
+	return r.ExtractIntoStructPtr(v, "network_association")
 }
 
 // NetworkAssociation represents a BGP VPN network association object.
@@ -233,7 +233,7 @@ func (r NetworkAssociationPage) LastMarker() (string, error) {
 		return invalidMarker, nil
 	}
 
-	u, err := url.Parse(r.URL.String())
+	u, err := url.Parse(r.String())
 	if err != nil {
 		return invalidMarker, err
 	}
@@ -264,7 +264,7 @@ func ExtractNetworkAssociations(r pagination.Page) ([]NetworkAssociation, error)
 }
 
 func ExtractNetworkAssociationsInto(r pagination.Page, v interface{}) error {
-	return r.(NetworkAssociationPage).Result.ExtractIntoSlicePtr(v, "network_associations")
+	return r.(NetworkAssociationPage).ExtractIntoSlicePtr(v, "network_associations")
 }
 
 // CreateNetworkAssociationResult represents the result of a create operation. Call its Extract
@@ -297,7 +297,7 @@ func (r commonRouterAssociationResult) Extract() (*RouterAssociation, error) {
 }
 
 func (r commonRouterAssociationResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "router_association")
+	return r.ExtractIntoStructPtr(v, "router_association")
 }
 
 // RouterAssociation represents a BGP VPN router association object.
@@ -342,7 +342,7 @@ func (r RouterAssociationPage) LastMarker() (string, error) {
 		return invalidMarker, nil
 	}
 
-	u, err := url.Parse(r.URL.String())
+	u, err := url.Parse(r.String())
 	if err != nil {
 		return invalidMarker, err
 	}
@@ -373,7 +373,7 @@ func ExtractRouterAssociations(r pagination.Page) ([]RouterAssociation, error) {
 }
 
 func ExtractRouterAssociationsInto(r pagination.Page, v interface{}) error {
-	return r.(RouterAssociationPage).Result.ExtractIntoSlicePtr(v, "router_associations")
+	return r.(RouterAssociationPage).ExtractIntoSlicePtr(v, "router_associations")
 }
 
 // CreateRouterAssociationResult represents the result of a create operation. Call its Extract
@@ -412,7 +412,7 @@ func (r commonPortAssociationResult) Extract() (*PortAssociation, error) {
 }
 
 func (r commonPortAssociationResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "port_association")
+	return r.ExtractIntoStructPtr(v, "port_association")
 }
 
 // PortAssociation represents a BGP VPN port association object.
@@ -458,7 +458,7 @@ func (r PortAssociationPage) LastMarker() (string, error) {
 		return invalidMarker, nil
 	}
 
-	u, err := url.Parse(r.URL.String())
+	u, err := url.Parse(r.String())
 	if err != nil {
 		return invalidMarker, err
 	}
@@ -489,7 +489,7 @@ func ExtractPortAssociations(r pagination.Page) ([]PortAssociation, error) {
 }
 
 func ExtractPortAssociationsInto(r pagination.Page, v interface{}) error {
-	return r.(PortAssociationPage).Result.ExtractIntoSlicePtr(v, "port_associations")
+	return r.(PortAssociationPage).ExtractIntoSlicePtr(v, "port_associations")
 }
 
 // CreatePortAssociationResult represents the result of a create operation. Call its Extract
diff --git a/openstack/networking/v2/extensions/layer3/floatingips/results.go b/openstack/networking/v2/extensions/layer3/floatingips/results.go
index 7ea616003..89fd5cf9c 100644
--- a/openstack/networking/v2/extensions/layer3/floatingips/results.go
+++ b/openstack/networking/v2/extensions/layer3/floatingips/results.go
@@ -111,7 +111,7 @@ func (r commonResult) Extract() (*FloatingIP, error) {
 }
 
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "floatingip")
+	return r.ExtractIntoStructPtr(v, "floatingip")
 }
 
 // CreateResult represents the result of a create operation. Call its Extract
@@ -180,5 +180,5 @@ func ExtractFloatingIPs(r pagination.Page) ([]FloatingIP, error) {
 }
 
 func ExtractFloatingIPsInto(r pagination.Page, v any) error {
-	return r.(FloatingIPPage).Result.ExtractIntoSlicePtr(v, "floatingips")
+	return r.(FloatingIPPage).ExtractIntoSlicePtr(v, "floatingips")
 }
diff --git a/openstack/networking/v2/extensions/layer3/portforwarding/results.go b/openstack/networking/v2/extensions/layer3/portforwarding/results.go
index 89e71efd0..c2ed86023 100644
--- a/openstack/networking/v2/extensions/layer3/portforwarding/results.go
+++ b/openstack/networking/v2/extensions/layer3/portforwarding/results.go
@@ -67,7 +67,7 @@ func (r commonResult) Extract() (*PortForwarding, error) {
 }
 
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "port_forwarding")
+	return r.ExtractIntoStructPtr(v, "port_forwarding")
 }
 
 // PortForwardingPage is the page returned by a pager when traversing over a
diff --git a/openstack/networking/v2/extensions/layer3/routers/results.go b/openstack/networking/v2/extensions/layer3/routers/results.go
index 14845524c..2c7eb4788 100644
--- a/openstack/networking/v2/extensions/layer3/routers/results.go
+++ b/openstack/networking/v2/extensions/layer3/routers/results.go
@@ -129,7 +129,7 @@ func ExtractRouters(r pagination.Page) ([]Router, error) {
 
 // ExtractRoutersInto extracts the elements into a slice of Router structs.
 func ExtractRoutersInto(r pagination.Page, v any) error {
-	return r.(RouterPage).Result.ExtractIntoSlicePtr(v, "routers")
+	return r.(RouterPage).ExtractIntoSlicePtr(v, "routers")
 }
 
 type commonResult struct {
diff --git a/openstack/networking/v2/extensions/qos/policies/results.go b/openstack/networking/v2/extensions/qos/policies/results.go
index c35853bac..6a8a92a46 100644
--- a/openstack/networking/v2/extensions/qos/policies/results.go
+++ b/openstack/networking/v2/extensions/qos/policies/results.go
@@ -127,5 +127,5 @@ func ExtractPolicies(r pagination.Page) ([]Policy, error) {
 
 // ExtractPoliciesInto extracts the elements into a slice of RBAC Policy structs.
 func ExtractPolicysInto(r pagination.Page, v any) error {
-	return r.(PolicyPage).Result.ExtractIntoSlicePtr(v, "policies")
+	return r.(PolicyPage).ExtractIntoSlicePtr(v, "policies")
 }
diff --git a/openstack/networking/v2/extensions/qos/rules/results.go b/openstack/networking/v2/extensions/qos/rules/results.go
index cb2ee2488..241e8f800 100644
--- a/openstack/networking/v2/extensions/qos/rules/results.go
+++ b/openstack/networking/v2/extensions/qos/rules/results.go
@@ -88,7 +88,7 @@ func ExtractBandwidthLimitRules(r pagination.Page) ([]BandwidthLimitRule, error)
 
 // ExtractBandwidthLimitRulesInto extracts the elements into a slice of RBAC Policy structs.
 func ExtractBandwidthLimitRulesInto(r pagination.Page, v any) error {
-	return r.(BandwidthLimitRulePage).Result.ExtractIntoSlicePtr(v, "bandwidth_limit_rules")
+	return r.(BandwidthLimitRulePage).ExtractIntoSlicePtr(v, "bandwidth_limit_rules")
 }
 
 // Extract is a function that accepts a result and extracts a DSCPMarkingRule.
@@ -164,7 +164,7 @@ func ExtractDSCPMarkingRules(r pagination.Page) ([]DSCPMarkingRule, error) {
 
 // ExtractDSCPMarkingRulesInto extracts the elements into a slice of RBAC Policy structs.
 func ExtractDSCPMarkingRulesInto(r pagination.Page, v any) error {
-	return r.(DSCPMarkingRulePage).Result.ExtractIntoSlicePtr(v, "dscp_marking_rules")
+	return r.(DSCPMarkingRulePage).ExtractIntoSlicePtr(v, "dscp_marking_rules")
 }
 
 // Extract is a function that accepts a result and extracts a BandwidthLimitRule.
@@ -243,5 +243,5 @@ func ExtractMinimumBandwidthRules(r pagination.Page) ([]MinimumBandwidthRule, er
 
 // ExtractMinimumBandwidthRulesInto extracts the elements into a slice of RBAC Policy structs.
 func ExtractMinimumBandwidthRulesInto(r pagination.Page, v any) error {
-	return r.(MinimumBandwidthRulePage).Result.ExtractIntoSlicePtr(v, "minimum_bandwidth_rules")
+	return r.(MinimumBandwidthRulePage).ExtractIntoSlicePtr(v, "minimum_bandwidth_rules")
 }
diff --git a/openstack/networking/v2/extensions/quotas/results.go b/openstack/networking/v2/extensions/quotas/results.go
index 8b1ae8a95..249d11517 100644
--- a/openstack/networking/v2/extensions/quotas/results.go
+++ b/openstack/networking/v2/extensions/quotas/results.go
@@ -166,7 +166,7 @@ func (q *QuotaDetail) UnmarshalJSON(b []byte) error {
 			return err
 		}
 	default:
-		return fmt.Errorf("reserved has unexpected type: %T", t)
+		return fmt.Errorf("Reserved has unexpected type: %T", t) //nolint:staticcheck
 	}
 
 	return nil
diff --git a/openstack/networking/v2/extensions/rbacpolicies/results.go b/openstack/networking/v2/extensions/rbacpolicies/results.go
index abbd044b9..9550b8d15 100644
--- a/openstack/networking/v2/extensions/rbacpolicies/results.go
+++ b/openstack/networking/v2/extensions/rbacpolicies/results.go
@@ -17,7 +17,7 @@ func (r commonResult) Extract() (*RBACPolicy, error) {
 }
 
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "rbac_policy")
+	return r.ExtractIntoStructPtr(v, "rbac_policy")
 }
 
 // CreateResult represents the result of a create operation. Call its Extract
@@ -101,5 +101,5 @@ func ExtractRBACPolicies(r pagination.Page) ([]RBACPolicy, error) {
 
 // ExtractRBACPolicesInto extracts the elements into a slice of RBAC Policy structs.
 func ExtractRBACPolicesInto(r pagination.Page, v any) error {
-	return r.(RBACPolicyPage).Result.ExtractIntoSlicePtr(v, "rbac_policies")
+	return r.(RBACPolicyPage).ExtractIntoSlicePtr(v, "rbac_policies")
 }
diff --git a/openstack/networking/v2/extensions/security/groups/requests.go b/openstack/networking/v2/extensions/security/groups/requests.go
index 78527d87c..f6d8a7570 100644
--- a/openstack/networking/v2/extensions/security/groups/requests.go
+++ b/openstack/networking/v2/extensions/security/groups/requests.go
@@ -114,7 +114,7 @@ type UpdateOptsBuilder interface {
 // group.
 type UpdateOpts struct {
 	// Human-readable name for the Security Group. Does not have to be unique.
-	Name string `json:"name,omitempty"`
+	Name *string `json:"name,omitempty"`
 
 	// Describes the security group.
 	Description *string `json:"description,omitempty"`
diff --git a/openstack/networking/v2/networks/results.go b/openstack/networking/v2/networks/results.go
index 53927bf0c..d4b97c1a2 100644
--- a/openstack/networking/v2/networks/results.go
+++ b/openstack/networking/v2/networks/results.go
@@ -20,7 +20,7 @@ func (r commonResult) Extract() (*Network, error) {
 }
 
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "network")
+	return r.ExtractIntoStructPtr(v, "network")
 }
 
 // CreateResult represents the result of a create operation. Call its Extract
@@ -173,5 +173,5 @@ func ExtractNetworks(r pagination.Page) ([]Network, error) {
 }
 
 func ExtractNetworksInto(r pagination.Page, v any) error {
-	return r.(NetworkPage).Result.ExtractIntoSlicePtr(v, "networks")
+	return r.(NetworkPage).ExtractIntoSlicePtr(v, "networks")
 }
diff --git a/openstack/networking/v2/ports/results.go b/openstack/networking/v2/ports/results.go
index 74a0fa3b4..a6836c2a8 100644
--- a/openstack/networking/v2/ports/results.go
+++ b/openstack/networking/v2/ports/results.go
@@ -20,7 +20,7 @@ func (r commonResult) Extract() (*Port, error) {
 }
 
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "port")
+	return r.ExtractIntoStructPtr(v, "port")
 }
 
 // CreateResult represents the result of a create operation. Call its Extract
@@ -202,5 +202,5 @@ func ExtractPorts(r pagination.Page) ([]Port, error) {
 }
 
 func ExtractPortsInto(r pagination.Page, v any) error {
-	return r.(PortPage).Result.ExtractIntoSlicePtr(v, "ports")
+	return r.(PortPage).ExtractIntoSlicePtr(v, "ports")
 }
diff --git a/openstack/objectstorage/v1/containers/requests.go b/openstack/objectstorage/v1/containers/requests.go
index f4714d6ff..2d00b659c 100644
--- a/openstack/objectstorage/v1/containers/requests.go
+++ b/openstack/objectstorage/v1/containers/requests.go
@@ -54,7 +54,7 @@ func List(c *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
 
 	pager := pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page {
 		p := ContainerPage{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	})
 	pager.Headers = headers
diff --git a/openstack/objectstorage/v1/containers/results.go b/openstack/objectstorage/v1/containers/results.go
index fddfa26bf..ddbdfca62 100644
--- a/openstack/objectstorage/v1/containers/results.go
+++ b/openstack/objectstorage/v1/containers/results.go
@@ -89,7 +89,7 @@ func ExtractNames(page pagination.Page) ([]string, error) {
 
 		return names, nil
 	default:
-		return nil, fmt.Errorf("Cannot extract names from response with content-type: [%s]", ct)
+		return nil, fmt.Errorf("cannot extract names from response with content-type: [%s]", ct)
 	}
 }
 
diff --git a/openstack/objectstorage/v1/objects/requests.go b/openstack/objectstorage/v1/objects/requests.go
index abc56f477..464f94eeb 100644
--- a/openstack/objectstorage/v1/objects/requests.go
+++ b/openstack/objectstorage/v1/objects/requests.go
@@ -91,7 +91,7 @@ func List(c *gophercloud.ServiceClient, containerName string, opts ListOptsBuild
 
 	pager := pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page {
 		p := ObjectPage{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	})
 	pager.Headers = headers
diff --git a/openstack/objectstorage/v1/objects/results.go b/openstack/objectstorage/v1/objects/results.go
index e98c54296..387516994 100644
--- a/openstack/objectstorage/v1/objects/results.go
+++ b/openstack/objectstorage/v1/objects/results.go
@@ -133,7 +133,7 @@ func ExtractNames(r pagination.Page) ([]string, error) {
 	case strings.HasPrefix(ct, "text/html"):
 		return []string{}, nil
 	default:
-		return nil, fmt.Errorf("Cannot extract names from response with content-type: [%s]", ct)
+		return nil, fmt.Errorf("cannot extract names from response with content-type: [%s]", ct)
 	}
 }
 
@@ -496,7 +496,7 @@ func extractLastMarker(r pagination.Page) (string, error) {
 	casted := r.(ObjectPage)
 
 	// If a delimiter was requested, check if a subdir exists.
-	queryParams, err := url.ParseQuery(casted.URL.RawQuery)
+	queryParams, err := url.ParseQuery(casted.RawQuery)
 	if err != nil {
 		return "", err
 	}
@@ -542,6 +542,6 @@ func extractLastMarker(r pagination.Page) (string, error) {
 	case strings.HasPrefix(ct, "text/html"):
 		return "", nil
 	default:
-		return "", fmt.Errorf("Cannot extract names from response with content-type: [%s]", ct)
+		return "", fmt.Errorf("cannot extract names from response with content-type: [%s]", ct)
 	}
 }
diff --git a/openstack/orchestration/v1/stackevents/requests.go b/openstack/orchestration/v1/stackevents/requests.go
index 71836e054..7166387ec 100644
--- a/openstack/orchestration/v1/stackevents/requests.go
+++ b/openstack/orchestration/v1/stackevents/requests.go
@@ -116,7 +116,7 @@ func List(client *gophercloud.ServiceClient, stackName, stackID string, opts Lis
 	}
 	return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
 		p := EventPage{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	})
 }
@@ -173,7 +173,7 @@ func ListResourceEvents(client *gophercloud.ServiceClient, stackName, stackID, r
 	}
 	return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
 		p := EventPage{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	})
 }
diff --git a/openstack/orchestration/v1/stacks/template.go b/openstack/orchestration/v1/stacks/template.go
index 75eb6a97c..af49c612a 100644
--- a/openstack/orchestration/v1/stacks/template.go
+++ b/openstack/orchestration/v1/stacks/template.go
@@ -202,7 +202,7 @@ func ignoreIfTemplate(key string, value any) bool {
 		return true
 	}
 	// `.template` and `.yaml` are allowed suffixes for template URLs when referred to by `type`
-	if key == "type" && !(strings.HasSuffix(valueString, ".template") || strings.HasSuffix(valueString, ".yaml")) {
+	if key == "type" && !strings.HasSuffix(valueString, ".template") && !strings.HasSuffix(valueString, ".yaml") {
 		return true
 	}
 	return false
diff --git a/openstack/orchestration/v1/stacks/utils.go b/openstack/orchestration/v1/stacks/utils.go
index 56bc48d04..228335388 100644
--- a/openstack/orchestration/v1/stacks/utils.go
+++ b/openstack/orchestration/v1/stacks/utils.go
@@ -80,7 +80,7 @@ func (t *TE) Fetch() error {
 	if err != nil {
 		return err
 	}
-	if !(resp.StatusCode >= 200 && resp.StatusCode < 300) {
+	if resp.StatusCode < 200 || resp.StatusCode >= 300 {
 		return fmt.Errorf("error fetching %s: %s", t.URL, resp.Status)
 	}
 	t.Bin = body
diff --git a/openstack/sharedfilesystems/v2/errors/errors.go b/openstack/sharedfilesystems/v2/errors/errors.go
index f01d6bd58..34324b08b 100644
--- a/openstack/sharedfilesystems/v2/errors/errors.go
+++ b/openstack/sharedfilesystems/v2/errors/errors.go
@@ -21,6 +21,6 @@ func ExtractErrorInto(rawError error, errorDetails *ErrorDetails) (err error) {
 	if errors.As(rawError, &codeError) {
 		return json.Unmarshal(codeError.Body, errorDetails)
 	} else {
-		return errors.New("Unable to extract detailed error message")
+		return errors.New("unable to extract detailed error message")
 	}
 }
diff --git a/openstack/sharedfilesystems/v2/replicas/requests.go b/openstack/sharedfilesystems/v2/replicas/requests.go
index 415e67b37..6e29fd783 100644
--- a/openstack/sharedfilesystems/v2/replicas/requests.go
+++ b/openstack/sharedfilesystems/v2/replicas/requests.go
@@ -90,7 +90,7 @@ func List(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pa
 
 	return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
 		p := ReplicaPage{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	})
 }
@@ -108,7 +108,7 @@ func ListDetail(client *gophercloud.ServiceClient, opts ListOptsBuilder) paginat
 
 	return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
 		p := ReplicaPage{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	})
 }
diff --git a/openstack/sharedfilesystems/v2/replicas/results.go b/openstack/sharedfilesystems/v2/replicas/results.go
index 7b7511774..8de27928f 100644
--- a/openstack/sharedfilesystems/v2/replicas/results.go
+++ b/openstack/sharedfilesystems/v2/replicas/results.go
@@ -109,7 +109,7 @@ func (r ReplicaPage) LastMarker() (string, error) {
 		return invalidMarker, nil
 	}
 
-	u, err := url.Parse(r.URL.String())
+	u, err := url.Parse(r.String())
 	if err != nil {
 		return invalidMarker, err
 	}
@@ -160,7 +160,7 @@ func ExtractReplicas(r pagination.Page) ([]Replica, error) {
 // ExtractReplicasInto similar to ExtractReplicas but operates on a `list` of
 // replicas.
 func ExtractReplicasInto(r pagination.Page, v any) error {
-	return r.(ReplicaPage).Result.ExtractIntoSlicePtr(v, "share_replicas")
+	return r.(ReplicaPage).ExtractIntoSlicePtr(v, "share_replicas")
 }
 
 // DeleteResult contains the response body and error from a Delete request.
diff --git a/openstack/sharedfilesystems/v2/sharenetworks/requests.go b/openstack/sharedfilesystems/v2/sharenetworks/requests.go
index 6df73b5ee..c340e3ed4 100644
--- a/openstack/sharedfilesystems/v2/sharenetworks/requests.go
+++ b/openstack/sharedfilesystems/v2/sharenetworks/requests.go
@@ -116,7 +116,7 @@ func ListDetail(client *gophercloud.ServiceClient, opts ListOptsBuilder) paginat
 
 	return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
 		p := ShareNetworkPage{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	})
 }
diff --git a/openstack/sharedfilesystems/v2/sharenetworks/results.go b/openstack/sharedfilesystems/v2/sharenetworks/results.go
index 5d3537c00..6ffbae151 100644
--- a/openstack/sharedfilesystems/v2/sharenetworks/results.go
+++ b/openstack/sharedfilesystems/v2/sharenetworks/results.go
@@ -94,7 +94,7 @@ func (r ShareNetworkPage) LastMarker() (string, error) {
 		return maxInt, nil
 	}
 
-	u, err := url.Parse(r.URL.String())
+	u, err := url.Parse(r.String())
 	if err != nil {
 		return maxInt, err
 	}
diff --git a/openstack/sharedfilesystems/v2/shares/requests.go b/openstack/sharedfilesystems/v2/shares/requests.go
index 5d680a642..4cf762133 100644
--- a/openstack/sharedfilesystems/v2/shares/requests.go
+++ b/openstack/sharedfilesystems/v2/shares/requests.go
@@ -181,7 +181,7 @@ func ListDetail(client *gophercloud.ServiceClient, opts ListOptsBuilder) paginat
 
 	return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
 		p := SharePage{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	})
 }
diff --git a/openstack/sharedfilesystems/v2/shares/results.go b/openstack/sharedfilesystems/v2/shares/results.go
index 7c1b62132..650b9c326 100644
--- a/openstack/sharedfilesystems/v2/shares/results.go
+++ b/openstack/sharedfilesystems/v2/shares/results.go
@@ -148,7 +148,7 @@ func (r SharePage) LastMarker() (string, error) {
 		return invalidMarker, nil
 	}
 
-	u, err := url.Parse(r.URL.String())
+	u, err := url.Parse(r.String())
 	if err != nil {
 		return invalidMarker, err
 	}
diff --git a/openstack/sharedfilesystems/v2/sharetransfers/requests.go b/openstack/sharedfilesystems/v2/sharetransfers/requests.go
index 88b1950eb..dd06d01f3 100644
--- a/openstack/sharedfilesystems/v2/sharetransfers/requests.go
+++ b/openstack/sharedfilesystems/v2/sharetransfers/requests.go
@@ -144,7 +144,7 @@ func List(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pa
 
 	return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
 		p := TransferPage{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	})
 }
@@ -163,7 +163,7 @@ func ListDetail(client *gophercloud.ServiceClient, opts ListOptsBuilder) paginat
 
 	return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
 		p := TransferPage{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	})
 }
diff --git a/openstack/sharedfilesystems/v2/sharetransfers/results.go b/openstack/sharedfilesystems/v2/sharetransfers/results.go
index 264951383..faa65b190 100644
--- a/openstack/sharedfilesystems/v2/sharetransfers/results.go
+++ b/openstack/sharedfilesystems/v2/sharetransfers/results.go
@@ -62,7 +62,7 @@ func (r commonResult) Extract() (*Transfer, error) {
 
 // ExtractInto converts our response data into a transfer struct.
 func (r commonResult) ExtractInto(v any) error {
-	return r.Result.ExtractIntoStructPtr(v, "transfer")
+	return r.ExtractIntoStructPtr(v, "transfer")
 }
 
 // CreateResult contains the response body and error from a Create request.
@@ -94,7 +94,7 @@ func ExtractTransfers(r pagination.Page) ([]Transfer, error) {
 
 // ExtractTransfersInto similar to ExtractInto but operates on a `list` of transfers
 func ExtractTransfersInto(r pagination.Page, v any) error {
-	return r.(TransferPage).Result.ExtractIntoSlicePtr(v, "transfers")
+	return r.(TransferPage).ExtractIntoSlicePtr(v, "transfers")
 }
 
 // TransferPage is a pagination.pager that is returned from a call to the List function.
@@ -129,7 +129,7 @@ func (r TransferPage) LastMarker() (string, error) {
 		return invalidMarker, nil
 	}
 
-	u, err := url.Parse(r.URL.String())
+	u, err := url.Parse(r.String())
 	if err != nil {
 		return invalidMarker, err
 	}
diff --git a/openstack/sharedfilesystems/v2/snapshots/requests.go b/openstack/sharedfilesystems/v2/snapshots/requests.go
index db043f113..7b61dc426 100644
--- a/openstack/sharedfilesystems/v2/snapshots/requests.go
+++ b/openstack/sharedfilesystems/v2/snapshots/requests.go
@@ -110,7 +110,7 @@ func ListDetail(client *gophercloud.ServiceClient, opts ListOptsBuilder) paginat
 
 	return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
 		p := SnapshotPage{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	})
 }
diff --git a/openstack/sharedfilesystems/v2/snapshots/results.go b/openstack/sharedfilesystems/v2/snapshots/results.go
index 9cd1b6523..e780c8f73 100644
--- a/openstack/sharedfilesystems/v2/snapshots/results.go
+++ b/openstack/sharedfilesystems/v2/snapshots/results.go
@@ -107,7 +107,7 @@ func (r SnapshotPage) LastMarker() (string, error) {
 		return invalidMarker, nil
 	}
 
-	u, err := url.Parse(r.URL.String())
+	u, err := url.Parse(r.String())
 	if err != nil {
 		return invalidMarker, err
 	}
diff --git a/openstack/utils/choose_version.go b/openstack/utils/choose_version.go
index ccc56345a..b9298ad84 100644
--- a/openstack/utils/choose_version.go
+++ b/openstack/utils/choose_version.go
@@ -89,7 +89,7 @@ func ChooseVersion(ctx context.Context, client *gophercloud.ProviderClient, reco
 				// Prefer a version that exactly matches the provided endpoint.
 				if href == identityEndpoint {
 					if href == "" {
-						return nil, "", fmt.Errorf("Endpoint missing in version %s response from %s", value.ID, client.IdentityBase)
+						return nil, "", fmt.Errorf("endpoint missing in version %s response from %s", value.ID, client.IdentityBase)
 					}
 					return version, href, nil
 				}
@@ -106,10 +106,10 @@ func ChooseVersion(ctx context.Context, client *gophercloud.ProviderClient, reco
 	}
 
 	if highest == nil {
-		return nil, "", fmt.Errorf("No supported version available from endpoint %s", client.IdentityBase)
+		return nil, "", fmt.Errorf("no supported version available from endpoint %s", client.IdentityBase)
 	}
 	if endpoint == "" {
-		return nil, "", fmt.Errorf("Endpoint missing in version %s response from %s", highest.ID, client.IdentityBase)
+		return nil, "", fmt.Errorf("endpoint missing in version %s response from %s", highest.ID, client.IdentityBase)
 	}
 
 	return highest, endpoint, nil
diff --git a/pagination/pager.go b/pagination/pager.go
index 358101256..2eed649f7 100644
--- a/pagination/pager.go
+++ b/pagination/pager.go
@@ -13,7 +13,7 @@ import (
 
 var (
 	// ErrPageNotAvailable is returned from a Pager when a next or previous page is requested, but does not exist.
-	ErrPageNotAvailable = errors.New("The requested page does not exist.")
+	ErrPageNotAvailable = errors.New("the requested page does not exist")
 )
 
 // Page must be satisfied by the result type of any resource collection.
diff --git a/params.go b/params.go
index 4a2ed6c94..e28203368 100644
--- a/params.go
+++ b/params.go
@@ -109,7 +109,7 @@ func BuildRequestBody(opts any, parent string) (map[string]any, error) {
 					}
 					xorFieldIsZero = isZero(xorField)
 				}
-				if !(zero != xorFieldIsZero) {
+				if zero == xorFieldIsZero {
 					err := ErrMissingInput{}
 					err.Argument = fmt.Sprintf("%s/%s", f.Name, xorTag)
 					err.Info = fmt.Sprintf("Exactly one of %s and %s must be provided", f.Name, xorTag)
@@ -219,12 +219,12 @@ func BuildRequestBody(opts any, parent string) (map[string]any, error) {
 			optsMaps[i] = b
 		}
 		if parent == "" {
-			return nil, fmt.Errorf("Parent is required when passing an array or a slice.")
+			return nil, fmt.Errorf("parent is required when passing an array or a slice")
 		}
 		return map[string]any{parent: optsMaps}, nil
 	}
 	// Return an error if we can't work with the underlying type of 'opts'
-	return nil, fmt.Errorf("Options type is not a struct, a slice, or an array.")
+	return nil, fmt.Errorf("options type is not a struct, a slice, or an array")
 }
 
 // EnabledState is a convenience type, mostly used in Create and Update
@@ -429,7 +429,7 @@ func BuildQueryString(opts any) (*url.URL, error) {
 				} else {
 					// if the field has a 'required' tag, it can't have a zero-value
 					if requiredTag := f.Tag.Get("required"); requiredTag == "true" {
-						return &url.URL{}, fmt.Errorf("Required query parameter [%s] not set.", f.Name)
+						return &url.URL{}, fmt.Errorf("required query parameter [%s] not set", f.Name)
 					}
 				}
 			}
@@ -438,7 +438,7 @@ func BuildQueryString(opts any) (*url.URL, error) {
 		return &url.URL{RawQuery: params.Encode()}, nil
 	}
 	// Return an error if the underlying type of 'opts' isn't a struct.
-	return nil, fmt.Errorf("Options type is not a struct.")
+	return nil, fmt.Errorf("options type is not a struct")
 }
 
 /*
@@ -509,7 +509,7 @@ func BuildHeaders(opts any) (map[string]string, error) {
 				} else {
 					// if the field has a 'required' tag, it can't have a zero-value
 					if requiredTag := f.Tag.Get("required"); requiredTag == "true" {
-						return optsMap, fmt.Errorf("Required header [%s] not set.", f.Name)
+						return optsMap, fmt.Errorf("required header [%s] not set", f.Name)
 					}
 				}
 			}
@@ -518,7 +518,7 @@ func BuildHeaders(opts any) (map[string]string, error) {
 		return optsMap, nil
 	}
 	// Return an error if the underlying type of 'opts' isn't a struct.
-	return optsMap, fmt.Errorf("Options type is not a struct.")
+	return optsMap, fmt.Errorf("options type is not a struct")
 }
 
 // IDSliceToQueryString takes a slice of elements and converts them into a query
diff --git a/results.go b/results.go
index b12c15a02..d5b947b7f 100644
--- a/results.go
+++ b/results.go
@@ -185,23 +185,23 @@ func (r Result) ExtractIntoStructPtr(to any, label string) error {
 	}
 
 	if to == nil {
-		return fmt.Errorf("Expected pointer, got %T", to)
+		return fmt.Errorf("expected pointer, got %T", to)
 	}
 
 	t := reflect.TypeOf(to)
 	if k := t.Kind(); k != reflect.Ptr {
-		return fmt.Errorf("Expected pointer, got %v", k)
+		return fmt.Errorf("expected pointer, got %v", k)
 	}
 
 	if reflect.ValueOf(to).IsNil() {
-		return fmt.Errorf("Expected pointer, got %T", to)
+		return fmt.Errorf("expected pointer, got %T", to)
 	}
 
 	switch t.Elem().Kind() {
 	case reflect.Struct:
 		return r.extractIntoPtr(to, label)
 	default:
-		return fmt.Errorf("Expected pointer to struct, got: %v", t)
+		return fmt.Errorf("expected pointer to struct, got: %v", t)
 	}
 }
 
@@ -220,23 +220,23 @@ func (r Result) ExtractIntoSlicePtr(to any, label string) error {
 	}
 
 	if to == nil {
-		return fmt.Errorf("Expected pointer, got %T", to)
+		return fmt.Errorf("expected pointer, got %T", to)
 	}
 
 	t := reflect.TypeOf(to)
 	if k := t.Kind(); k != reflect.Ptr {
-		return fmt.Errorf("Expected pointer, got %v", k)
+		return fmt.Errorf("expected pointer, got %v", k)
 	}
 
 	if reflect.ValueOf(to).IsNil() {
-		return fmt.Errorf("Expected pointer, got %T", to)
+		return fmt.Errorf("expected pointer, got %T", to)
 	}
 
 	switch t.Elem().Kind() {
 	case reflect.Slice:
 		return r.extractIntoPtr(to, label)
 	default:
-		return fmt.Errorf("Expected pointer to slice, got: %v", t)
+		return fmt.Errorf("expected pointer to slice, got: %v", t)
 	}
 }
 



Test patch:
diff --git a/internal/acceptance/openstack/compute/v2/aggregates_test.go b/internal/acceptance/openstack/compute/v2/aggregates_test.go
index 4b20b3ff2..bd376c295 100644
--- a/internal/acceptance/openstack/compute/v2/aggregates_test.go
+++ b/internal/acceptance/openstack/compute/v2/aggregates_test.go
@@ -147,5 +147,5 @@ func getHypervisor(t *testing.T, client *gophercloud.ServiceClient) (string, err
 		return host, nil
 	}
 
-	return "", fmt.Errorf("Unable to get hypervisor")
+	return "", fmt.Errorf("unable to get hypervisor")
 }
diff --git a/internal/acceptance/openstack/compute/v2/hypervisors_test.go b/internal/acceptance/openstack/compute/v2/hypervisors_test.go
index dae1bbcdb..861fa7e02 100644
--- a/internal/acceptance/openstack/compute/v2/hypervisors_test.go
+++ b/internal/acceptance/openstack/compute/v2/hypervisors_test.go
@@ -121,5 +121,5 @@ func getHypervisorID(t *testing.T, client *gophercloud.ServiceClient) (string, e
 		return allHypervisors[0].ID, nil
 	}
 
-	return "", fmt.Errorf("Unable to get hypervisor ID")
+	return "", fmt.Errorf("unable to get hypervisor ID")
 }
diff --git a/internal/acceptance/openstack/compute/v2/quotaset_test.go b/internal/acceptance/openstack/compute/v2/quotaset_test.go
index 53d94b538..d2da0c419 100644
--- a/internal/acceptance/openstack/compute/v2/quotaset_test.go
+++ b/internal/acceptance/openstack/compute/v2/quotaset_test.go
@@ -45,7 +45,7 @@ func getProjectID(t *testing.T, client *gophercloud.ServiceClient) (string, erro
 		return project.ID, nil
 	}
 
-	return "", fmt.Errorf("Unable to get project ID")
+	return "", fmt.Errorf("unable to get project ID")
 }
 
 func getProjectIDByName(t *testing.T, client *gophercloud.ServiceClient, name string) (string, error) {
@@ -61,7 +61,7 @@ func getProjectIDByName(t *testing.T, client *gophercloud.ServiceClient, name st
 		}
 	}
 
-	return "", fmt.Errorf("Unable to get project ID")
+	return "", fmt.Errorf("unable to get project ID")
 }
 
 // What will be sent as desired Quotas to the Server
diff --git a/internal/acceptance/openstack/dns/v2/quotas_test.go b/internal/acceptance/openstack/dns/v2/quotas_test.go
new file mode 100644
index 000000000..673d9c976
--- /dev/null
+++ b/internal/acceptance/openstack/dns/v2/quotas_test.go
@@ -0,0 +1,52 @@
+//go:build acceptance || dns || quotas
+
+package v2
+
+import (
+	"context"
+	"testing"
+
+	"github.com/gophercloud/gophercloud/v2/internal/acceptance/clients"
+	identity "github.com/gophercloud/gophercloud/v2/internal/acceptance/openstack/identity/v3"
+	"github.com/gophercloud/gophercloud/v2/internal/acceptance/tools"
+	"github.com/gophercloud/gophercloud/v2/openstack/dns/v2/quotas"
+	th "github.com/gophercloud/gophercloud/v2/testhelper"
+)
+
+func TestQuotaGetUpdate(t *testing.T) {
+	clients.RequireAdmin(t)
+
+	client, err := clients.NewDNSV2Client()
+	th.AssertNoErr(t, err)
+
+	identityClient, err := clients.NewIdentityV3Client()
+	th.AssertNoErr(t, err)
+
+	project, err := identity.CreateProject(t, identityClient, nil)
+	th.AssertNoErr(t, err)
+	defer identity.DeleteProject(t, identityClient, project.ID)
+
+	// use DNS specific header to set the project ID
+	client.MoreHeaders = map[string]string{
+		"X-Auth-Sudo-Tenant-ID": project.ID,
+	}
+
+	// test Get Quota
+	quota, err := quotas.Get(context.TODO(), client, project.ID).Extract()
+	th.AssertNoErr(t, err)
+
+	tools.PrintResource(t, quota)
+
+	// test Update Quota
+	zones := 9
+	updateOpts := quotas.UpdateOpts{
+		Zones: &zones,
+	}
+	res, err := quotas.Update(context.TODO(), client, project.ID, updateOpts).Extract()
+	th.AssertNoErr(t, err)
+
+	tools.PrintResource(t, res)
+
+	quota.Zones = zones
+	th.AssertDeepEquals(t, *quota, *res)
+}
diff --git a/internal/acceptance/openstack/identity/v3/domains_test.go b/internal/acceptance/openstack/identity/v3/domains_test.go
index 3d1208ae9..28cbea7f7 100644
--- a/internal/acceptance/openstack/identity/v3/domains_test.go
+++ b/internal/acceptance/openstack/identity/v3/domains_test.go
@@ -35,7 +35,7 @@ func TestDomainsList(t *testing.T) {
 	client, err := clients.NewIdentityV3Client()
 	th.AssertNoErr(t, err)
 
-	var iTrue bool = true
+	var iTrue = true
 	listOpts := domains.ListOpts{
 		Enabled: &iTrue,
 	}
@@ -78,7 +78,7 @@ func TestDomainsCRUD(t *testing.T) {
 	client, err := clients.NewIdentityV3Client()
 	th.AssertNoErr(t, err)
 
-	var iTrue bool = true
+	var iTrue = true
 	var description = "Testing Domain"
 	createOpts := domains.CreateOpts{
 		Description: description,
@@ -93,7 +93,7 @@ func TestDomainsCRUD(t *testing.T) {
 
 	th.AssertEquals(t, domain.Description, description)
 
-	var iFalse bool = false
+	var iFalse = false
 	description = ""
 	updateOpts := domains.UpdateOpts{
 		Description: &description,
diff --git a/internal/acceptance/openstack/identity/v3/oauth1_test.go b/internal/acceptance/openstack/identity/v3/oauth1_test.go
index 125fdd058..2e5b9b25f 100644
--- a/internal/acceptance/openstack/identity/v3/oauth1_test.go
+++ b/internal/acceptance/openstack/identity/v3/oauth1_test.go
@@ -215,7 +215,7 @@ func oauth1MethodTest(t *testing.T, client *gophercloud.ServiceClient, consumer
 		tokens.Token
 		oauth1.TokenExt
 	}
-	tokenRes := tokens.Get(context.TODO(), newClient, newClient.ProviderClient.TokenID)
+	tokenRes := tokens.Get(context.TODO(), newClient, newClient.TokenID)
 	err = tokenRes.ExtractInto(&token)
 	th.AssertNoErr(t, err)
 	oauth1Roles, err := tokenRes.ExtractRoles()
diff --git a/internal/acceptance/openstack/identity/v3/projects_test.go b/internal/acceptance/openstack/identity/v3/projects_test.go
index 528a30b2a..12bac084f 100644
--- a/internal/acceptance/openstack/identity/v3/projects_test.go
+++ b/internal/acceptance/openstack/identity/v3/projects_test.go
@@ -35,7 +35,7 @@ func TestProjectsList(t *testing.T) {
 	client, err := clients.NewIdentityV3Client()
 	th.AssertNoErr(t, err)
 
-	var iTrue bool = true
+	var iTrue = true
 	listOpts := projects.ListOpts{
 		Enabled: &iTrue,
 	}
diff --git a/internal/acceptance/openstack/identity/v3/users_test.go b/internal/acceptance/openstack/identity/v3/users_test.go
index 9b2e63bfd..31b04b751 100644
--- a/internal/acceptance/openstack/identity/v3/users_test.go
+++ b/internal/acceptance/openstack/identity/v3/users_test.go
@@ -20,7 +20,7 @@ func TestUsersList(t *testing.T) {
 	client, err := clients.NewIdentityV3Client()
 	th.AssertNoErr(t, err)
 
-	var iTrue bool = true
+	var iTrue = true
 	listOpts := users.ListOpts{
 		Enabled: &iTrue,
 	}
diff --git a/internal/acceptance/openstack/networking/v2/extensions/agents/agents_test.go b/internal/acceptance/openstack/networking/v2/extensions/agents/agents_test.go
index fd1cf3f54..ff6bc9b01 100644
--- a/internal/acceptance/openstack/networking/v2/extensions/agents/agents_test.go
+++ b/internal/acceptance/openstack/networking/v2/extensions/agents/agents_test.go
@@ -165,7 +165,7 @@ func TestBGPAgentCRUD(t *testing.T) {
 			agentConf := bgpAgent.Configurations
 			numOfSpeakers := int(agentConf["bgp_speakers"].(float64))
 			t.Logf("Agent %s has %d speaker(s)", agentID, numOfSpeakers)
-			return 1 == numOfSpeakers, nil
+			return numOfSpeakers == 1, nil
 		}, timeout)
 	th.AssertNoErr(t, err)
 
@@ -201,7 +201,7 @@ func TestBGPAgentCRUD(t *testing.T) {
 			agentConf := bgpAgent.Configurations
 			numOfSpeakers := int(agentConf["bgp_speakers"].(float64))
 			t.Logf("Agent %s has %d speaker(s)", bgpAgent.ID, numOfSpeakers)
-			return 0 == numOfSpeakers, nil
+			return numOfSpeakers == 0, nil
 		}, timeout)
 	th.AssertNoErr(t, err)
 }
diff --git a/internal/acceptance/openstack/networking/v2/extensions/bgp/peers/bgppeers_test.go b/internal/acceptance/openstack/networking/v2/extensions/bgp/peers/bgppeers_test.go
index baad9a8a5..66bf7230b 100644
--- a/internal/acceptance/openstack/networking/v2/extensions/bgp/peers/bgppeers_test.go
+++ b/internal/acceptance/openstack/networking/v2/extensions/bgp/peers/bgppeers_test.go
@@ -34,9 +34,10 @@ func TestBGPPeerCRUD(t *testing.T) {
 
 	// Update a BGP Peer
 	newBGPPeerName := tools.RandomString("TESTACC-BGPPEER-", 10)
+	pass := tools.MakeNewPassword("")
 	updateBGPOpts := peers.UpdateOpts{
-		Name:     newBGPPeerName,
-		Password: tools.MakeNewPassword(""),
+		Name:     &newBGPPeerName,
+		Password: &pass,
 	}
 	bgpPeerUpdated, err := peers.Update(context.TODO(), client, bgpPeerGot.ID, updateBGPOpts).Extract()
 	th.AssertNoErr(t, err)
diff --git a/internal/acceptance/openstack/networking/v2/extensions/bgp/speakers/bgpspeakers_test.go b/internal/acceptance/openstack/networking/v2/extensions/bgp/speakers/bgpspeakers_test.go
index 2ab5584d5..9f6eb59c9 100644
--- a/internal/acceptance/openstack/networking/v2/extensions/bgp/speakers/bgpspeakers_test.go
+++ b/internal/acceptance/openstack/networking/v2/extensions/bgp/speakers/bgpspeakers_test.go
@@ -48,21 +48,23 @@ func TestBGPSpeakerCRUD(t *testing.T) {
 	defer networking.DeleteNetwork(t, client, network.ID)
 
 	// Update BGP Speaker
+	name := tools.RandomString("TESTACC-BGPSPEAKER-", 10)
+	iTrue := true
 	opts := speakers.UpdateOpts{
-		Name:                          tools.RandomString("TESTACC-BGPSPEAKER-", 10),
-		AdvertiseTenantNetworks:       false,
-		AdvertiseFloatingIPHostRoutes: true,
+		Name:                          &name,
+		AdvertiseTenantNetworks:       new(bool),
+		AdvertiseFloatingIPHostRoutes: &iTrue,
 	}
 	speakerUpdated, err := speakers.Update(context.TODO(), client, bgpSpeaker.ID, opts).Extract()
 	th.AssertNoErr(t, err)
-	th.AssertEquals(t, speakerUpdated.Name, opts.Name)
+	th.AssertEquals(t, speakerUpdated.Name, *opts.Name)
 	t.Logf("Updated the BGP Speaker, name set from %s to %s", bgpSpeaker.Name, speakerUpdated.Name)
 
 	// Get a BGP Speaker
 	bgpSpeakerGot, err := speakers.Get(context.TODO(), client, bgpSpeaker.ID).Extract()
 	th.AssertNoErr(t, err)
 	th.AssertEquals(t, bgpSpeaker.ID, bgpSpeakerGot.ID)
-	th.AssertEquals(t, opts.Name, bgpSpeakerGot.Name)
+	th.AssertEquals(t, *opts.Name, bgpSpeakerGot.Name)
 
 	// AddBGPPeer
 	addBGPPeerOpts := speakers.AddBGPPeerOpts{BGPPeerID: bgpPeer.ID}
diff --git a/internal/acceptance/openstack/networking/v2/extensions/security_test.go b/internal/acceptance/openstack/networking/v2/extensions/security_test.go
index ab3a05808..85b0a81ed 100644
--- a/internal/acceptance/openstack/networking/v2/extensions/security_test.go
+++ b/internal/acceptance/openstack/networking/v2/extensions/security_test.go
@@ -39,7 +39,7 @@ func TestSecurityGroupsCreateUpdateDelete(t *testing.T) {
 	var name = "Update group"
 	var description = ""
 	updateOpts := groups.UpdateOpts{
-		Name:        name,
+		Name:        &name,
 		Description: &description,
 		Stateful:    new(bool),
 	}
@@ -115,7 +115,7 @@ func TestSecurityGroupsRevision(t *testing.T) {
 	newName := tools.RandomString("TESTACC-", 8)
 	newDescription := ""
 	updateOpts := &groups.UpdateOpts{
-		Name:        newName,
+		Name:        &newName,
 		Description: &newDescription,
 	}
 	group, err = groups.Update(context.TODO(), client, group.ID, updateOpts).Extract()
@@ -126,7 +126,6 @@ func TestSecurityGroupsRevision(t *testing.T) {
 	// This should fail due to an old revision number.
 	newDescription = "new description"
 	updateOpts = &groups.UpdateOpts{
-		Name:           newName,
 		Description:    &newDescription,
 		RevisionNumber: &oldRevisionNumber,
 	}
@@ -145,7 +144,7 @@ func TestSecurityGroupsRevision(t *testing.T) {
 	// This should work because now we do provide a valid revision number.
 	newDescription = "new description"
 	updateOpts = &groups.UpdateOpts{
-		Name:           newName,
+		Name:           new(string),
 		Description:    &newDescription,
 		RevisionNumber: &group.RevisionNumber,
 	}
@@ -154,7 +153,7 @@ func TestSecurityGroupsRevision(t *testing.T) {
 
 	tools.PrintResource(t, group)
 
-	th.AssertEquals(t, group.Name, newName)
+	th.AssertEquals(t, group.Name, "")
 	th.AssertEquals(t, group.Description, newDescription)
 }
 
diff --git a/internal/acceptance/openstack/networking/v2/extensions/trunk_details/trunks_test.go b/internal/acceptance/openstack/networking/v2/extensions/trunk_details/trunks_test.go
index 3a9870d35..e38404888 100644
--- a/internal/acceptance/openstack/networking/v2/extensions/trunk_details/trunks_test.go
+++ b/internal/acceptance/openstack/networking/v2/extensions/trunk_details/trunks_test.go
@@ -79,8 +79,8 @@ func TestListPortWithSubports(t *testing.T) {
 	th.AssertEquals(t, 1, len(allPorts))
 	port := allPorts[0]
 
-	th.AssertEquals(t, trunk.ID, port.TrunkDetails.TrunkID)
-	th.AssertEquals(t, 2, len(port.TrunkDetails.SubPorts))
+	th.AssertEquals(t, trunk.ID, port.TrunkID)
+	th.AssertEquals(t, 2, len(port.SubPorts))
 
 	// Note that MAC address is not (currently) returned in list queries. We
 	// exclude it from the comparison here in case it's ever added. MAC
@@ -92,18 +92,18 @@ func TestListPortWithSubports(t *testing.T) {
 		SegmentationID:   1,
 		SegmentationType: "vlan",
 		PortID:           subport1.ID,
-	}, port.TrunkDetails.SubPorts[0].Subport)
+	}, port.SubPorts[0].Subport)
 	th.AssertDeepEquals(t, trunks.Subport{
 		SegmentationID:   2,
 		SegmentationType: "vlan",
 		PortID:           subport2.ID,
-	}, port.TrunkDetails.SubPorts[1].Subport)
+	}, port.SubPorts[1].Subport)
 
 	// Test GET port with trunk details
 	err = ports.Get(context.TODO(), client, parentPort.ID).ExtractInto(&port)
 	th.AssertNoErr(t, err)
-	th.AssertEquals(t, trunk.ID, port.TrunkDetails.TrunkID)
-	th.AssertEquals(t, 2, len(port.TrunkDetails.SubPorts))
+	th.AssertEquals(t, trunk.ID, port.TrunkID)
+	th.AssertEquals(t, 2, len(port.SubPorts))
 	th.AssertDeepEquals(t, trunk_details.Subport{
 		Subport: trunks.Subport{
 			SegmentationID:   1,
@@ -111,7 +111,7 @@ func TestListPortWithSubports(t *testing.T) {
 			PortID:           subport1.ID,
 		},
 		MACAddress: subport1.MACAddress,
-	}, port.TrunkDetails.SubPorts[0])
+	}, port.SubPorts[0])
 	th.AssertDeepEquals(t, trunk_details.Subport{
 		Subport: trunks.Subport{
 			SegmentationID:   2,
@@ -119,5 +119,5 @@ func TestListPortWithSubports(t *testing.T) {
 			PortID:           subport2.ID,
 		},
 		MACAddress: subport2.MACAddress,
-	}, port.TrunkDetails.SubPorts[1])
+	}, port.SubPorts[1])
 }
diff --git a/internal/acceptance/openstack/objectstorage/v1/objects_test.go b/internal/acceptance/openstack/objectstorage/v1/objects_test.go
index 5fcf80693..90753baeb 100644
--- a/internal/acceptance/openstack/objectstorage/v1/objects_test.go
+++ b/internal/acceptance/openstack/objectstorage/v1/objects_test.go
@@ -100,7 +100,7 @@ func TestObjects(t *testing.T) {
 		})
 		th.AssertNoErr(t, err)
 
-		resp, err := client.ProviderClient.HTTPClient.Get(objURLs[i])
+		resp, err := client.HTTPClient.Get(objURLs[i])
 		th.AssertNoErr(t, err)
 		if resp.StatusCode != http.StatusOK {
 			resp.Body.Close()
@@ -121,7 +121,7 @@ func TestObjects(t *testing.T) {
 		})
 		th.AssertNoErr(t, err)
 
-		resp, err = client.ProviderClient.HTTPClient.Get(objURLs[i])
+		resp, err = client.HTTPClient.Get(objURLs[i])
 		th.AssertNoErr(t, err)
 		if resp.StatusCode != http.StatusOK {
 			resp.Body.Close()
diff --git a/openstack/baremetal/httpbasic/testing/requests_test.go b/openstack/baremetal/httpbasic/testing/requests_test.go
index d8c9faf5b..9618a1b1d 100644
--- a/openstack/baremetal/httpbasic/testing/requests_test.go
+++ b/openstack/baremetal/httpbasic/testing/requests_test.go
@@ -24,7 +24,7 @@ func TestHttpBasic(t *testing.T) {
 		IronicEndpoint: "http://ironic:6385/v1",
 	})
 	_ = errTest1
-	th.AssertEquals(t, "User and Password are required", err.Error())
+	th.AssertEquals(t, "IronicUser and IronicUserPassword are required", err.Error())
 
 	errTest2, err := httpbasic.NewBareMetalHTTPBasic(httpbasic.EndpointOpts{
 		IronicUser:         "myUser",
diff --git a/openstack/baremetal/v1/nodes/testing/results_test.go b/openstack/baremetal/v1/nodes/testing/results_test.go
index acdb59e77..f7b99d827 100644
--- a/openstack/baremetal/v1/nodes/testing/results_test.go
+++ b/openstack/baremetal/v1/nodes/testing/results_test.go
@@ -13,7 +13,7 @@ import (
 
 func TestStandardPluginData(t *testing.T) {
 	var pluginData nodes.PluginData
-	err := pluginData.RawMessage.UnmarshalJSON([]byte(invtest.StandardPluginDataSample))
+	err := pluginData.UnmarshalJSON([]byte(invtest.StandardPluginDataSample))
 	th.AssertNoErr(t, err)
 
 	parsedData, err := pluginData.AsStandardData()
@@ -28,7 +28,7 @@ func TestStandardPluginData(t *testing.T) {
 
 func TestInspectorPluginData(t *testing.T) {
 	var pluginData nodes.PluginData
-	err := pluginData.RawMessage.UnmarshalJSON([]byte(insptest.IntrospectionDataJSONSample))
+	err := pluginData.UnmarshalJSON([]byte(insptest.IntrospectionDataJSONSample))
 	th.AssertNoErr(t, err)
 
 	parsedData, err := pluginData.AsInspectorData()
@@ -43,7 +43,7 @@ func TestInspectorPluginData(t *testing.T) {
 
 func TestGuessFormatUnknownDefaultsToIronic(t *testing.T) {
 	var pluginData nodes.PluginData
-	err := pluginData.RawMessage.UnmarshalJSON([]byte("{}"))
+	err := pluginData.UnmarshalJSON([]byte("{}"))
 	th.AssertNoErr(t, err)
 
 	irData, inspData, err := pluginData.GuessFormat()
@@ -54,7 +54,7 @@ func TestGuessFormatUnknownDefaultsToIronic(t *testing.T) {
 
 func TestGuessFormatErrors(t *testing.T) {
 	var pluginData nodes.PluginData
-	err := pluginData.RawMessage.UnmarshalJSON([]byte("\"banana\""))
+	err := pluginData.UnmarshalJSON([]byte("\"banana\""))
 	th.AssertNoErr(t, err)
 
 	irData, inspData, err := pluginData.GuessFormat()
@@ -65,7 +65,7 @@ func TestGuessFormatErrors(t *testing.T) {
 	failsInspectorConversion := `{
 	    "interfaces": "banana"
 	}`
-	err = pluginData.RawMessage.UnmarshalJSON([]byte(failsInspectorConversion))
+	err = pluginData.UnmarshalJSON([]byte(failsInspectorConversion))
 	th.AssertNoErr(t, err)
 
 	irData, inspData, err = pluginData.GuessFormat()
diff --git a/openstack/baremetalintrospection/httpbasic/testing/requests_test.go b/openstack/baremetalintrospection/httpbasic/testing/requests_test.go
index df091e0cc..bceb8c5d8 100644
--- a/openstack/baremetalintrospection/httpbasic/testing/requests_test.go
+++ b/openstack/baremetalintrospection/httpbasic/testing/requests_test.go
@@ -23,7 +23,7 @@ func TestNoAuth(t *testing.T) {
 		IronicInspectorEndpoint: "http://ironic:5050/v1",
 	})
 	_ = errTest1
-	th.AssertEquals(t, "User and Password are required", err.Error())
+	th.AssertEquals(t, "IronicInspectorUser and IronicInspectorUserPassword are required", err.Error())
 
 	errTest2, err := httpbasic.NewBareMetalIntrospectionHTTPBasic(httpbasic.EndpointOpts{
 		IronicInspectorUser:         "myUser",
diff --git a/openstack/blockstorage/v2/quotasets/testing/requests_test.go b/openstack/blockstorage/v2/quotasets/testing/requests_test.go
index 7a5bc8fe0..5e4090767 100644
--- a/openstack/blockstorage/v2/quotasets/testing/requests_test.go
+++ b/openstack/blockstorage/v2/quotasets/testing/requests_test.go
@@ -57,7 +57,7 @@ func TestPartialUpdate(t *testing.T) {
 type ErrorUpdateOpts quotasets.UpdateOpts
 
 func (opts ErrorUpdateOpts) ToBlockStorageQuotaUpdateMap() (map[string]any, error) {
-	return nil, errors.New("This is an error")
+	return nil, errors.New("this is an error")
 }
 
 func TestErrorInToBlockStorageQuotaUpdateMap(t *testing.T) {
diff --git a/openstack/blockstorage/v3/quotasets/testing/requests_test.go b/openstack/blockstorage/v3/quotasets/testing/requests_test.go
index 0b8b74e51..9cf76b2a3 100644
--- a/openstack/blockstorage/v3/quotasets/testing/requests_test.go
+++ b/openstack/blockstorage/v3/quotasets/testing/requests_test.go
@@ -57,7 +57,7 @@ func TestPartialUpdate(t *testing.T) {
 type ErrorUpdateOpts quotasets.UpdateOpts
 
 func (opts ErrorUpdateOpts) ToBlockStorageQuotaUpdateMap() (map[string]any, error) {
-	return nil, errors.New("This is an error")
+	return nil, errors.New("this is an error")
 }
 
 func TestErrorInToBlockStorageQuotaUpdateMap(t *testing.T) {
diff --git a/openstack/compute/v2/quotasets/testing/requests_test.go b/openstack/compute/v2/quotasets/testing/requests_test.go
index c46afd343..5b17b5777 100644
--- a/openstack/compute/v2/quotasets/testing/requests_test.go
+++ b/openstack/compute/v2/quotasets/testing/requests_test.go
@@ -59,7 +59,7 @@ func TestDelete(t *testing.T) {
 type ErrorUpdateOpts quotasets.UpdateOpts
 
 func (opts ErrorUpdateOpts) ToComputeQuotaUpdateMap() (map[string]any, error) {
-	return nil, errors.New("This is an error")
+	return nil, errors.New("this is an error")
 }
 
 func TestErrorInToComputeQuotaUpdateMap(t *testing.T) {
diff --git a/openstack/dns/v2/quotas/testing/doc.go b/openstack/dns/v2/quotas/testing/doc.go
new file mode 100644
index 000000000..b9b6286d7
--- /dev/null
+++ b/openstack/dns/v2/quotas/testing/doc.go
@@ -0,0 +1,2 @@
+// zones unit tests
+package testing
diff --git a/openstack/dns/v2/quotas/testing/fixtures_test.go b/openstack/dns/v2/quotas/testing/fixtures_test.go
new file mode 100644
index 000000000..9702547e3
--- /dev/null
+++ b/openstack/dns/v2/quotas/testing/fixtures_test.go
@@ -0,0 +1,63 @@
+package testing
+
+import (
+	"fmt"
+	"net/http"
+	"testing"
+
+	th "github.com/gophercloud/gophercloud/v2/testhelper"
+	"github.com/gophercloud/gophercloud/v2/testhelper/client"
+
+	"github.com/gophercloud/gophercloud/v2/openstack/dns/v2/quotas"
+)
+
+// List Output is a sample response to a List call.
+const QuotaOutput = `
+{
+  "api_export_size": 1000,
+  "recordset_records": 20,
+  "zone_records": 500,
+  "zone_recordsets": 500,
+  "zones": 100
+}
+`
+
+// UpdateQuotaRequest is a sample request body for updating quotas.
+const UpdateQuotaRequest = `
+{
+  "zones": 100
+}
+`
+
+var (
+	Quota = &quotas.Quota{
+		APIExporterSize:  1000,
+		RecordsetRecords: 20,
+		ZoneRecords:      500,
+		ZoneRecordsets:   500,
+		Zones:            100,
+	}
+)
+
+// HandleGetSuccessfully configures the test server to respond to a Get request.
+func HandleGetSuccessfully(t *testing.T, fakeServer th.FakeServer) {
+	fakeServer.Mux.HandleFunc("/quotas/a86dba58-0043-4cc6-a1bb-69d5e86f3ca3", func(w http.ResponseWriter, r *http.Request) {
+		th.TestMethod(t, r, "GET")
+		th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
+
+		w.Header().Add("Content-Type", "application/json")
+		fmt.Fprint(w, QuotaOutput)
+	})
+}
+
+// HandleUpdateSuccessfully configures the test server to respond to an Update request.
+func HandleUpdateSuccessfully(t *testing.T, fakeServer th.FakeServer) {
+	fakeServer.Mux.HandleFunc("/quotas/a86dba58-0043-4cc6-a1bb-69d5e86f3ca3", func(w http.ResponseWriter, r *http.Request) {
+		th.TestMethod(t, r, "PATCH")
+		th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
+		th.TestJSONRequest(t, r, UpdateQuotaRequest)
+
+		w.Header().Add("Content-Type", "application/json")
+		fmt.Fprint(w, QuotaOutput)
+	})
+}
diff --git a/openstack/dns/v2/quotas/testing/requests_test.go b/openstack/dns/v2/quotas/testing/requests_test.go
new file mode 100644
index 000000000..d753e5839
--- /dev/null
+++ b/openstack/dns/v2/quotas/testing/requests_test.go
@@ -0,0 +1,35 @@
+package testing
+
+import (
+	"context"
+	"testing"
+
+	"github.com/gophercloud/gophercloud/v2/openstack/dns/v2/quotas"
+	th "github.com/gophercloud/gophercloud/v2/testhelper"
+	"github.com/gophercloud/gophercloud/v2/testhelper/client"
+)
+
+func TestGet(t *testing.T) {
+	fakeServer := th.SetupHTTP()
+	defer fakeServer.Teardown()
+	HandleGetSuccessfully(t, fakeServer)
+
+	actual, err := quotas.Get(context.TODO(), client.ServiceClient(fakeServer), "a86dba58-0043-4cc6-a1bb-69d5e86f3ca3").Extract()
+	th.AssertNoErr(t, err)
+	th.CheckDeepEquals(t, Quota, actual)
+}
+
+func TestUpdate(t *testing.T) {
+	fakeServer := th.SetupHTTP()
+	defer fakeServer.Teardown()
+	HandleUpdateSuccessfully(t, fakeServer)
+
+	zones := 100
+	updateOpts := quotas.UpdateOpts{
+		Zones: &zones,
+	}
+
+	actual, err := quotas.Update(context.TODO(), client.ServiceClient(fakeServer), "a86dba58-0043-4cc6-a1bb-69d5e86f3ca3", updateOpts).Extract()
+	th.AssertNoErr(t, err)
+	th.CheckDeepEquals(t, Quota, actual)
+}
diff --git a/openstack/image/v2/imagedata/testing/requests_test.go b/openstack/image/v2/imagedata/testing/requests_test.go
index ad4dba86f..63294a132 100644
--- a/openstack/image/v2/imagedata/testing/requests_test.go
+++ b/openstack/image/v2/imagedata/testing/requests_test.go
@@ -74,14 +74,15 @@ func min(a int, b int) int {
 
 func (rs *RS) Seek(offset int64, whence int) (int64, error) {
 	var offsetInt = int(offset)
-	if whence == 0 {
+	switch whence {
+	case 0:
 		rs.offset = offsetInt
-	} else if whence == 1 {
+	case 1:
 		rs.offset = rs.offset + offsetInt
-	} else if whence == 2 {
+	case 2:
 		rs.offset = len(rs.bs) - offsetInt
-	} else {
-		return 0, fmt.Errorf("For parameter `whence`, expected value in {0,1,2} but got: %#v", whence)
+	default:
+		return 0, fmt.Errorf("for parameter `whence`, expected value in {0,1,2} but got: %#v", whence)
 	}
 
 	return int64(rs.offset), nil
diff --git a/openstack/image/v2/members/testing/requests_test.go b/openstack/image/v2/members/testing/requests_test.go
index 66798c432..6ad8f6183 100644
--- a/openstack/image/v2/members/testing/requests_test.go
+++ b/openstack/image/v2/members/testing/requests_test.go
@@ -110,9 +110,6 @@ func TestShowMemberDetails(t *testing.T) {
 		"8989447062e04a818baf9e073fd04fa7").Extract()
 
 	th.AssertNoErr(t, err)
-	if md == nil {
-		t.Fatalf("Expected non-nil value for md")
-	}
 
 	createdAt, err := time.Parse(time.RFC3339, "2013-11-26T07:21:21Z")
 	th.AssertNoErr(t, err)
diff --git a/openstack/messaging/v2/queues/testing/requests_test.go b/openstack/messaging/v2/queues/testing/requests_test.go
index 8f882cf12..d64c37456 100644
--- a/openstack/messaging/v2/queues/testing/requests_test.go
+++ b/openstack/messaging/v2/queues/testing/requests_test.go
@@ -42,7 +42,7 @@ func TestCreate(t *testing.T) {
 	fakeServer := th.SetupHTTP()
 	defer fakeServer.Teardown()
 	HandleCreateSuccessfully(t, fakeServer)
-	var enableEncrypted *bool = new(bool)
+	var enableEncrypted = new(bool)
 
 	createOpts := queues.CreateOpts{
 		QueueName:                  QueueName,
diff --git a/openstack/networking/v2/extensions/agents/testing/requests_test.go b/openstack/networking/v2/extensions/agents/testing/requests_test.go
index e5b5888c4..a48d629eb 100644
--- a/openstack/networking/v2/extensions/agents/testing/requests_test.go
+++ b/openstack/networking/v2/extensions/agents/testing/requests_test.go
@@ -355,7 +355,7 @@ func TestListL3Routers(t *testing.T) {
 		},
 	}
 
-	var snat bool = true
+	var snat = true
 	gw := routers.GatewayInfo{
 		EnableSNAT: &snat,
 		NetworkID:  "ae34051f-aa6c-4c75-abf5-50dc9ac99ef3",
diff --git a/openstack/networking/v2/extensions/bgp/peers/testing/requests_test.go b/openstack/networking/v2/extensions/bgp/peers/testing/requests_test.go
index 8f4040ba0..d35e79da9 100644
--- a/openstack/networking/v2/extensions/bgp/peers/testing/requests_test.go
+++ b/openstack/networking/v2/extensions/bgp/peers/testing/requests_test.go
@@ -127,11 +127,14 @@ func TestUpdate(t *testing.T) {
 		fmt.Fprint(w, UpdateBGPPeerResponse)
 	})
 
-	var opts peers.UpdateOpts
-	opts.Name = "test-rename-bgp-peer"
-	opts.Password = "superStrong"
+	name := "test-rename-bgp-peer"
+	password := "superStrong"
+	opts := peers.UpdateOpts{
+		Name:     &name,
+		Password: &password,
+	}
 
 	r, err := peers.Update(context.TODO(), fake.ServiceClient(fakeServer), bgpPeerID, opts).Extract()
 	th.AssertNoErr(t, err)
-	th.AssertEquals(t, r.Name, opts.Name)
+	th.AssertEquals(t, r.Name, *opts.Name)
 }
diff --git a/openstack/networking/v2/extensions/bgp/speakers/testing/fixture.go b/openstack/networking/v2/extensions/bgp/speakers/testing/fixture.go
index de346783c..21c5deeef 100644
--- a/openstack/networking/v2/extensions/bgp/speakers/testing/fixture.go
+++ b/openstack/networking/v2/extensions/bgp/speakers/testing/fixture.go
@@ -67,7 +67,7 @@ const CreateRequest = `
     "advertise_floating_ip_host_routes": false,
     "advertise_tenant_networks": true,
     "ip_version": 6,
-    "local_as": "2000",
+    "local_as": 2000,
     "name": "gophercloud-testing-bgp-speaker"
   }
 }
diff --git a/openstack/networking/v2/extensions/bgp/speakers/testing/requests_test.go b/openstack/networking/v2/extensions/bgp/speakers/testing/requests_test.go
index edcf11637..99259982c 100644
--- a/openstack/networking/v2/extensions/bgp/speakers/testing/requests_test.go
+++ b/openstack/networking/v2/extensions/bgp/speakers/testing/requests_test.go
@@ -77,13 +77,13 @@ func TestCreate(t *testing.T) {
 		fmt.Fprint(w, CreateResponse)
 	})
 
+	iTrue := true
 	opts := speakers.CreateOpts{
 		IPVersion:                     6,
-		AdvertiseFloatingIPHostRoutes: false,
-		AdvertiseTenantNetworks:       true,
+		AdvertiseFloatingIPHostRoutes: new(bool),
+		AdvertiseTenantNetworks:       &iTrue,
 		Name:                          "gophercloud-testing-bgp-speaker",
-		LocalAS:                       "2000",
-		Networks:                      []string{},
+		LocalAS:                       2000,
 	}
 	r, err := speakers.Create(context.TODO(), fake.ServiceClient(fakeServer), opts).Extract()
 	th.AssertNoErr(t, err)
@@ -91,8 +91,8 @@ func TestCreate(t *testing.T) {
 	th.AssertEquals(t, r.LocalAS, 2000)
 	th.AssertEquals(t, len(r.Networks), 0)
 	th.AssertEquals(t, r.IPVersion, opts.IPVersion)
-	th.AssertEquals(t, r.AdvertiseFloatingIPHostRoutes, opts.AdvertiseFloatingIPHostRoutes)
-	th.AssertEquals(t, r.AdvertiseTenantNetworks, opts.AdvertiseTenantNetworks)
+	th.AssertEquals(t, r.AdvertiseFloatingIPHostRoutes, *opts.AdvertiseFloatingIPHostRoutes)
+	th.AssertEquals(t, r.AdvertiseTenantNetworks, *opts.AdvertiseTenantNetworks)
 }
 
 func TestDelete(t *testing.T) {
@@ -119,13 +119,14 @@ func TestUpdate(t *testing.T) {
 
 	bgpSpeakerID := "ab01ade1-ae62-43c9-8a1f-3c24225b96d8"
 	fakeServer.Mux.HandleFunc("/v2.0/bgp-speakers/"+bgpSpeakerID, func(w http.ResponseWriter, r *http.Request) {
-		if r.Method == "GET" {
+		switch r.Method {
+		case "GET":
 			th.TestMethod(t, r, "GET")
 			th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
 			w.Header().Add("Content-Type", "application/json")
 			w.WriteHeader(http.StatusOK)
 			fmt.Fprint(w, GetBGPSpeakerResult)
-		} else if r.Method == "PUT" {
+		case "PUT":
 			th.TestMethod(t, r, "PUT")
 			th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
 			th.TestHeader(t, r, "Content-Type", "application/json")
@@ -135,22 +136,24 @@ func TestUpdate(t *testing.T) {
 			w.Header().Add("Content-Type", "application/json")
 			w.WriteHeader(http.StatusOK)
 			fmt.Fprint(w, UpdateBGPSpeakerResponse)
-		} else {
+		default:
 			panic("Unexpected Request")
 		}
 	})
 
+	name := "testing-bgp-speaker"
+	iTrue := true
 	opts := speakers.UpdateOpts{
-		Name:                          "testing-bgp-speaker",
-		AdvertiseTenantNetworks:       false,
-		AdvertiseFloatingIPHostRoutes: true,
+		Name:                          &name,
+		AdvertiseTenantNetworks:       new(bool),
+		AdvertiseFloatingIPHostRoutes: &iTrue,
 	}
 
 	r, err := speakers.Update(context.TODO(), fake.ServiceClient(fakeServer), bgpSpeakerID, opts).Extract()
 	th.AssertNoErr(t, err)
-	th.AssertEquals(t, r.Name, opts.Name)
-	th.AssertEquals(t, r.AdvertiseTenantNetworks, opts.AdvertiseTenantNetworks)
-	th.AssertEquals(t, r.AdvertiseFloatingIPHostRoutes, opts.AdvertiseFloatingIPHostRoutes)
+	th.AssertEquals(t, r.Name, *opts.Name)
+	th.AssertEquals(t, r.AdvertiseTenantNetworks, *opts.AdvertiseTenantNetworks)
+	th.AssertEquals(t, r.AdvertiseFloatingIPHostRoutes, *opts.AdvertiseFloatingIPHostRoutes)
 }
 
 func TestAddBGPPeer(t *testing.T) {
diff --git a/openstack/networking/v2/extensions/dns/testing/fixtures_test.go b/openstack/networking/v2/extensions/dns/testing/fixtures_test.go
index 5f3dbd993..f09a1033c 100644
--- a/openstack/networking/v2/extensions/dns/testing/fixtures_test.go
+++ b/openstack/networking/v2/extensions/dns/testing/fixtures_test.go
@@ -241,7 +241,7 @@ func FloatingIPHandleGet(t *testing.T, fakeServer th.FakeServer) {
 		w.Header().Add("Content-Type", "application/json")
 		w.WriteHeader(http.StatusOK)
 
-		fmt.Fprint(w, fmt.Sprintf(`{"floatingip": %s}`, floatingiptest.FipDNS))
+		fmt.Fprintf(w, `{"floatingip": %s}`, floatingiptest.FipDNS)
 	})
 }
 
@@ -264,7 +264,7 @@ func FloatingIPHandleCreate(t *testing.T, fakeServer th.FakeServer) {
 		w.Header().Add("Content-Type", "application/json")
 		w.WriteHeader(http.StatusCreated)
 
-		fmt.Fprint(w, fmt.Sprintf(`{"floatingip": %s}`, floatingiptest.FipDNS))
+		fmt.Fprintf(w, `{"floatingip": %s}`, floatingiptest.FipDNS)
 	})
 }
 
diff --git a/openstack/networking/v2/extensions/external/testing/requests_test.go b/openstack/networking/v2/extensions/external/testing/requests_test.go
index aa60ee442..6b6c3017d 100644
--- a/openstack/networking/v2/extensions/external/testing/requests_test.go
+++ b/openstack/networking/v2/extensions/external/testing/requests_test.go
@@ -9,7 +9,7 @@ import (
 )
 
 func TestListExternal(t *testing.T) {
-	var iTrue bool = true
+	var iTrue = true
 
 	networkListOpts := networks.ListOpts{
 		ID: "d32019d3-bc6e-4319-9c1d-6722fc136a22",
diff --git a/openstack/networking/v2/extensions/security/addressgroups/testing/requests_test.go b/openstack/networking/v2/extensions/security/addressgroups/testing/requests_test.go
index 24abf1cb7..37f8184dc 100644
--- a/openstack/networking/v2/extensions/security/addressgroups/testing/requests_test.go
+++ b/openstack/networking/v2/extensions/security/addressgroups/testing/requests_test.go
@@ -23,7 +23,7 @@ func TestList(t *testing.T) {
 		w.Header().Add("Content-Type", "application/json")
 		w.WriteHeader(http.StatusOK)
 
-		fmt.Fprintf(w, AddressGroupListResponse)
+		fmt.Fprint(w, AddressGroupListResponse)
 	})
 
 	count := 0
@@ -73,7 +73,7 @@ func TestCreate(t *testing.T) {
 		w.Header().Add("Content-Type", "application/json")
 		w.WriteHeader(http.StatusCreated)
 
-		fmt.Fprintf(w, AddressGroupCreateResponse)
+		fmt.Fprint(w, AddressGroupCreateResponse)
 	})
 
 	opts := addressgroups.CreateOpts{
@@ -107,7 +107,7 @@ func TestGet(t *testing.T) {
 		w.Header().Add("Content-Type", "application/json")
 		w.WriteHeader(http.StatusOK)
 
-		fmt.Fprintf(w, AddressGroupGetResponse)
+		fmt.Fprint(w, AddressGroupGetResponse)
 	})
 
 	sr, err := addressgroups.Get(context.TODO(), fake.ServiceClient(fakeServer), "8722e0e0-9cc9-4490-9660-8c9a5732fbb0").Extract()
@@ -134,7 +134,7 @@ func TestUpdate(t *testing.T) {
 			w.Header().Add("Content-Type", "application/json")
 			w.WriteHeader(http.StatusOK)
 
-			fmt.Fprintf(w, AddressGroupUpdateResponse)
+			fmt.Fprint(w, AddressGroupUpdateResponse)
 		})
 
 	name := "ADDR_GP_2"
@@ -168,7 +168,7 @@ func TestAddAddresses(t *testing.T) {
 			w.Header().Add("Content-Type", "application/json")
 			w.WriteHeader(http.StatusOK)
 
-			fmt.Fprintf(w, AddressGroupAddAddressesResponse)
+			fmt.Fprint(w, AddressGroupAddAddressesResponse)
 		})
 
 	opts := addressgroups.UpdateAddressesOpts{
@@ -197,7 +197,7 @@ func TestRemoveAddresses(t *testing.T) {
 			w.Header().Add("Content-Type", "application/json")
 			w.WriteHeader(http.StatusOK)
 
-			fmt.Fprintf(w, AddressGroupRemoveAddressesResponse)
+			fmt.Fprint(w, AddressGroupRemoveAddressesResponse)
 		})
 
 	opts := addressgroups.UpdateAddressesOpts{
diff --git a/openstack/networking/v2/extensions/security/groups/testing/requests_test.go b/openstack/networking/v2/extensions/security/groups/testing/requests_test.go
index 320e537e0..f05cbf05d 100644
--- a/openstack/networking/v2/extensions/security/groups/testing/requests_test.go
+++ b/openstack/networking/v2/extensions/security/groups/testing/requests_test.go
@@ -90,7 +90,8 @@ func TestUpdate(t *testing.T) {
 			fmt.Fprint(w, SecurityGroupUpdateResponse)
 		})
 
-	opts := groups.UpdateOpts{Name: "newer-webservers"}
+	name := "newer-webservers"
+	opts := groups.UpdateOpts{Name: &name}
 	sg, err := groups.Update(context.TODO(), fake.ServiceClient(fakeServer), "2076db17-a522-4506-91de-c6dd8e837028", opts).Extract()
 	th.AssertNoErr(t, err)
 
diff --git a/openstack/networking/v2/extensions/trunk_details/testing/requests_test.go b/openstack/networking/v2/extensions/trunk_details/testing/requests_test.go
index fdbd4329f..f9f3c74ab 100644
--- a/openstack/networking/v2/extensions/trunk_details/testing/requests_test.go
+++ b/openstack/networking/v2/extensions/trunk_details/testing/requests_test.go
@@ -35,9 +35,9 @@ func TestServerWithUsageExt(t *testing.T) {
 	err := ports.Get(context.TODO(), client.ServiceClient(fakeServer), portIDFixture).ExtractInto(&portExt)
 	th.AssertNoErr(t, err)
 
-	th.AssertEquals(t, portExt.TrunkDetails.TrunkID, "f170c831-8c55-4ceb-ad13-75eab4a121e5")
-	th.AssertEquals(t, len(portExt.TrunkDetails.SubPorts), 1)
-	subPort := portExt.TrunkDetails.SubPorts[0]
+	th.AssertEquals(t, portExt.TrunkID, "f170c831-8c55-4ceb-ad13-75eab4a121e5")
+	th.AssertEquals(t, len(portExt.SubPorts), 1)
+	subPort := portExt.SubPorts[0]
 	th.AssertEquals(t, subPort.SegmentationID, 100)
 	th.AssertEquals(t, subPort.SegmentationType, "vlan")
 	th.AssertEquals(t, subPort.PortID, "20c673d8-7f9d-4570-b662-148d9ddcc5bd")
diff --git a/pagination/testing/marker_test.go b/pagination/testing/marker_test.go
index 4c9441f37..a17d8687d 100644
--- a/pagination/testing/marker_test.go
+++ b/pagination/testing/marker_test.go
@@ -61,7 +61,7 @@ func createMarkerPaged(t *testing.T, fakeServer th.FakeServer) pagination.Pager
 
 	createPage := func(r pagination.PageResult) pagination.Page {
 		p := MarkerPageResult{pagination.MarkerPageBase{PageResult: r}}
-		p.MarkerPageBase.Owner = p
+		p.Owner = p
 		return p
 	}
 
diff --git a/testhelper/convenience.go b/testhelper/convenience.go
index 1ea727045..57fa558fd 100644
--- a/testhelper/convenience.go
+++ b/testhelper/convenience.go
@@ -433,7 +433,7 @@ func CheckErr(t *testing.T, e error, expected ...any) {
 func AssertIntLesserOrEqual(t *testing.T, v1 int, v2 int) {
 	t.Helper()
 
-	if !(v1 <= v2) {
+	if v1 > v2 {
 		logFatal(t, fmt.Sprintf("The first value \"%v\" is greater than the second value \"%v\"", v1, v2))
 	}
 }
@@ -442,7 +442,7 @@ func AssertIntLesserOrEqual(t *testing.T, v1 int, v2 int) {
 func AssertIntGreaterOrEqual(t *testing.T, v1 int, v2 int) {
 	t.Helper()
 
-	if !(v1 >= v2) {
+	if v1 < v2 {
 		logFatal(t, fmt.Sprintf("The first value \"%v\" is lesser than the second value \"%v\"", v1, v2))
 	}
 }
diff --git a/testing/provider_client_test.go b/testing/provider_client_test.go
index 900d53021..7e9cb7be4 100644
--- a/testing/provider_client_test.go
+++ b/testing/provider_client_test.go
@@ -161,7 +161,7 @@ func TestReauthEndLoop(t *testing.T) {
 
 		if info.reauthAttempts > 5 {
 			info.maxReauthReached = true
-			return fmt.Errorf("Max reauthentication attempts reached")
+			return fmt.Errorf("max reauthentication attempts reached")
 		}
 		p.SetThrowaway(true)
 		p.AuthenticatedHeaders()
diff --git a/testing/util_test.go b/testing/util_test.go
index 6b6b425f4..93fa2efb8 100644
--- a/testing/util_test.go
+++ b/testing/util_test.go
@@ -47,9 +47,9 @@ func TestWaitForError(t *testing.T) {
 	defer cancel()
 
 	err := gophercloud.WaitFor(ctx, func(context.Context) (bool, error) {
-		return false, errors.New("Error has occurred")
+		return false, errors.New("error has occurred")
 	})
-	th.AssertEquals(t, "Error has occurred", err.Error())
+	th.AssertEquals(t, "error has occurred", err.Error())
 }
 
 func TestWaitForPredicateExceed(t *testing.T) {
@@ -67,7 +67,7 @@ func TestWaitForPredicateExceed(t *testing.T) {
 			return true, ctx.Err()
 
 		case <-time.After(4 * time.Second):
-			return false, errors.New("Just wasting time")
+			return false, errors.New("just wasting time")
 		}
 	})
 	th.AssertErrIs(t, err, context.DeadlineExceeded)