diff --git a/integration/container/links_linux_test.go b/integration/container/links_linux_test.go
index 3f038d8b90..538861c566 100644
--- a/integration/container/links_linux_test.go
+++ b/integration/container/links_linux_test.go
@@ -45,10 +45,8 @@ func TestLinksContainerNames(t *testing.T) {
 	container.Run(ctx, t, client, container.WithName(containerA))
 	container.Run(ctx, t, client, container.WithName(containerB), container.WithLinks(containerA+":"+containerA))
 
-	f := filters.NewArgs(filters.Arg("name", containerA))
-
 	containers, err := client.ContainerList(ctx, types.ContainerListOptions{
-		Filters: f,
+		Filters: filters.NewArgs(filters.Arg("name", containerA)),
 	})
 	assert.NilError(t, err)
 	assert.Check(t, is.Equal(1, len(containers)))
diff --git a/integration/container/ps_test.go b/integration/container/ps_test.go
index 6e3a09a19c..c55f1e91ed 100644
--- a/integration/container/ps_test.go
+++ b/integration/container/ps_test.go
@@ -22,27 +22,27 @@ func TestPsFilter(t *testing.T) {
 
 	containerIDs := func(containers []types.Container) []string {
 		var entries []string
-		for _, container := range containers {
-			entries = append(entries, container.ID)
+		for _, c := range containers {
+			entries = append(entries, c.ID)
 		}
 		return entries
 	}
 
-	f1 := filters.NewArgs()
-	f1.Add("since", top)
-	q1, err := client.ContainerList(ctx, types.ContainerListOptions{
-		All:     true,
-		Filters: f1,
+	t.Run("since", func(t *testing.T) {
+		results, err := client.ContainerList(ctx, types.ContainerListOptions{
+			All:     true,
+			Filters: filters.NewArgs(filters.Arg("since", top)),
+		})
+		assert.NilError(t, err)
+		assert.Check(t, is.Contains(containerIDs(results), next))
 	})
-	assert.NilError(t, err)
-	assert.Check(t, is.Contains(containerIDs(q1), next))
 
-	f2 := filters.NewArgs()
-	f2.Add("before", top)
-	q2, err := client.ContainerList(ctx, types.ContainerListOptions{
-		All:     true,
-		Filters: f2,
+	t.Run("before", func(t *testing.T) {
+		results, err := client.ContainerList(ctx, types.ContainerListOptions{
+			All:     true,
+			Filters: filters.NewArgs(filters.Arg("before", top)),
+		})
+		assert.NilError(t, err)
+		assert.Check(t, is.Contains(containerIDs(results), prev))
 	})
-	assert.NilError(t, err)
-	assert.Check(t, is.Contains(containerIDs(q2), prev))
 }
diff --git a/integration/internal/swarm/states.go b/integration/internal/swarm/states.go
index 3f69feeef3..f59be448ec 100644
--- a/integration/internal/swarm/states.go
+++ b/integration/internal/swarm/states.go
@@ -88,8 +88,7 @@ func RunningTasksCount(client client.ServiceAPIClient, serviceID string, instanc
 // completed additionally, while polling, it verifies that the job never
 // exceeds MaxConcurrent running tasks
 func JobComplete(client client.CommonAPIClient, service swarmtypes.Service) func(log poll.LogT) poll.Result {
-	filter := filters.NewArgs()
-	filter.Add("service", service.ID)
+	filter := filters.NewArgs(filters.Arg("service", service.ID))
 
 	var jobIteration swarmtypes.Version
 	if service.JobStatus != nil {
diff --git a/integration/service/create_test.go b/integration/service/create_test.go
index b862415f3a..e394f5b600 100644
--- a/integration/service/create_test.go
+++ b/integration/service/create_test.go
@@ -2,7 +2,6 @@ package service // import "github.com/docker/docker/integration/service"
 
 import (
 	"context"
-	"fmt"
 	"io"
 	"strings"
 	"testing"
@@ -65,9 +64,9 @@ func testServiceCreateInit(daemonEnabled bool) func(t *testing.T) {
 
 func inspectServiceContainer(t *testing.T, client client.APIClient, serviceID string) types.ContainerJSON {
 	t.Helper()
-	filter := filters.NewArgs()
-	filter.Add("label", fmt.Sprintf("com.docker.swarm.service.id=%s", serviceID))
-	containers, err := client.ContainerList(context.Background(), types.ContainerListOptions{Filters: filter})
+	containers, err := client.ContainerList(context.Background(), types.ContainerListOptions{
+		Filters: filters.NewArgs(filters.Arg("label", "com.docker.swarm.service.id="+serviceID)),
+	})
 	assert.NilError(t, err)
 	assert.Check(t, is.Len(containers, 1))
 
@@ -426,11 +425,9 @@ func TestCreateServiceSysctls(t *testing.T) {
 		// earlier version of this test had to get container logs and was much
 		// more complex)
 
-		// get all of the tasks of the service, so we can get the container
-		filter := filters.NewArgs()
-		filter.Add("service", serviceID)
+		// get all tasks of the service, so we can get the container
 		tasks, err := client.TaskList(ctx, types.TaskListOptions{
-			Filters: filter,
+			Filters: filters.NewArgs(filters.Arg("service", serviceID)),
 		})
 		assert.NilError(t, err)
 		assert.Check(t, is.Equal(len(tasks), 1))
@@ -504,11 +501,9 @@ func TestCreateServiceCapabilities(t *testing.T) {
 	// we know that the capabilities is plumbed correctly. everything below that
 	// level has been tested elsewhere.
 
-	// get all of the tasks of the service, so we can get the container
-	filter := filters.NewArgs()
-	filter.Add("service", serviceID)
+	// get all tasks of the service, so we can get the container
 	tasks, err := client.TaskList(ctx, types.TaskListOptions{
-		Filters: filter,
+		Filters: filters.NewArgs(filters.Arg("service", serviceID)),
 	})
 	assert.NilError(t, err)
 	assert.Check(t, is.Equal(len(tasks), 1))
diff --git a/integration/service/list_test.go b/integration/service/list_test.go
index ca61eaf3aa..4f2653aaf2 100644
--- a/integration/service/list_test.go
+++ b/integration/service/list_test.go
@@ -57,10 +57,8 @@ func TestServiceListWithStatuses(t *testing.T) {
 		// serviceContainerCount function does not do. instead, we'll use a
 		// bespoke closure right here.
 		poll.WaitOn(t, func(log poll.LogT) poll.Result {
-			filter := filters.NewArgs()
-			filter.Add("service", id)
 			tasks, err := client.TaskList(context.Background(), types.TaskListOptions{
-				Filters: filter,
+				Filters: filters.NewArgs(filters.Arg("service", id)),
 			})
 
 			running := 0
diff --git a/integration/service/update_test.go b/integration/service/update_test.go
index db12ec210d..a0952f35cc 100644
--- a/integration/service/update_test.go
+++ b/integration/service/update_test.go
@@ -328,10 +328,12 @@ func TestServiceUpdatePidsLimit(t *testing.T) {
 
 func getServiceTaskContainer(ctx context.Context, t *testing.T, cli client.APIClient, serviceID string) types.ContainerJSON {
 	t.Helper()
-	filter := filters.NewArgs()
-	filter.Add("service", serviceID)
-	filter.Add("desired-state", "running")
-	tasks, err := cli.TaskList(ctx, types.TaskListOptions{Filters: filter})
+	tasks, err := cli.TaskList(ctx, types.TaskListOptions{
+		Filters: filters.NewArgs(
+			filters.Arg("service", serviceID),
+			filters.Arg("desired-state", "running"),
+		),
+	})
 	assert.NilError(t, err)
 	assert.Assert(t, len(tasks) > 0)
 
diff --git a/integration/system/event_test.go b/integration/system/event_test.go
index 239910f0b8..4351c9bd29 100644
--- a/integration/system/event_test.go
+++ b/integration/system/event_test.go
@@ -43,12 +43,11 @@ func TestEventsExecDie(t *testing.T) {
 	)
 	assert.NilError(t, err)
 
-	filters := filters.NewArgs(
-		filters.Arg("container", cID),
-		filters.Arg("event", "exec_die"),
-	)
-	msg, errors := client.Events(ctx, types.EventsOptions{
-		Filters: filters,
+	msg, errs := client.Events(ctx, types.EventsOptions{
+		Filters: filters.NewArgs(
+			filters.Arg("container", cID),
+			filters.Arg("event", "exec_die"),
+		),
 	})
 
 	err = client.ContainerExecStart(ctx, id.ID,
@@ -66,7 +65,7 @@ func TestEventsExecDie(t *testing.T) {
 		assert.Equal(t, m.Action, "exec_die")
 		assert.Equal(t, m.Actor.Attributes["execID"], id.ID)
 		assert.Equal(t, m.Actor.Attributes["exitCode"], "0")
-	case err = <-errors:
+	case err = <-errs:
 		assert.NilError(t, err)
 	case <-time.After(time.Second * 3):
 		t.Fatal("timeout hit")